2bf8d2f917
versionutils.py is no longer in oslo-incubator. So we can either use versionutils from oslo_log or debtcollector instead. However, oslo.messaging does not use oslo.log currently and we should not be adding yet another library as a dependency here, so we should just use the base python warnings library for our limited use of deprecated() method. Change-Id: Ib8a487051c894fa4828da65d4890b7a4f57f1d12
86 lines
2.5 KiB
Python
86 lines
2.5 KiB
Python
|
|
# Copyright 2013 Red Hat, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
__all__ = [
|
|
'get_local_context',
|
|
'set_local_context',
|
|
'clear_local_context',
|
|
'_set_local_context',
|
|
'_clear_local_context',
|
|
]
|
|
|
|
from functools import wraps
|
|
import threading
|
|
import uuid
|
|
import warnings
|
|
|
|
|
|
def _deprecated(as_of=None, in_favor_of=None):
|
|
def __inner(func):
|
|
@wraps(func)
|
|
def __wrapper(*args, **kwargs):
|
|
replaced_by = (' Please use %s instead.'
|
|
% in_favor_of) if in_favor_of else ''
|
|
warnings.warn('%s has been deprecated in %s and will be '
|
|
'removed in the next release.%s' %
|
|
(func.__name__, as_of, replaced_by))
|
|
return func(*args, **kwargs)
|
|
return __wrapper
|
|
return __inner
|
|
_VERSION = '1.8.0'
|
|
|
|
_KEY = '_%s_%s' % (__name__.replace('.', '_'), uuid.uuid4().hex)
|
|
_STORE = threading.local()
|
|
|
|
|
|
@_deprecated(as_of=_VERSION, in_favor_of='oslo_context.context.get_current')
|
|
def get_local_context(ctxt):
|
|
"""Retrieve the RPC endpoint request context for the current thread.
|
|
|
|
This method allows any code running in the context of a dispatched RPC
|
|
endpoint method to retrieve the context for this request.
|
|
|
|
This is commonly used for logging so that, for example, you can include the
|
|
request ID, user and tenant in every message logged from a RPC endpoint
|
|
method.
|
|
|
|
:returns: the context for the request dispatched in the current thread
|
|
"""
|
|
return getattr(_STORE, _KEY, None)
|
|
|
|
|
|
@_deprecated(as_of=_VERSION)
|
|
def set_local_context(ctxt):
|
|
_set_local_context(ctxt)
|
|
|
|
|
|
def _set_local_context(ctxt):
|
|
"""Set the request context for the current thread.
|
|
|
|
:param ctxt: a deserialized request context
|
|
:type ctxt: dict
|
|
"""
|
|
setattr(_STORE, _KEY, ctxt)
|
|
|
|
|
|
@_deprecated(as_of=_VERSION)
|
|
def clear_local_context():
|
|
_clear_local_context()
|
|
|
|
|
|
def _clear_local_context():
|
|
"""Clear the request context for the current thread."""
|
|
delattr(_STORE, _KEY)
|