Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2013-05-27 02:20:10 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2013-05-27 02:20:10 (GMT)
commita04df23b19352800d125bffd252c9c836b594078 (patch)
treecee134b376932cd54e73e6ff1b35b1eb74b4d87d
parent2a37ffeb58fa954472e5901a4ee0b42fdbfa27f4 (diff)
Add --accept-language client parameter to override system locale
-rwxr-xr-xsugar-network2
-rw-r--r--sugar_network/client/__init__.py6
-rw-r--r--sugar_network/client/commands.py8
-rw-r--r--sugar_network/resources/volume.py9
-rw-r--r--sugar_network/toolkit/__init__.py10
-rw-r--r--sugar_network/toolkit/http.py21
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],