Source code for cosapp.patterns.visitor
import abc
from typing import List
[docs]
class Component(metaclass=abc.ABCMeta):
"""Abstract Base Class for visited components"""
__slots__ = ()
[docs]
@abc.abstractmethod
def accept(self, visitor) -> None:
"""Determines class-dependent course of action when visited by `visitor`"""
pass
[docs]
class Visitor:
"""Base class for visitors"""
[docs]
def visit_system(self, system) -> None:
pass
[docs]
def visit_port(self, port) -> None:
pass
[docs]
def visit_driver(self, driver) -> None:
pass
[docs]
def send(visitor: Visitor, components: List[Component]):
"""Send a visitor to a list of generic components"""
for component in components:
component.accept(visitor)