Changeset 19:48bd45f41903 in ralphm-patches
- Timestamp:
- Dec 29, 2009, 3:35:35 PM (13 years ago)
- Branch:
- default
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
pubsub-create-configure.patch
r14 r19 1 diff -r 53bd69434e51wokkel/data_form.py2 --- a/wokkel/data_form.py Mon Apr 27 17:53:05 2009 +02003 +++ b/wokkel/data_form.py Fri May 01 08:34:36 2009 +02004 @@ -25 1,10 +251,10 @@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 4 @@ -253,10 +253,10 @@ 5 5 field['var'] = self.var 6 6 … … 14 14 + value = unicode(value) 15 15 16 field.addElement('value', content= value)17 18 @@ - 489,3 +489,25 @@19 values[name] = value20 21 return values16 field.addElement('value', content=unicode(value)) 17 18 @@ -564,3 +564,25 @@ 19 else: 20 # Unknown field, ignoring 21 pass 22 22 + 23 23 + … … 42 42 + 43 43 + return None 44 diff -r 53bd69434e51wokkel/pubsub.py45 --- a/wokkel/pubsub.py Mon Apr 27 17:53:05 2009 +020046 +++ b/wokkel/pubsub.py Fri May 01 08:34:36 2009 +020047 @@ -23 3,7 +233,7 @@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 47 @@ -234,7 +234,7 @@ 48 48 'optionsSet': ['nodeOrEmpty', 'jid', 'options'], 49 49 'subscriptions': [], … … 54 54 'configureGet': ['nodeOrEmpty'], 55 55 'configureSet': ['nodeOrEmpty', 'configure'], 56 @@ -25 1,30 +251,6 @@56 @@ -252,30 +252,6 @@ 57 57 self.verb = verb 58 58 … … 85 85 """ 86 86 Parse the required node identifier out of the verbElement. 87 @@ -36 5,7 +341,7 @@87 @@ -366,7 +342,7 @@ 88 88 """ 89 89 Parse node type out of a request for the default node configuration. … … 94 94 values = form.getValues() 95 95 self.nodeType = values.get('pubsub#node_type', 'leaf') 96 @@ -37 7,7 +353,7 @@96 @@ -378,7 +354,7 @@ 97 97 """ 98 98 Parse options out of a request for setting the node configuration. … … 103 103 if form.formType == 'submit': 104 104 self.options = form.getValues() 105 @@ -3 89,6 +365,46 @@105 @@ -390,6 +366,46 @@ 106 106 raise BadRequest(text="Missing configuration form") 107 107 … … 150 150 def _parse_itemIdentifiers(self, verbElement): 151 151 """ 152 @@ -43 6,7 +452,7 @@152 @@ -437,7 +453,7 @@ 153 153 154 154 … … 159 159 if form.formType == 'submit': 160 160 self.options = form.getValues() 161 @@ -4 47,6 +463,7 @@162 else:163 raise BadRequest(text="Missing options form")161 @@ -468,6 +484,7 @@ 162 self._render_options(optionsElement) 163 164 164 165 165 + … … 167 167 """ 168 168 Parse the publish-subscribe verb and parameters out of a request. 169 @@ -6 30,7 +647,8 @@169 @@ -663,7 +680,8 @@ 170 170 pass 171 171 … … 177 177 Create a publish subscribe node. 178 178 179 @@ -6 38,11 +656,14 @@179 @@ -671,11 +689,14 @@ 180 180 @type service: L{JID} 181 181 @param nodeIdentifier: Optional suggestion for the id of the node. … … 192 192 def cb(iq): 193 193 try: 194 @@ -9 15,8 +936,6 @@194 @@ -952,8 +973,6 @@ 195 195 d = self.getNodes(requestor, target) 196 196 else: … … 201 201 d.addCallback(lambda nodes: [disco.DiscoItem(target, node) 202 202 for node in nodes]) 203 @@ -10 62,6 +1081,13 @@203 @@ -1081,6 +1100,13 @@ 204 204 return processedValues 205 205 … … 215 215 if request.nodeType not in ('leaf', 'collection'): 216 216 raise error.StanzaError('not-acceptable') 217 diff -r 53bd69434e51wokkel/test/test_pubsub.py218 --- a/wokkel/test/test_pubsub.py Mon Apr 27 17:53:05 2009 +0200219 +++ b/wokkel/test/test_pubsub.py Fri May 01 08:34:36 2009 +0200217 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 220 220 @@ -19,7 +19,7 @@ 221 221 from wokkel.test.helpers import TestableRequestHandlerMixin, XmlStreamStub … … 268 268 """ 269 269 Test sending delete request. 270 @@ -9 35,6 +969,7 @@270 @@ -966,6 +1000,7 @@ 271 271 self.assertEqual(JID('user@example.org'), request.sender) 272 272 self.assertEqual(JID('pubsub.example.org'), request.recipient) … … 276 276 277 277 def test_fromElementCreateInstant(self): 278 @@ -9 55,6 +990,77 @@278 @@ -986,6 +1021,77 @@ 279 279 self.assertIdentical(None, request.nodeIdentifier) 280 280 … … 354 354 """ 355 355 Test parsing a request for the default node configuration. 356 @@ -17 40,6 +1846,51 @@356 @@ -1771,6 +1877,51 @@ 357 357 return d 358 358 … … 406 406 """ 407 407 A default request should result in 408 @@ -1 773,7 +1924,7 @@408 @@ -1804,7 +1955,7 @@ 409 409 self.assertEqual(NS_PUBSUB_OWNER, element.uri) 410 410 self.assertEqual(NS_PUBSUB_OWNER, element.default.uri) … … 415 415 self.resource.getConfigurationOptions = getConfigurationOptions 416 416 self.resource.default = default 417 @@ -19 02,7 +2053,7 @@417 @@ -1933,7 +2084,7 @@ 418 418 self.assertEqual(NS_PUBSUB_OWNER, element.uri) 419 419 self.assertEqual(NS_PUBSUB_OWNER, element.configure.uri) -
pubsub-subscription-options.patch
r17 r19 1 1 diff -r 2919e60d3588 wokkel/data_form.py 2 2 --- a/wokkel/data_form.py Mon Dec 28 12:13:34 2009 +0100 3 +++ b/wokkel/data_form.py Mon Dec 28 21:17:392009 +01003 +++ b/wokkel/data_form.py Tue Dec 29 15:34:35 2009 +0100 4 4 @@ -76,6 +76,7 @@ 5 5 option['label'] = self.label … … 10 10 def fromElement(element): 11 11 valueElements = list(domish.generateElementsQNamed(element.children, 12 @@ -256,7 +257,7 @@ 12 @@ -212,7 +213,7 @@ 13 14 if self.values: 15 if (self.fieldType not in ('hidden', 'jid-multi', 'list-multi', 16 - 'text-multi') and 17 + 'text-multi') and 18 len(self.values) > 1): 19 raise TooManyValuesError() 20 21 @@ -233,6 +234,7 @@ 22 23 self.values = newValues 24 25 + 26 def toElement(self, asForm=False): 27 """ 28 Return the DOM representation of this Field. 29 @@ -256,7 +258,7 @@ 13 30 elif self.fieldType in ('jid-single', 'jid-multi'): 14 31 value = value.full() … … 19 36 if asForm: 20 37 if self.fieldType in ('list-single', 'list-multi'): 21 @@ -322,16 +32 3,16 @@38 @@ -322,16 +324,16 @@ 22 39 23 40 … … 42 59 kwargs['options'] = options 43 60 44 @@ -416,6 +41 7,44 @@61 @@ -416,6 +418,44 @@ 45 62 self.fieldList.append(field) 46 63 … … 87 104 form = domish.Element((NS_X_DATA, 'x')) 88 105 form['type'] = self.formType 89 @@ -489,3 +52 8,11@@106 @@ -489,3 +529,38 @@ 90 107 values[name] = value 91 108 … … 93 110 + 94 111 + 95 + def typeCheck(self, fieldDefs=None): 112 + def typeCheck(self, fieldDefs): 113 + """ 114 + Check values of fields according to the field definition. 115 + 116 + This method walks all named fields to check their values against their 117 + type. The field definition in C{fieldDefs} is used to check the field 118 + type. Unknown fields are ignored. 119 + 120 + If the field type is C{None} (when not set by the receiving entity), 121 + the field definition is used to set the field's type before checking 122 + the values. 123 + 124 + @param fieldDefs: Field definitions as a dictionary. See 125 + L{wokkel.iwokkel.IPubSubService.getConfigurationOptions} 126 + @type fieldDefs: C{dict}. 127 + """ 128 + 96 129 + for name, field in self.fields.iteritems(): 97 + if fieldDefs and name in fieldDefs: 98 + field.fieldType = fieldDefs[name]['type'] 99 + 100 + field.typeCheck() 130 + if name in fieldDefs: 131 + if field.fieldType is None: 132 + field.fieldType = fieldDefs[name]['type'] 133 + elif field.fieldType != fieldDefs[name]['type']: 134 + raise TypeError("Field type for %r is %r, expected %r" % 135 + (name, 136 + field.fieldType, 137 + fieldDefs[name]['type'])) 138 + else: 139 + # Field type is correct 140 + pass 141 + field.typeCheck() 142 + else: 143 + # Unknown field, ignoring 144 + pass 101 145 diff -r 2919e60d3588 wokkel/pubsub.py 102 146 --- a/wokkel/pubsub.py Mon Dec 28 12:13:34 2009 +0100 103 +++ b/wokkel/pubsub.py Mon Dec 28 21:17:392009 +0100147 +++ b/wokkel/pubsub.py Tue Dec 29 15:34:35 2009 +0100 104 148 @@ -228,7 +228,7 @@ 105 149 # Map request verb to parameter handler names … … 111 155 'optionsGet': ['nodeOrEmpty', 'jid'], 112 156 'optionsSet': ['nodeOrEmpty', 'jid', 'options'], 113 @@ -445,3 0 +445,62@@157 @@ -445,32 +445,71 @@ 114 158 self.options = {} 115 159 else: … … 121 165 + 122 166 + def _parse_optionsWithSubscribe(self, verbElement): 123 + # _parse_options will be called with the options element. 124 + # No special processing is required here. 125 + pass 167 + for element in verbElement.parent.elements(): 168 + if element.name == 'options' and element.uri == NS_PUBSUB: 169 + form = PubSubRequest._findForm(element, 170 + NS_PUBSUB_SUBSCRIBE_OPTIONS) 171 + if form: 172 + self.optionsForm = form 173 + if form.formType == 'submit': 174 + self.options = form.getValues() 175 + else: 176 + BadRequest(text="Unexpected form type %r" % form.formType) 126 177 + 127 178 + … … 165 216 166 217 - for parameter in self._parameters[verb]: 167 - getattr(self, '_parse_%s' % parameter)(child)168 218 + if len(verbs) > 1: 169 219 + if 'optionsSet' in verbs and 'subscribe' in verbs: 170 220 + self.verb = 'subscribe' 221 + child = children[verbs.index('subscribe')] 171 222 + else: 172 223 + raise NotImplementedError() … … 174 225 + self.verb = verbs[0] 175 226 + 176 + for verb, child in zip(verbs, children): 177 + for parameter in self._parameters[verb]: 178 + getattr(self, '_parse_%s' % parameter)(child) 179 + 180 181 227 + for parameter in self._parameters[self.verb]: 228 getattr(self, '_parse_%s' % parameter)(child) 229 230 231 + 182 232 def send(self, xs): 183 @@ -674,7 +706,8 @@ 233 """ 234 Send this request to its recipient. 235 @@ -674,7 +713,8 @@ 184 236 return request.send(self.xmlstream) 185 237 … … 191 243 Subscribe to a publish subscribe node. 192 244 193 @@ -685,11 +7 18,14 @@245 @@ -685,11 +725,14 @@ 194 246 @param subscriber: The entity to subscribe to the node. This entity 195 247 will get notifications of new published items. … … 206 258 207 259 def cb(iq): 208 @@ -1012,29 +10 48,11 @@260 @@ -1012,29 +1055,11 @@ 209 261 return None 210 262 … … 241 293 diff -r 2919e60d3588 wokkel/test/test_pubsub.py 242 294 --- a/wokkel/test/test_pubsub.py Mon Dec 28 12:13:34 2009 +0100 243 +++ b/wokkel/test/test_pubsub.py Mon Dec 28 21:17:392009 +0100295 +++ b/wokkel/test/test_pubsub.py Tue Dec 29 15:34:35 2009 +0100 244 296 @@ -447,6 +447,37 @@ 245 297 return d … … 280 332 """ 281 333 Test sending subscription request from a specific JID. 282 @@ -1895,7 +1926,7 @@ 334 @@ -718,6 +749,39 @@ 335 self.assertEqual(NS_PUBSUB_ERRORS, err.appCondition.uri) 336 self.assertEqual('jid-required', err.appCondition.name) 337 338 + 339 + def test_fromElementSubscribeWithOptions(self): 340 + """ 341 + Test parsing a subscription request. 342 + """ 343 + 344 + xml = """ 345 + <iq type='set' to='pubsub.example.org' 346 + from='user@example.org'> 347 + <pubsub xmlns='http://jabber.org/protocol/pubsub'> 348 + <subscribe node='test' jid='user@example.org/Home'/> 349 + <options> 350 + <x xmlns="jabber:x:data" type='submit'> 351 + <field var='FORM_TYPE' type='hidden'> 352 + <value>http://jabber.org/protocol/pubsub#subscribe_options</value> 353 + </field> 354 + <field var='pubsub#deliver' type='boolean' 355 + label='Enable delivery?'> 356 + <value>1</value> 357 + </field> 358 + </x> 359 + </options> 360 + </pubsub> 361 + </iq> 362 + """ 363 + 364 + request = pubsub.PubSubRequest.fromElement(parseXml(xml)) 365 + self.assertEqual('subscribe', request.verb) 366 + request.optionsForm.typeCheck({'pubsub#deliver': {'type': 'boolean'}}) 367 + request.options = request.optionsForm.getValues() 368 + self.assertEqual({'pubsub#deliver': True}, request.options) 369 + 370 + 371 def test_fromElementUnsubscribe(self): 372 """ 373 Test parsing an unsubscription request. 374 @@ -1895,7 +1959,7 @@ 283 375 return defer.succeed({'pubsub#deliver_payloads': '0', 284 376 'pubsub#persist_items': '1',
Note: See TracChangeset
for help on using the changeset viewer.