datastore_models.py revision 3551c9c881056c480085172ff9840cab31610854
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 5import cPickle 6import traceback 7 8from 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 13class 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