Ignore:
Timestamp:
Jan 5, 2010, 2:55:40 PM (12 years ago)
Author:
Ralph Meijer <ralphm@…>
Branch:
default
Message:

Add support for configuration options in node creation requests

File:
1 edited

Legend:

Unmodified
Added
Removed
  • wokkel/pubsub.py

    r81 r82  
    235235        'subscriptions': [],
    236236        'affiliations': [],
    237         'create': ['nodeOrNone'],
     237        'create': ['nodeOrNone', 'configureOrNone'],
    238238        'default': ['default'],
    239239        'configureGet': ['nodeOrEmpty'],
     
    365365
    366366
     367    def _parse_configureOrNone(self, verbElement):
     368        """
     369        Parse optional node configuration form in create request.
     370        """
     371        for element in verbElement.parent.elements():
     372            if element.uri == NS_PUBSUB and element.name == 'configure':
     373                form = data_form.findForm(element, NS_PUBSUB_NODE_CONFIG)
     374                if form:
     375                    if form.formType == 'submit':
     376                        self.options = form
     377                    else:
     378                        raise BadRequest(text=u"Unexpected form type '%s'" %
     379                                              form.formType)
     380                else:
     381                    form = data_form.Form('submit',
     382                                          formNamespace=NS_PUBSUB_NODE_CONFIG)
     383                    self.options = form
     384
     385
     386    def _render_configureOrNone(self, verbElement):
     387        """
     388        Render optional node configuration form in create request.
     389        """
     390        if self.options is not None:
     391            configure = verbElement.parent.addElement('configure')
     392            configure.addChild(self.options.toElement())
     393
    367394
    368395    def _parse_itemIdentifiers(self, verbElement):
     
    608635
    609636
    610     def createNode(self, service, nodeIdentifier=None, sender=None):
     637    def createNode(self, service, nodeIdentifier=None, options=None,
     638                         sender=None):
    611639        """
    612640        Create a publish subscribe node.
     
    616644        @param nodeIdentifier: Optional suggestion for the id of the node.
    617645        @type nodeIdentifier: C{unicode}
     646        @param options: Optional node configuration options.
     647        @type options: C{dict}
    618648        """
    619649        request = PubSubRequest('create')
     
    621651        request.nodeIdentifier = nodeIdentifier
    622652        request.sender = sender
     653
     654        if options:
     655            form = data_form.Form(formType='submit',
     656                                  formNamespace=NS_PUBSUB_NODE_CONFIG)
     657            form.makeFields(options)
     658            request.options = form
    623659
    624660        def cb(iq):
     
    10021038
    10031039
     1040    def _preProcess_create(self, resource, request):
     1041        if request.options:
     1042            self._checkConfiguration(resource, request.options)
     1043        return request
     1044
     1045
    10041046    def _preProcess_default(self, resource, request):
    10051047        if request.nodeType not in ('leaf', 'collection'):
Note: See TracChangeset for help on using the changeset viewer.