diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2013-05-27 02:20:10 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2013-05-27 02:20:10 (GMT) |
commit | a04df23b19352800d125bffd252c9c836b594078 (patch) | |
tree | cee134b376932cd54e73e6ff1b35b1eb74b4d87d | |
parent | 2a37ffeb58fa954472e5901a4ee0b42fdbfa27f4 (diff) |
Add --accept-language client parameter to override system locale
-rwxr-xr-x | sugar-network | 2 | ||||
-rw-r--r-- | sugar_network/client/__init__.py | 6 | ||||
-rw-r--r-- | sugar_network/client/commands.py | 8 | ||||
-rw-r--r-- | sugar_network/resources/volume.py | 9 | ||||
-rw-r--r-- | sugar_network/toolkit/__init__.py | 10 | ||||
-rw-r--r-- | sugar_network/toolkit/http.py | 21 |
6 files changed, 37 insertions, 19 deletions
diff --git a/sugar-network b/sugar-network index 6a6d45f..b19a9eb 100755 --- a/sugar-network +++ b/sugar-network @@ -226,7 +226,7 @@ Option.seek('main', [ ]) Option.seek('client', [ client.api_url, client.layers, client.ipc_port, client.local_root, - client.no_dbus, client.anonymous, + client.no_dbus, client.anonymous, client.accept_language, ]) locale.setlocale(locale.LC_ALL, '') diff --git a/sugar_network/client/__init__.py b/sugar_network/client/__init__.py index bf784f8..5c8f97f 100644 --- a/sugar_network/client/__init__.py +++ b/sugar_network/client/__init__.py @@ -125,6 +125,12 @@ anonymous = Option( default=False, type_cast=Option.bool_cast, action='store_true', name='anonymous') +accept_language = Option( + 'space separated list of languages to request localized content ' + 'from the server; by default, reuse system locale', + default=[], type_cast=Option.list_cast, type_repr=Option.list_repr, + name='accept-language', short_option='-l') + def path(*args): """Calculate a path from the root. diff --git a/sugar_network/client/commands.py b/sugar_network/client/commands.py index 6352956..f78d9cd 100644 --- a/sugar_network/client/commands.py +++ b/sugar_network/client/commands.py @@ -56,6 +56,10 @@ class ClientCommands(db.CommandsProcessor, Commands, journal.Commands): self._no_subscription = no_subscription self._server_mode = not api_url + self._accept_language = client.accept_language.value + if not self._accept_language: + self._accept_language = [toolkit.default_lang()] + if not static_prefix: static_prefix = 'http://localhost:%s' % client.ipc_port.value self._static_prefix = static_prefix @@ -287,7 +291,7 @@ class ClientCommands(db.CommandsProcessor, Commands, journal.Commands): def call(self, request, response=None): request.static_prefix = self._static_prefix - request.accept_language = [toolkit.default_lang()] + request.accept_language = self._accept_language request.allow_redirects = True try: return db.CommandsProcessor.call(self, request, response) @@ -298,7 +302,7 @@ class ClientCommands(db.CommandsProcessor, Commands, journal.Commands): if request is None: request = db.Request(**kwargs) request.static_prefix = self._static_prefix - request.accept_language = [toolkit.default_lang()] + request.accept_language = self._accept_language request.allow_redirects = True if self._inline.is_set(): if client.layers.value and request.get('document') in \ diff --git a/sugar_network/resources/volume.py b/sugar_network/resources/volume.py index 67c6757..7c29fa6 100644 --- a/sugar_network/resources/volume.py +++ b/sugar_network/resources/volume.py @@ -31,10 +31,13 @@ _logger = logging.getLogger('resources.volume') def _reprcast_authors(value): if isinstance(value, dict): for guid, props in value.items(): - if 'name' in props: - yield props['name'] - if not (props['role'] & AUTHOR_INSYSTEM): + if not isinstance(props, dict): yield guid + else: + if 'name' in props: + yield props['name'] + if not (props['role'] & AUTHOR_INSYSTEM): + yield guid else: yield value diff --git a/sugar_network/toolkit/__init__.py b/sugar_network/toolkit/__init__.py index 93bcc3e..c797613 100644 --- a/sugar_network/toolkit/__init__.py +++ b/sugar_network/toolkit/__init__.py @@ -116,10 +116,14 @@ def default_lang(): if _default_lang is None: import locale lang = locale.getdefaultlocale()[0] - if lang: - _default_lang = lang.replace('_', '-').lower() - else: + if not lang or lang == 'C': _default_lang = 'en' + else: + lang, region = lang.lower().split('_') + if lang == region: + _default_lang = lang + else: + _default_lang = '-'.join([lang, region]) return _default_lang diff --git a/sugar_network/toolkit/http.py b/sugar_network/toolkit/http.py index e51ac68..64115d4 100644 --- a/sugar_network/toolkit/http.py +++ b/sugar_network/toolkit/http.py @@ -98,9 +98,9 @@ class Client(object): session.verify = False if creds: uid, keyfile, self._get_profile = creds - session.headers['SUGAR_USER'] = uid - session.headers['SUGAR_USER_SIGNATURE'] = _sign(keyfile, uid) - session.headers['Accept-Language'] = toolkit.default_lang() + session.headers['sugar_user'] = uid + session.headers['sugar_user_signature'] = _sign(keyfile, uid) + session.headers['accept-language'] = toolkit.default_lang() def __enter__(self): return self @@ -213,22 +213,23 @@ class Client(object): if request.content_type == 'application/json': request.content = json.dumps(request.content) - headers = None + headers = {} if request.content is not None: - headers = {} - headers['Content-Type'] = \ + headers['content-type'] = \ request.content_type or 'application/octet-stream' - headers['Content-Length'] = str(len(request.content)) + headers['content-length'] = str(len(request.content)) elif request.content_stream is not None: - headers = {} - headers['Content-Type'] = \ + headers['content-type'] = \ request.content_type or 'application/octet-stream' # TODO Avoid reading the full content at once if isinstance(request.content_stream, types.GeneratorType): request.content = ''.join([i for i in request.content_stream]) else: request.content = request.content_stream.read() - headers['Content-Length'] = str(len(request.content)) + headers['content-length'] = str(len(request.content)) + + if request.accept_language: + headers['accept-language'] = request.accept_language[0] reply = self.request(method, path, data=request.content, params=params, headers=headers, allowed=[303], |