Index: tools/telemetry/third_party/gsutil/third_party/boto/boto/sdb/db/model.py |
diff --git a/tools/telemetry/third_party/gsutil/third_party/boto/boto/sdb/db/model.py b/tools/telemetry/third_party/gsutil/third_party/boto/boto/sdb/db/model.py |
deleted file mode 100644 |
index 741ad4387143c97291271a7b2e4d02b3d675f32c..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/third_party/gsutil/third_party/boto/boto/sdb/db/model.py |
+++ /dev/null |
@@ -1,296 +0,0 @@ |
-# Copyright (c) 2006,2007,2008 Mitch Garnaat http://garnaat.org/ |
-# |
-# Permission is hereby granted, free of charge, to any person obtaining a |
-# copy of this software and associated documentation files (the |
-# "Software"), to deal in the Software without restriction, including |
-# without limitation the rights to use, copy, modify, merge, publish, dis- |
-# tribute, sublicense, and/or sell copies of the Software, and to permit |
-# persons to whom the Software is furnished to do so, subject to the fol- |
-# lowing conditions: |
-# |
-# The above copyright notice and this permission notice shall be included |
-# in all copies or substantial portions of the Software. |
-# |
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- |
-# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT |
-# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
-# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
-# IN THE SOFTWARE. |
- |
-from boto.sdb.db.property import Property |
-from boto.sdb.db.key import Key |
-from boto.sdb.db.query import Query |
-import boto |
-from boto.compat import filter |
- |
-class ModelMeta(type): |
- "Metaclass for all Models" |
- |
- def __init__(cls, name, bases, dict): |
- super(ModelMeta, cls).__init__(name, bases, dict) |
- # Make sure this is a subclass of Model - mainly copied from django ModelBase (thanks!) |
- cls.__sub_classes__ = [] |
- |
- # Do a delayed import to prevent possible circular import errors. |
- from boto.sdb.db.manager import get_manager |
- |
- try: |
- if filter(lambda b: issubclass(b, Model), bases): |
- for base in bases: |
- base.__sub_classes__.append(cls) |
- cls._manager = get_manager(cls) |
- # look for all of the Properties and set their names |
- for key in dict.keys(): |
- if isinstance(dict[key], Property): |
- property = dict[key] |
- property.__property_config__(cls, key) |
- prop_names = [] |
- props = cls.properties() |
- for prop in props: |
- if not prop.__class__.__name__.startswith('_'): |
- prop_names.append(prop.name) |
- setattr(cls, '_prop_names', prop_names) |
- except NameError: |
- # 'Model' isn't defined yet, meaning we're looking at our own |
- # Model class, defined below. |
- pass |
- |
-class Model(object): |
- __metaclass__ = ModelMeta |
- __consistent__ = False # Consistent is set off by default |
- id = None |
- |
- @classmethod |
- def get_lineage(cls): |
- l = [c.__name__ for c in cls.mro()] |
- l.reverse() |
- return '.'.join(l) |
- |
- @classmethod |
- def kind(cls): |
- return cls.__name__ |
- |
- @classmethod |
- def _get_by_id(cls, id, manager=None): |
- if not manager: |
- manager = cls._manager |
- return manager.get_object(cls, id) |
- |
- @classmethod |
- def get_by_id(cls, ids=None, parent=None): |
- if isinstance(ids, list): |
- objs = [cls._get_by_id(id) for id in ids] |
- return objs |
- else: |
- return cls._get_by_id(ids) |
- |
- get_by_ids = get_by_id |
- |
- @classmethod |
- def get_by_key_name(cls, key_names, parent=None): |
- raise NotImplementedError("Key Names are not currently supported") |
- |
- @classmethod |
- def find(cls, limit=None, next_token=None, **params): |
- q = Query(cls, limit=limit, next_token=next_token) |
- for key, value in params.items(): |
- q.filter('%s =' % key, value) |
- return q |
- |
- @classmethod |
- def all(cls, limit=None, next_token=None): |
- return cls.find(limit=limit, next_token=next_token) |
- |
- @classmethod |
- def get_or_insert(key_name, **kw): |
- raise NotImplementedError("get_or_insert not currently supported") |
- |
- @classmethod |
- def properties(cls, hidden=True): |
- properties = [] |
- while cls: |
- for key in cls.__dict__.keys(): |
- prop = cls.__dict__[key] |
- if isinstance(prop, Property): |
- if hidden or not prop.__class__.__name__.startswith('_'): |
- properties.append(prop) |
- if len(cls.__bases__) > 0: |
- cls = cls.__bases__[0] |
- else: |
- cls = None |
- return properties |
- |
- @classmethod |
- def find_property(cls, prop_name): |
- property = None |
- while cls: |
- for key in cls.__dict__.keys(): |
- prop = cls.__dict__[key] |
- if isinstance(prop, Property): |
- if not prop.__class__.__name__.startswith('_') and prop_name == prop.name: |
- property = prop |
- if len(cls.__bases__) > 0: |
- cls = cls.__bases__[0] |
- else: |
- cls = None |
- return property |
- |
- @classmethod |
- def get_xmlmanager(cls): |
- if not hasattr(cls, '_xmlmanager'): |
- from boto.sdb.db.manager.xmlmanager import XMLManager |
- cls._xmlmanager = XMLManager(cls, None, None, None, |
- None, None, None, None, False) |
- return cls._xmlmanager |
- |
- @classmethod |
- def from_xml(cls, fp): |
- xmlmanager = cls.get_xmlmanager() |
- return xmlmanager.unmarshal_object(fp) |
- |
- def __init__(self, id=None, **kw): |
- self._loaded = False |
- # first try to initialize all properties to their default values |
- for prop in self.properties(hidden=False): |
- try: |
- setattr(self, prop.name, prop.default_value()) |
- except ValueError: |
- pass |
- if 'manager' in kw: |
- self._manager = kw['manager'] |
- self.id = id |
- for key in kw: |
- if key != 'manager': |
- # We don't want any errors populating up when loading an object, |
- # so if it fails we just revert to it's default value |
- try: |
- setattr(self, key, kw[key]) |
- except Exception as e: |
- boto.log.exception(e) |
- |
- def __repr__(self): |
- return '%s<%s>' % (self.__class__.__name__, self.id) |
- |
- def __str__(self): |
- return str(self.id) |
- |
- def __eq__(self, other): |
- return other and isinstance(other, Model) and self.id == other.id |
- |
- def _get_raw_item(self): |
- return self._manager.get_raw_item(self) |
- |
- def load(self): |
- if self.id and not self._loaded: |
- self._manager.load_object(self) |
- |
- def reload(self): |
- if self.id: |
- self._loaded = False |
- self._manager.load_object(self) |
- |
- def put(self, expected_value=None): |
- """ |
- Save this object as it is, with an optional expected value |
- |
- :param expected_value: Optional tuple of Attribute, and Value that |
- must be the same in order to save this object. If this |
- condition is not met, an SDBResponseError will be raised with a |
- Confict status code. |
- :type expected_value: tuple or list |
- :return: This object |
- :rtype: :class:`boto.sdb.db.model.Model` |
- """ |
- self._manager.save_object(self, expected_value) |
- return self |
- |
- save = put |
- |
- def put_attributes(self, attrs): |
- """ |
- Save just these few attributes, not the whole object |
- |
- :param attrs: Attributes to save, key->value dict |
- :type attrs: dict |
- :return: self |
- :rtype: :class:`boto.sdb.db.model.Model` |
- """ |
- assert(isinstance(attrs, dict)), "Argument must be a dict of key->values to save" |
- for prop_name in attrs: |
- value = attrs[prop_name] |
- prop = self.find_property(prop_name) |
- assert(prop), "Property not found: %s" % prop_name |
- self._manager.set_property(prop, self, prop_name, value) |
- self.reload() |
- return self |
- |
- def delete_attributes(self, attrs): |
- """ |
- Delete just these attributes, not the whole object. |
- |
- :param attrs: Attributes to save, as a list of string names |
- :type attrs: list |
- :return: self |
- :rtype: :class:`boto.sdb.db.model.Model` |
- """ |
- assert(isinstance(attrs, list)), "Argument must be a list of names of keys to delete." |
- self._manager.domain.delete_attributes(self.id, attrs) |
- self.reload() |
- return self |
- |
- save_attributes = put_attributes |
- |
- def delete(self): |
- self._manager.delete_object(self) |
- |
- def key(self): |
- return Key(obj=self) |
- |
- def set_manager(self, manager): |
- self._manager = manager |
- |
- def to_dict(self): |
- props = {} |
- for prop in self.properties(hidden=False): |
- props[prop.name] = getattr(self, prop.name) |
- obj = {'properties': props, |
- 'id': self.id} |
- return {self.__class__.__name__: obj} |
- |
- def to_xml(self, doc=None): |
- xmlmanager = self.get_xmlmanager() |
- doc = xmlmanager.marshal_object(self, doc) |
- return doc |
- |
- @classmethod |
- def find_subclass(cls, name): |
- """Find a subclass with a given name""" |
- if name == cls.__name__: |
- return cls |
- for sc in cls.__sub_classes__: |
- r = sc.find_subclass(name) |
- if r is not None: |
- return r |
- |
-class Expando(Model): |
- |
- def __setattr__(self, name, value): |
- if name in self._prop_names: |
- object.__setattr__(self, name, value) |
- elif name.startswith('_'): |
- object.__setattr__(self, name, value) |
- elif name == 'id': |
- object.__setattr__(self, name, value) |
- else: |
- self._manager.set_key_value(self, name, value) |
- object.__setattr__(self, name, value) |
- |
- def __getattr__(self, name): |
- if not name.startswith('_'): |
- value = self._manager.get_key_value(self, name) |
- if value: |
- object.__setattr__(self, name, value) |
- return value |
- raise AttributeError |