Skip to content

Commit 1d17eee

Browse files
committed
working on code example explanations
1 parent da205be commit 1d17eee

29 files changed

+5079
-20
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
title: django.urls clear_url_caches Example Code
2+
category: page
3+
slug: django-urls-clear-url-caches-examples
4+
sortorder: 500011402
5+
toc: False
6+
sidebartitle: django.urls clear_url_caches
7+
meta: Python example code for the clear_url_caches callable from the django.urls module of the Django project.
8+
9+
10+
clear_url_caches is a callable within the django.urls module of the Django project.
11+
12+
13+
## Example 1 from django-cms
14+
[django-cms](https://github.com/divio/django-cms)
15+
([project website](https://www.django-cms.org/en/)) is a Python-based
16+
content management system (CMS) [library](https://pypi.org/project/django-cms/)
17+
for use with Django web apps that is open sourced under the
18+
[BSD 3-Clause "New"](https://github.com/divio/django-cms/blob/develop/LICENSE)
19+
license.
20+
21+
[**django-cms / cms / signals / apphook.py**](https://github.com/divio/django-cms/blob/develop/cms/signals/apphook.py)
22+
23+
```python
24+
# apphook.py
25+
import logging
26+
import sys
27+
28+
from django.core.management import color_style
29+
from django.core.signals import request_finished
30+
~~from django.urls import clear_url_caches
31+
32+
from cms.utils.apphook_reload import mark_urlconf_as_changed
33+
34+
35+
logger = logging.getLogger(__name__)
36+
37+
DISPATCH_UID = 'cms-restart'
38+
39+
40+
def trigger_server_restart(**kwargs):
41+
mark_urlconf_as_changed()
42+
43+
44+
def set_restart_trigger():
45+
request_finished.connect(trigger_restart, dispatch_uid=DISPATCH_UID)
46+
47+
48+
def trigger_restart(**kwargs):
49+
from cms.signals import urls_need_reloading
50+
51+
request_finished.disconnect(trigger_restart, dispatch_uid=DISPATCH_UID)
52+
urls_need_reloading.send(sender=None)
53+
54+
55+
def debug_server_restart(**kwargs):
56+
from cms.appresolver import clear_app_resolvers
57+
if 'runserver' in sys.argv or 'server' in sys.argv:
58+
clear_app_resolvers()
59+
~~ clear_url_caches()
60+
import cms.urls
61+
try:
62+
reload(cms.urls)
63+
except NameError: #python3
64+
from imp import reload
65+
reload(cms.urls)
66+
if not 'test' in sys.argv:
67+
msg = 'Application url changed and urls_need_reloading signal fired. ' \
68+
'Please reload the urls.py or restart the server.\n'
69+
styles = color_style()
70+
msg = styles.NOTICE(msg)
71+
sys.stderr.write(msg)
72+
73+
74+
75+
## ... source file continues with no further clear_url_caches examples...
76+
77+
```
78+
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
title: django.urls get_callable Example Code
2+
category: page
3+
slug: django-urls-get-callable-examples
4+
sortorder: 500011403
5+
toc: False
6+
sidebartitle: django.urls get_callable
7+
meta: Python example code for the get_callable callable from the django.urls module of the Django project.
8+
9+
10+
get_callable is a callable within the django.urls module of the Django project.
11+
12+
13+
## Example 1 from django-wiki
14+
[django-wiki](https://github.com/django-wiki/django-wiki)
15+
([project documentation](https://django-wiki.readthedocs.io/en/master/),
16+
[demo](https://demo.django-wiki.org/),
17+
and [PyPI page](https://pypi.org/project/django-wiki/))
18+
is a wiki system code library for [Django](/django.html)
19+
projects that makes it easier to create user-editable content.
20+
The project aims to provide necessary core features and then
21+
have an easy plugin format for additional features, rather than
22+
having every exhaustive feature built into the core system.
23+
django-wiki is a rewrite of an earlier now-defunct project
24+
named [django-simplewiki](https://code.google.com/p/django-simple-wiki/).
25+
26+
The code for django-wiki is provided as open source under the
27+
[GNU General Public License 3.0](https://github.com/django-wiki/django-wiki/blob/master/COPYING).
28+
29+
[**django-wiki / src/wiki / editors / __init__.py**](https://github.com/django-wiki/django-wiki/blob/master/src/wiki/editors/__init__.py)
30+
31+
```python
32+
# __init__.py
33+
~~from django.urls import get_callable
34+
from wiki.conf import settings
35+
36+
_EditorClass = None
37+
_editor = None
38+
39+
40+
def getEditorClass():
41+
global _EditorClass
42+
if not _EditorClass:
43+
~~ _EditorClass = get_callable(settings.EDITOR)
44+
return _EditorClass
45+
46+
47+
def getEditor():
48+
global _editor
49+
if not _editor:
50+
_editor = getEditorClass()()
51+
return _editor
52+
53+
54+
55+
## ... source file continues with no further get_callable examples...
56+
57+
```
58+
Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
title: django.urls get_resolver Example Code
2+
category: page
3+
slug: django-urls-get-resolver-examples
4+
sortorder: 500011404
5+
toc: False
6+
sidebartitle: django.urls get_resolver
7+
meta: Python example code for the get_resolver callable from the django.urls module of the Django project.
8+
9+
10+
get_resolver is a callable within the django.urls module of the Django project.
11+
12+
13+
## Example 1 from django-cms
14+
[django-cms](https://github.com/divio/django-cms)
15+
([project website](https://www.django-cms.org/en/)) is a Python-based
16+
content management system (CMS) [library](https://pypi.org/project/django-cms/)
17+
for use with Django web apps that is open sourced under the
18+
[BSD 3-Clause "New"](https://github.com/divio/django-cms/blob/develop/LICENSE)
19+
license.
20+
21+
[**django-cms / cms / utils / i18n.py**](https://github.com/divio/django-cms/blob/develop/cms/utils/i18n.py)
22+
23+
```python
24+
# i18n.py
25+
from contextlib import contextmanager
26+
27+
from django.conf import settings
28+
from django.utils import translation
29+
from django.utils.translation import ugettext_lazy as _
30+
~~from django.urls import get_resolver
31+
32+
from cms.exceptions import LanguageError
33+
from cms.utils.compat.dj import LocalePrefixPattern
34+
from cms.utils.conf import get_cms_setting, get_site_id
35+
36+
37+
@contextmanager
38+
def force_language(new_lang):
39+
old_lang = get_current_language()
40+
if old_lang != new_lang:
41+
translation.activate(new_lang)
42+
yield
43+
translation.activate(old_lang)
44+
45+
46+
def get_languages(site_id=None):
47+
site_id = get_site_id(site_id)
48+
result = get_cms_setting('LANGUAGES').get(site_id)
49+
if not result:
50+
result = []
51+
defaults = get_cms_setting('LANGUAGES').get('default', {})
52+
for code, name in settings.LANGUAGES:
53+
lang = {'code': code, 'name': _(name)}
54+
lang.update(defaults)
55+
56+
57+
## ... source file abbreviated to get to get_resolver examples ...
58+
59+
60+
61+
def get_fallback_languages(language, site_id=None):
62+
try:
63+
language = get_language_object(language, site_id)
64+
except LanguageError:
65+
language = get_languages(site_id)[0]
66+
return language.get('fallbacks', [])
67+
68+
69+
def get_redirect_on_fallback(language, site_id=None):
70+
language = get_language_object(language, site_id)
71+
return language.get('redirect_on_fallback', True)
72+
73+
74+
def hide_untranslated(language, site_id=None):
75+
obj = get_language_object(language, site_id)
76+
return obj.get('hide_untranslated', True)
77+
78+
79+
def is_language_prefix_patterns_used():
80+
return any(
81+
isinstance(
82+
getattr(url_pattern, 'pattern', url_pattern),
83+
LocalePrefixPattern
84+
)
85+
~~ for url_pattern in get_resolver(None).url_patterns
86+
)
87+
88+
89+
def is_valid_site_language(language, site_id):
90+
return language in get_language_list(site_id)
91+
92+
93+
94+
## ... source file continues with no further get_resolver examples...
95+
96+
```
97+
98+
99+
## Example 2 from django-sitetree
100+
[django-sitetree](https://github.com/idlesign/django-sitetree)
101+
([project documentation](https://django-sitetree.readthedocs.io/en/latest/)
102+
and
103+
[PyPI package information](https://pypi.org/project/django-sitetree/))
104+
is a [Django](/django.html) extension that makes it easier for
105+
developers to add site trees, menus and breadcrumb navigation elements
106+
to their web applications.
107+
108+
The django-sitetree project is provided as open source under the
109+
[BSD 3-Clause "New" or "Revised" License](https://github.com/idlesign/django-sitetree/blob/master/LICENSE).
110+
111+
[**django-sitetree / sitetree / admin.py**](https://github.com/idlesign/django-sitetree/blob/master/sitetree/./admin.py)
112+
113+
```python
114+
# admin.py
115+
from typing import Tuple, Type, Optional
116+
117+
from django import forms
118+
from django.conf import settings as django_settings
119+
from django.conf.urls import url
120+
from django.contrib import admin
121+
from django.contrib import messages
122+
from django.contrib.admin.sites import NotRegistered
123+
from django.http import HttpResponseRedirect, HttpRequest, HttpResponse
124+
~~from django.urls import get_urlconf, get_resolver
125+
from django.utils.translation import gettext_lazy as _
126+
127+
from .fields import TreeItemChoiceField
128+
from .settings import MODEL_TREE, MODEL_TREE_ITEM
129+
from .utils import get_tree_model, get_tree_item_model, get_app_n_model
130+
131+
if False: # pragma: nocover
132+
from .models import TreeItemBase, TreeBase # noqa
133+
134+
135+
SMUGGLER_INSTALLED = 'smuggler' in django_settings.INSTALLED_APPS
136+
137+
MODEL_TREE_CLASS = get_tree_model()
138+
MODEL_TREE_ITEM_CLASS = get_tree_item_model()
139+
140+
_TREE_ADMIN = lambda: TreeAdmin
141+
_ITEM_ADMIN = lambda: TreeItemAdmin
142+
143+
144+
def get_model_url_name(model_nfo: Tuple[str, str], page: str, with_namespace: bool = False) -> str:
145+
prefix = ''
146+
if with_namespace:
147+
prefix = 'admin:'
148+
return (f'{prefix}%s_{page}' % '%s_%s' % model_nfo).lower()
149+
150+
151+
## ... source file abbreviated to get to get_resolver examples ...
152+
153+
154+
elif '_continue' in request.POST:
155+
return response
156+
157+
return HttpResponseRedirect('')
158+
159+
def response_add(self, request, obj, post_url_continue=None, **kwargs):
160+
if post_url_continue is None:
161+
post_url_continue = f'../item_{obj.pk}/'
162+
163+
return self._redirect(request, super().response_add(request, obj, post_url_continue))
164+
165+
def response_change(self, request, obj, **kwargs):
166+
return self._redirect(request, super().response_change(request, obj))
167+
168+
def get_form(self, request, obj=None, **kwargs):
169+
if obj is not None and obj.parent is not None:
170+
self.previous_parent = obj.parent
171+
172+
form = super().get_form(request, obj, **kwargs)
173+
form.base_fields['parent'].choices_init(self.tree)
174+
175+
if not getattr(self, 'known_url_names', False):
176+
self.known_url_names = []
177+
self.known_url_rules = []
178+
179+
~~ resolver = get_resolver(get_urlconf())
180+
181+
for ns, (url_prefix, ns_resolver) in resolver.namespace_dict.items():
182+
if ns != 'admin':
183+
self._stack_known_urls(ns_resolver.reverse_dict, ns)
184+
185+
self._stack_known_urls(resolver.reverse_dict)
186+
self.known_url_rules = sorted(self.known_url_rules)
187+
188+
form.known_url_names_hint = _(
189+
'You are seeing this warning because "URL as Pattern" option is active and pattern entered above '
190+
'seems to be invalid. Currently registered URL pattern names and parameters: ')
191+
192+
form.known_url_names = self.known_url_names
193+
form.known_url_rules = self.known_url_rules
194+
195+
return form
196+
197+
def _stack_known_urls(self, reverse_dict, ns=None):
198+
for url_name, url_rules in reverse_dict.items():
199+
if isinstance(url_name, str):
200+
if ns is not None:
201+
url_name = f'{ns}:{url_name}'
202+
self.known_url_names.append(url_name)
203+
self.known_url_rules.append(f"<b>{url_name}</b> {' '.join(url_rules[0][0][1])}")
204+
205+
206+
## ... source file continues with no further get_resolver examples...
207+
208+
```
209+

0 commit comments

Comments
 (0)