From: Ben Darnell Date: Tue, 12 Aug 2014 13:50:02 +0000 (-0400) Subject: Add property setter for RequestHandler.locale X-Git-Tag: v4.1.0b1~108 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bb00b7edc82c63227dab1d2c19ab1e76f1a7c572;p=thirdparty%2Ftornado.git Add property setter for RequestHandler.locale --- diff --git a/docs/releases/next.rst b/docs/releases/next.rst index a4a9d3f7d..ab83e7518 100644 --- a/docs/releases/next.rst +++ b/docs/releases/next.rst @@ -26,3 +26,4 @@ In progress `.WebSocketHandler.get_compression_options` to enable on the server side, and use the ``compression_options`` keyword argument to `.websocket_connect` on the client side. +* `.RequestHandler.locale` now has a property setter. diff --git a/docs/web.rst b/docs/web.rst index c6100328e..360d21afe 100644 --- a/docs/web.rst +++ b/docs/web.rst @@ -107,6 +107,7 @@ .. automethod:: RequestHandler.get_status .. automethod:: RequestHandler.get_template_path .. automethod:: RequestHandler.get_user_locale + .. autoattribute:: RequestHandler.locale .. automethod:: RequestHandler.log_exception .. automethod:: RequestHandler.on_connection_close .. automethod:: RequestHandler.require_setting diff --git a/tornado/test/web_test.py b/tornado/test/web_test.py index 496ae2e8f..02e38033c 100644 --- a/tornado/test/web_test.py +++ b/tornado/test/web_test.py @@ -4,6 +4,7 @@ from tornado import gen from tornado.escape import json_decode, utf8, to_unicode, recursive_unicode, native_str, to_basestring from tornado.httputil import format_timestamp from tornado.iostream import IOStream +from tornado import locale from tornado.log import app_log, gen_log from tornado.simple_httpclient import SimpleAsyncHTTPClient from tornado.template import DictLoader @@ -21,7 +22,6 @@ import logging import os import re import socket -import sys try: import urllib.parse as urllib_parse # py3 @@ -1554,19 +1554,26 @@ class MultipleExceptionTest(SimpleHandlerTestCase): @wsgi_safe -class SetCurrentUserTest(SimpleHandlerTestCase): +class SetLazyPropertiesTest(SimpleHandlerTestCase): class Handler(RequestHandler): def prepare(self): self.current_user = 'Ben' + self.locale = locale.get('en_US') + + def get_user_locale(self): + raise NotImplementedError() + + def get_current_user(self): + raise NotImplementedError() def get(self): - self.write('Hello %s' % self.current_user) + self.write('Hello %s (%s)' % (self.current_user, self.locale.code)) - def test_set_current_user(self): + def test_set_properties(self): # Ensure that current_user can be assigned to normally for apps # that want to forgo the lazy get_current_user property response = self.fetch('/') - self.assertEqual(response.body, b'Hello Ben') + self.assertEqual(response.body, b'Hello Ben (en_US)') @wsgi_safe diff --git a/tornado/web.py b/tornado/web.py index 7b057a20c..4dfd2ec83 100644 --- a/tornado/web.py +++ b/tornado/web.py @@ -956,12 +956,15 @@ class RequestHandler(object): @property def locale(self): - """The local for the current session. + """The locale for the current session. Determined by either `get_user_locale`, which you can override to set the locale based on, e.g., a user preference stored in a database, or `get_browser_locale`, which uses the ``Accept-Language`` header. + + .. versionchanged: 4.1 + Added a property setter. """ if not hasattr(self, "_locale"): self._locale = self.get_user_locale() @@ -970,6 +973,10 @@ class RequestHandler(object): assert self._locale return self._locale + @locale.setter + def locale(self, value): + self._locale = value + def get_user_locale(self): """Override to determine the locale from the authenticated user.