Source code for actingweb.property

from builtins import object


[docs]class PropertyStore(object): def __init__(self, actor_id=None, config=None): self._actor_id = actor_id self._config = config self.__initialised = True def __getitem__(self, k): return self.__getattr__(k) def __setitem__(self, k, v): return self.__setattr__(k, v) def __setattr__(self, k, v): if '_PropertyStore__initialised' not in self.__dict__: return object.__setattr__(self, k, v) if v is None: if k in self.__dict__: self.__delattr__(k) else: self.__dict__[k] = v # Re-init property to avoid overwrite self.__dict__['_db'] = self.__dict__['_config'].DbProperty.DbProperty() # set() will retrieve an attribute and delete it if value = None self.__dict__['_db'].set(actor_id=self.__dict__['_actor_id'], name=k, value=v) def __getattr__(self, k): try: return self.__dict__[k] except KeyError: self.__dict__['_db'] = self.__dict__['_config'].DbProperty.DbProperty() self.__dict__[k] = self.__dict__['_db'].get(actor_id=self.__dict__['_actor_id'], name=k) return self.__dict__[k]
[docs]class Property(object): """ property is the main entity keeping a property. It needs to be initalised at object creation time. """
[docs] def get(self): """ Retrieves the property from the database """ if not self.dbprop: # New property after a delete() self.dbprop = self.config.DbProperty.DbProperty() self.value = None self.value = self.dbprop.get(actor_id=self.actor_id, name=self.name) return self.value
[docs] def set(self, value): """ Sets a new value for this property """ if not self.dbprop: # New property after a delete() self.dbprop = self.config.DbProperty.DbProperty() if not self.actor_id or not self.name: return False # Make sure we have made a dip in db to avoid two properties # with same name db_value = self.dbprop.get(actor_id=self.actor_id, name=self.name) if db_value == value: return True self.value = value return self.dbprop.set(actor_id=self.actor_id, name=self.name, value=value)
[docs] def delete(self): """ Deletes the property in the database """ if not self.dbprop: return if self.dbprop.delete(): self.value = None self.dbprop = None return True else: return False
[docs] def get_actor_id(self): return self.actor_id
def __init__(self, actor_id=None, name=None, value=None, config=None): """ A property must be initialised with actor_id and name or name and value (to find an actor's property of a certain value) """ self.config = config self.dbprop = self.config.DbProperty.DbProperty() self.name = name if not actor_id and name and len(name) > 0 and value and len(value) > 0: self.actor_id = self.dbprop.get_actor_id_from_property(name=name, value=value) if not self.actor_id: return self.value = value else: self.actor_id = actor_id self.value = None if name and len(name) > 0: self.get()
[docs]class Properties(object): """ Handles all properties of a specific actor_id Access the properties in .props as a dictionary """
[docs] def fetch(self): if not self.actor_id: return False if not self.list: return False if self.props is not None: return self.props self.props = self.list.fetch(actor_id=self.actor_id) return self.props
[docs] def delete(self): if not self.list: self.fetch() if not self.list: return False self.list.delete() return True
def __init__(self, actor_id=None, config=None): """ Properties must always be initialised with an actor_id """ self.config = config if not actor_id: self.list = None return self.list = self.config.DbProperty.DbPropertyList() self.actor_id = actor_id self.props = None self.fetch()