INodeConfigSchema + adapter OK

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1031 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2006-01-25 14:34:27 +00:00
parent f3c02a6ac7
commit e18410e0ac
5 changed files with 84 additions and 7 deletions

View file

@ -275,6 +275,22 @@ target may be moved or renamed without any problems.)
>>> ztapi.provideAdapter(INode, INodeConfigSchema, NodeConfigAdapter)
>>> nodeConfig = INodeConfigSchema(m111)
>>> nodeConfig.targetUri
u'.loops/concepts/cc2'
>>> nodeConfig.title = u'New title for m111'
>>> nodeConfig.title
u'New title for m111'
>>> m111.title
u'New title for m111'
>>> nodeConfig.targetUri = '.loops/resources/doc1'
>>> nodeConfig.title = 'New title for m111'
>>> m111.target is doc1
True
>>> nodeConfig.targetType
'loops.resource.Document'
>>> m111 in doc1.getClients()
True
It is also possible to edit a target's attributes directly in an
edit form provided by the node:

View file

@ -272,8 +272,8 @@
label="Add Node"
name="AddLoopsNode.html"
content_factory="loops.view.Node"
schema="loops.interfaces.INode"
fields="title description nodeType body"
schema="loops.interfaces.INodeConfigSchema"
fields="title description nodeType targetType targetUri createTarget"
permission="zope.ManageContent">
<widget field="description" height="2" />
@ -304,6 +304,21 @@
</editform>
<editform
label="Configure Node"
name="configure.html"
schema="loops.interfaces.INodeConfigSchema"
fields="title description nodeType targetType targetUri createTarget"
for="loops.interfaces.INode"
template="edit.pt"
permission="zope.ManageContent"
menu="zmi_views" title="Configure">
<widget field="description" height="2" />
<widget field="body" height="15" />
</editform>
<page
name="node.html"
for="loops.interfaces.INode"

View file

@ -215,7 +215,8 @@
<adapter factory="loops.external.NodesExporter" />
<adapter factory="loops.external.NodesImporter" />
<adapter factory="loops.view.NodeConfigAdapter" />
<adapter factory=".view.NodeConfigAdapter"
permission="zope.ManageContent" />
<adapter factory="loops.target.DocumentProxy" />
<adapter factory="loops.target.MediaAssetProxy" />

View file

@ -290,8 +290,8 @@ class ITargetProperties(Interface):
targetType = schema.Choice(
title=_(u'Target Type'),
description=_(u'Type of the target'),
values=('', 'resource.Document', 'resource.MediaAsset'),
default='',
values=('loops.resource.Document', 'loops.resource.MediaAsset'),
default=None,
required=False)
targetUri = schema.TextLine(

49
view.py
View file

@ -28,8 +28,10 @@ from zope.app.container.contained import Contained
from zope.app.container.ordered import OrderedContainer
from zope.app.container.traversal import ContainerTraverser, ItemTraverser
from zope.app.container.traversal import ContainerTraversable
from zope.cachedescriptors.property import Lazy
from zope.component import adapts
from zope.interface import implements
from zope.security.proxy import removeSecurityProxy
from persistent import Persistent
from cybertools.relation import DyadicRelation
from cybertools.relation.registry import IRelationsRegistry, getRelations
@ -155,7 +157,6 @@ class NodeTraverser(ItemTraverser):
adapts(INode)
def publishTraverse(self, request, name):
print name
if name == '.loops':
return self.context.getLoopsRoot()
return super(NodeTraverser, self).publishTraverse(request, name)
@ -164,8 +165,52 @@ class NodeTraverser(ItemTraverser):
class NodeConfigAdapter(object):
def __init__(self, context):
self.context = context
self.context = removeSecurityProxy(context)
#self.context = context
implements(INodeConfigSchema)
adapts(INode)
# provide access to fields of the Node class:
def getTitle(self): return self.context.title
def setTitle(self, title): self.context.title = title
title = property(getTitle, setTitle)
def getDescription(self): return self.context.description
def setDescription(self, description): self.context.description = description
description = property(getDescription, setDescription)
def getNodeType(self): return self.context.nodeType
def setNodeType(self, nodeType): self.context.nodeType = nodeType
nodeType = property(getNodeType, setNodeType)
# the real config stuff:
@Lazy
def loopsRoot(self): return self.context.getLoopsRoot()
def getTargetUri(self):
rootPath = zapi.getPath(self.loopsRoot)
if self.context.target is not None:
path = zapi.getPath(self.context.target)[len(rootPath):]
return '.loops' + path
else:
return ''
def setTargetUri(self, uri):
names = uri.split('/')
if names[0] == '.loops':
path = '/'.join(names[1:])
self.context.target = zapi.traverse(self.loopsRoot, path)
targetUri = property(getTargetUri, setTargetUri)
def getTargetType(self):
target = self.context.target
return '%s.%s' % (target.__module__, target.__class__.__name__)
def setTargetType(self, tt):
pass
targetType = property(getTargetType, setTargetType)