OLD | NEW |
| (Empty) |
1 # Copyright 2015 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. | |
4 | |
5 """Versioned singleton entity with the global configuration.""" | |
6 | |
7 import logging | |
8 | |
9 from google.appengine.ext import ndb | |
10 | |
11 from model.versioned_model import VersionedModel | |
12 | |
13 | |
14 class VersionedConfig(VersionedModel): | |
15 """Singleton entity with the global configuration of the service. | |
16 | |
17 All changes are stored in the revision log. | |
18 """ | |
19 | |
20 # When this revision of configuration was created. | |
21 updated_ts = ndb.DateTimeProperty(indexed=False, auto_now=True) | |
22 | |
23 # Who created this revision of configuration. | |
24 updated_by = ndb.StringProperty(indexed=False) | |
25 | |
26 @classmethod | |
27 def Get(cls, version=None): | |
28 """Returns the version of the config entity, the latest if not specified.""" | |
29 config_data = cls.GetVersion(version=version) | |
30 return config_data or cls() if version is None else config_data | |
31 | |
32 def Update(self, user, is_admin, **kwargs): | |
33 """Apply ``kwargs`` dict to the entity and stores the entity if changed.""" | |
34 if not is_admin: | |
35 raise Exception('Only admin could update config.') | |
36 | |
37 dirty = False | |
38 for k, v in kwargs.iteritems(): | |
39 assert k in self._properties, k | |
40 if getattr(self, k) != v: | |
41 setattr(self, k, v) | |
42 dirty = True | |
43 | |
44 if dirty: | |
45 user_name = user.email().split('@')[0] | |
46 self.updated_by = user_name | |
47 self.Save() | |
48 logging.info('Config %s was updated by %s', self.__class__, user_name) | |
49 | |
50 return dirty | |
OLD | NEW |