Source code for labgrid.factory

[docs]class TargetFactory: def __init__(self): self.resources = {} self.drivers = {}
[docs] def reg_resource(self, cls): """Register a resource with the factory. Returns the class to allow using it as a decorator.""" self.resources[cls.__name__] = cls return cls
[docs] def reg_driver(self, cls): """Register a driver with the factory. Returns the class to allow using it as a decorator.""" self.drivers[cls.__name__] = cls return cls
[docs] def make_resource(self, target, resource, args): assert isinstance(args, dict) r = self.resources[resource](target, **args) return r
[docs] def make_target(self, name, config, *, env=None): from .target import Target role = config.get('role', name) target = Target(name, env=env) for resource, args in config.get('resources', {}).items(): r = self.make_resource(target, resource, args) for driver, args in config.get('drivers', {}).items(): assert isinstance(args, dict) d = self.drivers[driver](target, **args) return target
#: Global TargetFactory instance #: #: This instance is used to register Resource and Driver classes so that #: Targets can be created automatically from YAML files. target_factory = TargetFactory()