Ignore:
Timestamp:
Aug 4, 2008, 8:55:45 AM (13 years ago)
Author:
Ralph Meijer <ralphm@…>
Branch:
default
Convert:
svn:b33ecbfc-034c-dc11-8662-000475d9059e/trunk@59
Message:

Implement type checking in data forms and incoming pubsub node config.

Author: ralphm.
Fixes #15.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • wokkel/pubsub.py

    r27 r29  
    527527                form = data_form.Form(formType="result",
    528528                                      formNamespace=NS_PUBSUB_META_DATA)
    529                 form.fields.append(
     529                form.addField(
    530530                        data_form.Field(
    531531                            var='pubsub#node_type',
     
    536536
    537537                for metaDatum in metaData:
    538                     form.fields.append(data_form.Field.fromDict(metaDatum))
     538                    form.addField(data_form.Field.fromDict(metaDatum))
    539539
    540540                info.append(form.toElement())
     
    693693
    694694
     695    def _makeFields(self, options, values):
     696        fields = []
     697        for name, value in values.iteritems():
     698            if name not in options:
     699                continue
     700
     701            option = {'var': name}
     702            option.update(options[name])
     703            if isinstance(value, list):
     704                option['values'] = value
     705            else:
     706                option['value'] = value
     707            fields.append(data_form.Field.fromDict(option))
     708        return fields
     709
    695710    def _formFromConfiguration(self, values):
    696711        options = self.getConfigurationOptions()
     712        fields = self._makeFields(options, values)
    697713        form = data_form.Form(formType="form",
    698                               formNamespace=NS_PUBSUB_NODE_CONFIG)
    699 
    700         for name, value in values.iteritems():
    701             if name in options:
    702                 option = {'var': name}
    703                 option.update(options[name])
    704                 if isinstance(value, list):
    705                     option['values'] = value
    706                 else:
    707                     option['value'] = value
    708                 form.fields.append(data_form.Field.fromDict(option))
     714                              formNamespace=NS_PUBSUB_NODE_CONFIG,
     715                              fields=fields)
    709716
    710717        return form
     718
     719    def _checkConfiguration(self, values):
     720        options = self.getConfigurationOptions()
     721        processedValues = {}
     722
     723        for key, value in values.iteritems():
     724            if key not in options:
     725                continue
     726
     727            option = {'var': key}
     728            option.update(options[key])
     729            field = data_form.Field.fromDict(option)
     730            if isinstance(value, list):
     731                field.values = value
     732            else:
     733                field.value = value
     734            field.typeCheck()
     735
     736            if isinstance(value, list):
     737                processedValues[key] = field.values
     738            else:
     739                processedValues[key] = field.value
     740
     741        return processedValues
    711742
    712743
     
    757788        if form:
    758789            if form.formType == 'submit':
    759                 options = form.getValues()
     790                options = self._checkConfiguration(form.getValues())
    760791
    761792                return self.setConfiguration(requestor, service,
Note: See TracChangeset for help on using the changeset viewer.