source:
ralphm-patches/pubsub_request_options.patch
@
54:03ec57713c90
Last change on this file since 54:03ec57713c90 was 54:03ec57713c90, checked in by Ralph Meijer <ralphm@…>, 11 years ago | |
---|---|
File size: 11.2 KB |
-
wokkel/pubsub.py
# HG changeset patch # Parent 7de2ae0a6a884cf594ba232ee5d909c6d10e1906 Address incompatible change concerning PubSubRequest.options. In changeset [1334124db2fd], `PubSubRequest.options` was changed to hold the `wokkel.data_form.Form` that represents the data form sent in the original request. This makes it easier to type check the form in a step separate from parsing the request. However, this is an incompatible change. To remedy this, we move the form to `optionsForm` and make options a property that returns the values of the form. diff -r 7de2ae0a6a88 wokkel/pubsub.py
a b 210 210 @ivar nodeType: The type of node that should be created, or for which the 211 211 configuration is retrieved. C{'leaf'} or C{'collection'}. 212 212 @type nodeType: C{str} 213 @ivar options: Configurations options for nodes, subscriptions and publish 214 requests. 215 @type options: L{data_form.Form} 213 @ivar optionsForm: Configurations options for nodes, subscriptions and 214 publish requests. 215 @type optionsForm: L{data_form.Form} 216 @ivar options: Read-only property reflecting the values of the data form in 217 C{optionsForm}. When C{optionsForm} is set, this is equal to 218 the result of C{optionsForm.getValues()}. 219 @type options: C{dict} 216 220 @ivar subscriber: The subscribing entity. 217 221 @type subscriber: L{JID} 218 222 @ivar subscriptionIdentifier: Identifier for a specific subscription. … … 233 237 maxItems = None 234 238 nodeIdentifier = None 235 239 nodeType = None 236 options = None240 optionsForm = None 237 241 subscriber = None 238 242 subscriptionIdentifier = None 239 243 subscriptions = None … … 292 296 self.verb = verb 293 297 294 298 299 def _getOptions(self): 300 if (self.optionsForm is not None and 301 self.optionsForm.formType != 'cancel'): 302 return self.optionsForm.getValues() 303 else: 304 return None 305 306 options = property(_getOptions) 307 295 308 def _parse_node(self, verbElement): 296 309 """ 297 310 Parse the required node identifier out of the verbElement. … … 398 411 form = data_form.findForm(verbElement, NS_PUBSUB_NODE_CONFIG) 399 412 if form: 400 413 if form.formType in ('submit', 'cancel'): 401 self.options = form414 self.optionsForm = form 402 415 else: 403 416 raise BadRequest(text=u"Unexpected form type '%s'" % form.formType) 404 417 else: … … 419 432 else: 420 433 form = data_form.Form('submit', 421 434 formNamespace=NS_PUBSUB_NODE_CONFIG) 422 self.options = form435 self.optionsForm = form 423 436 424 437 425 438 def _render_configureOrNone(self, verbElement): 426 439 """ 427 440 Render optional node configuration form in create request. 428 441 """ 429 if self.options is not None:442 if self.optionsForm is not None: 430 443 configure = verbElement.parent.addElement('configure') 431 configure.addChild(self.options .toElement())444 configure.addChild(self.optionsForm.toElement()) 432 445 433 446 434 447 def _parse_itemIdentifiers(self, verbElement): … … 498 511 form = data_form.findForm(verbElement, NS_PUBSUB_SUBSCRIBE_OPTIONS) 499 512 if form: 500 513 if form.formType in ('submit', 'cancel'): 501 self.options = form514 self.optionsForm = form 502 515 else: 503 516 raise BadRequest(text=u"Unexpected form type '%s'" % form.formType) 504 517 else: … … 507 520 508 521 509 522 def _render_options(self, verbElement): 510 verbElement.addChild(self.options .toElement())523 verbElement.addChild(self.optionsForm.toElement()) 511 524 512 525 513 526 def _parse_optionsWithSubscribe(self, verbElement): … … 522 535 else: 523 536 form = data_form.Form('submit', 524 537 formNamespace=NS_PUBSUB_SUBSCRIBE_OPTIONS) 525 self.options = form538 self.optionsForm = form 526 539 527 540 528 541 def _render_optionsWithSubscribe(self, verbElement): 529 if self.options :542 if self.optionsForm is not None: 530 543 optionsElement = verbElement.parent.addElement('options') 531 544 self._render_options(optionsElement) 532 545 … … 772 785 form = data_form.Form(formType='submit', 773 786 formNamespace=NS_PUBSUB_NODE_CONFIG) 774 787 form.makeFields(options) 775 request.options = form788 request.optionsForm = form 776 789 777 790 def cb(iq): 778 791 try: … … 835 848 form = data_form.Form(formType='submit', 836 849 formNamespace=NS_PUBSUB_SUBSCRIBE_OPTIONS) 837 850 form.makeFields(options) 838 request.options = form851 request.optionsForm = form 839 852 840 853 def cb(iq): 841 854 subscription = Subscription.fromElement(iq.pubsub.subscription) … … 1006 1019 form = data_form.Form(formType='submit', 1007 1020 formNamespace=NS_PUBSUB_SUBSCRIBE_OPTIONS) 1008 1021 form.makeFields(options) 1009 request.options = form1022 request.optionsForm = form 1010 1023 1011 1024 d = request.send(self.xmlstream) 1012 1025 return d … … 1194 1207 return defer.fail(Unsupported('', text)) 1195 1208 1196 1209 handler = getattr(self, handlerName) 1197 1198 1210 args = [getattr(request, arg) for arg in argNames] 1199 if 'options' in argNames:1200 args[argNames.index('options')] = request.options.getValues()1201 1202 1211 d = handler(*args) 1203 1212 1204 1213 # If needed, translate the result into a response … … 1262 1271 1263 1272 1264 1273 def _preProcess_create(self, resource, request): 1265 if request.options :1266 self._checkConfiguration(resource, request.options )1274 if request.optionsForm: 1275 self._checkConfiguration(resource, request.optionsForm) 1267 1276 return request 1268 1277 1269 1278 … … 1295 1304 1296 1305 1297 1306 def _preProcess_configureSet(self, resource, request): 1298 if request.options .formType == 'cancel':1307 if request.optionsForm.formType == 'cancel': 1299 1308 return None 1300 1309 else: 1301 self._checkConfiguration(resource, request.options )1310 self._checkConfiguration(resource, request.optionsForm) 1302 1311 return request 1303 1312 1304 1313 -
wokkel/test/test_pubsub.py
diff -r 7de2ae0a6a88 wokkel/test/test_pubsub.py
a b 1186 1186 1187 1187 request = pubsub.PubSubRequest.fromElement(parseXml(xml)) 1188 1188 self.assertEqual('subscribe', request.verb) 1189 request.options .typeCheck({'pubsub#deliver': {'type': 'boolean'}})1190 self.assertEqual({'pubsub#deliver': True}, request.options .getValues())1189 request.optionsForm.typeCheck({'pubsub#deliver': {'type': 'boolean'}}) 1190 self.assertEqual({'pubsub#deliver': True}, request.options) 1191 1191 1192 1192 1193 1193 def test_fromElementSubscribeWithOptionsBadFormType(self): … … 1240 1240 1241 1241 request = pubsub.PubSubRequest.fromElement(parseXml(xml)) 1242 1242 self.assertEqual('subscribe', request.verb) 1243 self.assertEqual({}, request.options .getValues())1243 self.assertEqual({}, request.options) 1244 1244 1245 1245 1246 1246 def test_fromElementUnsubscribe(self): … … 1372 1372 self.assertEqual(JID('pubsub.example.org'), request.recipient) 1373 1373 self.assertEqual('test', request.nodeIdentifier) 1374 1374 self.assertEqual(JID('user@example.org/Home'), request.subscriber) 1375 self.assertEqual({'pubsub#deliver': '1'}, request.options .getValues())1375 self.assertEqual({'pubsub#deliver': '1'}, request.options) 1376 1376 1377 1377 1378 1378 def test_fromElementOptionsSetWithSubscriptionIdentifier(self): … … 1418 1418 """ 1419 1419 1420 1420 request = pubsub.PubSubRequest.fromElement(parseXml(xml)) 1421 self.assertEqual('cancel', request.options.formType) 1421 self.assertEqual('cancel', request.optionsForm.formType) 1422 self.assertIdentical(None, request.options) 1422 1423 1423 1424 1424 1425 def test_fromElementOptionsSetBadFormType(self): … … 1529 1530 self.assertEqual(JID('user@example.org'), request.sender) 1530 1531 self.assertEqual(JID('pubsub.example.org'), request.recipient) 1531 1532 self.assertEqual('mynode', request.nodeIdentifier) 1533 self.assertIdentical(None, request.optionsForm) 1532 1534 self.assertIdentical(None, request.options) 1533 1535 1534 1536 … … 1566 1568 """ 1567 1569 1568 1570 request = pubsub.PubSubRequest.fromElement(parseXml(xml)) 1569 self.assertEqual({}, request.options .getValues())1571 self.assertEqual({}, request.options) 1570 1572 self.assertEqual(u'mynode', request.nodeIdentifier) 1571 1573 1572 1574 … … 1589 1591 """ 1590 1592 1591 1593 request = pubsub.PubSubRequest.fromElement(parseXml(xml)) 1592 self.assertEqual({}, request.options .getValues())1594 self.assertEqual({}, request.options) 1593 1595 self.assertEqual(u'mynode', request.nodeIdentifier) 1594 1596 1595 1597 … … 1617 1619 """ 1618 1620 1619 1621 request = pubsub.PubSubRequest.fromElement(parseXml(xml)) 1620 values = request.options .getValues()1622 values = request.options 1621 1623 self.assertIn('pubsub#access_model', values) 1622 1624 self.assertEqual(u'open', values['pubsub#access_model']) 1623 1625 self.assertIn('pubsub#persist_items', values) … … 1757 1759 self.assertEqual('test', request.nodeIdentifier) 1758 1760 self.assertEqual({'pubsub#deliver_payloads': '0', 1759 1761 'pubsub#persist_items': '1'}, 1760 request.options .getValues())1762 request.options) 1761 1763 1762 1764 1763 1765 def test_fromElementConfigureSetCancel(self): … … 1777 1779 """ 1778 1780 1779 1781 request = pubsub.PubSubRequest.fromElement(parseXml(xml)) 1780 self.assertEqual('cancel', request.options.formType) 1782 self.assertEqual('cancel', request.optionsForm.formType) 1783 self.assertIdentical(None, request.options) 1781 1784 1782 1785 1783 1786 def test_fromElementConfigureSetBadFormType(self): … … 2633 2636 def create(request): 2634 2637 self.assertEqual({'pubsub#deliver_payloads': False, 2635 2638 'pubsub#persist_items': True}, 2636 request.options .getValues())2639 request.options) 2637 2640 return defer.succeed(None) 2638 2641 2639 2642 self.resource.getConfigurationOptions = getConfigurationOptions … … 2841 2844 def configureSet(request): 2842 2845 self.assertEqual({'pubsub#deliver_payloads': False, 2843 2846 'pubsub#persist_items': True}, 2844 request.options .getValues())2847 request.options) 2845 2848 return defer.succeed(None) 2846 2849 2847 2850 self.resource.getConfigurationOptions = getConfigurationOptions … … 2913 2916 2914 2917 def configureSet(request): 2915 2918 self.assertEquals(['pubsub#deliver_payloads'], 2916 request.options. fields.keys())2919 request.options.keys()) 2917 2920 2918 2921 self.resource.getConfigurationOptions = getConfigurationOptions 2919 2922 self.resource.configureSet = configureSet
Note: See TracBrowser
for help on using the repository browser.