8000 fix: Remove circular import in `cms.forms.validators` (#8225) · django-cms/django-cms@1548fba · GitHub
[go: up one dir, main page]

Skip to content

Commit 1548fba

Browse files
authored
fix: Remove circular import in cms.forms.validators (#8225)
* Remove circular import * Fix linting * Update cms/forms/validators.py * fix: Do not assume page url cache is filled
1 parent 0f633fc commit 1548fba

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-6
lines changed

cms/api.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
2323
def my_function():
2424
from cms.api import api_function
25+
2526
api_function(...)
2627
2728
instead of:
@@ -30,10 +31,12 @@ def my_function():
3031
3132
from cms.api import api_function
3233
34+
3335
def my_function():
3436
api_function(...)
3537
3638
"""
39+
3740
import warnings
3841

3942
from django.contrib.auth import get_user_model
@@ -47,8 +50,7 @@ def my_function():
4750
from cms.app_base import CMSApp
4851
from cms.apphook_pool import apphook_pool
4952
from cms.constants import TEMPLATE_INHERITANCE_MAGIC
50-
from cms.forms.validators import validate_url_uniqueness
51-
from cms.models import PageContent, PageUrl
53+
from cms.models import PageContent
5254
from cms.models.pagemodel import Page
5355
from cms.models.permissionmodels import (
5456
ACCESS_PAGE_AND_DESCENDANTS,
@@ -347,6 +349,8 @@ def create_page_content(
347349
created_by = get_clean_username(created_by)
348350

349351
try:
352+
from cms.forms.validators import validate_url_uniqueness
353+
350354
validate_url_uniqueness(page.site, path, language, exclude_page=page.parent)
351355
except ValidationError as e:
352356
raise IntegrityError(e)

cms/forms/validators.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1-
from typing import Optional
1+
from typing import TYPE_CHECKING, Optional
22

33
from django.core.exceptions import ValidationError
44
from django.core.validators import RegexValidator, URLValidator
55
from django.utils.safestring import mark_safe
66
from django.utils.translation import gettext
77

8-
from cms.models.pagemodel import Page
98
from cms.utils.urlutils import admin_reverse, relative_url_regex
109

10+
if TYPE_CHECKING:
11+
# Only needed for type hinting - avoid circular import
12+
from cms.models.pagemodel import Page
13+
1114

1215
def validate_relative_url(value):
1316
RegexValidator(regex=relative_url_regex)(value)
@@ -22,7 +25,9 @@ def validate_url(value):
2225
URLValidator()(value)
2326

2427

25-
def validate_url_uniqueness(site, path: str, language: str, user_language: Optional[str] = None, exclude_page: Optional[Page] = None):
28+
def validate_url_uniqueness(
29+
site, path: str, language: str, user_language: Optional[str] = None, exclude_page: Optional["Page"] = None
30+
):
2631
"""Checks for conflicting urls"""
2732
from cms.models.pagemodel import Page, PageUrl
2833

cms/models/pagemodel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -838,7 +838,7 @@ def get_url_obj(self, language, fallback=True):
838838
if fallback:
839839
languages.extend(self.get_fallbacks(language))
840840

841-
if language not in self.urls_cache:
841+
if self.urls_cache is None or language not in self.urls_cache:
842842
# `get_page_from_request` will fill the cache only for the current language
843843
# Here, we fully fill it and try again
844844
self.urls_cache = {url.language: url for url in self.urls.all() if url.language in languages}

0 commit comments

Comments
 (0)
0