예제 #1
0
 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)])
예제 #2
0
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()
예제 #3
0
 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))
예제 #4
0
 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))
예제 #5
0
    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()
예제 #6
0
    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()
예제 #7
0
    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()
예제 #8
0
    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()
예제 #9
0
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()
예제 #11
0
 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)])