Skip to content

Commit 40e548f

Browse files
Extracted method on DjangoProject to compare Django versions. by: Filip, Piotr
Co-authored-by: Filip Łajszczak <[email protected]>
1 parent a1f4b5c commit 40e548f

File tree

2 files changed

+37
-14
lines changed

2 files changed

+37
-14
lines changed

pythonanywhere/django_project.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111

1212

1313
class DjangoProject(Project):
14+
def django_version_newer_or_equal_than(self, this_version):
15+
return version.parse(self.virtualenv.get_version("django")) >= version.parse(this_version)
16+
1417
def download_repo(self, repo, nuke):
1518
if nuke and self.project_path.exists():
1619
shutil.rmtree(str(self.project_path))
@@ -94,7 +97,7 @@ def update_settings_file(self):
9497
f'ALLOWED_HOSTS = [{self.domain!r}]'
9598
)
9699

97-
new_django = version.parse(self.virtualenv.get_version("django")) >= version.parse("3.1")
100+
new_django = self.django_version_newer_or_equal_than("3.1")
98101

99102
if re.search(r'^MEDIA_ROOT\s*=', settings, flags=re.MULTILINE) is None:
100103
new_settings += "\nMEDIA_URL = '/media/'"

tests/test_django_project.py

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,34 @@
1414
from pythonanywhere.exceptions import SanityException
1515

1616

17+
@pytest.fixture
18+
def project_with_mock_virtualenv(virtualenvs_folder):
19+
project = DjangoProject("mydomain.com", "python.version")
20+
project.virtualenv.create = Mock()
21+
project.virtualenv.pip_install = Mock()
22+
yield project
23+
24+
25+
class TestDjangoVersionNewerThan:
26+
def test_returns_true_if_django_version_is_newer_than_provided_version(
27+
self, project_with_mock_virtualenv
28+
):
29+
project_with_mock_virtualenv.virtualenv.get_version = Mock(return_value="9.9.9")
30+
assert project_with_mock_virtualenv.django_version_newer_or_equal_than("1.1.1") is True
31+
32+
def test_returns_true_when_django_version_is_the_same_as_provided_version(
33+
self, project_with_mock_virtualenv
34+
):
35+
project_with_mock_virtualenv.virtualenv.get_version = Mock(return_value="9.9.9")
36+
assert project_with_mock_virtualenv.django_version_newer_or_equal_than("9.9.9") is True
37+
38+
def test_returns_false_when_django_version_is_older_than_provided_version(
39+
self, project_with_mock_virtualenv
40+
):
41+
project_with_mock_virtualenv.virtualenv.get_version = Mock(return_value="9.9.9")
42+
assert project_with_mock_virtualenv.django_version_newer_or_equal_than("10.1.1") is False
43+
44+
1745
class TestDownloadRepo:
1846
@pytest.mark.slowtest
1947
def test_actually_downloads_repo(self, fake_home, virtualenvs_folder):
@@ -146,14 +174,6 @@ def test_if_requirements_txt_exists(self, fake_home, virtualenvs_folder):
146174
assert project.detect_requirements() == f"-r {requirements_txt.resolve()}"
147175

148176

149-
@pytest.fixture
150-
def project_with_mock_virtualenv(virtualenvs_folder):
151-
project = DjangoProject("mydomain.com", "python.version")
152-
project.virtualenv.create = Mock()
153-
project.virtualenv.pip_install = Mock()
154-
yield project
155-
156-
157177
class TestCreateVirtualenv:
158178
def test_calls_virtualenv_create(self, project_with_mock_virtualenv):
159179
project_with_mock_virtualenv.create_virtualenv("django.version", nuke="nuke option")
@@ -286,7 +306,7 @@ class TestUpdateSettingsFile:
286306
def test_adds_STATIC_and_MEDIA_config_to_settings_with_old_django(self, virtualenvs_folder):
287307
project = DjangoProject("mydomain.com", "python.version")
288308
project.settings_path = Path(tempfile.NamedTemporaryFile().name)
289-
project.virtualenv.get_version = Mock(return_value="1.0")
309+
project.virtualenv.get_version = Mock(return_value="3.0")
290310

291311
with project.settings_path.open("w") as f:
292312
f.write(
@@ -338,7 +358,7 @@ def test_adds_STATIC_and_MEDIA_config_to_settings_with_new_django(self, virtuale
338358
def test_adds_domain_to_ALLOWED_HOSTS(self, virtualenvs_folder):
339359
project = DjangoProject("mydomain.com", "python.version")
340360
project.settings_path = Path(tempfile.NamedTemporaryFile().name)
341-
project.virtualenv.get_version = Mock(return_value="1.0")
361+
project.virtualenv.get_version = Mock(return_value="3.0")
342362

343363
with project.settings_path.open("w") as f:
344364
f.write(
@@ -361,7 +381,7 @@ def test_adds_domain_to_ALLOWED_HOSTS(self, virtualenvs_folder):
361381
def test_only_adds_MEDIA_URL_if_its_not_already_there(self, virtualenvs_folder):
362382
project = DjangoProject("mydomain.com", "python.version")
363383
project.settings_path = Path(tempfile.NamedTemporaryFile().name)
364-
project.virtualenv.get_version = Mock(return_value="1.0")
384+
project.virtualenv.get_version = Mock(return_value="3.0")
365385

366386
with project.settings_path.open("w") as f:
367387
f.write(
@@ -386,7 +406,7 @@ def test_only_adds_MEDIA_URL_if_its_not_already_there(self, virtualenvs_folder):
386406
def test_only_adds_STATIC_ROOT_if_its_not_already_there(self, virtualenvs_folder):
387407
project = DjangoProject("mydomain.com", "python.version")
388408
project.settings_path = Path(tempfile.NamedTemporaryFile().name)
389-
project.virtualenv.get_version = Mock(return_value="1.0")
409+
project.virtualenv.get_version = Mock(return_value="3.0")
390410

391411
with project.settings_path.open("w") as f:
392412
f.write(
@@ -411,7 +431,7 @@ def test_only_adds_STATIC_ROOT_if_its_not_already_there(self, virtualenvs_folder
411431
def test_only_adds_MEDIA_ROOT_if_its_not_already_there(self, virtualenvs_folder):
412432
project = DjangoProject("mydomain.com", "python.version")
413433
project.settings_path = Path(tempfile.NamedTemporaryFile().name)
414-
project.virtualenv.get_version = Mock(return_value="1.0")
434+
project.virtualenv.get_version = Mock(return_value="3.0")
415435

416436
with project.settings_path.open("w") as f:
417437
f.write(

0 commit comments

Comments
 (0)