app/soc/logic/models/base.py
changeset 2203 e2c6e6722d69
parent 2190 399fc9411abc
child 2221 1177ab97c2f0
equal deleted inserted replaced
2202:f6a1c141f51e 2203:e2c6e6722d69
    63   The BaseLogic class functions specific to Entity classes by relying
    63   The BaseLogic class functions specific to Entity classes by relying
    64   on arguments passed to __init__.
    64   on arguments passed to __init__.
    65   """
    65   """
    66 
    66 
    67   def __init__(self, model, base_model=None, scope_logic=None,
    67   def __init__(self, model, base_model=None, scope_logic=None,
    68                name=None, skip_properties=None):
    68                name=None, skip_properties=None, id_based=False):
    69     """Defines the name, key_name and model for this entity.
    69     """Defines the name, key_name and model for this entity.
    70     """
    70     """
    71 
    71 
    72     self._model = model
    72     self._model = model
    73     self._base_model = base_model
    73     self._base_model = base_model
    74     self._scope_logic = scope_logic
    74     self._scope_logic = scope_logic
       
    75     self._id_based = id_based
    75 
    76 
    76     if name:
    77     if name:
    77       self._name = name
    78       self._name = name
    78     else:
    79     else:
    79       self._name =  self._model.__name__
    80       self._name =  self._model.__name__
   200 
   201 
   201     Args:
   202     Args:
   202       key_name: key name of entity
   203       key_name: key name of entity
   203     """
   204     """
   204 
   205 
       
   206     if self._id_based:
       
   207       raise Error("getFromKeyName called on an id based logic")
       
   208 
   205     if not key_name:
   209     if not key_name:
   206       raise InvalidArgumentError
   210       raise InvalidArgumentError
   207 
   211 
   208     return self._model.get_by_key_name(key_name)
   212     return self._model.get_by_key_name(key_name)
       
   213 
       
   214   def getFromID(self, id):
       
   215     """Returns entity for id or None if not found.
       
   216 
       
   217     Args:
       
   218       id: id of entity
       
   219     """
       
   220 
       
   221     if not self._id_based:
       
   222       raise Error("getFromID called on a not id based logic")
       
   223 
       
   224     if not id:
       
   225       raise InvalidArgumentError
       
   226 
       
   227     return self._model.get_by_id(id)
   209 
   228 
   210   def getFromKeyNameOr404(self, key_name):
   229   def getFromKeyNameOr404(self, key_name):
   211     """Like getFromKeyName but expects to find an entity.
   230     """Like getFromKeyName but expects to find an entity.
   212 
   231 
   213     Raises:
   232     Raises:
   219     if entity:
   238     if entity:
   220       return entity
   239       return entity
   221 
   240 
   222     msg = ugettext('There is no "%(name)s" named %(key_name)s.') % {
   241     msg = ugettext('There is no "%(name)s" named %(key_name)s.') % {
   223         'name': self._name, 'key_name': key_name}
   242         'name': self._name, 'key_name': key_name}
       
   243 
       
   244     raise out_of_band.Error(msg, status=404)
       
   245 
       
   246   def getFromIDOr404(self, id):
       
   247     """Like getFromID but expects to find an entity.
       
   248 
       
   249     Raises:
       
   250       out_of_band.Error if no entity is found
       
   251     """
       
   252 
       
   253     entity = self.getFromID(id)
       
   254 
       
   255     if entity:
       
   256       return entity
       
   257 
       
   258     msg = ugettext('There is no "%(name)s" with id %(id)s.') % {
       
   259         'name': self._name, 'id': id}
   224 
   260 
   225     raise out_of_band.Error(msg, status=404)
   261     raise out_of_band.Error(msg, status=404)
   226 
   262 
   227   def getFromKeyFields(self, fields):
   263   def getFromKeyFields(self, fields):
   228     """Returns the entity for the specified key names, or None if not found.
   264     """Returns the entity for the specified key names, or None if not found.
   405       # the entity has been updated call _onUpdate
   441       # the entity has been updated call _onUpdate
   406       self._onUpdate(entity)
   442       self._onUpdate(entity)
   407 
   443 
   408     return entity
   444     return entity
   409 
   445 
       
   446   def updateOrCreateFromFields(self, properties):
       
   447     """Creates a new entity with the supplied properties.
       
   448 
       
   449     Args:
       
   450       properties: dict with entity properties and their values
       
   451     """
       
   452 
       
   453     for property_name in properties:
       
   454       self._createField(properties, property_name)
       
   455 
       
   456     if self._id_based:
       
   457       entity = self._model(**properties)
       
   458       entity.put()
       
   459     else:
       
   460       key_name = self.getKeyNameFromFields(properties)
       
   461       entity = self._model.get_or_insert(key_name, **properties)
       
   462 
       
   463     self._onCreate(entity)
       
   464     return entity
       
   465 
   410   def isDeletable(self, entity):
   466   def isDeletable(self, entity):
   411     """Returns whether the specified entity can be deleted.
   467     """Returns whether the specified entity can be deleted.
   412 
   468 
   413     Args:
   469     Args:
   414       entity: an existing entity in datastore
   470       entity: an existing entity in datastore