# HG changeset patch # User Sverre Rabbelier # Date 1223836363 0 # Node ID 0386d634ad9f0b292560ff8bbf11943ad56da380 # Parent 7190b224c701ea5251c8d94801c428fd1a008565 Removed now-obsolete code from model.py and __init__.py Patch by: Sverre Rabbelier Reviewed by: to-be-reviewed diff -r 7190b224c701 -r 0386d634ad9f app/soc/logic/__init__.py --- a/app/soc/logic/__init__.py Sun Oct 12 18:30:37 2008 +0000 +++ b/app/soc/logic/__init__.py Sun Oct 12 18:32:43 2008 +0000 @@ -1,119 +0,0 @@ -#!/usr/bin/python2.5 -# -# Copyright 2008 the Melange authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Various (Model) query functions. -""" - -__authors__ = [ - '"Sverre Rabbelier" ', - ] - - -import key_name -import model -import soc.models.document -import soc.models.sponsor -import soc.models.work -import soc.models.site_settings - - -class DocumentLogic(model.BaseLogic): - """Logic methods for the Document model - """ - - def __init__(self): - """Defines the name, key_name and model for this entity. - """ - - self._name = "document" - self._model = soc.models.document.Document - self._keyName = key_name.nameDocument - self._skip_properties = [] - - -class SettingsLogic(model.BaseLogic): - """Logic methods for the Settings model - """ - - - def __init__(self): - """Defines the name, key_name and model for this entity. - """ - - self._name = "settings" - self._model = soc.models.site_settings.SiteSettings - self._keyName = key_name.nameSiteSettings - self._skip_properties = [] - - -class SponsorLogic(model.BaseLogic): - """Logic methods for the Sponsor model - """ - - def __init__(self): - """Defines the name, key_name and model for this entity. - """ - - self._name = "sponsor" - self._model = soc.models.sponsor.Sponsor - self._keyName = key_name.nameSponsor - self._skip_properties = [] - - -class UserLogic(model.BaseLogic): - """Logic methods for the User model - """ - - def __init__(self): - """Defines the name, key_name and model for this entity. - """ - - self._name = "user" - self._model = soc.models.user.User - self._keyName = key_name.nameUser - self._skip_properties = ['former_ids'] - - def _updateField(self, model, name, value): - """Special case logic for id. - - When the id is changed, the former_ids field should be appended - with the old id. - """ - if name == 'id' and model.id != value: - model.former_ids.append(model.id) - - return True - -class WorkLogic(model.BaseLogic): - """Logic methods for the Work model - """ - - def __init__(self): - """Defines the name, key_name and model for this entity. - """ - - self._name = "work" - self._model = soc.models.work.Work - self._keyName = key_name.nameWork - self._skip_properties = [] - # TODO(tlarsen) write a nameWork method - - -document_logic = DocumentLogic() -settings_logic = SettingsLogic() -sponsor_logic = SponsorLogic() -user_logic = UserLogic() -work_logic = WorkLogic() diff -r 7190b224c701 -r 0386d634ad9f app/soc/logic/model.py --- a/app/soc/logic/model.py Sun Oct 12 18:30:37 2008 +0000 +++ b/app/soc/logic/model.py Sun Oct 12 18:32:43 2008 +0000 @@ -184,184 +184,3 @@ break return None - - -class BaseLogic(): - """Base logic for entity classes. - - The BaseLogic class functions specific to Entity classes by relying - on the the child-classes to implement _model, _name and _key_name - """ - - def _updateField(self, model, name, value): - """Hook called when a field is updated. - - Base classes should override if any special actions need to be - taken when a field is updated. The field is not updated if the - method does not return a True value. - """ - - return True - - def getFromKeyName(self, key_name): - """"Returns User entity for key_name or None if not found. -- -- Args: -- key_name: key name of entity - """ - - return self._model.get_by_key_name(key_name) - - def getFromFields(self, **kwargs): - """Returns the entity for a given link name, or None if not found. - - Args: - **kwargs: the fields of the entity that uniquely identifies it - """ - - key_name = self.getKeyNameForFields(**kwargs) - - if key_name: - entity = self._model.get_by_key_name(key_name) - else: - entity = None - - return entity - - def getIfFields(self, **kwargs): - """Returns entity for supplied link name if one exists. - - Args: - **kwargs: the fields of the entity that uniquely identifies it - - Returns: - * None if a field is false. - * Eentity for supplied fields - - Raises: - out_of_band.ErrorResponse if link name is not false, but no Sponsor entity - with the supplied link name exists in the Datastore - """ - - if not all(kwargs.values()): - # exit without error, to let view know that link_name was not supplied - return None - - entity = self.getFromFields(**kwargs) - - if entity: - # a Sponsor exist for this link_name, so return that Sponsor entity - return entity - - fields = [] - - for key, value in kwargs.iteritems(): - fields.extend('"%s" is "%s" ' % (key, value)) - - # else: fields were supplied, but there is no Entity that has it - raise out_of_band.ErrorResponse( - 'There is no %s with %s.' % (self._name, ''.join(fields)), status=404) - - def getKeyNameForFields(self, **kwargs): - """Return a Datastore key_name for a Entity from the specified fields. - - Args: - **kwargs: the fields of the entity that uniquely identifies it - """ - - if not all(kwargs.values()): - return None - - return self._keyName(**kwargs) - - def getForLimitAndOffset(self, limit, offset=0): - """Returns entities for given offset and limit or None if not found. - - Args: - limit: max amount of entities to return - offset: optional offset in entities list which defines first entity to - return; default is zero (first entity) - """ - - query = self._model.all() - return query.fetch(limit, offset) - - def updateModelProperties(self, model, **model_properties): - """Update existing model entity using supplied model properties. - - Args: - model: a model entity - **model_properties: keyword arguments that correspond to model entity - properties and their values - - Returns: - the original model entity with any supplied properties changed - """ - - def update(): - return self._unsafeUpdateModelProperties(model, **model_properties) - - return db.run_in_transaction(update) - - def _unsafeUpdateModelProperties(self, model, **model_properties): - """(see updateModelProperties) - - Like updateModelProperties(), but not run within a transaction. - """ - - properties = model.properties() - - for prop in properties.values(): - name = prop.name - - if not name in self._skip_properties and name in model_properties: - value = model_properties[prop.name] - - if self._updateField(model, name, value): - prop.__set__(model, value) - - model.put() - return model - - def updateOrCreateFromKeyName(self, properties, key_name): - """Update existing entity, or create new one with supplied properties. - - Args: - properties: dictionairy with entity properties and their values - key_name: the key_name of the entity that uniquely identifies it - - Returns: - the entity corresponding to the key_name, with any supplied - properties changed, or a new entity now associated with the - supplied key_name and properties. - """ - - entity = self.getFromKeyName(key_name) - - if not entity: - # entity did not exist, so create one in a transaction - entity = self._model.get_or_insert(key_name, **properties) - - # there is no way to be sure if get_or_insert() returned a new entity or - # got an existing one due to a race, so update with sponsor_properties anyway, - # in a transaction - return self.updateModelProperties(entity, **properties) - - def updateOrCreateFromFields(self, properties, **kwargs): - """Like updateOrCreateFromKeyName, but resolves **kwargs to a key_name first - """ - - # attempt to retrieve the existing entity - key_name = self.getKeyNameForFields(**kwargs) - - return self.updateOrCreateFromKeyName(properties, key_name) - - def delete(self, entity): - """Delete existing entity from datastore. - - Args: - entity: an existing entity in datastore - """ - - entity.delete() -