use schema instance for import

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2713 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2008-06-20 16:13:52 +00:00
parent 4829cc7b6f
commit 6bf8c4faf0
5 changed files with 47 additions and 15 deletions

View file

@ -19,7 +19,7 @@ pre {
max-height: 35em; max-height: 35em;
} }
ul, p { ol, ul, p {
margin-top: 0.4em; margin-top: 0.4em;
margin-bottom: 0.5em; margin-bottom: 0.5em;
} }
@ -28,6 +28,10 @@ ol li, ul li {
line-height: 1.5em; line-height: 1.5em;
} }
blockquote ul {
margin: 0;
}
/* class-specific */ /* class-specific */
table.listing td { table.listing td {

25
external/README.txt vendored
View file

@ -28,11 +28,13 @@ Reading object information from an external source
>>> from loops.external.pyfunc import PyReader >>> from loops.external.pyfunc import PyReader
>>> input = "concept('myquery', u'My Query', 'query', viewName='mystuff.html')" >>> input = ("concept('myquery', u'My Query', 'query', viewName='mystuff.html',"
... " options='option1\\noption2')")
>>> reader = PyReader() >>> reader = PyReader()
>>> elements = reader.read(input) >>> elements = reader.read(input)
>>> elements >>> elements
[{'type': 'query', 'name': 'myquery', 'viewName': 'mystuff.html', 'title': u'My Query'}] [{'options': 'option1\noption2', 'type': 'query', 'name': 'myquery',
'viewName': 'mystuff.html', 'title': u'My Query'}]
Creating the corresponding objects Creating the corresponding objects
---------------------------------- ----------------------------------
@ -45,8 +47,12 @@ Creating the corresponding objects
(12, 3, 0) (12, 3, 0)
>>> from loops.common import adapted >>> from loops.common import adapted
>>> adapted(concepts['myquery']).viewName >>> adMyquery = adapted(concepts['myquery'])
'mystuff.html'
>>> adMyquery.viewName
u'mystuff.html'
>>> adMyquery.options
[u'option1', u'option2']
Working with resources Working with resources
---------------------- ----------------------
@ -86,7 +92,8 @@ registered.
>>> from loops.external import annotation >>> from loops.external import annotation
>>> input = """concept('myquery', u'My Query', 'query', viewName='mystuff.html')[ >>> input = """concept('myquery', u'My Query', 'query', viewName='mystuff.html',
... options='option1\\noption2')[
... annotations(creators=(u'john',))]""" ... annotations(creators=(u'john',))]"""
>>> elements = reader.read(input) >>> elements = reader.read(input)
>>> elements[0].subElements >>> elements[0].subElements
@ -126,7 +133,8 @@ Writing object information to the external storage
type(u'customer', u'Customer', options=u'', typeInterface=u'', viewName=u'')... type(u'customer', u'Customer', options=u'', typeInterface=u'', viewName=u'')...
type(u'query', u'Query', options=u'', typeInterface='loops.query.IQueryConcept', type(u'query', u'Query', options=u'', typeInterface='loops.query.IQueryConcept',
viewName=u'')... viewName=u'')...
concept(u'myquery', u'My Query', u'query', options=u'', viewName='mystuff.html')... concept(u'myquery', u'My Query', u'query', options=u'option1\noption2',
viewName=u'mystuff.html')...
child(u'projects', u'customer', u'standard')... child(u'projects', u'customer', u'standard')...
resource(u'doc04.txt', u'Document 4', u'textdocument', contentType='text/restructured') resource(u'doc04.txt', u'Document 4', u'textdocument', contentType='text/restructured')
resourceRelation(u'myquery', u'doc04.txt', u'standard') resourceRelation(u'myquery', u'doc04.txt', u'standard')
@ -153,7 +161,7 @@ Writing this sequence reproduces the import format.
annotations(creators='john'), annotations(creators='john'),
annotations(modified='2007-08-12')]... annotations(modified='2007-08-12')]...
DC annotations will be exported automaticall after registering the DC annotations will be exported automatically after registering the
corresponding extractor adapter. corresponding extractor adapter.
>>> from loops.external.annotation import AnnotationsExtractor >>> from loops.external.annotation import AnnotationsExtractor
@ -165,7 +173,8 @@ corresponding extractor adapter.
>>> print output.getvalue() >>> print output.getvalue()
type(u'customer', u'Customer', options=u'', typeInterface=u'', viewName=u'')... type(u'customer', u'Customer', options=u'', typeInterface=u'', viewName=u'')...
concept(u'myquery', u'My Query', u'query', options=u'', viewName='mystuff.html')[ concept(u'myquery', u'My Query', u'query', options=u'option1\noption2',
viewName=u'mystuff.html')[
annotations(creators=(u'john',))]... annotations(creators=(u'john',))]...

3
external/base.py vendored
View file

@ -191,8 +191,7 @@ class Extractor(Base):
schema = schemaFactory(ti, manager=self) #, request=self.request) schema = schemaFactory(ti, manager=self) #, request=self.request)
instance = IInstance(aObj) instance = IInstance(aObj)
instance.template = schema instance.template = schema
# TODO: use ``_not_exportable`` attribute of adapter to control export; # TODO: this should also convert object attributes like e.g. typeInterface
# this should also convert object attributes like e.g. typeInterface
#data = instance.applyTemplate(mode='export') #data = instance.applyTemplate(mode='export')
data = instance.applyTemplate(mode='edit') data = instance.applyTemplate(mode='edit')
noexp = getattr(aObj, '_noexportAttributes', ()) noexp = getattr(aObj, '_noexportAttributes', ())

21
external/element.py vendored
View file

@ -24,11 +24,17 @@ $Id$
""" """
import os import os
from zope import component
from zope.cachedescriptors.property import Lazy from zope.cachedescriptors.property import Lazy
from zope.dottedname.resolve import resolve from zope.dottedname.resolve import resolve
from zope.interface import Interface, implements from zope.interface import Interface, implements
from zope.traversing.api import getName, traverse from zope.traversing.api import getName, traverse
from cybertools.composer.interfaces import IInstance
from cybertools.composer.schema.interfaces import ISchemaFactory
from cybertools.typology.interfaces import IType
from loops.common import adapted
from loops.interfaces import IConceptSchema
from loops.external.interfaces import IElement from loops.external.interfaces import IElement
from loops.i18n.common import I18NValue from loops.i18n.common import I18NValue
@ -82,7 +88,18 @@ class ConceptElement(Element):
type = loader.concepts[self['type']] type = loader.concepts[self['type']]
kw = dict((k, v) for k, v in self.items() kw = dict((k, v) for k, v in self.items()
if k not in self.posArgs) if k not in self.posArgs)
self.object = loader.addConcept(self['name'], self['title'], type, **kw) # use IInstance adapter (name='editor') for unmarshalling values
#self.object = loader.addConcept(self['name'], self['title'], type, **kw)
self.object = loader.addConcept(self['name'], self['title'], type)
formState = self.getInstance().applyTemplate(data=kw, ignoreValidation=True)
def getInstance(self, omit=['title']):
adObject = adapted(self.object)
schemaFactory = ISchemaFactory(adObject)
ti = IType(self.object).typeInterface or IConceptSchema
instance = component.getAdapter(adObject, IInstance, name='editor')
instance.template = schemaFactory(ti, manager=self, omit=omit)
return instance
class TypeElement(ConceptElement): class TypeElement(ConceptElement):
@ -105,6 +122,8 @@ class TypeElement(ConceptElement):
kw['typeInterface'] = resolve(ti) kw['typeInterface'] = resolve(ti)
self.object = loader.addConcept(self['name'], self['title'], self.object = loader.addConcept(self['name'], self['title'],
loader.typeConcept, **kw) loader.typeConcept, **kw)
instance = self.getInstance(omit=['title', 'typeInterface'])
formState = instance.applyTemplate(data=kw, ignoreValidation=True)
class ChildElement(Element): class ChildElement(Element):

View file

@ -90,9 +90,10 @@ def getObjectForUid(uid, intIds=None):
intIds = component.getUtility(IIntIds) intIds = component.getUtility(IIntIds)
return intIds.getObject(int(uid)) return intIds.getObject(int(uid))
def getUidForObject(obj): def getUidForObject(obj, intIds=None):
if obj == '*': # wild card if obj == '*': # wild card
return '*' return '*'
if intIds is None:
intIds = component.getUtility(IIntIds) intIds = component.getUtility(IIntIds)
return str(intIds.queryId(obj)) return str(intIds.queryId(obj))