OLD | NEW |
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import logging | 5 import logging |
6 import traceback | 6 import traceback |
7 | 7 |
8 from data_source import DataSource | 8 from data_source import DataSource |
9 from extensions_paths import EXAMPLES | 9 from extensions_paths import EXAMPLES |
10 from future import All, Future | 10 from future import All, Future |
| 11 from jsc_view import CreateSamplesView |
11 from platform_util import GetPlatforms | 12 from platform_util import GetPlatforms |
12 | 13 |
13 | 14 |
14 def _GetSampleId(sample_name): | |
15 return sample_name.lower().replace(' ', '-') | |
16 | |
17 | |
18 def GetAcceptedLanguages(request): | |
19 if request is None: | |
20 return [] | |
21 accept_language = request.headers.get('Accept-Language', None) | |
22 if accept_language is None: | |
23 return [] | |
24 return [lang_with_q.split(';')[0].strip() | |
25 for lang_with_q in accept_language.split(',')] | |
26 | |
27 | |
28 def CreateSamplesView(samples_list, request): | |
29 return_list = [] | |
30 for dict_ in samples_list: | |
31 name = dict_['name'] | |
32 description = dict_['description'] | |
33 if description is None: | |
34 description = '' | |
35 if name.startswith('__MSG_') or description.startswith('__MSG_'): | |
36 try: | |
37 # Copy the sample dict so we don't change the dict in the cache. | |
38 sample_data = dict_.copy() | |
39 name_key = name[len('__MSG_'):-len('__')] | |
40 description_key = description[len('__MSG_'):-len('__')] | |
41 locale = sample_data['default_locale'] | |
42 for lang in GetAcceptedLanguages(request): | |
43 if lang in sample_data['locales']: | |
44 locale = lang | |
45 break | |
46 locale_data = sample_data['locales'][locale] | |
47 sample_data['name'] = locale_data[name_key]['message'] | |
48 sample_data['description'] = locale_data[description_key]['message'] | |
49 sample_data['id'] = _GetSampleId(sample_data['name']) | |
50 except Exception: | |
51 logging.error(traceback.format_exc()) | |
52 # Revert the sample to the original dict. | |
53 sample_data = dict_ | |
54 return_list.append(sample_data) | |
55 else: | |
56 dict_['id'] = _GetSampleId(name) | |
57 return_list.append(dict_) | |
58 return return_list | |
59 | |
60 | |
61 class SamplesDataSource(DataSource): | 15 class SamplesDataSource(DataSource): |
62 '''Constructs a list of samples and their respective files and api calls. | 16 '''Constructs a list of samples and their respective files and api calls. |
63 ''' | 17 ''' |
64 def __init__(self, server_instance, request): | 18 def __init__(self, server_instance, request): |
65 self._platform_bundle = server_instance.platform_bundle | 19 self._platform_bundle = server_instance.platform_bundle |
66 self._request = request | 20 self._request = request |
67 | 21 |
68 def _GetImpl(self, platform): | 22 def _GetImpl(self, platform): |
69 cache = self._platform_bundle.GetSamplesModel(platform).GetCache() | 23 cache = self._platform_bundle.GetSamplesModel(platform).GetCache() |
70 create_view = lambda samp_list: CreateSamplesView(samp_list, self._request) | 24 create_view = lambda samp_list: CreateSamplesView(samp_list, self._request) |
71 return cache.GetFromFileListing('' if platform == 'apps' | 25 return cache.GetFromFileListing('' if platform == 'apps' |
72 else EXAMPLES).Then(create_view) | 26 else EXAMPLES).Then(create_view) |
73 | 27 |
74 def get(self, platform): | 28 def get(self, platform): |
75 return self._GetImpl(platform).Get() | 29 return self._GetImpl(platform).Get() |
76 | 30 |
77 def GetRefreshPaths(self): | 31 def GetRefreshPaths(self): |
78 return [platform for platform in GetPlatforms()] | 32 return [platform for platform in GetPlatforms()] |
79 | 33 |
80 def Refresh(self, path): | 34 def Refresh(self, path): |
81 return self._GetImpl(path) | 35 return self._GetImpl(path) |
OLD | NEW |