defl/defl/_override_.py
2024-09-11 11:14:03 -04:00

49 lines
1.2 KiB
Python

import atexit
import itertools
import select
import toml
from ._logger_ import log
from ._ansii_ import cl
from ._typing_ import *
def OverriderResolveFunc(func: Callable):
func.overrideResolve = True
return func
class Overrider(Dict):
__slots__ = ('__data__', )
__data__: dict[str, Any]
@property
def result(_):
for i in reversed(_.__data__.values()):
if i is not Undefined:
try:
if callable(i) and (i.overrideResolve is True or i.orr is True):
return i()
except AttributeError:
pass
return i
return Undefined
@property
def r(_):
return _.result
def __init__(_, *args, default: Any = Undefined):
_.__data__ = {'default': default} | {k: Undefined for k in args}
def __getattr__(_, key) -> Any:
return _.__data__[key]
def __getitem__(_, key) -> Any:
return _.__data__[key]
def __setattr__(_, key, val) -> None:
if key == '__data__':
return object.__setattr__(_, key, val)
elif key in _.__data__:
_.__data__[key] = val
else:
raise AttributeError()