def to_mail(self, email, locale=None, context=None, skip_queue=False):
with override(locale):
context = context or dict()
try:
subject = str(self.subject).format(**context)
text = str(self.text).format(**context)
except KeyError as e:
raise SendMailException(f'Experienced KeyError when rendering Text: {str(e)}')
mail = EMail(
to=email,
reply_to=self.reply_to,
bcc=self.bcc,
subject=subject,
text=text,
)
if skip_queue:
mail.send()
else:
mail.save()
return mail
python类override()的实例源码
def translate_url(url, lang_code):
"""
Given a URL (absolute or relative), try to get its translated version in
the `lang_code` language (either by i18n_patterns or by translated regex).
Return the original URL if no translated version is found.
"""
parsed = urlsplit(url)
try:
match = resolve(parsed.path)
except Resolver404:
pass
else:
to_be_reversed = "%s:%s" % (match.namespace, match.url_name) if match.namespace else match.url_name
with override(lang_code):
try:
url = reverse(to_be_reversed, args=match.args, kwargs=match.kwargs)
except NoReverseMatch:
pass
else:
url = urlunsplit((parsed.scheme, parsed.netloc, url, parsed.query, parsed.fragment))
return url
def test_limited_admin(self):
urls = [
reverse('admin:app_category_changelist'),
reverse('admin:app_category_change', args=(self.wikipedia.pk, ))
]
for url in urls:
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
with override('nl'):
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
with override('de'):
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
def get(self, request, *args, **kwargs):
url = request.GET.get('next', request.META.get('HTTP_REFERER', '/'))
url = url if is_safe_url(url, host=request.get_host()) else '/'
resp = HttpResponseRedirect(url)
locale = request.GET.get('locale')
if locale in [lc for lc, ll in settings.LANGUAGES]:
if request.user.is_authenticated:
request.user.locale = locale
request.user.save()
max_age = 10 * 365 * 24 * 60 * 60
resp.set_cookie(settings.LANGUAGE_COOKIE_NAME, locale, max_age=max_age,
expires=(datetime.utcnow() + timedelta(seconds=max_age)).strftime(
'%a, %d-%b-%Y %H:%M:%S GMT'),
domain=settings.SESSION_COOKIE_DOMAIN)
with override(locale):
messages.success(request, phrases.cfp.locale_change_success)
return resp
def to_mail(self, user, event, locale=None, context=None, skip_queue=False):
with override(locale):
context = context or dict()
try:
subject = str(self.subject).format(**context)
text = str(self.text).format(**context)
except KeyError as e:
raise SendMailException(f'Experienced KeyError when rendering Text: {str(e)}')
mail = QueuedMail(
event=self.event,
to=user.email,
reply_to=self.reply_to or event.email,
bcc=self.bcc,
subject=subject,
text=text,
)
if skip_queue:
mail.send()
else:
mail.save()
return mail
def translate_url(url, lang_code):
"""
Given a URL (absolute or relative), try to get its translated version in
the `lang_code` language (either by i18n_patterns or by translated regex).
Return the original URL if no translated version is found.
"""
parsed = urlsplit(url)
try:
match = resolve(parsed.path)
except Resolver404:
pass
else:
to_be_reversed = "%s:%s" % (match.namespace, match.url_name) if match.namespace else match.url_name
with override(lang_code):
try:
url = reverse(to_be_reversed, args=match.args, kwargs=match.kwargs)
except NoReverseMatch:
pass
else:
url = urlunsplit((parsed.scheme, parsed.netloc, url, parsed.query, parsed.fragment))
return url
def translate_url(url, lang_code):
"""
Given a URL (absolute or relative), try to get its translated version in
the `lang_code` language (either by i18n_patterns or by translated regex).
Return the original URL if no translated version is found.
"""
parsed = urlsplit(url)
try:
match = resolve(parsed.path)
except Resolver404:
pass
else:
to_be_reversed = "%s:%s" % (match.namespace, match.url_name) if match.namespace else match.url_name
with override(lang_code):
try:
url = reverse(to_be_reversed, args=match.args, kwargs=match.kwargs)
except NoReverseMatch:
pass
else:
url = urlunsplit((parsed.scheme, parsed.netloc, url, parsed.query, parsed.fragment))
return url
def test_model_attributes(self):
posts = []
posts.append(MultiLanguagePost.objects.create(
title='first post',
slug='first-post',
))
posts.append(MultiLanguagePost.objects.create(
title='second post',
slug='second-post',
))
for language in [get_language()]:
with override(language):
for post in posts:
knock_create = post.as_knock(True)
self.assertEqual(knock_create['title'],
'new {0}'.format(post._meta.verbose_name))
self.assertEqual(knock_create['message'], post.title)
self.assertEqual(knock_create['language'], language)
def notify_items(**kwargs):
"""
Signal endpoint that actually sends knocks whenever an instance is created / saved
"""
instance = kwargs.get('instance')
created = kwargs.get('created', False)
if hasattr(instance, 'send_knock') and active_knocks(instance):
try:
# This is a stupid generic interface for multilanguage models (hvad / parler)
if hasattr(instance, 'get_available_languages'):
langs = instance.get_available_languages()
else:
langs = [get_language()]
for lang in langs:
with override(lang):
instance.send_knock(created)
return True
except AttributeError: # pragma: no cover
pass
return False
def translate_url(url, lang_code):
"""
Given a URL (absolute or relative), try to get its translated version in
the `lang_code` language (either by i18n_patterns or by translated regex).
Return the original URL if no translated version is found.
"""
parsed = urlsplit(url)
try:
match = resolve(parsed.path)
except Resolver404:
pass
else:
to_be_reversed = "%s:%s" % (match.namespace, match.url_name) if match.namespace else match.url_name
with override(lang_code):
try:
url = reverse(to_be_reversed, args=match.args, kwargs=match.kwargs)
except NoReverseMatch:
pass
else:
url = urlunsplit((parsed.scheme, parsed.netloc, url, parsed.query, parsed.fragment))
return url
def response_post_save_change(self, request, obj):
#
# When the user changes his language setting, we need to do two things:
# 1. Change the language-prefix for the sideframed admin view
# 2. Reload the whole window so that the new language affects the
# toolbar, etc.
#
# To do this, we first redirect the sideframe to the correct new, URL,
# but we pass a GET param 'reload_window', which instructs JS on that
# page to strip (to avoid infinite redirection loops) that param then
# reload the whole window again.
#
with override(obj.language):
post_url = admin_reverse(
'cms_usersettings_change',
args=[obj.id, ],
current_app=self.admin_site.name
)
return HttpResponseRedirect("{0}?reload_window".format(post_url))
def translate_url(url, lang_code):
"""
Given a URL (absolute or relative), try to get its translated version in
the `lang_code` language (either by i18n_patterns or by translated regex).
Return the original URL if no translated version is found.
"""
parsed = urlsplit(url)
try:
match = resolve(parsed.path)
except Resolver404:
pass
else:
to_be_reversed = "%s:%s" % (match.namespace, match.url_name) if match.namespace else match.url_name
with override(lang_code):
try:
url = reverse(to_be_reversed, args=match.args, kwargs=match.kwargs)
except NoReverseMatch:
pass
else:
url = urlunsplit((parsed.scheme, parsed.netloc, url, parsed.query, parsed.fragment))
return url
def translate_url(url, lang_code):
"""
Given a URL (absolute or relative), try to get its translated version in
the `lang_code` language (either by i18n_patterns or by translated regex).
Return the original URL if no translated version is found.
"""
parsed = urlsplit(url)
try:
match = resolve(parsed.path)
except Resolver404:
pass
else:
to_be_reversed = "%s:%s" % (match.namespace, match.url_name) if match.namespace else match.url_name
with override(lang_code):
try:
url = reverse(to_be_reversed, args=match.args, kwargs=match.kwargs)
except NoReverseMatch:
pass
else:
url = urlunsplit((parsed.scheme, parsed.netloc, url, parsed.query, parsed.fragment))
return url
def translate_url(url, lang_code):
"""
Given a URL (absolute or relative), try to get its translated version in
the `lang_code` language (either by i18n_patterns or by translated regex).
Return the original URL if no translated version is found.
"""
parsed = urlsplit(url)
try:
match = resolve(parsed.path)
except Resolver404:
pass
else:
to_be_reversed = "%s:%s" % (match.namespace, match.url_name) if match.namespace else match.url_name
with override(lang_code):
try:
url = reverse(to_be_reversed, args=match.args, kwargs=match.kwargs)
except NoReverseMatch:
pass
else:
url = urlunsplit((parsed.scheme, parsed.netloc, url, parsed.query, parsed.fragment))
return url
def log_module_component_changes(sender, module, component, user, **kwargs):
with translation.override(settings.DEFAULT_LANGUAGE):
message = _(
'"{username}" modified the component "{component_label}"'
' in the module "{module_name}"'
' of the project "{project_name}".').format(
username=user.username,
project_name=module.project.name,
module_name=module.name,
component_label=component.label)
models.LogEntry.objects.create(
message=message,
action=models.MODULE_COMPONENT_UPDATED,
actor=user,
component_identifier=component.identifier,
project=module.project,
module=module,
)
def log_project_component_changes(sender, project, component, user, **kwargs):
with translation.override(settings.DEFAULT_LANGUAGE):
message = _(
'"{username}" modified the component "{component_label}"'
' of the project "{project_name}".').format(
username=user.username,
project_name=project.name,
component_label=component.label)
models.LogEntry.objects.create(
message=message,
action=models.PROJECT_COMPONENT_UPDATED,
actor=user,
component_identifier=component.identifier,
project=project,
module=None
)
def render(self, template_name, context):
languages = self.get_languages(context['receiver'])
template = select_template([
'{}.{}.email'.format(template_name, lang)
for lang in languages
])
# Get the actually chosen language from the template name
language = template.template.name.split('.', 2)[-2]
with translation.override(language):
parts = []
for part_type in ('subject', 'txt', 'html'):
context['part_type'] = part_type
parts.append(template.render(context))
context.pop('part_type')
return tuple(parts)
def translate_url(url, lang_code):
"""
Given a URL (absolute or relative), try to get its translated version in
the `lang_code` language (either by i18n_patterns or by translated regex).
Return the original URL if no translated version is found.
"""
parsed = urlsplit(url)
try:
match = resolve(parsed.path)
except Resolver404:
pass
else:
to_be_reversed = "%s:%s" % (match.namespace, match.url_name) if match.namespace else match.url_name
with override(lang_code):
try:
url = reverse(to_be_reversed, args=match.args, kwargs=match.kwargs)
except NoReverseMatch:
pass
else:
url = urlunsplit((parsed.scheme, parsed.netloc, url, parsed.query, parsed.fragment))
return url
test_views.py 文件源码
项目:money-to-prisoners-send-money
作者: ministryofjustice
项目源码
文件源码
阅读 20
收藏 0
点赞 0
评论 0
def test_plain_views_are_cacheable(self, mocked_api_session):
mocked_api_session().get().json.return_value = {
'count': 1,
'results': [{'nomis_id': 'AAA', 'short_name': 'Prison', 'name': 'HMP Prison'}],
}
view_names = [
'send_money:help', 'send_money:prison_list',
'send_money:help_bank_transfer', 'send_money:help_delays', 'send_money:help_transfered',
'terms', 'cookies',
'js-i18n',
'sitemap_xml',
]
for view_name in view_names:
response = self.client.get(reverse(view_name))
self.assertGreaterEqual(get_max_age(response), 3600)
with override_lang('cy'):
response = self.client.get(reverse(view_name))
self.assertGreaterEqual(get_max_age(response), 3600)
def translate_url(url, lang_code):
"""
Given a URL (absolute or relative), try to get its translated version in
the `lang_code` language (either by i18n_patterns or by translated regex).
Return the original URL if no translated version is found.
"""
parsed = urlsplit(url)
try:
match = resolve(parsed.path)
except Resolver404:
pass
else:
to_be_reversed = "%s:%s" % (match.namespace, match.url_name) if match.namespace else match.url_name
with override(lang_code):
try:
url = reverse(to_be_reversed, args=match.args, kwargs=match.kwargs)
except NoReverseMatch:
pass
else:
url = urlunsplit((parsed.scheme, parsed.netloc, url, parsed.query, parsed.fragment))
return url
def translate_url(url, lang_code):
"""
Given a URL (absolute or relative), try to get its translated version in
the `lang_code` language (either by i18n_patterns or by translated regex).
Return the original URL if no translated version is found.
"""
parsed = urlsplit(url)
try:
match = resolve(parsed.path)
except Resolver404:
pass
else:
to_be_reversed = "%s:%s" % (match.namespace, match.url_name) if match.namespace else match.url_name
with override(lang_code):
try:
url = reverse(to_be_reversed, args=match.args, kwargs=match.kwargs)
except NoReverseMatch:
pass
else:
url = urlunsplit((parsed.scheme, parsed.netloc, url, parsed.query, parsed.fragment))
return url
def test_str_fallback_custom_fallback():
"""Tests whether the :see:LocalizedValue class's
__str__'s fallback functionality properly respects
the LOCALIZED_FIELDS_FALLBACKS setting."""
settings.LOCALIZED_FIELDS_FALLBACKS = {
'nl': ['ro']
}
localized_value = LocalizedValue({
settings.LANGUAGE_CODE: settings.LANGUAGE_CODE,
'ro': 'ro'
})
with translation.override('nl'):
assert str(localized_value) == 'ro'
def mail(email: str, subject: str, template: Union[str, LazyI18nString],
context: Dict[str, Any]=None, locale: str=None,
headers: dict=None):
headers = headers or {}
with override(locale):
body = str(template)
if context:
body = body.format_map(TolerantDict(context))
sender = Configuration.get_solo().mail_from
subject = str(subject)
body_plain = body
return mail_send_task.apply_async(args=([email], subject, body_plain, sender, headers))
def handle(self, request, data):
response = shortcuts.redirect(request.build_absolute_uri())
# Language
lang_code = data['language']
if lang_code and translation.check_for_language(lang_code):
if hasattr(request, 'session'):
request.session['django_language'] = lang_code
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code,
expires=_one_year())
# Timezone
request.session['django_timezone'] = pytz.timezone(
data['timezone']).zone
response.set_cookie('django_timezone', data['timezone'],
expires=_one_year())
request.session['horizon_pagesize'] = data['pagesize']
response.set_cookie('horizon_pagesize', data['pagesize'],
expires=_one_year())
request.session['instance_log_length'] = data['instance_log_length']
response.set_cookie('instance_log_length',
data['instance_log_length'], expires=_one_year())
with translation.override(lang_code):
messages.success(request,
encoding.force_text(_("Settings saved.")))
return response
def add_logout_reason(request, response, reason):
# Store the translated string in the cookie
lang = translation.get_language_from_request(request)
with translation.override(lang):
reason = six.text_type(reason)
if six.PY2:
reason = reason.encode('utf-8')
response.set_cookie('logout_reason', reason, max_age=10)
def verbose_name_raw(self):
"""
There are a few places where the untranslated verbose name is needed
(so that we get the same value regardless of currently active
locale).
"""
with override(None):
return force_text(self.verbose_name)
def render(self, context):
with translation.override(self.language.resolve(context)):
output = self.nodelist.render(context)
return output
def test_model_fields(self):
falcon = Blog.objects.get(title='Falcon')
self.assertEquals(falcon.i18n['title_nl'], 'Valk')
self.assertEquals(falcon.i18n['title_de'], 'Falk')
self.assertIn('body_nl', falcon.i18n)
with override('nl'):
self.assertEquals(falcon.title_i18n, 'Valk')
with override('de'):
self.assertEquals(falcon.title_i18n, 'Falk')
def test_data_available(self):
def get_titles():
return {m.title for m in Blog.objects.all()}
self.assertEquals(get_titles(), {'Falcon', 'Dolphin', 'Vulture'})
with override('de'):
self.assertEquals(get_titles(), {'Falk', 'Delfin', ''})
def test_get_active_language(self):
m = Blog(title='Falcon', i18n={
'title_nl': 'Valk',
'title_de': 'Falk'
})
with override('nl'):
# value for the active language
self.assertEquals(m.title_i18n, 'Valk')
self.assertEquals(m.title_en, 'Falcon')
self.assertEquals(m.title_de, 'Falk')
with override('de'):
self.assertEquals(m.title_i18n, 'Falk')