# HG changeset patch # User Lennard de Rijk # Date 1228757493 0 # Node ID 51703b18ef2e691c7ab9770fa255416b8cb0a1e1 # Parent 3e2ce3d8057a9fdb106c1d999c01957a4a1f90f7 Adds the removal of requests from the datastore when a new role entity is created. This uses the classname from the role entity as the type of role in the request. Patch by: Lennard de Rijk diff -r 3e2ce3d8057a -r 51703b18ef2e app/soc/logic/helper/request.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/soc/logic/helper/request.py Mon Dec 08 17:31:33 2008 +0000 @@ -0,0 +1,54 @@ +#!/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. + +"""Functions that are useful when dealing with requests. +""" + +__authors__ = [ + '"Lennard de Rijk" ', + ] + + +import soc.logic.models as model_logic + + +def removeRequestForRole(role_entity): + """Removes the request that leads to the creation of the given entity. + + Args: + role_entity : A datastore entity that is either a role or a subclass of the role model + + """ + + # get the type of the role entity using the classname + role_type = role_entity.__class__.__name__ + + # get the request logic so we can query the datastore + request_logic = model_logic.request.logic + + # create the query properties for the specific role + properties = {'scope' : role_entity.scope, + 'link_id' : role_entity.link_id, + 'role' : role_type.lower() } + + # get the request that complies with properties + request_entity = request_logic.getForFields(properties, unique=True) + + # delete the request from the datastore, if there is any + if request_entity: + request_logic.delete(request_entity) + + \ No newline at end of file diff -r 3e2ce3d8057a -r 51703b18ef2e app/soc/logic/models/role.py --- a/app/soc/logic/models/role.py Sun Dec 07 20:25:50 2008 +0000 +++ b/app/soc/logic/models/role.py Mon Dec 08 17:31:33 2008 +0000 @@ -19,9 +19,11 @@ __authors__ = [ '"Sverre Rabbelier" ', + '"Lennard de Rijk" ', ] +from soc.logic.helper import request from soc.logic.models import base import soc.models.role @@ -38,6 +40,12 @@ super(Logic, self).__init__(model, base_model=base_model, scope_logic=scope_logic) + + def _onCreate(self, entity): + """Will remove any outstanding requests for the new role entity. + """ + + request.removeRequestForRole(entity) logic = Logic()