Source code for macrosynergy.management.types.generic
from ..decorators import argvalidation
[docs]class NoneTypeMeta(type):
"""
MetaClass to support type checks for `None`.
"""
def __instancecheck__(cls, instance):
return instance is None or isinstance(instance, type(None))
[docs]class NoneType(metaclass=NoneTypeMeta):
"""
Custom class definition for a NoneType that supports type checks for `None`.
"""
pass
[docs]class SubscriptableMeta(type):
"""
Convenience metaclass to allow subscripting of methods on a class.
"""
def __getitem__(cls, item):
if hasattr(cls, item) and callable(getattr(cls, item)):
return getattr(cls, item)
else:
raise KeyError(f"{item} is not a valid method name")
[docs]class ArgValidationMeta(type):
def __new__(cls, name, bases, dct: dict):
for key, value in dct.items():
if callable(value):
dct[key] = argvalidation(value)
return super().__new__(cls, name, bases, dct)