| 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 |