Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(786)

Side by Side Diff: recipe_modules/properties/api.py

Issue 2415793003: Setup basic Runtime with properties and platform.
Patch Set: Split out, more immutables, better utilization. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2013 The LUCI Authors. All rights reserved. 1 # Copyright 2013 The LUCI Authors. All rights reserved.
2 # Use of this source code is governed under the Apache License, Version 2.0 2 # Use of this source code is governed under the Apache License, Version 2.0
3 # that can be found in the LICENSE file. 3 # that can be found in the LICENSE file.
4 4
5 from recipe_engine import recipe_api 5 from recipe_engine import recipe_api
6 from recipe_engine.types import freeze
7 import collections 6 import collections
8 7
9 # Use RecipeApiPlain because collections.Mapping has its own metaclass. 8 # Use RecipeApiPlain because collections.Mapping has its own metaclass.
10 # Additionally, nothing in this class is a composite_step (nothing in this class 9 # Additionally, nothing in this class is a composite_step (nothing in this class
11 # is any sort of step :). 10 # is any sort of step :).
12 class PropertiesApi(recipe_api.RecipeApiPlain, collections.Mapping): 11 class PropertiesApi(recipe_api.RecipeApiPlain, collections.Mapping):
13 """ 12 """
14 Provide an immutable mapping view into the 'properties' for the current run. 13 Provide an immutable mapping view into the 'properties' for the current run.
15 14
16 The value of this api is equivalent to this transformation of the legacy 15 The value of this api is equivalent to this transformation of the legacy
17 build values: 16 build values:
18 val = factory_properties 17 val = factory_properties
19 val.update(build_properties) 18 val.update(build_properties)
20 """ 19 """
21 20
22 properties_client = recipe_api.RequireClient('properties') 21 properties_client = recipe_api.RequireClient('properties')
23 22
24 def __init__(self, **kwargs):
25 super(PropertiesApi, self).__init__(**kwargs)
26 self._frozen_properties = None
27
28 @property
29 def _properties(self):
30 if self._frozen_properties is None:
31 self._frozen_properties = freeze(
32 self.properties_client.get_properties())
33 return self._frozen_properties
34
35 def __getitem__(self, key): 23 def __getitem__(self, key):
36 return self._properties[key] 24 return self.properties_client.properties[key]
37 25
38 def __len__(self): 26 def __len__(self):
39 return len(self._properties) 27 return len(self.properties_client.properties)
40 28
41 def __iter__(self): 29 def __iter__(self):
42 return iter(self._properties) 30 return iter(self.properties_client.properties)
43 31
44 def legacy(self): # pragma: no cover 32 def legacy(self): # pragma: no cover
45 """Returns a reduced set of properties, possibly used by legacy scripts.""" 33 """Returns a reduced set of properties, possibly used by legacy scripts."""
46 34
47 # Add all properties to this blacklist that are required for testing, but 35 # Add all properties to this blacklist that are required for testing, but
48 # not used by any lecacy scripts, in order to avoid vast expecation 36 # not used by any lecacy scripts, in order to avoid vast expecation
49 # changes. 37 # changes.
50 blacklist = set([ 38 blacklist = set([
51 'buildbotURL', 39 'buildbotURL',
52 ]) 40 ])
53 return {k: v for k, v in self.iteritems() if k not in blacklist} 41 return {k: v for k, v in self.iteritems() if k not in blacklist}
54 42
55 def thaw(self): 43 def thaw(self):
56 """Returns a vanilla python jsonish dictionary of properties.""" 44 """Returns a vanilla python jsonish dictionary of properties."""
57 return self.properties_client.get_properties() 45 return self.properties_client.mutable_properties()
OLDNEW
« recipe_engine/recipe_api.py ('K') | « recipe_modules/platform/api.py ('k') | recipes.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698