Index: chrome/common/extensions/docs/server2/features.py |
diff --git a/chrome/common/extensions/docs/server2/features.py b/chrome/common/extensions/docs/server2/features.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7283a3c0074e3d28b675bb2fd2f21b6e0b7a0b6c |
--- /dev/null |
+++ b/chrome/common/extensions/docs/server2/features.py |
@@ -0,0 +1,46 @@ |
+# Copyright 2013 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+from copy import deepcopy |
+ |
+import features_utility |
+from third_party.json_schema_compiler.json_parse import Parse |
+ |
+class Features(object): |
+ '''Provides cached access to data for a specific features set. This can be |
+ subclassed to provide special transformation or handling during the feature |
+ parsing process by overriding Parse, FilterByPlatform, and/or |
+ CreateCache. |
+ ''' |
+ def __init__(self, compiled_fs_factory, features_path): |
+ self._features_path = features_path |
+ self._cache = compiled_fs_factory.Create(self._CreateFeatures, type(self)) |
+ |
+ def _CreateFeatures(self, _, content): |
+ features = self.Parse(Parse(content)) |
+ cache = self.CreateCache(features) |
+ cache['all'] = features |
+ return cache |
+ |
+ def Parse(self, features_json): |
not at google - send to devlin
2013/09/23 18:31:30
I don't quite understand the inheritance structure
|
+ return features_utility.Parse(features_json) |
+ |
+ def FilterByPlatform(self, features, platform): |
+ filtered_features = {} |
+ for name, feature in features.iteritems(): |
+ platforms = features_utility.GetPlatformSetForExtensionTypes( |
+ feature.get('extension_types', ())) |
+ if not platform or platform in platforms: |
+ filtered_features[name] = deepcopy(feature) |
+ return filtered_features |
+ |
+ def CreateCache(self, features): |
+ return { |
+ 'apps': self.FilterByPlatform(features, 'apps'), |
+ 'extensions': self.FilterByPlatform(features, 'extensions'), |
+ } |
+ |
+ def get(self, key): |
+ return self._cache.GetFromFile(self._features_path)[key] |
+ |