Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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 import cPickle | 5 import cPickle |
| 6 import google.appengine.ext.db as db | |
|
Ken Rockot(use gerrit already)
2015/05/26 00:26:24
Only used from AppEngine, so this doesn't need a w
| |
| 7 import logging | |
| 6 import traceback | 8 import traceback |
| 7 | 9 |
| 8 from appengine_wrappers import db | 10 |
| 11 _MAX_ENTITY_SIZE = 1024*1024 | |
| 12 | |
| 9 | 13 |
| 10 # A collection of the data store models used throughout the server. | 14 # A collection of the data store models used throughout the server. |
| 11 # These values are global within datastore. | 15 # These values are global within datastore. |
| 12 | 16 |
| 13 class PersistentObjectStoreItem(db.Model): | 17 class PersistentObjectStoreItem(db.Model): |
| 14 pickled_value = db.BlobProperty() | 18 pickled_value = db.BlobProperty() |
| 15 | 19 |
| 16 @classmethod | 20 @classmethod |
| 17 def CreateKey(cls, namespace, key): | 21 def CreateKey(cls, namespace, key): |
| 18 path = '%s/%s' % (namespace, key) | 22 path = '%s/%s' % (namespace, key) |
| 19 try: | 23 try: |
| 20 return db.Key.from_path(cls.__name__, path) | 24 return db.Key.from_path(cls.__name__, path) |
| 21 except Exception: | 25 except Exception: |
| 22 # Probably AppEngine's BadValueError for the name being too long, but | 26 # 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 | 27 # it's not documented which errors can actually be thrown here, so catch |
| 24 # 'em all. | 28 # 'em all. |
| 25 raise ValueError( | 29 raise ValueError( |
| 26 'Exception thrown when trying to create db.Key from path %s: %s' % ( | 30 'Exception thrown when trying to create db.Key from path %s: %s' % ( |
| 27 path, traceback.format_exc())) | 31 path, traceback.format_exc())) |
| 28 | 32 |
| 29 @classmethod | 33 @classmethod |
| 30 def CreateItem(cls, namespace, key, value): | 34 def CreateItem(cls, namespace, key, value): |
| 35 pickled_value = cPickle.dumps(value) | |
| 36 if len(pickled_value) > _MAX_ENTITY_SIZE: | |
| 37 logging.warn('Refusing to create entity greater than 1 MB in size: %s/%s' | |
|
Ken Rockot(use gerrit already)
2015/05/26 00:26:24
These entities would fail to push anyway. Failing
| |
| 38 % (namespace, key)) | |
| 39 return None | |
| 31 return PersistentObjectStoreItem(key=cls.CreateKey(namespace, key), | 40 return PersistentObjectStoreItem(key=cls.CreateKey(namespace, key), |
| 32 pickled_value=cPickle.dumps(value)) | 41 pickled_value=pickled_value) |
| 33 | 42 |
| 34 def GetValue(self): | 43 def GetValue(self): |
| 35 return cPickle.loads(self.pickled_value) | 44 return cPickle.loads(self.pickled_value) |
| OLD | NEW |