Prefixed request, response and data with http. Avoided (plugin_attrib) name collision with other plugins.
This commit is contained in:
parent
80b60fc048
commit
61a7cecb31
@ -17,7 +17,9 @@ from sleekxmpp.xmlstream.handler import Callback
|
|||||||
from sleekxmpp.xmlstream.matcher import StanzaPath
|
from sleekxmpp.xmlstream.matcher import StanzaPath
|
||||||
|
|
||||||
from sleekxmpp.plugins.base import BasePlugin
|
from sleekxmpp.plugins.base import BasePlugin
|
||||||
from sleekxmpp.plugins.xep_0332.stanza import Request, Response, Data
|
from sleekxmpp.plugins.xep_0332.stanza import (
|
||||||
|
HTTPRequest, HTTPResponse, HTTPData
|
||||||
|
)
|
||||||
from sleekxmpp.plugins.xep_0131.stanza import Headers
|
from sleekxmpp.plugins.xep_0131.stanza import Headers
|
||||||
|
|
||||||
|
|
||||||
@ -50,18 +52,26 @@ class XEP_0332(BasePlugin):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def plugin_init(self):
|
def plugin_init(self):
|
||||||
self.xmpp.register_handler(Callback(
|
self.xmpp.register_handler(
|
||||||
'HTTP Request', StanzaPath('iq/req'), self._handle_request
|
Callback(
|
||||||
))
|
'HTTP Request',
|
||||||
self.xmpp.register_handler(Callback(
|
StanzaPath('iq/http-req'),
|
||||||
'HTTP Response', StanzaPath('iq/resp'), self._handle_response
|
self._handle_request
|
||||||
))
|
)
|
||||||
register_stanza_plugin(Iq, Request, iterable=True)
|
)
|
||||||
register_stanza_plugin(Iq, Response, iterable=True)
|
self.xmpp.register_handler(
|
||||||
register_stanza_plugin(Request, Headers, iterable=True)
|
Callback(
|
||||||
register_stanza_plugin(Request, Data, iterable=True)
|
'HTTP Response',
|
||||||
register_stanza_plugin(Response, Headers, iterable=True)
|
StanzaPath('iq/http-resp'),
|
||||||
register_stanza_plugin(Response, Data, iterable=True)
|
self._handle_response
|
||||||
|
)
|
||||||
|
)
|
||||||
|
register_stanza_plugin(Iq, HTTPRequest, iterable=True)
|
||||||
|
register_stanza_plugin(Iq, HTTPResponse, iterable=True)
|
||||||
|
register_stanza_plugin(HTTPRequest, Headers, iterable=True)
|
||||||
|
register_stanza_plugin(HTTPRequest, HTTPData, iterable=True)
|
||||||
|
register_stanza_plugin(HTTPResponse, Headers, iterable=True)
|
||||||
|
register_stanza_plugin(HTTPResponse, HTTPData, iterable=True)
|
||||||
# TODO: Should we register any api's here? self.api.register()
|
# TODO: Should we register any api's here? self.api.register()
|
||||||
|
|
||||||
def plugin_end(self):
|
def plugin_end(self):
|
||||||
@ -94,12 +104,12 @@ class XEP_0332(BasePlugin):
|
|||||||
iq['from'] = self.xmpp.boundjid
|
iq['from'] = self.xmpp.boundjid
|
||||||
iq['to'] = to
|
iq['to'] = to
|
||||||
iq['type'] = 'set'
|
iq['type'] = 'set'
|
||||||
iq['req']['headers'] = headers
|
iq['http-req']['headers'] = headers
|
||||||
iq['req']['method'] = method
|
iq['http-req']['method'] = method
|
||||||
iq['req']['resource'] = resource
|
iq['http-req']['resource'] = resource
|
||||||
iq['req']['version'] = '1.1' # TODO: set this implicitly
|
iq['http-req']['version'] = '1.1' # TODO: set this implicitly
|
||||||
if data is not None:
|
if data is not None:
|
||||||
iq['req']['data'] = data
|
iq['http-req']['http-data'] = data
|
||||||
return iq.send(
|
return iq.send(
|
||||||
timeout=kwargs.get('timeout', None),
|
timeout=kwargs.get('timeout', None),
|
||||||
block=kwargs.get('block', True),
|
block=kwargs.get('block', True),
|
||||||
@ -113,12 +123,12 @@ class XEP_0332(BasePlugin):
|
|||||||
iq['from'] = self.xmpp.boundjid
|
iq['from'] = self.xmpp.boundjid
|
||||||
iq['to'] = to
|
iq['to'] = to
|
||||||
iq['type'] = 'result'
|
iq['type'] = 'result'
|
||||||
iq['resp']['headers'] = headers
|
iq['http-resp']['headers'] = headers
|
||||||
iq['resp']['code'] = code
|
iq['http-resp']['code'] = code
|
||||||
iq['resp']['message'] = message
|
iq['http-resp']['message'] = message
|
||||||
iq['resp']['version'] = '1.1' # TODO: set this implicitly
|
iq['http-resp']['version'] = '1.1' # TODO: set this implicitly
|
||||||
if data is not None:
|
if data is not None:
|
||||||
iq['resp']['data'] = data
|
iq['http-resp']['http-data'] = data
|
||||||
return iq.send(
|
return iq.send(
|
||||||
timeout=kwargs.get('timeout', None),
|
timeout=kwargs.get('timeout', None),
|
||||||
block=kwargs.get('block', True),
|
block=kwargs.get('block', True),
|
||||||
|
@ -8,6 +8,6 @@
|
|||||||
See the file LICENSE for copying permission.
|
See the file LICENSE for copying permission.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from sleekxmpp.plugins.xep_0332.stanza.request import Request
|
from sleekxmpp.plugins.xep_0332.stanza.request import HTTPRequest
|
||||||
from sleekxmpp.plugins.xep_0332.stanza.response import Response
|
from sleekxmpp.plugins.xep_0332.stanza.response import HTTPResponse
|
||||||
from sleekxmpp.plugins.xep_0332.stanza.data import Data
|
from sleekxmpp.plugins.xep_0332.stanza.data import HTTPData
|
||||||
|
@ -11,14 +11,14 @@
|
|||||||
from sleekxmpp.xmlstream import ElementBase
|
from sleekxmpp.xmlstream import ElementBase
|
||||||
|
|
||||||
|
|
||||||
class Data(ElementBase):
|
class HTTPData(ElementBase):
|
||||||
"""
|
"""
|
||||||
The data element.
|
The data element.
|
||||||
"""
|
"""
|
||||||
name = 'data'
|
name = 'data'
|
||||||
namespace = 'urn:xmpp:http'
|
namespace = 'urn:xmpp:http'
|
||||||
interfaces = set(['data'])
|
interfaces = set(['data'])
|
||||||
plugin_attrib = 'data'
|
plugin_attrib = 'http-data'
|
||||||
is_extension = True
|
is_extension = True
|
||||||
|
|
||||||
def get_data(self, encoding='text'):
|
def get_data(self, encoding='text'):
|
||||||
|
@ -11,16 +11,19 @@
|
|||||||
from sleekxmpp.xmlstream import ElementBase
|
from sleekxmpp.xmlstream import ElementBase
|
||||||
|
|
||||||
|
|
||||||
class Request(ElementBase):
|
class HTTPRequest(ElementBase):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
All HTTP communication is done using the `Request`/`Response` paradigm.
|
All HTTP communication is done using the `Request`/`Response` paradigm.
|
||||||
Each HTTP Request is made sending an `iq` stanza containing a `req` element
|
Each HTTP Request is made sending an `iq` stanza containing a `req`
|
||||||
to the server. Each `iq` stanza sent is of type `set`.
|
element to the server. Each `iq` stanza sent is of type `set`.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
<iq type='set' from='a@b.com/browser' to='x@y.com' id='1'>
|
<iq type='set' from='a@b.com/browser' to='x@y.com' id='1'>
|
||||||
<req xmlns='urn:xmpp:http' method='GET' resource='/api/users' version='1.1'>
|
<req xmlns='urn:xmpp:http'
|
||||||
|
method='GET'
|
||||||
|
resource='/api/users'
|
||||||
|
version='1.1'>
|
||||||
<headers xmlns='http://jabber.org/protocol/shim'>
|
<headers xmlns='http://jabber.org/protocol/shim'>
|
||||||
<header name='Host'>b.com</header>
|
<header name='Host'>b.com</header>
|
||||||
</headers>
|
</headers>
|
||||||
@ -28,7 +31,10 @@ class Request(ElementBase):
|
|||||||
</iq>
|
</iq>
|
||||||
|
|
||||||
<iq type='set' from='a@b.com/browser' to='x@y.com' id='2'>
|
<iq type='set' from='a@b.com/browser' to='x@y.com' id='2'>
|
||||||
<req xmlns='urn:xmpp:http' method='PUT' resource='/api/users' version='1.1'>
|
<req xmlns='urn:xmpp:http'
|
||||||
|
method='PUT'
|
||||||
|
resource='/api/users'
|
||||||
|
version='1.1'>
|
||||||
<headers xmlns='http://jabber.org/protocol/shim'>
|
<headers xmlns='http://jabber.org/protocol/shim'>
|
||||||
<header name='Host'>b.com</header>
|
<header name='Host'>b.com</header>
|
||||||
<header name='Content-Type'>text/html</header>
|
<header name='Content-Type'>text/html</header>
|
||||||
@ -44,7 +50,7 @@ class Request(ElementBase):
|
|||||||
name = 'request'
|
name = 'request'
|
||||||
namespace = 'urn:xmpp:http'
|
namespace = 'urn:xmpp:http'
|
||||||
interfaces = set(['method', 'resource', 'version'])
|
interfaces = set(['method', 'resource', 'version'])
|
||||||
plugin_attrib = 'req'
|
plugin_attrib = 'http-req'
|
||||||
|
|
||||||
def get_method(self):
|
def get_method(self):
|
||||||
return self._get_attr('method', None)
|
return self._get_attr('method', None)
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
from sleekxmpp.xmlstream import ElementBase
|
from sleekxmpp.xmlstream import ElementBase
|
||||||
|
|
||||||
|
|
||||||
class Response(ElementBase):
|
class HTTPResponse(ElementBase):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
When the HTTP Server responds, it does so by sending an `iq` stanza
|
When the HTTP Server responds, it does so by sending an `iq` stanza
|
||||||
@ -21,8 +21,13 @@ class Response(ElementBase):
|
|||||||
in which the original requests were made.
|
in which the original requests were made.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
<iq type='result' from='httpserver@clayster.com' to='httpclient@clayster.com/browser' id='2'>
|
<iq type='result'
|
||||||
<resp xmlns='urn:xmpp:http' version='1.1' statusCode='200' statusMessage='OK'>
|
from='httpserver@clayster.com'
|
||||||
|
to='httpclient@clayster.com/browser' id='2'>
|
||||||
|
<resp xmlns='urn:xmpp:http'
|
||||||
|
version='1.1'
|
||||||
|
statusCode='200'
|
||||||
|
statusMessage='OK'>
|
||||||
<headers xmlns='http://jabber.org/protocol/shim'>
|
<headers xmlns='http://jabber.org/protocol/shim'>
|
||||||
<header name='Date'>Fri, 03 May 2013 16:39:54GMT-4</header>
|
<header name='Date'>Fri, 03 May 2013 16:39:54GMT-4</header>
|
||||||
<header name='Server'>Clayster</header>
|
<header name='Server'>Clayster</header>
|
||||||
@ -42,7 +47,7 @@ class Response(ElementBase):
|
|||||||
name = 'response'
|
name = 'response'
|
||||||
namespace = 'urn:xmpp:http'
|
namespace = 'urn:xmpp:http'
|
||||||
interfaces = set(['code', 'message', 'version'])
|
interfaces = set(['code', 'message', 'version'])
|
||||||
plugin_attrib = 'resp'
|
plugin_attrib = 'http-resp'
|
||||||
|
|
||||||
def get_code(self):
|
def get_code(self):
|
||||||
code = self._get_attr('statusCode', None)
|
code = self._get_attr('statusCode', None)
|
||||||
|
Loading…
Reference in New Issue
Block a user