[Checkins] SVN: z3c.reference/branches/flash/ added back references
Johannes Faigle
johannes.faigle at lovelysystems.com
Wed Aug 22 09:41:12 EDT 2007
Log message for revision 79123:
added back references
Changed:
U z3c.reference/branches/flash/CHANGES.txt
U z3c.reference/branches/flash/setup.py
U z3c.reference/branches/flash/src/z3c/reference/README.txt
U z3c.reference/branches/flash/src/z3c/reference/browser/tests.py
U z3c.reference/branches/flash/src/z3c/reference/interfaces.py
U z3c.reference/branches/flash/src/z3c/reference/reference.py
U z3c.reference/branches/flash/src/z3c/reference/tests.py
-=-
Modified: z3c.reference/branches/flash/CHANGES.txt
===================================================================
--- z3c.reference/branches/flash/CHANGES.txt 2007-08-22 13:37:53 UTC (rev 79122)
+++ z3c.reference/branches/flash/CHANGES.txt 2007-08-22 13:41:11 UTC (rev 79123)
@@ -5,5 +5,7 @@
Before first release
====================
+- added tests for back references
+- added back reference support
- buildoutify
Modified: z3c.reference/branches/flash/setup.py
===================================================================
--- z3c.reference/branches/flash/setup.py 2007-08-22 13:37:53 UTC (rev 79122)
+++ z3c.reference/branches/flash/setup.py 2007-08-22 13:41:11 UTC (rev 79123)
@@ -30,7 +30,8 @@
'zope.interface',
'zope.location',
'zope.schema',
- 'zope.traversing'
+ 'zope.traversing',
+ 'lovely.relation'
],
dependency_links = ['http://download.zope.org/distribution']
)
Modified: z3c.reference/branches/flash/src/z3c/reference/README.txt
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/README.txt 2007-08-22 13:37:53 UTC (rev 79122)
+++ z3c.reference/branches/flash/src/z3c/reference/README.txt 2007-08-22 13:41:11 UTC (rev 79123)
@@ -94,4 +94,46 @@
>>> c.img.target is img
True
+Back references
+===============
+We need a referenced object which can be back referenced.
+
+ >>> from z3c.reference.interfaces import (IViewReference,
+ ... IReferenced)
+ >>> from lovely.relation.property import (FieldRelationManager,
+ ... RelationPropertyOut,
+ ... RelationPropertyIn)
+ >>> viewReferenceRelated = FieldRelationManager(IViewReference['target'],
+ ... IReferenced['viewReferences'])
+ >>> class OWithBackRef(Contained):
+ ... interface.implements(IReferenced)
+ ... viewReferences = RelationPropertyIn(viewReferenceRelated)
+ ... def __init__(self,title):
+ ... if title is not None:
+ ... self.title = title
+
+Create an object and reference to it.
+
+ >>> t = OWithBackRef(u'target')
+ >>> r1 = ViewReference(target=t);
+
+Check if object has a back reference.
+
+ >>> t.viewReferences
+ [<z3c.reference.reference.ViewReference ...>]
+ >>> t.viewReferences[0] is r1
+ True
+
+Add another reference. Check length.
+
+ >>> r2 = ViewReference(target=t);
+ >>> len(t.viewReferences)
+ 2
+
+Try to remove a backreference. Not allowed.
+
+ >>> t.viewReferences = [r1]
+ Traceback (most recent call last):
+ ...
+ ValueError: ('viewReferences', 'field is readonly')
Modified: z3c.reference/branches/flash/src/z3c/reference/browser/tests.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/tests.py 2007-08-22 13:37:53 UTC (rev 79122)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/tests.py 2007-08-22 13:41:11 UTC (rev 79123)
@@ -2,6 +2,8 @@
import unittest
from zope.testing.doctestunit import DocFileSuite, DocTestSuite
from zope.app.testing import setup
+from zope.app.intid import IntIds
+from zope.app.intid.interfaces import IIntIds
from zope import component
from zope.dublincore.annotatableadapter import ZDCAnnotatableAdapter
from zope.dublincore.interfaces import IWriteZopeDublinCore
@@ -11,6 +13,7 @@
from z3c.reference.interfaces import IViewReference
from zope.traversing.browser.absoluteurl import AbsoluteURL
from zope.publisher.browser import BrowserPage
+from lovely.relation import configurator
from views import ViewReferenceAbsoluteURL
@@ -20,10 +23,16 @@
return "testpage"
def setUp(test):
- test.globs['site'] = setup.placefulSetUp(True)
+ site = setup.placefulSetUp(True)
+ test.globs['site'] = site
+ util = configurator.SetUpO2OStringTypeRelationships(site)
+ util({})
+
component.provideAdapter(SimpleKeyReference)
component.provideAdapter(ZDCAnnotatableAdapter,
provides=IWriteZopeDublinCore)
+ intids = IntIds()
+ component.provideUtility(intids, IIntIds)
browserView(IViewReference, '', ViewReferenceAbsoluteURL,
providing=IAbsoluteURL)
browserView(None,'index.html',TestPage)
Modified: z3c.reference/branches/flash/src/z3c/reference/interfaces.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/interfaces.py 2007-08-22 13:37:53 UTC (rev 79122)
+++ z3c.reference/branches/flash/src/z3c/reference/interfaces.py 2007-08-22 13:41:11 UTC (rev 79123)
@@ -9,10 +9,18 @@
view. If the target is None, the view name is supposed to be an
absolute url to an external target"""
- target = schema.Object(ILocation,required=False,
+ target = schema.Object(ILocation,required=True,
title=u'Target Object')
view = schema.TextLine(required=False,title=u'View')
+class IReferenced(interface.Interface):
+ """backrefs"""
+ viewReferences = schema.List(title=u"View references",
+ value_type=schema.Object(IViewReference),
+ required=False,
+ readonly=True,
+ default=[])
+
class IViewReferenceField(schema.interfaces.IObject):
"""a view reference field"""
Modified: z3c.reference/branches/flash/src/z3c/reference/reference.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/reference.py 2007-08-22 13:37:53 UTC (rev 79122)
+++ z3c.reference/branches/flash/src/z3c/reference/reference.py 2007-08-22 13:41:11 UTC (rev 79123)
@@ -7,27 +7,22 @@
from zope import interface
from zope.traversing.browser.absoluteurl import absoluteURL
import urlparse,cgi
+from lovely.relation.property import (FieldRelationManager,
+ RelationPropertyOut)
+viewReferenceRelated = FieldRelationManager(IViewReference['target'],
+ IReferenced['viewReferences'])
+
class ViewReference(Persistent):
interface.implements(IViewReference)
- _key = None
view = FieldProperty(IViewReference['view'])
+ target = RelationPropertyOut(viewReferenceRelated)
def __init__(self,target=None,view=None):
if target is not None:
self.target = target
self.view = view
-
- @apply
- def target():
- def fget(self):
- if self._key is not None:
- return self._key()
- return None
- def fset(self, value):
- self._key = IKeyReference(value)
- return property(**locals())
def __eq__(self,other):
if not other:
Modified: z3c.reference/branches/flash/src/z3c/reference/tests.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/tests.py 2007-08-22 13:37:53 UTC (rev 79122)
+++ z3c.reference/branches/flash/src/z3c/reference/tests.py 2007-08-22 13:41:11 UTC (rev 79123)
@@ -2,15 +2,25 @@
import unittest
from zope.testing.doctestunit import DocFileSuite, DocTestSuite
from zope.app.testing import setup
+from zope.app.intid import IntIds
+from zope.app.intid.interfaces import IIntIds
from zope import component
from zope.dublincore.annotatableadapter import ZDCAnnotatableAdapter
from zope.dublincore.interfaces import IWriteZopeDublinCore
from zope.app.keyreference.testing import SimpleKeyReference
+from lovely.relation import configurator
+
+
def setUp(test):
- setup.placefulSetUp()
+ root = setup.placefulSetUp(True)
+ test.globs['root'] = root
+ util = configurator.SetUpO2OStringTypeRelationships(root)
+ util({})
component.provideAdapter(SimpleKeyReference)
component.provideAdapter(ZDCAnnotatableAdapter,
provides=IWriteZopeDublinCore)
+ intids = IntIds()
+ component.provideUtility(intids, IIntIds)
def tearDown(test):
setup.placefulTearDown()
More information about the Checkins
mailing list