all: decouple context visitor
[mdis.git] / src / mdis / visitor.py
1 import contextlib as _contextlib
2
3 from . import dispatcher as _dispatcher
4
5
6 class VisitorMeta(_dispatcher.DispatcherMeta):
7 pass
8
9
10 class Visitor(_dispatcher.Dispatcher, metaclass=VisitorMeta):
11 @_dispatcher.Hook(object)
12 def dispatch_object(self, instance):
13 return instance
14
15
16 class ContextVisitor(Visitor):
17 @_dispatcher.Hook(object)
18 @_contextlib.contextmanager
19 def dispatch_object(self, instance):
20 yield super().__call__(instance=instance)