1
4
from django.conf import settings
2
5
from django.db import connections
3
from django.dispatch import Signal
6
from django.dispatch import receiver, Signal
7
from django.utils import timezone
8
from django.utils.functional import empty
5
10
template_rendered = Signal(providing_args=["template", "context"])
7
12
setting_changed = Signal(providing_args=["setting", "value"])
14
# Most setting_changed receivers are supposed to be added below,
15
# except for cases where the receiver is related to a contrib app.
18
@receiver(setting_changed)
9
19
def update_connections_time_zone(**kwargs):
20
if kwargs['setting'] == 'TIME_ZONE':
21
# Reset process time zone
22
if hasattr(time, 'tzset'):
24
os.environ['TZ'] = kwargs['value']
26
os.environ.pop('TZ', None)
29
# Reset local time zone cache
30
timezone._localtime = None
32
# Reset the database connections' time zone
10
33
if kwargs['setting'] == 'USE_TZ' and settings.TIME_ZONE != 'UTC':
11
34
USE_TZ, TIME_ZONE = kwargs['value'], settings.TIME_ZONE
12
35
elif kwargs['setting'] == 'TIME_ZONE' and not settings.USE_TZ:
13
36
USE_TZ, TIME_ZONE = settings.USE_TZ, kwargs['value']
14
else: # no need to change the database connnections' time zones
38
# no need to change the database connnections' time zones
17
40
tz = 'UTC' if USE_TZ else TIME_ZONE
18
41
for conn in connections.all():
42
conn.settings_dict['TIME_ZONE'] = tz
19
43
tz_sql = conn.ops.set_time_zone_sql()
21
45
conn.cursor().execute(tz_sql, [tz])
23
setting_changed.connect(update_connections_time_zone)
48
@receiver(setting_changed)
49
def clear_context_processors_cache(**kwargs):
50
if kwargs['setting'] == 'TEMPLATE_CONTEXT_PROCESSORS':
51
from django.template import context
52
context._standard_context_processors = None
55
@receiver(setting_changed)
56
def clear_template_loaders_cache(**kwargs):
57
if kwargs['setting'] == 'TEMPLATE_LOADERS':
58
from django.template import loader
59
loader.template_source_loaders = None
62
@receiver(setting_changed)
63
def clear_serializers_cache(**kwargs):
64
if kwargs['setting'] == 'SERIALIZATION_MODULES':
65
from django.core import serializers
66
serializers._serializers = {}
69
@receiver(setting_changed)
70
def language_changed(**kwargs):
71
if kwargs['setting'] in ('LOCALE_PATHS', 'LANGUAGE_CODE'):
72
from django.utils.translation import trans_real
73
trans_real._default = None
74
if kwargs['setting'] == 'LOCALE_PATHS':
75
trans_real._translations = {}
77
@receiver(setting_changed)
78
def file_storage_changed(**kwargs):
79
if kwargs['setting'] in ('MEDIA_ROOT', 'DEFAULT_FILE_STORAGE'):
80
from django.core.files.storage import default_storage
81
default_storage._wrapped = empty