22import warnings
33from collections .abc import Iterable
44from contextlib import contextmanager
5- from typing import Optional
65
76from cms .models import Page , PageContent , Placeholder
87from cms .toolbar .utils import get_object_edit_url , get_object_preview_url
1716from django .http import HttpRequest
1817from django .template .loader import render_to_string
1918from django .utils .encoding import force_str
20- from django .utils .translation import get_language
19+ from django .utils .translation import get_language , override as force_language
2120
2221from . import versionables
2322from .conf import EMAIL_NOTIFICATIONS_FAIL_SILENTLY
2827except ImportError :
2928 emit_content_change = None
3029
30+ try :
31+ from cms .toolbar .utils import get_object_live_url
32+ from cms .utils import get_current_site
33+ except ImportError : # cms < 5.1
34+ def get_object_live_url (obj , language = None , site = None ) -> str :
35+ with force_language (language ):
36+ return obj .get_absolute_url ()
37+ return None
38+
39+ def get_current_site (request ) -> models .Model :
40+ from django .contrib .sites .models import Site
41+
42+ return Site .objects .get_current ()
43+
3144
3245def is_editable (content_obj : models .Model , request : HttpRequest ) -> bool :
3346 """Check of content_obj is editable"""
@@ -71,7 +84,7 @@ def _replace_admin_for_model(modeladmin: type[admin.ModelAdmin], mixin: type, ad
7184 admin_site .register (modeladmin .model , new_admin_class )
7285
7386
74- def replace_admin_for_models (pairs : tuple [type [models .Model ], type ], admin_site : Optional [ admin .AdminSite ] = None ):
87+ def replace_admin_for_models (pairs : tuple [type [models .Model ], type ], admin_site : admin .AdminSite | None = None ):
7588 """
7689 :param models: List of (model class, admin mixin class) tuples
7790 :param admin_site: AdminSite instance
@@ -86,7 +99,7 @@ def replace_admin_for_models(pairs: tuple[type[models.Model], type], admin_site:
8699 _replace_admin_for_model (modeladmin , mixin , admin_site )
87100
88101
89- def register_versionadmin_proxy (versionable , admin_site : Optional [ admin .AdminSite ] = None ):
102+ def register_versionadmin_proxy (versionable , admin_site : admin .AdminSite | None = None ):
90103 """Creates a model admin class based on `VersionAdmin` and registers
91104 it with `admin_site` for `versionable.version_model_proxy`.
92105
@@ -281,7 +294,7 @@ def get_content_types_with_subclasses(models: Iterable[type[models.Model]], usin
281294
282295
283296def get_preview_url (
284- content_obj : models .Model , language : Optional [ str ] = None
297+ content_obj : models .Model , language : str | None = None
285298) -> str :
286299 """If the object is editable the cms preview view should be used, with the toolbar.
287300 This method provides the URL for it. It falls back the standard change view
0 commit comments