fix resource assignment bug (with versioned resources); provide relation registry cleanup call

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3267 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2009-03-08 11:14:24 +00:00
parent 1f6229d2fd
commit 455906a58b
4 changed files with 26 additions and 3 deletions

View file

@ -727,6 +727,14 @@
permission="zope.ManageSite"
/>
<page
name="cleanup_relations"
for="loops.interfaces.ILoops"
class="loops.browser.manager.CleanupRelations"
attribute="cleanup"
permission="zope.ManageSite"
/>
<include package=".skin" />
</configure>

View file

@ -23,9 +23,12 @@ $Id$
"""
from zope.app import zapi
from zope import component
from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent
from zope.event import notify
from zope.formlib.form import FormFields
from cybertools.relation.interfaces import IRelationRegistry
from loops.base import Loops
from loops.interfaces import ILoops
from loops.browser.common import AddForm, EditForm, BaseView
@ -58,3 +61,13 @@ class LoopsEditForm(EditForm):
form_fields = FormFields(ILoops)
class CleanupRelations(object):
def __init__(self, context, request):
self.context = context
self.request = request
def cleanup(self):
rr = component.getUtility(IRelationRegistry)
rr.cleanupRelations()
return 'Done'

View file

@ -55,6 +55,7 @@ from loops.interfaces import IIndexAttributes
from loops.interfaces import IAssignmentEvent, IDeassignmentEvent
from loops.security.common import canListObject
from loops import util
from loops.versioning.util import getMaster
from loops.view import TargetRelation
@ -245,6 +246,8 @@ class Concept(Contained, Persistent):
def getResourceRelations(self, predicates=None, resource=None, sort='default',
noSecurityCheck=False):
#if resource is not None:
# resource = getMaster(resource)
predicates = predicates is None and ['*'] or predicates
relationships = [ResourceRelation(self, None, p) for p in predicates]
if sort == 'default':
@ -258,6 +261,7 @@ class Concept(Contained, Persistent):
noSecurityCheck=noSecurityCheck)]
def assignResource(self, resource, predicate=None, order=0, relevance=1.0):
resource = getMaster(resource)
if predicate is None:
predicate = self.getConceptManager().getDefaultPredicate()
registry = component.getUtility(IRelationRegistry)
@ -271,6 +275,7 @@ class Concept(Contained, Persistent):
notify(AssignmentEvent(self, rel))
def deassignResource(self, resource, predicates=None, order=None):
resource = getMaster(resource)
registry = component.getUtility(IRelationRegistry)
for rel in self.getResourceRelations(predicates, resource):
if order is None or rel.order == order:

View file

@ -106,9 +106,6 @@ class TestSite(object):
component.provideUtility(IntIdsStub())
relations = RelationRegistry()
relations.setupIndexes()
#for idx in ('_attrName', '_attrIdentifier'):
# if idx not in relations:
# relations[idx] = FieldIndex(idx, IIndexableRelation)
component.provideUtility(relations, IRelationRegistry)
component.provideUtility(PrincipalAnnotationUtility(), IPrincipalAnnotationUtility)