def test_calls_git_subprocess(self, mock_subprocess, fake_home, virtualenvs_folder): project = DjangoProject("www.a.domain.com", "py.version") project.download_repo("repo", nuke=False) assert mock_subprocess.check_call.call_args == call( ["git", "clone", "repo", str(project.project_path)])
def main(repo_url, domain, python_version, nuke): if domain == 'your-username.pythonanywhere.com': username = getpass.getuser().lower() pa_domain = os.environ.get('PYTHONANYWHERE_DOMAIN', 'pythonanywhere.com') domain = '{username}.{pa_domain}'.format(username=username, pa_domain=pa_domain) project = DjangoProject(domain, python_version) project.sanity_checks(nuke=nuke) project.download_repo(repo_url, nuke=nuke), project.create_virtualenv(nuke=nuke) project.create_webapp(nuke=nuke) project.add_static_file_mappings() project.find_django_files() project.update_wsgi_file() project.update_settings_file() project.run_collectstatic() project.run_migrate() project.webapp.reload() print( snakesay('All done! Your site is now live at https://{domain}'.format( domain=domain))) print() project.start_bash()
def test_actually_downloads_repo(self, fake_home): repo = 'https://gist.github.com/hjwp/4173bcface139beb7632ec93726f91ea' project = DjangoProject('www.a.domain.com', 'py.version') project.download_repo(repo, nuke=False) assert project.project_path.is_dir() assert 'file1.py' in os.listdir(str(project.project_path)) assert 'file2.py' in os.listdir(str(project.project_path))
def test_actually_downloads_repo(self, fake_home, virtualenvs_folder): repo = "https://gist.github.com/hjwp/4173bcface139beb7632ec93726f91ea" project = DjangoProject("www.a.domain.com", "py.version") project.download_repo(repo, nuke=False) assert project.project_path.is_dir() assert "file1.py" in os.listdir(str(project.project_path)) assert "file2.py" in os.listdir(str(project.project_path))
def test_nuke_option_ignores_directory_doesnt_exist( self, mock_subprocess, fake_home): project = DjangoProject('www.a.domain.com', 'py.version') mock_subprocess.check_call.side_effect = lambda *_, **__: Path( project.project_path).mkdir() project.download_repo('repo', nuke=True) # should not raise assert project.project_path.is_dir()
def test_nuke_option_ignores_directory_doesnt_exist( self, mock_subprocess, fake_home, virtualenvs_folder): project = DjangoProject("www.a.domain.com", "py.version") mock_subprocess.check_call.side_effect = lambda *_, **__: Path( project.project_path).mkdir() project.download_repo("repo", nuke=True) # should not raise assert project.project_path.is_dir()
def test_nuke_option_deletes_directory_first(self, mock_subprocess, fake_home): project = DjangoProject('www.a.domain.com', 'py.version') project.project_path.mkdir() (project.project_path / 'old-thing.txt').touch() mock_subprocess.check_call.side_effect = lambda *_, **__: Path( project.project_path).mkdir() project.download_repo('repo', nuke=True) assert 'old-thing.txt' not in project.project_path.iterdir()
def test_nuke_option_deletes_directory_first(self, mock_subprocess, fake_home, virtualenvs_folder): project = DjangoProject("www.a.domain.com", "py.version") project.project_path.mkdir() (project.project_path / "old-thing.txt").touch() mock_subprocess.check_call.side_effect = lambda *_, **__: Path( project.project_path).mkdir() project.download_repo("repo", nuke=True) assert "old-thing.txt" not in project.project_path.iterdir()
def autoconfigure( repo_url: str = typer.Argument( ..., help="url of remote git repository of your django project"), domain_name: str = typer.Option( "your-username.pythonanywhere.com", "-d", "--domain", help="Domain name, eg www.mydomain.com", ), python_version: str = typer.Option( "3.6", "-p", "--python-version", help="Python version, eg '3.8'", ), nuke: bool = typer.Option( False, help= "*Irrevocably* delete any existing web app config on this domain. Irrevocably.", ), ): """ Autoconfigure a Django project from on a github URL. \b - downloads the repo - creates a virtualenv and installs django (or detects a requirements.txt if available) - creates webapp via api - creates django wsgi configuration file - adds static files config """ domain = ensure_domain(domain_name) project = DjangoProject(domain, python_version) project.sanity_checks(nuke=nuke) project.download_repo(repo_url, nuke=nuke), project.create_virtualenv(nuke=nuke) project.create_webapp(nuke=nuke) project.add_static_file_mappings() project.find_django_files() project.update_wsgi_file() project.update_settings_file() project.run_collectstatic() project.run_migrate() project.webapp.reload() typer.echo( snakesay( f"All done! Your site is now live at https://{domain_name}\n")) project.start_bash()
def main(repo_url, domain, python_version, nuke): domain = ensure_domain(domain) project = DjangoProject(domain, python_version) project.sanity_checks(nuke=nuke) project.download_repo(repo_url, nuke=nuke), project.create_virtualenv(nuke=nuke) project.create_webapp(nuke=nuke) project.add_static_file_mappings() project.find_django_files() project.update_wsgi_file() project.update_settings_file() project.run_collectstatic() project.run_migrate() project.webapp.reload() print(snakesay(f'All done! Your site is now live at https://{domain}')) print() project.start_bash()
def test_calls_git_subprocess(self, mock_subprocess, fake_home): project = DjangoProject('www.a.domain.com', 'py.version') project.download_repo('repo', nuke=False) assert mock_subprocess.check_call.call_args == call( ['git', 'clone', 'repo', str(project.project_path)])