Source code for crappy.actuator.actuator

# coding: utf-8

from .._global import DefinitionError


[docs]class MetaActuator(type): """This metaclass will just check if the actuator are defined properly. They must have at least an ``open``, a ``stop``, a ``close`` and either a ``set_speed`` or a ``set_position`` method. """ classes = {} needed_methods = ["open", "stop", ('set_speed', 'set_position'), 'close'] def __new__(mcs, name: str, bases: tuple, dict_: dict) -> type: return type.__new__(mcs, name, bases, dict_) def __init__(cls, name: str, bases: tuple, dict_: dict) -> None: type.__init__(cls, name, bases, dict_) # This is the important line if name in MetaActuator.classes: raise DefinitionError("Cannot redefine " + name + " class") if name == "Actuator": return for m in MetaActuator.needed_methods: if isinstance(m, tuple): ok = False for n in m: if n in dict_: ok = True break if not ok: raise DefinitionError( name + " class needs at least one of these methods: " + str(m)) else: if m not in dict_: raise DefinitionError(name + " class needs the method " + str(m)) MetaActuator.classes[name] = cls
class Actuator(metaclass=MetaActuator): pass