Changeset 20:9e1c2535b74e in ralphm-patches for pubsub-create-configure.patch


Ignore:
Timestamp:
Dec 30, 2009, 9:10:15 PM (11 years ago)
Author:
Ralph Meijer <ralphm@…>
Branch:
default
Message:

Add filterUnknown for typeCheck, request.options is a form, per docstring.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pubsub-create-configure.patch

    r19 r20  
    1 diff -r 9a749c388cda wokkel/data_form.py
    2 --- a/wokkel/data_form.py       Tue Dec 29 14:55:13 2009 +0100
    3 +++ b/wokkel/data_form.py       Tue Dec 29 15:06:54 2009 +0100
     1diff -r 26ba5a2ff579 wokkel/data_form.py
     2--- a/wokkel/data_form.py       Wed Dec 30 17:55:07 2009 +0100
     3+++ b/wokkel/data_form.py       Wed Dec 30 20:46:36 2009 +0100
    44@@ -253,10 +253,10 @@
    55             field['var'] = self.var
     
    1616             field.addElement('value', content=unicode(value))
    1717 
    18 @@ -564,3 +564,25 @@
    19              else:
    20                  # Unknown field, ignoring
    21                  pass
    22 +
     18@@ -616,3 +616,24 @@
     19 
     20         for field in filtered:
     21             self.removeField(field)
    2322+
    2423+
     
    4241+
    4342+    return None
    44 diff -r 9a749c388cda wokkel/pubsub.py
    45 --- a/wokkel/pubsub.py  Tue Dec 29 14:55:13 2009 +0100
    46 +++ b/wokkel/pubsub.py  Tue Dec 29 15:06:54 2009 +0100
     43diff -r 26ba5a2ff579 wokkel/pubsub.py
     44--- a/wokkel/pubsub.py  Wed Dec 30 17:55:07 2009 +0100
     45+++ b/wokkel/pubsub.py  Wed Dec 30 20:46:36 2009 +0100
    4746@@ -234,7 +234,7 @@
    4847         'optionsSet': ['nodeOrEmpty', 'jid', 'options'],
     
    101100+        form = data_form.findForm(verbElement, NS_PUBSUB_NODE_CONFIG)
    102101         if form:
    103              if form.formType == 'submit':
    104                  self.options = form.getValues()
    105 @@ -390,6 +366,46 @@
     102             if form.formType in ('submit', 'cancel'):
     103                 self.options = form
     104@@ -388,6 +364,33 @@
    106105             raise BadRequest(text="Missing configuration form")
    107106 
     
    116115+                if form:
    117116+                    if form.formType == 'submit':
    118 +                        self.options = form.getValues()
     117+                        self.options = form
    119118+                    else:
    120119+                        raise BadRequest(text="Unexpected form type %r" %
    121120+                                              form.formType)
    122121+                else:
    123 +                    self.options = {}
     122+                    form = data_form.Form('submit',
     123+                                          formNamespace=NS_PUBSUB_NODE_CONFIG)
     124+                    self.options = form
    124125+
    125126+
     
    128129+        Render optional node configuration form in create request.
    129130+        """
    130 +        def makeFields(values):
    131 +            fields = []
    132 +            for name, value in values.iteritems():
    133 +                option = {'var': name}
    134 +                if isinstance(value, list):
    135 +                    option['values'] = value
    136 +                else:
    137 +                    option['value'] = value
    138 +                fields.append(data_form.Field.fromDict(option))
    139 +            return fields
    140 +
    141131+        if self.options is not None:
    142 +            fields = makeFields(self.options)
    143 +            form = data_form.Form('submit',
    144 +                                  formNamespace=NS_PUBSUB_NODE_CONFIG,
    145 +                                  fields=fields)
    146132+            configure = verbElement.parent.addElement('configure')
    147 +            configure.addChild(form.toElement())
     133+            configure.addChild(self.options.toElement())
    148134+
    149135 
    150136     def _parse_itemIdentifiers(self, verbElement):
    151137         """
    152 @@ -437,7 +453,7 @@
     138@@ -435,7 +438,7 @@
    153139 
    154140 
     
    157143+        form = data_form.findForm(verbElement, NS_PUBSUB_SUBSCRIBE_OPTIONS)
    158144         if form:
    159              if form.formType == 'submit':
    160                  self.options = form.getValues()
    161 @@ -468,6 +484,7 @@
    162              self._render_options(optionsElement)
    163  
    164  
    165 +
    166      def parseElement(self, element):
    167          """
    168          Parse the publish-subscribe verb and parameters out of a request.
    169 @@ -663,7 +680,8 @@
     145             if form.formType not in ('submit', 'cancel'):
     146                 raise BadRequest(text="Unexpected form type %r" % form.formType)
     147@@ -451,8 +454,8 @@
     148     def _parse_optionsWithSubscribe(self, verbElement):
     149         for element in verbElement.parent.elements():
     150             if element.name == 'options' and element.uri == NS_PUBSUB:
     151-                form = PubSubRequest._findForm(element,
     152-                                               NS_PUBSUB_SUBSCRIBE_OPTIONS)
     153+                form = data_form.findForm(element,
     154+                                          NS_PUBSUB_SUBSCRIBE_OPTIONS)
     155                 if not form:
     156                     continue
     157 
     158@@ -662,7 +665,8 @@
    170159         pass
    171160 
     
    177166         Create a publish subscribe node.
    178167 
    179 @@ -671,11 +689,14 @@
     168@@ -670,12 +674,20 @@
    180169         @type service: L{JID}
    181170         @param nodeIdentifier: Optional suggestion for the id of the node.
     
    188177         request.nodeIdentifier = nodeIdentifier
    189178         request.sender = sender
    190 +        request.options = options
    191  
     179 
     180+        if options:
     181+            form = data_form.Form(formType='result',
     182+                                  formNamespace=NS_PUBSUB_NODE_CONFIG)
     183+            form.makeFields(options)
     184+            request.options = form
     185+
    192186         def cb(iq):
    193187             try:
    194 @@ -952,8 +973,6 @@
     188                 new_node = iq.pubsub.create["node"]
     189@@ -956,8 +968,6 @@
    195190             d = self.getNodes(requestor, target)
    196191         else:
     
    201196         d.addCallback(lambda nodes: [disco.DiscoItem(target, node)
    202197                                      for node in nodes])
    203 @@ -1081,6 +1100,13 @@
    204          return processedValues
     198@@ -1067,6 +1077,12 @@
     199         form.typeCheck(fieldDefs, filterUnknown=True)
    205200 
    206201 
    207202+    def _preProcess_create(self, resource, request):
    208203+        if request.options:
    209 +            request.options = self._checkConfiguration(resource,
    210 +                                                       request.options)
     204+            self._checkConfiguration(resource, request.options)
    211205+        return request
    212206+
     
    215209         if request.nodeType not in ('leaf', 'collection'):
    216210             raise error.StanzaError('not-acceptable')
    217 diff -r 9a749c388cda wokkel/test/test_pubsub.py
    218 --- a/wokkel/test/test_pubsub.py        Tue Dec 29 14:55:13 2009 +0100
    219 +++ b/wokkel/test/test_pubsub.py        Tue Dec 29 15:06:54 2009 +0100
     211diff -r 26ba5a2ff579 wokkel/test/test_pubsub.py
     212--- a/wokkel/test/test_pubsub.py        Wed Dec 30 17:55:07 2009 +0100
     213+++ b/wokkel/test/test_pubsub.py        Wed Dec 30 20:46:36 2009 +0100
    220214@@ -19,7 +19,7 @@
    221215 from wokkel.test.helpers import TestableRequestHandlerMixin, XmlStreamStub
     
    268262         """
    269263         Test sending delete request.
    270 @@ -966,6 +1000,7 @@
     264@@ -998,6 +1032,7 @@
    271265         self.assertEqual(JID('user@example.org'), request.sender)
    272266         self.assertEqual(JID('pubsub.example.org'), request.recipient)
     
    276270 
    277271     def test_fromElementCreateInstant(self):
    278 @@ -986,6 +1021,77 @@
     272@@ -1018,6 +1053,78 @@
    279273         self.assertIdentical(None, request.nodeIdentifier)
    280274 
     
    296290+
    297291+        request = pubsub.PubSubRequest.fromElement(parseXml(xml))
    298 +        self.assertEqual({}, request.options)
     292+        self.assertEqual({}, request.options.getValues())
    299293+
    300294+
     
    318312+
    319313+        request = pubsub.PubSubRequest.fromElement(parseXml(xml))
    320 +        self.assertEqual({}, request.options)
     314+        self.assertEqual({}, request.options.getValues())
    321315+
    322316+
     
    345339+
    346340+        request = pubsub.PubSubRequest.fromElement(parseXml(xml))
    347 +        self.assertIn('pubsub#access_model', request.options)
    348 +        self.assertEqual(u'open', request.options['pubsub#access_model'])
    349 +        self.assertIn('pubsub#persist_items', request.options)
    350 +        self.assertEqual(u'0', request.options['pubsub#persist_items'])
     341+        values = request.options.getValues()
     342+        self.assertIn('pubsub#access_model', values)
     343+        self.assertEqual(u'open', values['pubsub#access_model'])
     344+        self.assertIn('pubsub#persist_items', values)
     345+        self.assertEqual(u'0', values['pubsub#persist_items'])
    351346+
    352347+
     
    354349         """
    355350         Test parsing a request for the default node configuration.
    356 @@ -1771,6 +1877,51 @@
     351@@ -1804,6 +1911,52 @@
    357352         return d
    358353 
     
    394389+        def create(request):
    395390+            self.assertEqual({'pubsub#deliver_payloads': False,
    396 +                              'pubsub#persist_items': True}, request.options)
     391+                              'pubsub#persist_items': True},
     392+                             request.options.getValues())
    397393+            return defer.succeed(None)
    398394+
     
    406402         """
    407403         A default request should result in
    408 @@ -1804,7 +1955,7 @@
     404@@ -1837,7 +1990,7 @@
    409405             self.assertEqual(NS_PUBSUB_OWNER, element.uri)
    410406             self.assertEqual(NS_PUBSUB_OWNER, element.default.uri)
     
    415411         self.resource.getConfigurationOptions = getConfigurationOptions
    416412         self.resource.default = default
    417 @@ -1933,7 +2084,7 @@
     413@@ -1966,7 +2119,7 @@
    418414             self.assertEqual(NS_PUBSUB_OWNER, element.uri)
    419415             self.assertEqual(NS_PUBSUB_OWNER, element.configure.uri)
Note: See TracChangeset for help on using the changeset viewer.