Skip to content

Commit

Permalink
Merge 64ee57a into 751b8b9
Browse files Browse the repository at this point in the history
  • Loading branch information
yakky committed Dec 27, 2020
2 parents 751b8b9 + 64ee57a commit 2ac6c33
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 4 deletions.
8 changes: 4 additions & 4 deletions app_enabler/patcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,8 @@ def update_setting(project_setting: str, config: Dict[str, Any]):

src = astor.to_source(parsed)

with open(project_setting, "w") as settings:
settings.write(src)
with open(project_setting, "w") as fp:
fp.write(src)


def update_urlconf(project_urls: str, config: Dict[str, Any]):
Expand Down Expand Up @@ -147,5 +147,5 @@ def update_urlconf(project_urls: str, config: Dict[str, Any]):

src = astor.to_source(parsed)

with open(project_urls, "w") as settings:
settings.write(src)
with open(project_urls, "w") as fp:
fp.write(src)
1 change: 1 addition & 0 deletions changes/25.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add test to verify no multiple urlconf are added
10 changes: 10 additions & 0 deletions tests/sample/test_project/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,21 @@
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.conf.urls.i18n import i18n_patterns
from django.contrib import admin
from django.contrib.sitemaps.views import sitemap
from django.urls import path
from django.views import View

urlpatterns = [
path("sitemap.xml", sitemap, {"sitemaps": {}}),
path("admin/", admin.site.urls),
]

urlpatterns += [
path("something/", View.as_view()),
]

urlpatterns += i18n_patterns(
path("something/", View.as_view()),
)
36 changes: 36 additions & 0 deletions tests/test_patcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import astor
import pytest
from django.urls import LocalePrefixPattern, URLPattern, URLResolver

from app_enabler.enable import _verify_settings, _verify_urlconf
from app_enabler.errors import messages
Expand Down Expand Up @@ -75,3 +76,38 @@ def test_update_urlconf_multiple_include(pytester, django_setup, project_dir, ad
assert len(node.names) == 2
assert "path" in (alias.name for alias in node.names)
assert "include" in (alias.name for alias in node.names)


def test_update_urlconf_multiple_urlconf(pytester, django_setup, project_dir, addon_config):
""" Repeated calls to update_urlconf only add a single application urlconf instance. """
urlconf_file = project_dir / "test_project" / "urls.py"

update_urlconf(urlconf_file, addon_config)
update_urlconf(urlconf_file, addon_config)
update_urlconf(urlconf_file, addon_config)

imported_urlconf = import_module("test_project.urls")
instances_admin = 0
instances_blog = 0
instances_i18n = 0
instances_view = 0
instances_sitemap = 0
for pattern in imported_urlconf.urlpatterns:
if isinstance(pattern, URLResolver):
if isinstance(pattern.urlconf_module, list):
if pattern.app_name == "admin":
instances_admin += 1
elif isinstance(pattern.pattern, LocalePrefixPattern):
instances_i18n += 1
elif pattern.urlconf_module.__name__ == "djangocms_blog.taggit_urls":
instances_blog += 1
elif isinstance(pattern, URLPattern):
if pattern.lookup_str == "django.contrib.sitemaps.views.sitemap":
instances_sitemap += 1
elif pattern.lookup_str == "django.views.generic.base.View":
instances_view += 1
assert instances_admin == 1
assert instances_blog == 1
assert instances_i18n == 1
assert instances_view == 1
assert instances_sitemap == 1

0 comments on commit 2ac6c33

Please sign in to comment.