| | import logging |
| | import time |
| | from abc import ABC |
| |
|
| |
|
| | class AbstractPump: |
| |
|
| | def __init__(self, com_port: str): |
| | self.com_port = com_port |
| | self.dictionary = {} |
| | self.logger = logging.getLogger("pump") |
| |
|
| | def dose_liquid(self, amount_in_ml: float, rate_ml_per_minute: float = 1): |
| | """dose liquid""" |
| | self.logger.info("dosing liquid") |
| | self.logger.info(f"pretending dosing {amount_in_ml} at {rate_ml_per_minute} ml/min") |
| | return 1 |
| |
|
| |
|
| |
|
| | class AbstractBalance: |
| |
|
| | def __init__(self, com_port: str): |
| | self.com_port = com_port |
| | self._value = None |
| | self.logger = logging.getLogger("balance") |
| |
|
| | @property |
| | def setter_value(self): |
| | return self._value |
| |
|
| | @setter_value.setter |
| | def setter_value(self, value): |
| | self._value = value |
| |
|
| | def weigh_sample(self): |
| | time.sleep(1) |
| | self.logger.info(f"Weighing sample using {self.com_port}") |
| | return 1 |
| |
|
| | def dose_solid(self, amount_in_mg: float): |
| | """this function is used to dose solid""" |
| | time.sleep(1) |
| | self.logger.info(f"Dosing {amount_in_mg} mg using {self.com_port}") |
| | return 1 |
| |
|
| | def _helper(self): |
| | """helper function will not be extracted and displayed over function panel""" |
| | pass |
| |
|
| |
|
| |
|
| |
|
| | class AbstractSDL(ABC): |
| | def __init__(self, pump: AbstractPump, balance: AbstractBalance): |
| | self.pump = pump |
| | self.balance = balance |
| | self.logger = logging.getLogger(f"logger_name") |
| |
|
| | def analyze(self): |
| | self.logger.info("analyze") |
| | time.sleep(1) |
| | return 1 |
| |
|
| |
|
| | def dose_solid(self, |
| | amount_in_mg: float = 5, |
| | solid_name: str = "Acetaminophen" |
| | ): |
| | """dose current chemical""" |
| | print("dosing solid") |
| | self.balance.dose_solid(amount_in_mg=amount_in_mg) |
| | self.balance.weigh_sample() |
| | time.sleep(1) |
| | self.logger.info(f"dosing solid {amount_in_mg} mg of {solid_name}") |
| | return 1 |
| |
|
| | def dose_solvent(self, |
| | solvent_name: str = "Methanol", |
| | amount_in_ml: float = 5, |
| | rate_ml_per_minute: float = 1 |
| | ): |
| | print("dosing liquid") |
| | self.logger.info(f"dosing {amount_in_ml} ml of {solvent_name} solvent at {rate_ml_per_minute} ml/min") |
| | time.sleep(1) |
| | return 1 |
| |
|
| |
|
| | def equilibrate(self, |
| | temp: float, |
| | duration: float |
| | ): |
| | print("equilibrate") |
| | self.logger.info(f"equilibrate at {temp} for {duration}") |
| | time.sleep(1) |
| |
|
| | def simulate_error(self): |
| | raise ValueError("some error") |
| |
|
| | def _send_command(self): |
| | """helper function""" |
| | pass |
| |
|
| |
|
| |
|
| | |
| | balance = AbstractBalance("Fake com port 1") |
| | pump = AbstractPump("Fake com port 2") |
| | sdl = AbstractSDL(pump, balance) |
| |
|
| |
|
| | if __name__ == "__main__": |
| | import ivoryos |
| | ivoryos.run(__name__) |