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. 4 5 import cPickle 6 import traceback 7 8 from appengine_wrappers import db 9 10 # A collection of the data store models used throughout the server. 11 # These values are global within datastore. 12 13 class PersistentObjectStoreItem(db.Model): 14 pickled_value = db.BlobProperty() 15 16 @classmethod 17 def CreateKey(cls, namespace, key): 18 path = '%s/%s' % (namespace, key) 19 try: 20 return db.Key.from_path(cls.__name__, path) 21 except Exception: 22 # Probably AppEngine's BadValueError for the name being too long, but 23 # it's not documented which errors can actually be thrown here, so catch 24 # 'em all. 25 raise ValueError( 26 'Exception thrown when trying to create db.Key from path %s: %s' % ( 27 path, traceback.format_exc())) 28 29 @classmethod 30 def CreateItem(cls, namespace, key, value): 31 return PersistentObjectStoreItem(key=cls.CreateKey(namespace, key), 32 pickled_value=cPickle.dumps(value)) 33 34 def GetValue(self): 35 return cPickle.loads(self.pickled_value) 36