Source code for caspia.meadow.utils

import asyncio


[docs]def all_subclasses(cls): subclasses = set() for subclass in cls.__subclasses__(): subclasses.add(subclass) subclasses = subclasses | all_subclasses(subclass) return subclasses
[docs]def is_future(target): return isinstance(target, asyncio.Future)
[docs]async def acall(target, *args, **kwargs): if asyncio.iscoroutinefunction(target) or is_future(target): return await target(*args, **kwargs) else: result = target(*args, **kwargs) if asyncio.iscoroutine(result): return await result else: return result
[docs]class classproperty: def __init__(self, func): self.func = func def __get__(self, instance, owner): return self.func(owner)