source:
ralphm-patches/pubsub-request-options-form.patch
@
26:59ace4d1df68
Last change on this file since 26:59ace4d1df68 was 26:59ace4d1df68, checked in by Ralph Meijer <ralphm@…>, 12 years ago | |
---|---|
File size: 7.8 KB |
-
wokkel/pubsub.py
diff -r 459a78aaec20 wokkel/pubsub.py
a b 356 356 """ 357 357 form = data_form.findForm(verbElement, NS_PUBSUB_NODE_CONFIG) 358 358 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 363 361 else: 364 362 raise BadRequest(text="Unexpected form type %r" % form.formType) 365 363 else: … … 415 413 def _parse_options(self, verbElement): 416 414 form = data_form.findForm(verbElement, NS_PUBSUB_SUBSCRIBE_OPTIONS) 417 415 if form: 418 if form.formType == 'submit': 419 self.options = form.getValues() 420 elif form.formType == 'cancel': 421 self.options = {} 422 else: 416 if form.formType not in ('submit', 'cancel'): 423 417 raise BadRequest(text="Unexpected form type %r" % form.formType) 418 self.options = form 424 419 else: 425 420 raise BadRequest(text="Missing options form") 426 421 … … 932 927 handlerName, argNames = self._legacyHandlers[request.verb] 933 928 handler = getattr(self, handlerName) 934 929 args = [getattr(request, arg) for arg in argNames] 930 if 'options' in argNames: 931 args[argNames.index('options')] = request.options.getValues() 935 932 d = handler(*args) 936 933 937 934 # If needed, translate the result into a response … … 996 993 return form 997 994 998 995 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 996 def _checkConfiguration(self, resource, form): 997 fieldDefs = resource.getConfigurationOptions() 998 form.typeCheck(fieldDefs, filterUnknown=True) 1022 999 1023 1000 1024 1001 def _preProcess_default(self, resource, request): … … 1049 1026 1050 1027 1051 1028 def _preProcess_configureSet(self, resource, request): 1052 if request.options: 1053 request.options = self._checkConfiguration(resource, 1054 request.options) 1029 if request.options.formType == 'cancel': 1030 return None 1031 else: 1032 self._checkConfiguration(resource, request.options) 1055 1033 return request 1056 else:1057 return None1058 1034 1059 1035 1060 1036 def _toResponse_items(self, result, resource, request): -
wokkel/test/test_pubsub.py
diff -r 459a78aaec20 wokkel/test/test_pubsub.py
a b 1 # Copyright (c) 2003-20 09Ralph Meijer1 # Copyright (c) 2003-2010 Ralph Meijer 2 2 # See LICENSE for details. 3 3 4 4 """ … … 805 805 self.assertEqual(JID('pubsub.example.org'), request.recipient) 806 806 self.assertEqual('test', request.nodeIdentifier) 807 807 self.assertEqual(JID('user@example.org/Home'), request.subscriber) 808 self.assertEqual({'pubsub#deliver': '1'}, request.options )808 self.assertEqual({'pubsub#deliver': '1'}, request.options.getValues()) 809 809 810 810 811 811 def test_fromElementOptionsSetCancel(self): … … 825 825 """ 826 826 827 827 request = pubsub.PubSubRequest.fromElement(parseXml(xml)) 828 self.assertEqual( {}, request.options)828 self.assertEqual('cancel', request.options.formType) 829 829 830 830 831 831 def test_fromElementOptionsSetBadFormType(self): … … 1053 1053 self.assertEqual(JID('pubsub.example.org'), request.recipient) 1054 1054 self.assertEqual('test', request.nodeIdentifier) 1055 1055 self.assertEqual({'pubsub#deliver_payloads': '0', 1056 'pubsub#persist_items': '1'}, request.options) 1056 'pubsub#persist_items': '1'}, 1057 request.options.getValues()) 1057 1058 1058 1059 1059 1060 def test_fromElementConfigureSetCancel(self): … … 1073 1074 """ 1074 1075 1075 1076 request = pubsub.PubSubRequest.fromElement(parseXml(xml)) 1076 self.assertEqual( {}, request.options)1077 self.assertEqual('cancel', request.options.formType) 1077 1078 1078 1079 1079 1080 def test_fromElementConfigureSetBadFormType(self): … … 1895 1896 return defer.succeed({'pubsub#deliver_payloads': '0', 1896 1897 'pubsub#persist_items': '1', 1897 1898 'pubsub#owner': JID('user@example.org'), 1898 'x-myfield': ['a', 'b']})1899 'x-myfield': 'a'}) 1899 1900 1900 1901 def cb(element): 1901 1902 self.assertEqual('pubsub', element.name) … … 1968 1969 1969 1970 def configureSet(request): 1970 1971 self.assertEqual({'pubsub#deliver_payloads': False, 1971 'pubsub#persist_items': True}, request.options) 1972 'pubsub#persist_items': True}, 1973 request.options.getValues()) 1972 1974 return defer.succeed(None) 1973 1975 1974 1976 self.resource.getConfigurationOptions = getConfigurationOptions … … 2040 2042 2041 2043 def configureSet(request): 2042 2044 self.assertEquals(['pubsub#deliver_payloads'], 2043 request.options. keys())2045 request.options.fields.keys()) 2044 2046 2045 2047 self.resource.getConfigurationOptions = getConfigurationOptions 2046 2048 self.resource.configureSet = configureSet … … 2595 2597 return d 2596 2598 2597 2599 2600 def test_setConfigurationOptionsDict(self): 2601 """ 2602 Options should be passed as a dictionary, not a form. 2603 """ 2604 2605 xml = """ 2606 <iq type='set' to='pubsub.example.org' 2607 from='user@example.org'> 2608 <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> 2609 <configure node='test'> 2610 <x xmlns='jabber:x:data' type='submit'> 2611 <field var='FORM_TYPE' type='hidden'> 2612 <value>http://jabber.org/protocol/pubsub#node_config</value> 2613 </field> 2614 <field var='pubsub#deliver_payloads'><value>0</value></field> 2615 <field var='pubsub#persist_items'><value>1</value></field> 2616 </x> 2617 </configure> 2618 </pubsub> 2619 </iq> 2620 """ 2621 2622 def getConfigurationOptions(): 2623 return { 2624 "pubsub#persist_items": 2625 {"type": "boolean", 2626 "label": "Persist items to storage"}, 2627 "pubsub#deliver_payloads": 2628 {"type": "boolean", 2629 "label": "Deliver payloads with event notifications"} 2630 } 2631 2632 def setConfiguration(requestor, service, nodeIdentifier, options): 2633 self.assertEquals({'pubsub#deliver_payloads': False, 2634 'pubsub#persist_items': True}, options) 2635 2636 2637 self.service.getConfigurationOptions = getConfigurationOptions 2638 self.service.setConfiguration = setConfiguration 2639 return self.handleRequest(xml) 2640 2641 2598 2642 def test_items(self): 2599 2643 """ 2600 2644 Non-overridden L{PubSubService.items} yields unsupported error.
Note: See TracBrowser
for help on using the repository browser.