25 lines
684 B
Python
25 lines
684 B
Python
import asyncio
|
|
from copy import copy, deepcopy
|
|
|
|
|
|
class Visitable:
|
|
default_scripts = dict()
|
|
|
|
def __init__(self, *visitors, **scripts):
|
|
self.visitors = list(visitors)
|
|
self.scripts = deepcopy(self.default_scripts)
|
|
self.scripts.update(scripts)
|
|
|
|
def visitor(self, name):
|
|
for visitor in self.visitors:
|
|
if name.lower() in (
|
|
type(visitor).__name__.lower(),
|
|
getattr(visitor, 'name', '')
|
|
):
|
|
return visitor
|
|
|
|
def variable(self, name):
|
|
for visitor in self.visitors:
|
|
if getattr(visitor, name, None) is not None:
|
|
return getattr(visitor, name)
|