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