import datetime from bson import ObjectId from mongoengine import * from paveit.helper import fetch_recursive, mongo_to_dict from .components import ( ComponentsServoHydraulicMachineKMD, ComponentsServoHydraulicMachineLVDT, ComponentsServoHydraulicMachineTemperatureControl, ) from .enumeration import Labtest, LabtestsEnum from .usermanagement import Organisation # ??? Labtest: Ist das richtig hier? class Experiment(EmbeddedDocument): test = LazyReferenceField(Labtest, required=True) config = ListField(StringField(), required=True) class MachineBase(Document): company = StringField(required=True) name = StringField(required=True) department = StringField(required=False) room = StringField(required=False) serialnumber = StringField(required=True) extrainfo = StringField(required=False) year_manufacture = IntField(min=1900, max=2100, required=False) tests = ListField(EmbeddedDocumentField(Experiment), required=True) # Standartkomponenten festlegen: wenn ortsveränderlich, dann leer lassen component_temperature = LazyReferenceField(ComponentsServoHydraulicMachineTemperatureControl, required=True) component_kmd = LazyReferenceField(ComponentsServoHydraulicMachineKMD, required=False) component_lvdt = ListField(LazyReferenceField(ComponentsServoHydraulicMachineLVDT), required=False) date = DateTimeField(default=datetime.datetime.now, wtf_options={"render_kw": { "step": "60" }}) org_id = LazyReferenceField(Organisation, required=True, reverse_delete_rule=CASCADE) tags = ListField(StringField()) def to_dict(self): # convert data to dict data = fetch_recursive(self) data = mongo_to_dict(data) return data def get_config(self, testname: LabtestsEnum): test_id = Labtest.objects(org_id=self.org_id, test=testname).first() if not test_id: return [] test_id = test_id.id config_array = [] for test in self.tests: if test.test.id == test_id: config_array = test.config return config_array meta = { 'allow_inheritance': True, 'index_opts': {}, 'index_background': True, 'index_cls': False, 'auto_create_index': True, 'collection': 'machines', "db_alias": 'dblabtests', 'indexes': [ [("name", 1)], ] } class ServoHydraulicMachine(MachineBase): pass