Source code for pythonlab.resources.services.labware_storage

from typing import Optional

from pythonlab.resource import ServiceResource, Position, LabwareResource
import logging


[docs] class LabwareStorageResource(ServiceResource): """ multi-cavity / single cavity ? associated labwares, like lids, stacks :param Resource: [description] :type Resource: [type] """ def __init__(self, proc, name: str | None, capacity: int = 1): super().__init__(proc=proc, name=name) self._capacity = capacity self._free_positions = [i for i in range(capacity)] self._iter_free = iter(self._free_positions) self._start_position = Position(self, 0) @property def capacity(self): return self._capacity @property def next_free_position(self): try: return next(self._iter_free) except: return None
[docs] def init(self): logging.debug("init labware storage")
[docs] def eject(self, labware: LabwareResource, **kwargs): kwargs.update(dict(fct="eject", duration=10)) self.proc.add_process_step(self, [labware], **kwargs)
[docs] def store(self, labware: LabwareResource, position: Optional[int] = None, **kwargs): kwargs.update(dict(fct="store", position=position, duration=10)) self.proc.add_process_step(self, [labware], **kwargs)
[docs] def get_next_free_position(self): for free_pos in self._free_positions: yield Position(self, free_pos)
[docs] class LabwareStorageResourcePool(LabwareStorageResource): pass