diff --git a/README.txt b/README.txt index f70ab0d..10ca98b 100755 --- a/README.txt +++ b/README.txt @@ -300,6 +300,16 @@ application uses a subclass that does all the other stuff for form handling.) >>> from loops.browser.node import ConfigureBaseView >>> view = ConfigureBaseView(INodeConfigSchema(m111), TestRequest()) >>> view.checkCreateTarget() + >>> sorted(resources.keys()) + [u'doc1'] + >>> form = {'field.createTarget': True, + ... 'field.targetUri': '.loops/resources/ma07', + ... 'field.targetType': 'loops.resource.MediaAsset'} + >>> view = ConfigureBaseView(INodeConfigSchema(m111), TestRequest(form=form)) + >>> view = ConfigureBaseView(m111, TestRequest(form=form)) + >>> view.checkCreateTarget() + >>> sorted(resources.keys()) + [u'doc1', u'ma07'] It is also possible to edit a target's attributes directly in an edit form provided by the node: diff --git a/browser/node.py b/browser/node.py index 137ad17..83b70a3 100644 --- a/browser/node.py +++ b/browser/node.py @@ -30,6 +30,7 @@ from zope.proxy import removeAllProxies from zope.security import canAccess, canWrite from zope.security.proxy import removeSecurityProxy +from loops.resource import MediaAsset class NodeView(object): @@ -95,17 +96,26 @@ class NodeView(object): class ConfigureBaseView(object): - """ Helper view object for editing/configuring a node, providing the + """ Helper view class for editing/configuring a node, providing the stuff needed for creating a target object. """ def __init__(self, context, request): - self.context = context + self.context = removeSecurityProxy(context) self.request = request def checkCreateTarget(self): - pass - + form = self.request.form + if 'field.createTarget' in form: + type = self.request.form.get('field.targetType', + 'loops.resource.MediaAsset') + # TODO: find class (better: factory) from type name + uri = self.request.form.get('field.targetUri', None) + # TODO: generate uri/__name__ if not given + if uri: + # TODO: find container + self.context.getLoopsRoot()['resources']['ma07'] = MediaAsset() + #self.context.loopsRoot['resources']['ma07'] = MediaAsset() class ConfigureView(object): """ An editing view for configuring a node, optionally creating @@ -117,6 +127,8 @@ class ConfigureView(object): self.delegate = ConfigureBaseView(context, request) def update(self): + if self.update_status is not None: + return self.update_status self.delegate.checkCreateTarget() return super(ConfigureView, self).update() diff --git a/view.py b/view.py index 80666f6..bf84501 100644 --- a/view.py +++ b/view.py @@ -212,13 +212,8 @@ class NodeConfigAdapter(object): return '%s.%s' % (target.__module__, target.__class__.__name__) return None def setTargetType(self, tt): - self._targetType = tt # to be able to use it in setCreateTarget() + pass # only used whe a new target object is created targetType = property(getTargetType, setTargetType) - def setCreateTarget(self, value): - if value: - print 'targetType:', self._targetType or self.targetType - def getCreateTarget(self): return False - createTarget = property(getCreateTarget, setCreateTarget) - + createTarget = False # not used