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
3 # found in the LICENSE file.
5 from itertools
import groupby
6 from operator
import itemgetter
9 from data_source
import DataSource
10 from extensions_paths
import JSON_TEMPLATES
, PUBLIC_TEMPLATES
11 from future
import Future
14 class WhatsNewDataSource(DataSource
):
15 ''' This class creates a list of "what is new" by chrome version.
18 def __init__(self
, server_instance
, _
):
19 self
._parse
_cache
= server_instance
.compiled_fs_factory
.ForJson(
20 server_instance
.host_file_system_provider
.GetTrunk())
21 self
._object
_store
= server_instance
.object_store_creator
.Create(
23 self
._api
_models
= server_instance
.api_models
24 self
._availability
_finder
= server_instance
.availability_finder
25 self
._api
_categorizer
= server_instance
.api_categorizer
27 def _GenerateChangesListWithVersion(self
, platform
, whats_new_json
):
30 'type': change
['type'],
31 'description': change
['description'],
32 'version': change
['version']
33 } for change_id
, change
in whats_new_json
.iteritems()]
35 def _GetApiVersion(self
, platform
, api_name
):
37 category
= self
._api
_categorizer
.GetCategory(platform
, api_name
)
38 if category
== 'chrome':
39 channel_info
= self
._availability
_finder
.GetApiAvailability(
40 api_name
).channel_info
41 channel
= channel_info
.channel
42 if channel
== 'stable':
43 version
= channel_info
.version
46 def _GenerateApiListWithVersion(self
, platform
):
48 for api_name
, api_model
in self
._api
_models
.IterModels():
49 version
= self
._GetApiVersion
(platform
, api_name
)
53 'description': api_model
.description
,
58 data
.sort(key
=itemgetter('version'))
61 def _GenerateWhatsNewDict(self
):
62 whats_new_json_future
= self
._parse
_cache
.GetFromFile(
63 posixpath
.join(JSON_TEMPLATES
, 'whats_new.json'))
64 def _MakeDictByPlatform(platform
):
65 whats_new_json
= whats_new_json_future
.Get()
67 apis
= self
._GenerateApiListWithVersion
(platform
)
68 apis
.extend(self
._GenerateChangesListWithVersion
(platform
,
70 apis
.sort(key
=itemgetter('version'), reverse
=True)
71 for version
, group
in groupby(apis
, key
=itemgetter('version')):
72 whats_new_by_version
= {
76 item_type
= item
['type']
77 if item_type
not in whats_new_by_version
:
78 whats_new_by_version
[item_type
] = []
79 whats_new_by_version
[item_type
].append(item
)
80 platform_list
.append(whats_new_by_version
)
85 'apps': _MakeDictByPlatform('apps'),
86 'extensions': _MakeDictByPlatform('extensions')
88 return Future(callback
=resolve
)
90 def _GetCachedWhatsNewData(self
):
91 data
= self
._object
_store
.Get('whats_new_data').Get()
93 data
= self
._GenerateWhatsNewDict
().Get()
94 self
._object
_store
.Set('whats_new_data', data
)
98 return self
._GetCachedWhatsNewData
().get(key
)
101 return self
._GenerateWhatsNewDict
()