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

Make PubSubRequest?.options be a form and use new form type checking

File:
1 edited

Legend:

Unmodified
Added
Removed
  • wokkel/pubsub.py

    r80 r81  
    357357        form = data_form.findForm(verbElement, NS_PUBSUB_NODE_CONFIG)
    358358        if form:
    359             if form.formType == 'submit':
    360                 self.options = form.getValues()
    361             elif form.formType == 'cancel':
    362                 self.options = {}
     359            if form.formType in ('submit', 'cancel'):
     360                self.options = form
    363361            else:
    364                 raise BadRequest(text="Unexpected form type %r" % form.formType)
     362                raise BadRequest(text=u"Unexpected form type '%s'" % form.formType)
    365363        else:
    366364            raise BadRequest(text="Missing configuration form")
     
    414412
    415413    def _parse_options(self, verbElement):
     414        """
     415        Parse options form out of a subscription options request.
     416        """
    416417        form = data_form.findForm(verbElement, NS_PUBSUB_SUBSCRIBE_OPTIONS)
    417418        if form:
    418             if form.formType == 'submit':
    419                 self.options = form.getValues()
    420             elif form.formType == 'cancel':
    421                 self.options = {}
     419            if form.formType in ('submit', 'cancel'):
     420                self.options = form
    422421            else:
    423                 raise BadRequest(text="Unexpected form type %r" % form.formType)
     422                raise BadRequest(text=u"Unexpected form type '%s'" % form.formType)
    424423        else:
    425424            raise BadRequest(text="Missing options form")
     425
    426426
    427427    def parseElement(self, element):
     
    893893        else:
    894894            d = defer.succeed([])
    895            
    896 
    897895
    898896        d.addCallback(lambda nodes: [disco.DiscoItem(target, node)
     
    933931            handler = getattr(self, handlerName)
    934932            args = [getattr(request, arg) for arg in argNames]
     933            if 'options' in argNames:
     934                args[argNames.index('options')] = request.options.getValues()
    935935            d = handler(*args)
    936936
     
    997997
    998998
    999     def _checkConfiguration(self, resource, values):
    1000         options = resource.getConfigurationOptions()
    1001         processedValues = {}
    1002 
    1003         for key, value in values.iteritems():
    1004             if key not in options:
    1005                 continue
    1006 
    1007             option = {'var': key}
    1008             option.update(options[key])
    1009             field = data_form.Field.fromDict(option)
    1010             if isinstance(value, list):
    1011                 field.values = value
    1012             else:
    1013                 field.value = value
    1014             field.typeCheck()
    1015 
    1016             if isinstance(value, list):
    1017                 processedValues[key] = field.values
    1018             else:
    1019                 processedValues[key] = field.value
    1020 
    1021         return processedValues
     999    def _checkConfiguration(self, resource, form):
     1000        fieldDefs = resource.getConfigurationOptions()
     1001        form.typeCheck(fieldDefs, filterUnknown=True)
    10221002
    10231003
     
    10501030
    10511031    def _preProcess_configureSet(self, resource, request):
    1052         if request.options:
    1053             request.options = self._checkConfiguration(resource,
    1054                                                        request.options)
     1032        if request.options.formType == 'cancel':
     1033            return None
     1034        else:
     1035            self._checkConfiguration(resource, request.options)
    10551036            return request
    1056         else:
    1057             return None
    10581037
    10591038
Note: See TracChangeset for help on using the changeset viewer.