Source code for thriftpool.request.stack
"""Contains patched processor."""
from __future__ import absolute_import
from collections import namedtuple
from thriftworker.utils.proxy import Proxy
from thriftpool import thriftpool
from thriftpool.utils.local import LocalStack
[docs]class Request(namedtuple('Request', ('handler', 'method', 'args',
'kwargs', 'service_name'))):
"""Describe thrift request."""
[docs]class RequestStack(object):
"""Store thrift requests."""
Request = Request
def __init__(self):
self.stack = LocalStack()
[docs] def add(self, handler, method, args, kwargs, service_name):
"""Register new request."""
request = self.Request(handler, method, args, kwargs, service_name)
self.stack.push(request)
return request
@property
[docs] def current(self):
"""Return current request."""
return self.stack.top
[docs] def to_dict(self):
return {ident: [(request.service_name, request.method.__name__,
request.args, request.kwargs)
for request in d.get('stack', [])]
for ident, d in self.stack}
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
self.stack.pop()
#: Get current thrift request.
current_request = Proxy(lambda: thriftpool.request_stack.current)