# Path: src/circular/template/observer.py
# class ListProxy(list):
#     """
#         A wrapper around list objects for making them observable
#     """
# 
#     def __init__(self, lst):
#         this = []
#         for item in lst:
#             if isinstance(item, list):
#                 this.append(ListProxy(item))
#             elif isinstance(item, dict):
#                 this.append(DictProxy(item))
#             else:
#                 this.append(item)
#         super().__init__(this)
# 
# class DictProxy(dict):
#     """
#         A wrapper around dict objects for making them observable
#     """
# 
#     def __init__(self, dct):
#         this = {}
#         for key, val in dct.items():
#             if isinstance(val, list):
#                 this[key] = ListProxy(val)
#             elif isinstance(val, dict):
#                 this[key] = DictProxy(val)
#             else:
#                 this[key] = val
#         super().__init__(this)


import asyncio
from .observer import ListProxy, DictProxy
                val = asyncio.async(val)

                def set_later(future_val, attr=attr):
                    setattr(self, attr, future_val.result())

                val.add_done_callback(set_later)
            else:
                self._dct[attr] = val

    def __delattr__(self, attr):
        if attr.startswith('_'):
            super().__delattr__(attr)
        else:
            del self._dct[attr]

    def __repr__(self):
        return repr(self._dct)

    def __str__(self):
        return str(self._dct)

    def _get(self, name):
        if name in self._dct:
            return self._dct[name]
        if isinstance(self._base, Context):
            return self._base._get(name)
        return self._base[name]

    def _set(self, name, val):
        if isinstance(val, list):

# Path: src/circular/template/observer.py
# class ListProxy(list):
#     """
#         A wrapper around list objects for making them observable
#     """
# 
#     def __init__(self, lst):
#         this = []
#         for item in lst:
#             if isinstance(item, list):
#                 this.append(ListProxy(item))
#             elif isinstance(item, dict):
#                 this.append(DictProxy(item))
#             else:
#                 this.append(item)
#         super().__init__(this)
# 
# class DictProxy(dict):
#     """
#         A wrapper around dict objects for making them observable
#     """
# 
#     def __init__(self, dct):
#         this = {}
#         for key, val in dct.items():
#             if isinstance(val, list):
#                 this[key] = ListProxy(val)
#             elif isinstance(val, dict):
#                 this[key] = DictProxy(val)
#             else:
#                 this[key] = val
#         super().__init__(this)


# Path: src/circular/template/context.py
import asyncio
from .observer import ListProxy, DictProxy

                val = asyncio.async(val)

                def set_later(future_val, attr=attr):
                    setattr(self, attr, future_val.result())

                val.add_done_callback(set_later)
            else:
                self._dct[attr] = val

    def __delattr__(self, attr):
        if attr.startswith('_'):
            super().__delattr__(attr)
        else:
            del self._dct[attr]

    def __repr__(self):
        return repr(self._dct)

    def __str__(self):
        return str(self._dct)

    def _get(self, name):
        if name in self._dct:
            return self._dct[name]
        if isinstance(self._base, Context):
            return self._base._get(name)
        return self._base[name]

    def _set(self, name, val):
        if isinstance(val, list):

            self._dct[name] = ListProxy(val)