equal
deleted
inserted
replaced
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 |