%PDF- %PDF-
Direktori : /usr/lib/python2.7/site-packages/salt/utils/ |
Current File : //usr/lib/python2.7/site-packages/salt/utils/ctx.py |
# -*- coding: utf-8 -*- # Import python libs from __future__ import absolute_import, with_statement, print_function, unicode_literals import threading class ClassProperty(property): ''' Use a classmethod as a property http://stackoverflow.com/a/1383402/1258307 ''' def __get__(self, cls, owner): return self.fget.__get__(None, owner)() # pylint: disable=no-member class RequestContext(object): ''' A context manager that saves some per-thread state globally. Intended for use with Tornado's StackContext. https://gist.github.com/simon-weber/7755289 Simply import this class into any module and access the current request handler by this class's class method property 'current'. If it returns None, there's no active request. .. code:: python from raas.utils.ctx import RequestContext current_request_handler = RequestContext.current ''' _state = threading.local() _state.current_request = {} def __init__(self, current_request): self._current_request = current_request @ClassProperty @classmethod def current(cls): if not hasattr(cls._state, 'current_request'): return {} return cls._state.current_request def __enter__(self): self._prev_request = self.__class__.current self.__class__._state.current_request = self._current_request def __exit__(self, *exc): self.__class__._state.current_request = self._prev_request del self._prev_request return False def __call__(self): return self