OLD | NEW |
1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 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 from itertools import groupby | 5 from itertools import groupby |
6 from operator import itemgetter | 6 from operator import itemgetter |
7 import posixpath | 7 import posixpath |
8 | 8 |
9 from data_source import DataSource | 9 from data_source import DataSource |
10 from extensions_paths import JSON_TEMPLATES, PUBLIC_TEMPLATES | 10 from extensions_paths import JSON_TEMPLATES, PUBLIC_TEMPLATES |
11 from future import Future | 11 from future import Future |
| 12 from platform_util import GetPlatforms |
12 | 13 |
13 | 14 |
14 class WhatsNewDataSource(DataSource): | 15 class WhatsNewDataSource(DataSource): |
15 ''' This class creates a list of "what is new" by chrome version. | 16 ''' This class creates a list of "what is new" by chrome version. |
16 ''' | 17 ''' |
17 | 18 |
18 def __init__(self, server_instance, _): | 19 def __init__(self, server_instance, _): |
19 self._parse_cache = server_instance.compiled_fs_factory.ForJson( | 20 self._parse_cache = server_instance.compiled_fs_factory.ForJson( |
20 server_instance.host_file_system_provider.GetTrunk()) | 21 server_instance.host_file_system_provider.GetTrunk()) |
21 self._object_store = server_instance.object_store_creator.Create( | 22 self._object_store = server_instance.object_store_creator.Create( |
22 WhatsNewDataSource) | 23 WhatsNewDataSource) |
23 self._api_models = server_instance.api_models | 24 self._platform_bundle = server_instance.platform_bundle |
24 self._availability_finder = server_instance.availability_finder | |
25 self._api_categorizer = server_instance.api_categorizer | |
26 | 25 |
27 def _GenerateChangesListWithVersion(self, platform, whats_new_json): | 26 def _GenerateChangesListWithVersion(self, platform, whats_new_json): |
28 return [{ | 27 return [{ |
29 'id': change_id, | 28 'id': change_id, |
30 'type': change['type'], | 29 'type': change['type'], |
31 'description': change['description'], | 30 'description': change['description'], |
32 'version': change['version'] | 31 'version': change['version'] |
33 } for change_id, change in whats_new_json.iteritems()] | 32 } for change_id, change in whats_new_json.iteritems()] |
34 | 33 |
35 def _GetAPIVersion(self, platform, api_name): | 34 def _GetAPIVersion(self, platform, api_name): |
36 version = None | 35 version = None |
37 category = self._api_categorizer.GetCategory(platform, api_name) | 36 category = self._platform_bundle.GetAPICategorizer(platform).GetCategory( |
| 37 api_name) |
38 if category == 'chrome': | 38 if category == 'chrome': |
39 channel_info = self._availability_finder.GetAPIAvailability( | 39 channel_info = self._platform_bundle.GetAvailabilityFinder( |
40 api_name).channel_info | 40 platform).GetAPIAvailability(api_name).channel_info |
41 channel = channel_info.channel | 41 channel = channel_info.channel |
42 if channel == 'stable': | 42 if channel == 'stable': |
43 version = channel_info.version | 43 version = channel_info.version |
44 return version | 44 return version |
45 | 45 |
46 def _GenerateAPIListWithVersion(self, platform): | 46 def _GenerateAPIListWithVersion(self, platform): |
47 data = [] | 47 data = [] |
48 for api_name, api_model in self._api_models.IterModels(): | 48 for api_name, api_model in self._platform_bundle.GetAPIModels( |
| 49 platform).IterModels(): |
49 version = self._GetAPIVersion(platform, api_name) | 50 version = self._GetAPIVersion(platform, api_name) |
50 if version: | 51 if version: |
51 api = { | 52 api = { |
52 'name': api_name, | 53 'name': api_name, |
53 'description': api_model.description, | 54 'description': api_model.description, |
54 'version' : version, | 55 'version' : version, |
55 'type': 'apis', | 56 'type': 'apis', |
56 } | 57 } |
57 data.append(api) | 58 data.append(api) |
58 data.sort(key=itemgetter('version')) | 59 data.sort(key=itemgetter('version')) |
(...skipping 15 matching lines...) Expand all Loading... |
74 } | 75 } |
75 for item in group: | 76 for item in group: |
76 item_type = item['type'] | 77 item_type = item['type'] |
77 if item_type not in whats_new_by_version: | 78 if item_type not in whats_new_by_version: |
78 whats_new_by_version[item_type] = [] | 79 whats_new_by_version[item_type] = [] |
79 whats_new_by_version[item_type].append(item) | 80 whats_new_by_version[item_type].append(item) |
80 platform_list.append(whats_new_by_version) | 81 platform_list.append(whats_new_by_version) |
81 return platform_list | 82 return platform_list |
82 | 83 |
83 def resolve(): | 84 def resolve(): |
84 return { | 85 return dict((platform, _MakeDictByPlatform(platform)) |
85 'apps': _MakeDictByPlatform('apps'), | 86 for platform in GetPlatforms()) |
86 'extensions': _MakeDictByPlatform('extensions') | |
87 } | |
88 return Future(callback=resolve) | 87 return Future(callback=resolve) |
89 | 88 |
90 def _GetCachedWhatsNewData(self): | 89 def _GetCachedWhatsNewData(self): |
91 data = self._object_store.Get('whats_new_data').Get() | 90 data = self._object_store.Get('whats_new_data').Get() |
92 if data is None: | 91 if data is None: |
93 data = self._GenerateWhatsNewDict().Get() | 92 data = self._GenerateWhatsNewDict().Get() |
94 self._object_store.Set('whats_new_data', data) | 93 self._object_store.Set('whats_new_data', data) |
95 return data | 94 return data |
96 | 95 |
97 def get(self, key): | 96 def get(self, key): |
98 return self._GetCachedWhatsNewData().get(key) | 97 return self._GetCachedWhatsNewData().get(key) |
99 | 98 |
100 def Cron(self): | 99 def Cron(self): |
101 return self._GenerateWhatsNewDict() | 100 return self._GenerateWhatsNewDict() |
OLD | NEW |