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

Side by Side Diff: appengine/findit/model/versioned_config.py

Issue 2345093002: [Findit] Extending versioned_model.py to support versioning multiple entities of the same class. (Closed)
Patch Set: Ignore this patch, uploaded unrelated change to wrong branch 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 2015 The Chromium Authors. All rights reserved. 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 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 """Versioned singleton entity with the global configuration.""" 5 """Versioned singleton entity with the global configuration."""
6 6
7 import logging 7 import logging
8 8
9 from google.appengine.ext import ndb 9 from google.appengine.ext import ndb
10 10
11 from model.versioned_model import VersionedModel 11 from model.versioned_model import VersionedModel
12 12
13 13
14 class VersionedConfig(VersionedModel): 14 class VersionedConfig(VersionedModel):
15 """Singleton entity with the global configuration of the service. 15 """Singleton entity with the global configuration of the service.
16 16
17 All changes are stored in the revision log. 17 All changes are stored in the revision log.
18 """ 18 """
19 19
20 # When this revision of configuration was created. 20 # When this revision of configuration was created.
21 updated_ts = ndb.DateTimeProperty(indexed=False, auto_now=True) 21 updated_ts = ndb.DateTimeProperty(indexed=False, auto_now=True)
22 22
23 # Who created this revision of configuration. 23 # Who created this revision of configuration.
24 updated_by = ndb.StringProperty(indexed=False) 24 updated_by = ndb.StringProperty(indexed=False)
25 25
26 @classmethod 26 @classmethod
27 def Get(cls, version=None): 27 def Get(cls, version=None):
28 """Returns the version of the config entity, the latest if not specified.""" 28 """Returns the version of the config entity, the latest if not specified."""
29 config_data = cls.GetVersion(version) 29 config_data = cls.GetVersion(version=version)
30 return config_data or cls() if version is None else config_data 30 return config_data or cls() if version is None else config_data
31 31
32 def Update(self, user, is_admin, **kwargs): 32 def Update(self, user, is_admin, **kwargs):
33 """Applies |kwargs| dict to the entity and stores the entity if changed.""" 33 """Applies |kwargs| dict to the entity and stores the entity if changed."""
34 if not is_admin: 34 if not is_admin:
35 raise Exception('Only admin could update config.') 35 raise Exception('Only admin could update config.')
36 36
37 dirty = False 37 dirty = False
38 for k, v in kwargs.iteritems(): 38 for k, v in kwargs.iteritems():
39 assert k in self._properties, k 39 assert k in self._properties, k
40 if getattr(self, k) != v: 40 if getattr(self, k) != v:
41 setattr(self, k, v) 41 setattr(self, k, v)
42 dirty = True 42 dirty = True
43 43
44 if dirty: 44 if dirty:
45 user_name = user.email().split('@')[0] 45 user_name = user.email().split('@')[0]
46 self.updated_by = user_name 46 self.updated_by = user_name
47 self.Save() 47 self.Save()
48 logging.info('Config %s was updated by %s', self.__class__, user_name) 48 logging.info('Config %s was updated by %s', self.__class__, user_name)
49 49
50 return dirty 50 return dirty
OLDNEW
« no previous file with comments | « appengine/findit/model/test/versioned_model_test.py ('k') | appengine/findit/model/versioned_model.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698