1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
__author__ = 'jacekf'
try:
import txZMQ
except ImportError as ex:
print("You must have ZeroMQ and txZMQ installed")
raise ex
from corepost import Response, IRESTResource
from corepost.enums import Http
from corepost.routing import UrlRouter, RequestRouter
from enums import MediaType
from formencode import FancyValidator, Invalid
from twisted.internet import reactor
from twisted.internet.defer import Deferred
from twisted.web.resource import Resource
from twisted.web.server import Site, NOT_DONE_YET
from zope.interface import implements
class ZMQResource(Resource):
"""
Responsible for intercepting HTTP requests and marshalling them via ZeroMQ to responders in the process pool
"""
isLeaf = True
implements(IRESTResource)
def __init__(self):
'''
Constructor
'''
Resource.__init__(self)
def render(self, request):
"""Posts request to ZeroMQ and waits for response"""
pass
class ZMQResponder:
"""
Responsible for processing an incoming request via ZeroMQ and responding via a REST API as if it were a direct HTTP request
"""
def __init__(self,services=(),schema=None,filters=()):
'''
Constructor
'''
self.services = services
self.__router = RequestRouter(self,schema,filters)