diff --git a/src/crawlee/_cli.py b/src/crawlee/_cli.py index de6044e80..de82b8d3c 100644 --- a/src/crawlee/_cli.py +++ b/src/crawlee/_cli.py @@ -136,7 +136,8 @@ def create( help='The URL where crawling should start. If none is given, you will be prompted.', ), enable_apify_integration: Optional[bool] = typer.Option( - default=None, + None, + '--apify/--no-apify', show_default=False, help='Should Apify integration be set up for you? If not given, you will be prompted.', ), @@ -189,6 +190,7 @@ def create( 'package_manager': package_manager, 'crawler_type': crawler_type, 'enable_apify_integration': enable_apify_integration, + 'start_url': start_url, }, ) diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py index 787feb28a..32e52f2c7 100644 --- a/tests/unit/test_cli.py +++ b/tests/unit/test_cli.py @@ -26,6 +26,9 @@ def test_create_interactive(mock_cookiecutter: Mock, monkeypatch: pytest.MonkeyP *'my_project', readchar.key.ENTER, readchar.key.ENTER, + readchar.key.ENTER, + readchar.key.ENTER, + readchar.key.ENTER, ] ) monkeypatch.setattr(target=readchar, name='readkey', value=lambda: next(mock_input)) @@ -35,9 +38,15 @@ def test_create_interactive(mock_cookiecutter: Mock, monkeypatch: pytest.MonkeyP mock_cookiecutter.assert_called_with( template='gh:apify/crawlee-python', - directory='templates/beautifulsoup', + directory='templates/crawler', no_input=True, - extra_context={'project_name': 'my_project'}, + extra_context={ + 'project_name': 'my_project', + 'package_manager': 'poetry', + 'crawler_type': 'beautifulsoup', + 'enable_apify_integration': False, + 'start_url': 'https://crawlee.dev', + }, ) @@ -48,6 +57,9 @@ def test_create_interactive_non_default_template(mock_cookiecutter: Mock, monkey readchar.key.ENTER, readchar.key.DOWN, readchar.key.ENTER, + readchar.key.ENTER, + readchar.key.ENTER, + readchar.key.ENTER, ] ) monkeypatch.setattr(target=readchar, name='readkey', value=lambda: next(mock_input)) @@ -57,20 +69,45 @@ def test_create_interactive_non_default_template(mock_cookiecutter: Mock, monkey mock_cookiecutter.assert_called_with( template='gh:apify/crawlee-python', - directory='templates/playwright', + directory='templates/crawler', no_input=True, - extra_context={'project_name': 'my_project'}, + extra_context={ + 'project_name': 'my_project', + 'package_manager': 'poetry', + 'crawler_type': 'parsel', + 'enable_apify_integration': False, + 'start_url': 'https://crawlee.dev', + }, ) def test_create_non_interactive(mock_cookiecutter: Mock) -> None: - runner.invoke(crawlee._cli.cli, ['create', 'my_project', '--template', 'playwright']) + runner.invoke( + crawlee._cli.cli, + [ + 'create', + 'my_project', + '--crawler-type', + 'playwright', + '--package-manager', + 'pip', + '--start-url', + 'https://yr.no', + '--no-apify', + ], + ) mock_cookiecutter.assert_called_with( template='gh:apify/crawlee-python', - directory='templates/playwright', + directory='templates/crawler', no_input=True, - extra_context={'project_name': 'my_project'}, + extra_context={ + 'project_name': 'my_project', + 'package_manager': 'pip', + 'crawler_type': 'playwright', + 'start_url': 'https://yr.no', + 'enable_apify_integration': False, + }, ) @@ -89,14 +126,33 @@ def test_create_existing_folder( os.chdir(tmp) (tmp / 'existing_project').mkdir() - result = runner.invoke(crawlee._cli.cli, ['create', 'existing_project', '--template', 'playwright']) + result = runner.invoke( + crawlee._cli.cli, + [ + 'create', + 'existing_project', + '--crawler-type', + 'playwright', + '--package-manager', + 'pip', + '--start-url', + 'https://yr.no', + '--no-apify', + ], + ) assert 'existing_project already exists' in result.output mock_cookiecutter.assert_called_with( template='gh:apify/crawlee-python', - directory='templates/playwright', + directory='templates/crawler', no_input=True, - extra_context={'project_name': 'my_project'}, + extra_context={ + 'project_name': 'my_project', + 'package_manager': 'pip', + 'crawler_type': 'playwright', + 'start_url': 'https://yr.no', + 'enable_apify_integration': False, + }, ) @@ -109,6 +165,9 @@ def test_create_existing_folder_interactive( readchar.key.ENTER, *'my_project', readchar.key.ENTER, + readchar.key.ENTER, + readchar.key.ENTER, + readchar.key.ENTER, ] ) monkeypatch.setattr(target=readchar, name='readkey', value=lambda: next(mock_input)) @@ -122,9 +181,15 @@ def test_create_existing_folder_interactive( mock_cookiecutter.assert_called_with( template='gh:apify/crawlee-python', - directory='templates/playwright', + directory='templates/crawler', no_input=True, - extra_context={'project_name': 'my_project'}, + extra_context={ + 'project_name': 'my_project', + 'package_manager': 'poetry', + 'crawler_type': 'playwright', + 'start_url': 'https://crawlee.dev', + 'enable_apify_integration': False, + }, ) @@ -139,6 +204,9 @@ def test_create_existing_folder_interactive_multiple_attempts( readchar.key.ENTER, *'my_project', readchar.key.ENTER, + readchar.key.ENTER, + readchar.key.ENTER, + readchar.key.ENTER, ] ) monkeypatch.setattr(target=readchar, name='readkey', value=lambda: next(mock_input)) @@ -148,12 +216,18 @@ def test_create_existing_folder_interactive_multiple_attempts( (tmp / 'existing_project').mkdir() (tmp / 'existing_project_2').mkdir() - result = runner.invoke(crawlee._cli.cli, ['create', '--template', 'playwright']) + result = runner.invoke(crawlee._cli.cli, ['create', '--crawler-type', 'playwright']) assert 'existing_project already exists' in result.output mock_cookiecutter.assert_called_with( template='gh:apify/crawlee-python', - directory='templates/playwright', + directory='templates/crawler', no_input=True, - extra_context={'project_name': 'my_project'}, + extra_context={ + 'project_name': 'my_project', + 'package_manager': 'poetry', + 'crawler_type': 'playwright', + 'start_url': 'https://crawlee.dev', + 'enable_apify_integration': False, + }, )