Source code for django_dd_logger.local

"""
Based on https://github.com/mitsuhiko/werkzeug/blob/master/werkzeug/local.py

Copyright (c) 2013 by the Werkzeug Team, see
https://github.com/mitsuhiko/werkzeug/blob/master/AUTHORS for more details.

TODO: consider replacing with https://github.com/django/asgiref/#threadlocal-replacement
"""


__all__ = ["Local", "release_local"]

try:
    from greenlet import getcurrent as get_ident
except ImportError:
    try:
        # noinspection PyCompatibility
        from _thread import get_ident
    except ImportError:
        # noinspection PyCompatibility
        from _thread import get_ident


[docs] class Local: __slots__ = ("__storage__", "__ident_func__") def __init__(self): object.__setattr__(self, "__storage__", {}) object.__setattr__(self, "__ident_func__", get_ident) def __iter__(self): return iter(self.__storage__.items()) def __release_local__(self): self.__storage__.pop(self.__ident_func__(), None) def __getattr__(self, name): try: return self.__storage__[self.__ident_func__()][name] except KeyError: raise AttributeError(name) def __setattr__(self, name, value): ident = self.__ident_func__() storage = self.__storage__ try: storage[ident][name] = value except KeyError: storage[ident] = {name: value} def __delattr__(self, name): try: del self.__storage__[self.__ident_func__()][name] except KeyError: raise AttributeError(name)
[docs] def release_local(local): local.__release_local__()