[Checkins] SVN: z3c.reference/branches/flash/ Complete redesign of the data handling for the reference.

Juergen Kartnaller juergen at kartnaller.at
Fri Sep 14 04:51:50 EDT 2007


Log message for revision 79624:
  Complete redesign of the data handling for the reference.
  

Changed:
  U   z3c.reference/branches/flash/buildout.cfg
  U   z3c.reference/branches/flash/src/z3c/reference/README.txt
  U   z3c.reference/branches/flash/src/z3c/reference/browser/README.txt
  U   z3c.reference/branches/flash/src/z3c/reference/browser/configure.zcml
  U   z3c.reference/branches/flash/src/z3c/reference/browser/tests.py
  U   z3c.reference/branches/flash/src/z3c/reference/browser/views.py
  U   z3c.reference/branches/flash/src/z3c/reference/browser/widget.py
  U   z3c.reference/branches/flash/src/z3c/reference/configure.zcml
  U   z3c.reference/branches/flash/src/z3c/reference/demo/README.txt
  U   z3c.reference/branches/flash/src/z3c/reference/demo/app.py
  U   z3c.reference/branches/flash/src/z3c/reference/demo/browser/README.txt
  U   z3c.reference/branches/flash/src/z3c/reference/demo/interfaces.py
  U   z3c.reference/branches/flash/src/z3c/reference/demo/tests.py
  U   z3c.reference/branches/flash/src/z3c/reference/interfaces.py
  D   z3c.reference/branches/flash/src/z3c/reference/property.py
  U   z3c.reference/branches/flash/src/z3c/reference/reference.py
  U   z3c.reference/branches/flash/src/z3c/reference/schema.py
  U   z3c.reference/branches/flash/src/z3c/reference/tests.py

-=-
Modified: z3c.reference/branches/flash/buildout.cfg
===================================================================
--- z3c.reference/branches/flash/buildout.cfg	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/buildout.cfg	2007-09-14 08:51:49 UTC (rev 79624)
@@ -1,5 +1,5 @@
 [buildout]
-develop = .
+develop = . ../../../lovely.relation
 parts = test importchecker instance
 find-links = https://download.zope.org/distribution
              https://download.lovelysystems.com/eggs/lovely

Modified: z3c.reference/branches/flash/src/z3c/reference/README.txt
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/README.txt	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/README.txt	2007-09-14 08:51:49 UTC (rev 79624)
@@ -2,144 +2,32 @@
 Refererences to Objects
 =======================
 
-Referenced objects must be adaptable to IKeyReference.
 
-  >>> from z3c.reference.reference import ViewReference
-  >>> from zope.annotation.interfaces import IAttributeAnnotatable
-  >>> from zope.app.container.contained import Contained
-  >>> from zope import interface
-  >>> class O(Contained):
-  ...     interface.implements(IAttributeAnnotatable)
-  ...     def __init__(self,title):
-  ...         if title is not None:
-  ...             self.title = title
+ViewReference
+-------------
 
-  >>> o = O(u"first")
-  >>> o.title
-  u'first'
+A view reference is used to store information about how to show the target of
+a relation. The reference is an annotation for a data relation.
 
-  >>> ref = ViewReference(target=o)
-  >>> ref.target is o
-  True
+  >>> from z3c.reference.reference import viewReferenceFactory
+  >>> from zope import component
+  >>> component.provideAdapter(viewReferenceFactory)
 
-  If we do not define a target the view is supposed to be absolute
-  url. No further checks are done.
-
-  >>> ref = ViewReference(view='abc')
-  >>> ref.target is None
-  True
-
-
-Reference Fields
-================
-
-  >>> from zope.schema.fieldproperty import FieldProperty
-  >>> from z3c.reference.schema import ViewReferenceField
-  >>>
-  >>> class IContent(interface.Interface):
-  ...     ref = ViewReferenceField(title=u"Reference")
-  >>> class Content(object):
-  ...     interface.implements(IContent)
-  ...     ref = FieldProperty(IContent['ref'])
-
-  >>> c = Content()
-  >>> c.ref is None
-  True
-  >>> c.ref = object()
+  >>> from lovely.relation.dataproperty import DataRelationship
+  >>> from z3c.reference.interfaces import IViewReference
+  >>> rel = DataRelationship()
+  >>> viewRef = IViewReference(rel)
+  >>> viewRef
+  <z3c.reference.reference.ViewReference object at ...>
+  >>> viewRef.view = u'@resize?w=50&h=100'
   Traceback (most recent call last):
   ...
-  SchemaNotProvided
-  >>> o2 = O(u'O2 Title')
-  >>> c.ref = ViewReference(o2)
-  >>> c.ref.target is o2
-  True
+  WrongType: (u'@resize?w=50&h=100', <type 'str'>)
+  >>> viewRef.view = '@resize?w=50&h=100'
+  >>> viewRef.view
+  '@resize?w=50&h=100'
 
 
-Image Reference Fields
-======================
-
-ImageReferenceField is a special ViewReferenceField, which constraints
-the size and the object type to IImage
-
-  >>> from z3c.reference.reference import ImageReference
-  >>> from z3c.reference.schema import ImageReferenceField
-  >>> from zope.schema.fieldproperty import FieldProperty
-
-  On  Image references the size is required.
-
-  >>> class IContent(interface.Interface):
-  ...     img = ImageReferenceField(title=u"Image",size=(10,10))
-  >>> class Content(object):
-  ...     interface.implements(IContent)
-  ...     img = FieldProperty(IContent['img'])
-
-  >>> c = Content()
-  >>> c.img is None
-  True
-  >>> c.img = object()
-  Traceback (most recent call last):
-  ...
-  SchemaNotProvided
-  >>> from zope.app.file.image import Image
-  >>> from zope.app.file.interfaces import IImage
-  >>> img = Image()
-  >>> imgRef = ImageReference(img)
-  >>> imgRef
-  <z3c.reference.reference.ImageReference object at ...>
-
-  >>> IContent['img'].schema.providedBy(imgRef)
-  True
-
-  >>> c.img = imgRef
-  >>> 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)
-  >>> from z3c.reference.reference import viewReferenceRelated
-  >>> 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')
-
-
-
 ViewReferenceSettings
 ---------------------
 
@@ -153,13 +41,17 @@
 this works. By default, we get the DefaultViewReferenceSetting adapter for a
 referenced object:
 
-  >>> import zope.component
+  >>> from zope import interface
   >>> from z3c.reference.interfaces import IViewReferenceSettings
   >>> from z3c.reference.reference import DefaultViewReferenceSettings
-  >>> zope.component.provideAdapter(DefaultViewReferenceSettings,
+  >>> component.provideAdapter(DefaultViewReferenceSettings,
   ...                               (interface.Interface,))
 
-  >>> adapter = IViewReferenceSettings(o)
+  >>> class Content(object):
+  ...     interface.implements(interface.Interface)
+  ...     __name__ = None
+  >>> content = Content()
+  >>> adapter = IViewReferenceSettings(content)
   >>> adapter
   <DefaultViewReferenceSettings None>
 
@@ -167,3 +59,4 @@
 
   >>> adapter.settings
   {}
+

Modified: z3c.reference/branches/flash/src/z3c/reference/browser/README.txt
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/README.txt	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/README.txt	2007-09-14 08:51:49 UTC (rev 79624)
@@ -9,25 +9,41 @@
   >>> from z3c.reference.schema import ViewReferenceField
   >>> from zope.publisher.interfaces.browser import IBrowserRequest
   >>> from z3c.reference.interfaces import IViewReference
+  >>> from lovely.relation.dataproperty import IDataRelationship
 
 At first we need an interface for the context our widget used for. The
 `ìntro`` filed defines a settingName which is used by the widget to
 get information about which edit form for the reference should
 be used.
 
+  >>> from zope import schema
   >>> class IPage(zope.interface.Interface):
   ...     """Interface for a page."""
-  ...
   ...     intro = ViewReferenceField(title=u'Intro',
   ...                                description=u'A intro text',
   ...                                settingName=u'introRefs')
 
-Let's create an IPage implementation.
+We define text which can be used as an intro.
 
+  >>> class IText(zope.interface.Interface):
+  ...     """Interface for a text object."""
+  ...     pages = schema.List(title=u'Pages',
+  ...                         value_type=schema.Object(IPage))
+
+  >>> class Text(object):
+  ...     zope.interface.implements(IText)
+
+Now we can relate the page to his intro text using a relation manager.
+
+  >>> from lovely.relation.property import FieldRelationManager
+  >>> introRelationManager = FieldRelationManager(IPage['intro'], IText['pages'])
+
+Let's create an IPage implementation. The page needs a relation manager.
+
+  >>> from lovely.relation.dataproperty import DataRelationPropertyOut
   >>> class Page(object):
-  ...
   ...     zope.interface.implements(IPage)
-  ...
+  ...     intro = DataRelationPropertyOut(introRelationManager)
   ...     def __init__(self, name):
   ...         self.__name__ = name
 
@@ -61,8 +77,8 @@
   >>> from z3c.reference.interfaces import IViewReferenceOpener
   >>> from z3c.reference.browser.views import DefaultViewReferenceOpener
   >>> zope.component.provideAdapter(DefaultViewReferenceOpener,
-  ...     (IViewReference, IBrowserRequest),
-  ...     IViewReferenceOpener)
+  ...                              (IDataRelationship, IBrowserRequest),
+  ...                              IViewReferenceOpener)
 
   >>> print widget()
   <a class="popupwindow" href="http://127.0.0.1/Intro/viewReferenceEditor.html?target=&amp;settingName=introRefs&amp;name=field.intro" id="field.intro.tag" name="field.intro" onclick="" rel="window">
@@ -79,7 +95,6 @@
   ...
   MissingInputError: ('field.intro', u'Intro', None)
 
-
 Before we can store a view reference, we need at least another object which 
 our page can reference. Let's create a simple text object::
 
@@ -87,7 +102,6 @@
   ...     """Interface for a text object."""
 
   >>> class Text(object):
-  ...
   ...     zope.interface.implements(IText)
 
   >>> text = Text()
@@ -103,10 +117,10 @@
 Let us assign the text object here, so we can look at what the widget
 renders if a target is defined.
 
-  >>> from z3c.reference.reference import ViewReference
-  >>> vr = ViewReference()
-  >>> vr.target = text
-  >>> page.intro = vr
+  >>> vrRel = Page.intro.new(text)
+  >>> page.intro = vrRel
+  >>> page.intro == vrRel
+  True
 
   >>> field = IPage['intro']
   >>> boundField = field.bind(page)
@@ -126,16 +140,16 @@
   >>> from zope.formlib import form
   >>> from zope.dublincore.interfaces import IZopeDublinCore
   >>> class IntroRefsEditForm(form.EditForm):
-  ...     form_fields = form.Fields(IZopeDublinCore,
-  ...     IViewReference).select('title', 'description', 'view')
+  ...     form_fields = form.Fields(IZopeDublinCore).select(
+  ...                                          'title', 'description')
 
 And register it ...
 
   >>> from z3c.reference.interfaces import IViewReferenceEditor
   >>> zope.component.provideAdapter(IntroRefsEditForm,
-  ...     (zope.interface.Interface, IBrowserRequest),
-  ...     IViewReferenceEditor,
-  ...     name=u'introRefs')
+  ...                               (zope.interface.Interface, IBrowserRequest),
+  ...                               IViewReferenceEditor,
+  ...                               name=u'introRefs')
 
 We also need to register the widgets.
 
@@ -144,26 +158,29 @@
   >>> from zope.app.form.browser.interfaces import ISimpleInputWidget
   >>> from zope.app.form.browser.interfaces import ITextBrowserWidget
   >>> zope.component.provideAdapter(TextWidget,
-  ...     (ITextLine, IBrowserRequest), ITextBrowserWidget)
+  ...                               (ITextLine, IBrowserRequest),
+  ...                               ITextBrowserWidget)
   >>> zope.component.provideAdapter(TextAreaWidget,
-  ...     (IText, IBrowserRequest), ISimpleInputWidget)
+  ...                               (IText, IBrowserRequest),
+  ...                               ISimpleInputWidget)
   >>> zope.component.provideAdapter(BytesWidget,
-  ...     (IBytesLine, IBrowserRequest), ISimpleInputWidget)
+  ...                               (IBytesLine, IBrowserRequest),
+  ...                               ISimpleInputWidget)
 
 So there is no formData for now, because we have no data on the reference.
 
 
   >>> print widget()
   <...name="field.intro.formData"
-  ...value="form.title=&amp;form.view=&amp;form.description="...
+  ...value="form.title=&amp;form.description="...
 
 Let us write some data to it.
 
-  >>> IZopeDublinCore(vr).title = u"The DC Title"
-  >>> IZopeDublinCore(vr).description = "The DC Description \xc3\xa4".decode('utf8')
+  >>> IZopeDublinCore(vrRel).title = u"The DC Title"
+  >>> IZopeDublinCore(vrRel).description = "The DC Description \xc3\xa4".decode('utf8')
   >>> print widget()
   <...
-  value="form.title=The+DC+Title&amp;form.view=&amp;form.description=The+DC+Description+%C3%A4"...
+  value="form.title=The+DC+Title&amp;form.description=The+DC+Description+%C3%A4"...
 
 Now we can setup a test request and set the values for the widget:
 
@@ -175,7 +192,7 @@
   >>> widget = ViewReferenceWidget(boundField, request)
   >>> reference = widget._toFieldValue(form)
   >>> reference
-  <z3c.reference.reference.ViewReference object at ...>
+  <DataRelationship None, <Text object at ...>, []>
 
   >>> reference.target is text
   True
@@ -186,9 +203,6 @@
   >>> IZopeDublinCore(reference).description
   u'New Description'
 
-  >>> reference.view
-  'resized'
-
 Let's save the new reference:
 
   >>> page.intro = reference
@@ -207,7 +221,7 @@
   >>> widget = ViewReferenceWidget(boundField, request)
   >>> same = widget._toFieldValue(form)
   >>> same
-  <z3c.reference.reference.ViewReference object at ...>
+  <DataRelationship <Page object at ...>, <Text object at ...>, ['...intro:...pages']>
 
 And compare the reference within the same object we got:
 
@@ -246,3 +260,4 @@
   >>> 'http://127.0.0.1/content' in rendered
   True
 
+

Modified: z3c.reference/branches/flash/src/z3c/reference/browser/configure.zcml
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/configure.zcml	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/configure.zcml	2007-09-14 08:51:49 UTC (rev 79624)
@@ -19,44 +19,12 @@
       />
 
   <view
-      type="zope.publisher.interfaces.browser.IBrowserRequest"
-      for="..interfaces.IImageReferenceField"
-      provides="zope.app.form.interfaces.IInputWidget"
-      factory=".widget.ImageReferenceWidget"
-      permission="zope.Public"
-      />
-
-  <view
-      for="..interfaces.IViewReference"
-      name="absolute_url"
-      factory=".views.ViewReferenceAbsoluteURL"
-      type="zope.publisher.interfaces.http.IHTTPRequest"
-      permission="zope.Public"
-      allowed_interface="zope.traversing.browser.interfaces.IAbsoluteURL"
-      />
-  <view
-      for="..interfaces.IViewReference"
+      for="lovely.relation.interfaces.IDataRelationship"
       factory=".views.DefaultViewReferenceOpener"
       type="zope.publisher.interfaces.http.IHTTPRequest"
       permission="zope.Public"
       provides="..interfaces.IViewReferenceOpener"/>
 
-  <view
-      for="..interfaces.IViewReference"
-      factory=".views.ViewReferenceAbsoluteURL"
-      type="zope.publisher.interfaces.http.IHTTPRequest"
-      permission="zope.Public"
-      provides="zope.traversing.browser.interfaces.IAbsoluteURL"
-      />
-
-  <browser:page
-      for="..interfaces.IViewReference"
-      name="absolute_url"
-      class=".views.ViewReferenceAbsoluteURL"
-      permission="zope.Public"
-      allowed_interface="zope.traversing.browser.interfaces.IAbsoluteURL"
-      />
-
   <resourceLibrary name="z3c.reference.parent"
                    require="z3c.javascript.jquery
                             z3c.javascript.swfobject">
@@ -107,4 +75,4 @@
       attribute="__call__"
       />
 
-</configure>
\ No newline at end of file
+</configure>

Modified: z3c.reference/branches/flash/src/z3c/reference/browser/tests.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/tests.py	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/tests.py	2007-09-14 08:51:49 UTC (rev 79624)
@@ -30,20 +30,16 @@
 from zope.dublincore.annotatableadapter import ZDCAnnotatableAdapter
 from zope.dublincore.interfaces import IWriteZopeDublinCore
 from zope.dublincore.testing import setUpDublinCore
-from zope.app.keyreference.testing import SimpleKeyReference
 from zope.traversing.testing import browserView
-from zope.traversing.browser.interfaces import IAbsoluteURL
-from z3c.reference.interfaces import IViewReference
-from zope.traversing.browser.absoluteurl import AbsoluteURL
 from zope.publisher.browser import BrowserPage
-from zope.app.publisher.browser.fileresource import FileResource, File
-from zope.app.testing.ztapi import browserResource
 from zope.traversing.namespace import resource, view
+from zope.traversing.testing import setUp as setUpTraversing
 
+from zope.app.keyreference.testing import SimpleKeyReference
+from zope.app.testing.ztapi import browserResource
+
 from lovely.relation import configurator
 
-from views import ViewReferenceAbsoluteURL
-from zope.traversing.testing import setUp as setUpTraversing
 
 class TestPage(BrowserPage):
 
@@ -56,7 +52,7 @@
         pass
 
 def setUp(test):
-    
+
     site = setup.placefulSetUp(True)
     test.globs['site'] = site
     util = configurator.SetUpO2OStringTypeRelationships(site)
@@ -67,21 +63,13 @@
     zope.component.provideAdapter(resource, (None, None), ITraversable, name="resource")
     zope.component.provideAdapter(view, (None,), ITraversable, name="view")
     zope.component.provideAdapter(view, (None, None), ITraversable, name="view")
-
-#     path = os.path.dirname(__file__)
-#     path = os.path.join(path, 'resources', 'imagetool.swf')
-#     toolFile = File(path, 'imagetool.swf')
-#     FileResource(toolFile, None)
-#    toolFileResource = Resource
     browserResource('imagetool.swf', Resource)
-    
+
     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/browser/views.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/views.py	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/views.py	2007-09-14 08:51:49 UTC (rev 79624)
@@ -31,73 +31,13 @@
 from zope.app.keyreference.interfaces import NotYet
 from zc import resourcelibrary
 
+from lovely.relation.dataproperty import DataRelationship
+
 from z3c.reference import interfaces
-from z3c.reference.reference import ViewReference
 
 noImage = '/@@/z3c.reference.resources/noimage.jpg'
 
 
-class ViewReferenceAbsoluteURL(AbsoluteURL):
-
-    """adapts a view reference to IAbsoluteURL
-
-    >>> from z3c.reference.reference import ViewReference
-    >>> from zope.publisher.browser import TestRequest
-    >>> ref = ViewReference(view='http://www.zope.org/')
-    >>> request = TestRequest()
-    >>> view = ViewReferenceAbsoluteURL(ref, request)
-    >>> view
-    <z3c.reference.browser.views.ViewReferenceAbsoluteURL ...>
-    >>> view()
-    'http://www.zope.org/'
-
-    >>> ref = ViewReference(target=site)
-    >>> view = ViewReferenceAbsoluteURL(ref, request)
-    >>> view()
-    'http://127.0.0.1'
-
-    >>> ref = ViewReference(target=site, view='index.html?x=1&y=2')
-    >>> view = ViewReferenceAbsoluteURL(ref,request)
-    >>> view()
-    'http://127.0.0.1/index.html?x=1&y=2'
-    """
-
-    def __init__(self, context, request):
-        self.context = context.target
-        self.view = context.view
-        self.request = request
-
-    def __str__(self):
-        if self.context is not None:
-            if self.context.__name__ or IContainmentRoot.providedBy(
-                self.context):
-                view = component.getMultiAdapter((self.context, self.request),
-                                                 IAbsoluteURL)
-                try:
-                    url = view()
-                except TypeError:
-                    return noImage
-                if self.view is not None:
-                    url = '%s/%s' % (url, self.view.encode('utf8'))
-                return url
-            else:
-                # the target ist lost TODO:
-                return noImage
-        elif self.view is not None:
-            return self.view.encode('utf8')
-
-        raise TypeError("Can't get absolute url of reference,"
-                        "because there is no target or view "
-                        "specified.")
-    __call__=__str__
-    def breadcrumbs(self):
-        if self.context is not None:
-            view = component.getMultiAdapter((self.context, self.request),
-                                             IAbsoluteURL)
-            return view.breadcrumbs()
-        raise TypeError("Can't get breadcrumbs of external reference")
-
-
 class ViewReferenceEditor(object):
     """View reference editor offering search and edit form setup.
     The following objects are used:
@@ -125,7 +65,6 @@
 
 
 class ViewReferenceEditorSearchDispatcher(object):
-
     """Return the IViewReferenceEditorSearch form for given setting
     name"""
 
@@ -154,6 +93,7 @@
         (target, request),
         interfaces.IViewReferenceEditor, name=settingName)
 
+
 def getOpenerView(ref, request, settingName):
 
     def _adapter(o, name=u''):
@@ -162,11 +102,11 @@
             interfaces.IViewReferenceOpener, name=name)
     view = None
     if ref is None:
-        ref = ViewReference()
+        # we provide a default relationship instance
+        ref = DataRelationship(None, None)
         target = None
     else:
         target = ref.target
-
     if target is not None:
         view = _adapter(target, settingName)
         if view is None:
@@ -177,9 +117,8 @@
             view = _adapter(ref)
     return view
 
-class DefaultViewReferenceOpener(object):
 
-
+class DefaultViewReferenceOpener(object):
     interface.implements(interfaces.IViewReferenceOpener)
     __call__ = ViewPageTemplateFile('opener.pt')
 
@@ -202,7 +141,6 @@
         return u'Undefined'
 
 
-
 class ViewReferenceEditorDispatcher(object):
 
     """Return the edit IViewReferenceEditor for the target context
@@ -232,3 +170,4 @@
             view = getEditorView(obj, self.request, self.settingNameStr)
             return view()
         return u''
+

Modified: z3c.reference/branches/flash/src/z3c/reference/browser/widget.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/widget.py	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/widget.py	2007-09-14 08:51:49 UTC (rev 79624)
@@ -20,10 +20,15 @@
 from xml.dom.minidom import parse, parseString
 
 import zope.component
+
+from zope.formlib import form
+from zope.security.proxy import removeSecurityProxy
+from zope.event import notify
 from zope.traversing.browser import absoluteURL
 from zope.traversing.interfaces import TraversalError
 from zope.cachedescriptors.property import Lazy
 from zope.publisher.browser import TestRequest
+
 from zope.app.intid.interfaces import IIntIds
 from zope.app.form.browser.widget import SimpleInputWidget
 from zope.app.form.browser.textwidgets import TextWidget
@@ -31,30 +36,17 @@
 from zope.app.form.browser.widget import renderElement
 from zope.app.form.browser.textwidgets import BytesWidget
 from zope.app.pagetemplate import ViewPageTemplateFile
-from zope.event import notify
-from zope.lifecycleevent import ObjectCreatedEvent
+
 from zc import resourcelibrary
+
 from z3c.reference import interfaces
-from z3c.reference.reference import ViewReference,ImageReference
+
+from lovely.relation.dataproperty import DataRelationship
+
 from views import getEditorView, getOpenerView
 from serialize import serializeForm
-from zope.formlib import form
-from zope.security.proxy import removeSecurityProxy
 
-untitled = u'No Link defined'
-undefined = u'Undefined'
 
-emptyViewReference = None
-emptyImageReference = ImageReference(
-    view='/@@/z3c.reference.resources/noimage.jpg')
-
-def getText(nodelist):
-    rc = ""
-    for node in nodelist:
-        if node.nodeType == node.TEXT_NODE:
-            rc = rc + node.data
-    return rc
-
 class ViewReferenceWidget(TextWidget):
     """renders an "a" tag with the title and href attributes."""
 
@@ -66,7 +58,7 @@
     extra =  u'rel="window"'
     refTag = u'a'
     refTagOnClick=""
-    _emptyReference = emptyViewReference
+    _emptyReference = None
     referenceExplorerViewName = 'viewReferenceEditor.html'
 
     def __init__(self, *args):
@@ -75,7 +67,7 @@
 
     @property
     def referenceEditorURL(self):
-        """Returns the refrence explorer url."""
+        """Returns the reference explorer url."""
         return absoluteURL(self.context.context, self.request) + '/%s?%s' % (
             self.referenceExplorerViewName,
             urllib.urlencode({'settingName' : self.context.settingName,
@@ -142,9 +134,7 @@
         else:
             return u''
 
-
     def __call__(self):
-
         resourcelibrary.need('z3c.reference.parent')
         if self._renderedValueSet():
             ref = self._data
@@ -158,8 +148,6 @@
         openerView = getOpenerView(ref, self.request,
                                    self.context.settingName)
         contents = openerView()
-        if ref is None:
-            ref = ViewReference()
 
         targetName = self.name + '.target'
         formDataName = self.name + '.formData'
@@ -190,7 +178,7 @@
                                 contents=contents,
                                 style=self.style,
                                 extra=self.extra)
-        return self.template(linkTag=linkTag, intidInput=intidInput, 
+        return self.template(linkTag=linkTag, intidInput=intidInput,
             formDataInput=formDataInput, refIdInput=refIdInput)
 
     def _getFormValue(self):
@@ -213,18 +201,13 @@
 
         if input == self._missing:
             return self.context.missing_value
-
+        intIds = zope.component.getUtility(IIntIds)
         # XXX this does not work with lists
         refId = self.request.form.get(self.refIdName)
-        intIds = zope.component.getUtility(IIntIds)
+        ref = None
         if refId:
             ref = intIds.getObject(int(refId))
 
-        else:
-            ref = ViewReference()
-            ref.__parent__ = removeSecurityProxy(self.context.context)
-            #notify(ObjectCreatedEvent(ref))
-
         # form field ids
         formDataName = self.name + '.formData'
         targetName = self.name + '.target'
@@ -237,7 +220,10 @@
         obj = intIds.queryObject(int(intid))
         if obj is None:
             return self.context.missing_value
-        ref.target = obj
+        if ref is None:
+            ref = DataRelationship(obj)
+        else:
+            ref.target = obj
 
         # apply the form data
         formData = self.request.get(formDataName)
@@ -257,12 +243,14 @@
         view.update()
         return ref
 
+
 class ApplyForm(form.EditForm):
 
     def __init__(self, context, request, form_fields):
         self.form_fields = form_fields
         super(ApplyForm, self).__init__(context, request)
 
+
 class ObjectReferenceWidget(ViewReferenceWidget):
 
     @Lazy
@@ -273,81 +261,6 @@
                name
 
 
-class ImageReferenceWidget(ViewReferenceWidget):
-
-    """renders an "a" tag with the title and href attributes
-
-    if no target
-
-    >>> from zope.publisher.browser import TestRequest
-    >>> from z3c.reference.schema import ImageReferenceField
-    >>> from zope.app.folder import Folder
-    >>> f = Folder()
-    >>> site['folder'] = f
-    >>> field = ImageReferenceField(title=(u'Title of Field'),
-    ...     __name__='ref',size=(10,10))
-    >>> request = TestRequest()
-    >>> w = ImageReferenceWidget(field,request)
-    >>> print w()
-    <input .../><img ...height="10" id="field.ref.tag" .../>
-
-    """
-
-
-
-    refTag = u'img'
-    _emptyReference = emptyImageReference
-    extra = u''
-
-
-    def __call__(self):
-        hidden = super(ViewReferenceWidget,self).__call__()
-        if self._renderedValueSet():
-            ref = self._data
-        else:
-            ref = self.context.default
-        if not ref:
-            try:
-                ref = self.context.get(self.context.context)
-            except:
-                ref = None
-        if ref is None:
-            ref = self._emptyReference
-            url = absoluteURL(ref, self.request)
-        else:
-            # return uid instead of absoluteURL cuz of umlaut problems
-            url = str(absoluteURL(ref.target,self.request)) + '/' + ref.view
-        if ref.target is not None:
-            title = getattr(ref.target,'title',None) or \
-                       ref.target.__name__
-        else:
-            title = untitled
-        width,height = self.context.size
-        kwords = dict(src=url,
-                      name=self.name,
-                      id=self.name + '.tag',
-                      title=title,
-                      alt=title,
-                      width=width,
-                      height=height,
-                      onclick=self.refTagOnClick,
-                      style=self.style,
-                      extra=self.extra)
-        tag = renderElement(self.refTag,**kwords)
-        return hidden + tag
-
-
-    def _toFormValue(self, value):
-        if value == self.context.missing_value:
-            return self._missing
-        try:
-            # return uid instead of absoluteURL cuz of umlaut problems
-            url = str(absoluteURL(value.target,self.request)) + '/' + value.view
-        except TypeError:
-            return self._missing
-        return url
-
-
 class CropImageWidget(BytesWidget):
     """widget for cropping images"""
 
@@ -355,19 +268,17 @@
     keepAspect = False
     cropWidth = 50
     cropHeight = 50
-    
+
     def url(self):
         return absoluteURL(self.context.context, self.request)
-    
+
     def inputField(self):
         return super(CropImageWidget, self).__call__()
 
     def escapedName(self):
         return self.name.replace('.', r'\.')
-    
+
     def __call__(self, *args, **kw):
         resourcelibrary.need('z3c.javascript.swfobject')
         return self.template(*args, **kw)
-        
 
-        

Modified: z3c.reference/branches/flash/src/z3c/reference/configure.zcml
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/configure.zcml	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/configure.zcml	2007-09-14 08:51:49 UTC (rev 79624)
@@ -3,13 +3,20 @@
     i18n_domain="z3c.reference"
     >
 
-  <class class="z3c.reference.reference.ViewReference">
-    <allow interface=".interfaces.IViewReference"/>
+  <class class=".reference.ViewReference">
+    <require
+        permission="zope.View"
+        interface=".interfaces.IViewReference"
+        />
+    <require
+        permission="zope.ManageContent"
+        set_schema=".interfaces.IViewReference"
+        />
   </class>
 
-  <class class="z3c.reference.reference.ImageReference">
-    <allow interface=".interfaces.IImageReference"/>
-  </class>
+  <adapter
+      factory=".reference.viewReferenceFactory"
+      trusted="True"/>
 
   <adapter
       for="zope.interface.Interface"
@@ -18,4 +25,4 @@
 
   <include package=".browser"/>
 
-</configure>
\ No newline at end of file
+</configure>

Modified: z3c.reference/branches/flash/src/z3c/reference/demo/README.txt
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/demo/README.txt	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/demo/README.txt	2007-09-14 08:51:49 UTC (rev 79624)
@@ -6,15 +6,14 @@
 
   >>> from z3c.reference.demo.app import (DemoFolder,
   ...                                     DemoImage)
-  >>> from z3c.reference.reference import ViewReference
 
 Let's create some DemoFolders and let them reference themselves.
 
   >>> f1 = DemoFolder()
   >>> f2 = DemoFolder()
   >>> f3 = DemoFolder()
-  >>> r1 = ViewReference(target=f2)
-  >>> r2 = ViewReference(target=f3)
+  >>> r1 = DemoFolder.assets.new(f2)
+  >>> r2 = DemoFolder.assets.new(f3)
   >>> f1.assets = [r1, r2]
 
 Check reference target and parent.
@@ -23,62 +22,88 @@
   2
   >>> f1.assets[0].target is f2
   True
-  >>> f2.viewReferences[0].__parent__ is f1
+  >>> from lovely.relation.property import PropertyRelationManager
+  >>> manager = PropertyRelationManager(f2, 'viewReferences')
+  >>> refs = list(manager.getRelations('folder.assets'))
+  >>> refs[0].source is f1
   True
 
 Add another reference to demo folder 3.
 
-  >>> r3 = ViewReference(target=f3)
+  >>> r3 = DemoFolder.assets.new(f3)
   >>> f2.assets = [r3]
 
-Check size of backreferences and on valid parents.
+Check size of backreferences and on valid sources.
 
-  >>> len(f3.viewReferences)
+  >>> manager = PropertyRelationManager(f3, 'viewReferences')
+  >>> refs = list(manager.getRelations('folder.assets'))
+  >>> len(refs)
   2
-  >>> f3.viewReferences[0].__parent__ is f1
+  >>> refs[0].source is f1
   True
-  >>> f3.viewReferences[1].__parent__ is f2
+  >>> refs[1].source is f2
   True
 
 Now we create a DemoImage and reference a DemoFolder with it.
 
   >>> i1 = DemoImage()
-  >>> r4 = ViewReference(target=i1)
+  >>> r4 = DemoFolder.assets.new(i1)
   >>> f3.assets = [r4]
 
 Check reference target and parent.
 
   >>> f3.assets[0].target is i1
   True
-  >>> i1.viewReferences[0].__parent__ is f3
+  >>> manager = PropertyRelationManager(i1, 'viewReferences')
+  >>> refs = list(manager.getRelations('folder.assets'))
+  >>> refs[0].source is f3
   True
 
 Add another reference to i1.
 
-  >>> r5 = ViewReference(target=i1)
+  >>> r5 = DemoFolder.assets.new(i1)
   >>> f2.assets = [r5]
   >>> f2.assets[0].target is i1
   True
-  >>> i1.viewReferences[1].__parent__ is f2
+  >>> manager = PropertyRelationManager(i1, 'viewReferences')
+  >>> refs = list(manager.getRelations('folder.assets'))
+  >>> refs[1].source is f2
   True
-  >>> len(i1.viewReferences)
+  >>> len(refs)
   2
 
+We add i1 as previewImage to f2.
+
+  >>> rr = DemoFolder.previewImage.new(i1)
+  >>> f2.previewImage = rr
+  >>> refs = list(manager.getRelations('folder.assets'))
+  >>> len(refs)
+  2
+
+Now we have a backref from 'folder.previewImage'.
+
+  >>> refs = list(manager.getRelations('folder.previewImage'))
+  >>> len(refs)
+  1
+  >>> refs = list(manager.getAllRelations())
+  >>> len(refs)
+  3
+
 Sets the previewImage for f1.
 
   >>> i2 = DemoImage()
-  >>> r6 = ViewReference(target=i2)
+  >>> r6 = DemoFolder.previewImage.new(i2)
   >>> f1.previewImage = r6
 
 Check reference target and parent
 
   >>> f1.previewImage.target is i2
   True
-  >>> i2.viewReferences[0].__parent__ is f1
+  >>> manager = PropertyRelationManager(i2, 'viewReferences')
+  >>> refs = list(manager.getRelations('folder.previewImage'))
+  >>> refs[0].source is f1
   True
 
 Settings
 ========
 
-
-

Modified: z3c.reference/branches/flash/src/z3c/reference/demo/app.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/demo/app.py	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/demo/app.py	2007-09-14 08:51:49 UTC (rev 79624)
@@ -17,39 +17,50 @@
 __docformat__ = 'restructuredtext'
 
 from zope import interface
+
 from zope.schema.fieldproperty import FieldProperty
 from zope.location.interfaces import ILocation
+
 from zope.app.folder.folder import Folder
 from zope.app.file.image import Image
 
+from z3c.reference.demo.interfaces import (IDemoFolder,
+                                           IDemoImage)
+from z3c.reference.interfaces import IReferenced
+
+from lovely.relation.dataproperty import DataRelationPropertyOut
 from lovely.relation.property import (FieldRelationManager,
-                                      RelationPropertyOut,
                                       RelationPropertyIn)
 
-from z3c.reference.demo.interfaces import (IDemoFolder,
-                                           IDemoImage)
-from z3c.reference.interfaces import (IViewReference,
-                                     IReferenced)
-from z3c.reference.reference import viewReferenceRelated
-from z3c.reference.property import ViewReferenceProperty
 
+previewRelation = FieldRelationManager(IDemoFolder['previewImage'],
+                                       IReferenced['viewReferences'],
+                                      )
 
+assetsRelation = FieldRelationManager(IDemoFolder['assets'],
+                                      IReferenced['viewReferences'],
+                                     )
+
+
 class DemoFolder(Folder):
     """Demo folder implementation."""
-
     interface.implements(IDemoFolder, IReferenced)
 
-    previewImage = ViewReferenceProperty(IDemoFolder['previewImage'])
-    assets = ViewReferenceProperty(IDemoFolder['assets'])
-    
-    viewReferences = RelationPropertyIn(viewReferenceRelated)
+    previewImage = DataRelationPropertyOut(previewRelation,
+                                           relType='folder.previewImage',
+                                          )
+    assets       = DataRelationPropertyOut(assetsRelation,
+                                           relType='folder.assets',
+                                          )
 
+    viewReferences = RelationPropertyIn(assetsRelation)
 
+
 class DemoImage(Image):
     """Demo image implementation."""
-
     interface.implements(IDemoImage, IReferenced, ILocation)
 
     __name__ = __parent__ = None
 
-    viewReferences = RelationPropertyIn(viewReferenceRelated)
+    viewReferences = RelationPropertyIn(previewRelation)
+

Modified: z3c.reference/branches/flash/src/z3c/reference/demo/browser/README.txt
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/demo/browser/README.txt	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/demo/browser/README.txt	2007-09-14 08:51:49 UTC (rev 79624)
@@ -9,5 +9,4 @@
     >>> browser.open('http://localhost/manage')
     >>> browser.url
     'http://localhost/@@contents.html'
-
     

Modified: z3c.reference/branches/flash/src/z3c/reference/demo/interfaces.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/demo/interfaces.py	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/demo/interfaces.py	2007-09-14 08:51:49 UTC (rev 79624)
@@ -39,26 +39,9 @@
             settingName=u''),
         required=False,
         default=[])
-    
 
+
 class IDemoImage(IImage):
     """ demo image"""
 
 
-# view code example
-
-# field.settings
-# component.queryMultiAdapter((context.target, self.request),
-# IViewReferenceSettings, name=field.settings)
-
-# definition of settings
-
-#def demoImageSettings(image):
-
-
-#   return dict(ratio = (16,9))
-
-
-#def demoFolderPreviewSettings(context):
-
-    

Modified: z3c.reference/branches/flash/src/z3c/reference/demo/tests.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/demo/tests.py	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/demo/tests.py	2007-09-14 08:51:49 UTC (rev 79624)
@@ -46,12 +46,12 @@
 
 def test_suite():
     return unittest.TestSuite(
-        (
-        DocFileSuite('README.txt',
-                     setUp=setUp,tearDown=tearDown,
-                     optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
-                     ),
-        ))
+            (DocFileSuite('README.txt',
+                         setUp=setUp,tearDown=tearDown,
+                         optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+                         ),
+            )
+            )
 
 if __name__ == '__main__':
     unittest.main(defaultTest='test_suite')

Modified: z3c.reference/branches/flash/src/z3c/reference/interfaces.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/interfaces.py	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/interfaces.py	2007-09-14 08:51:49 UTC (rev 79624)
@@ -106,4 +106,3 @@
     """Marker interface for view reference opener views. The one that
     are displayed in the parent window"""
 
-

Deleted: z3c.reference/branches/flash/src/z3c/reference/property.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/property.py	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/property.py	2007-09-14 08:51:49 UTC (rev 79624)
@@ -1,62 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2007 Zope Foundation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-##############################################################################
-"""
-$Id: schema.py 79462 2007-09-04 16:14:53Z rogerineichen $
-"""
-__docformat__ = 'restructuredtext'
-
-import types
-
-_marker = object()
-
-
-class ViewReferenceProperty(object):
-    """A property that takes care of setting __parent__ for all reference
-    objects when being set on the content object.
-    """
-
-    def __init__(self, field, name=None):
-        if name is None:
-            name = field.__name__
-
-        self.__field = field
-        self.__name = name
-
-    def __get__(self, inst, klass):
-        if inst is None:
-            return self
-
-        value = inst.__dict__.get(self.__name, _marker)
-        if value is _marker:
-            field = self.__field.bind(inst)
-            value = getattr(field, 'default', _marker)
-            if value is _marker:
-                raise AttributeError(self.__name)
-
-        return value
-
-    def __set__(self, inst, value):
-        field = self.__field.bind(inst)
-        field.validate(value)
-        if field.readonly and inst.__dict__.has_key(self.__name):
-            raise ValueError(self.__name, 'field is readonly')
-        if type(value) in (types.ListType, types.TupleType):
-            for ref in value:
-                ref.__parent__ = inst
-        else:
-            value.__parent__ = inst
-        inst.__dict__[self.__name] = value
-
-    def __getattr__(self, name):
-        return getattr(self.__field, name)

Modified: z3c.reference/branches/flash/src/z3c/reference/reference.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/reference.py	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/reference.py	2007-09-14 08:51:49 UTC (rev 79624)
@@ -18,69 +18,34 @@
 
 import persistent
 
-import zope.interface
-import zope.component
-from zope.dublincore.property import DCProperty
+from zope import interface
+from zope import component
+
+from zope.annotation.factory import factory
 from zope.schema.fieldproperty import FieldProperty
-from zope.annotation.interfaces import IAttributeAnnotatable
-from lovely.relation.property import (FieldRelationManager,
-                                      RelationPropertyOut)
+
 from z3c.reference import interfaces
 
+from lovely.relation.interfaces import IDataRelationship
 
-viewReferenceRelated = FieldRelationManager(
-    interfaces.IViewReference['target'], 
-    interfaces.IReferenced['viewReferences'])
 
-
 class ViewReference(persistent.Persistent):
+    interface.implements(interfaces.IViewReference)
+    component.adapts(IDataRelationship)
 
-    zope.interface.implements(interfaces.IViewReference, IAttributeAnnotatable)
-
     view = FieldProperty(interfaces.IViewReference['view'])
-    target = RelationPropertyOut(viewReferenceRelated)
 
-    title = DCProperty('title')
-    description = DCProperty('description')
-    
-    def __init__(self,target=None,view=None):
-        if target is not None:
-            self.target = target
-        if view is not None:
-            self.view = view
+viewReferenceFactory = factory(ViewReference)
 
-    def __eq__(self,other):
-        if not other:
-            return False
-        if interfaces.IViewReference.providedBy(other):
-            return (self.view == other.view) and \
-                   (self.target is other.target)
-        return False
 
-    def __ne__(self,other):
-        if not other:
-            return True
-        if interfaces.IViewReference.providedBy(other):
-            return (self.view != other.view) or \
-                   (self.target != other.target)
-        return True
-
-
-class ImageReference(ViewReference):
-    zope.interface.implements(interfaces.IImageReference)
-
-
 class DefaultViewReferenceSettings(object):
     """Default view reference settings adapter."""
+    interface.implements(interfaces.IViewReferenceSettings)
 
-    zope.interface.implements(interfaces.IViewReferenceSettings)
-
     def __init__(self, context):
         self.context = context
 
-    @property
-    def settings(self):
-        return {}
+    settings = {}
 
     def __repr__(self):
         return '<%s %r>' % (self.__class__.__name__, self.context.__name__)

Modified: z3c.reference/branches/flash/src/z3c/reference/schema.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/schema.py	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/schema.py	2007-09-14 08:51:49 UTC (rev 79624)
@@ -16,36 +16,44 @@
 """
 __docformat__ = 'restructuredtext'
 
+import types
+
 from zope import schema,interface
+
+from lovely.relation.interfaces import IDataRelationship
+
 from z3c.reference import interfaces
-import types
 
 
 class ViewReferenceField(schema.Object):
     interface.implements(interfaces.IViewReferenceField)
 
     def __init__(self, **kw):
-        settingName = kw.pop('settingName', u'')
-        self.settingName = settingName
-        super(ViewReferenceField,self).__init__(interfaces.IViewReference,
-                                                **kw)
+        self.settingName = kw.pop('settingName', u'')
+        super(ViewReferenceField,self).__init__(
+                                    interfaces.IViewReference, **kw)
 
+    def _validate(self, value):
+        if not IDataRelationship.providedBy(value):
+            raise SchemaNotProvided('IDataRelationship')
 
+
 class ImageReferenceField(schema.Object):
     interface.implements(interfaces.IImageReferenceField)
+
     size = schema.fieldproperty.FieldProperty(
-        interfaces.IImageReferenceField['size'])
-    
-    def __init__(self,**kw):
+                            interfaces.IImageReferenceField['size'])
+
+    def __init__(self, **kw):
         self.size = kw.pop('size',None)
-        super(ImageReferenceField,self).__init__(interfaces.IImageReference,
-                                                 **kw)
+        super(ImageReferenceField,self).__init__(
+                                    interfaces.IImageReference, **kw)
 
 
 class ObjectReferenceField(ViewReferenceField):
     interface.implements(interfaces.IObjectReferenceField)
 
-    def __init__(self,refSchema,**kw):
+    def __init__(self, refSchema, **kw):
         self.refSchema = refSchema
         super(ObjectReferenceField,self).__init__(**kw)
 

Modified: z3c.reference/branches/flash/src/z3c/reference/tests.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/tests.py	2007-09-14 08:46:41 UTC (rev 79623)
+++ z3c.reference/branches/flash/src/z3c/reference/tests.py	2007-09-14 08:51:49 UTC (rev 79624)
@@ -45,7 +45,6 @@
 
 
 def test_suite():
-    
     return unittest.TestSuite(
         (
         DocFileSuite('README.txt',



More information about the Checkins mailing list