# Path: gengine/base/util.py
# class DictObjectProxy:
# 
#     def __init__(self, obj={}):
#         super().__setattr__("obj",obj)
# 
#     def __getattr__(self, name):
#         if not name in super().__getattribute__("obj"):
#             raise AttributeError
#         return super().__getattribute__("obj")[name]
# 
#     def __setattr__(self, key, value):
#         super().__getattribute__("obj")[key] = value


import threading
from gengine.base.util import DictObjectProxy


_local = threading.local()

def get_context():
    if not hasattr(_local, "context"):
        _local.context = DictObjectProxy()
    return _local.context

def reset_context():

# Path: gengine/base/util.py
# class DictObjectProxy:
# 
#     def __init__(self, obj={}):
#         super().__setattr__("obj",obj)
# 
#     def __getattr__(self, name):
#         if not name in super().__getattribute__("obj"):
#             raise AttributeError
#         return super().__getattribute__("obj")[name]
# 
#     def __setattr__(self, key, value):
#         super().__getattribute__("obj")[key] = value


# Path: gengine/base/context.py
import threading
from gengine.base.util import DictObjectProxy



_local = threading.local()

def get_context():
    if not hasattr(_local, "context"):
        _local.context = DictObjectProxy()
    return _local.context

def reset_context():

    _local.context = DictObjectProxy()