from typing import TYPE_CHECKING, Any, Optional, Type
if TYPE_CHECKING:
from LOGS.LOGSConnection import LOGSConnection
[docs]
class MinimalModelGenerator:
_entities = [
"Attachment",
"Bridge",
"Dataset",
"DataFormatInstrument",
"Method",
"DataFormat",
"Vendor",
"Notebook",
"NotebookExperiment",
"NotebookEntry",
"NotebookTemplate",
"LabNotebook",
"LabNotebookExperiment",
"LabNotebookEntry",
"Origin",
"Person",
"Project",
"Sample",
"SharedContent",
"InventoryItem",
"CustomType",
"CustomField",
]
[docs]
@classmethod
def createMapper(cls):
cls._mapper = {e: getattr(cls, f"get{e}MinimalClass")() for e in cls._entities}
cls._mapper.update({f"{e}Minimal": cls._mapper[e] for e in cls._entities})
@classmethod
def _typeByTypename(cls, typeName: str, fieldName: Optional[str]) -> Type:
if not hasattr(cls, "_mapper"):
cls.createMapper()
t = cls._mapper.get(typeName, None)
if not t:
raise ValueError(f"Unknown type '{typeName}' for field '{fieldName}'")
return t
[docs]
@classmethod
def MinimalFromSingle(
cls,
value: Any,
fieldType: str,
fieldName: Optional[str],
connection: Optional["LOGSConnection"],
) -> Any:
from LOGS.Entity.ConnectedEntity import ConnectedEntity
result = ConnectedEntity.checkAndConvertWithConnection(
value,
fieldType=cls._typeByTypename(fieldType, fieldName),
fieldName=fieldName,
allowNone=True,
connection=connection,
)
return result
[docs]
@classmethod
def MinimalFromList(
cls,
value: Any,
fieldType: str,
fieldName: Optional[str],
connection: Optional["LOGSConnection"],
) -> Any:
from LOGS.Entity.ConnectedEntity import ConnectedEntity
if isinstance(value, (int, str)):
value = {"id": value}
if isinstance(value, list):
l = []
for v in value:
if isinstance(v, (int, str)):
l.append({"id": v})
else:
l.append(v)
value = l
l = ConnectedEntity.checkListAndConvertWithConnection(
value,
fieldType=cls._typeByTypename(fieldType, fieldName),
fieldName=fieldName,
allowNone=True,
connection=connection,
)
result = [a for a in l if a]
if len(result) < 1:
return None
return result
[docs]
@classmethod
def getAttachmentMinimalClass(cls):
from LOGS.Entities.AttachmentMinimal import AttachmentMinimal
return AttachmentMinimal
[docs]
@classmethod
def getBridgeMinimalClass(cls):
from LOGS.Entities.BridgeMinimal import BridgeMinimal
return BridgeMinimal
[docs]
@classmethod
def getDatasetMinimalClass(cls):
from LOGS.Entities.DatasetMinimal import DatasetMinimal
return DatasetMinimal
[docs]
@classmethod
def getMethodMinimalClass(cls):
from LOGS.Entities.MethodMinimal import MethodMinimal
return MethodMinimal
[docs]
@classmethod
def getVendorMinimalClass(cls):
from LOGS.Entities.VendorMinimal import VendorMinimal
return VendorMinimal
[docs]
@classmethod
def getNotebookMinimalClass(cls):
return cls.getLabNotebookMinimalClass()
[docs]
@classmethod
def getLabNotebookMinimalClass(cls):
from LOGS.Entities.LabNotebookMinimal import LabNotebookMinimal
return LabNotebookMinimal
[docs]
@classmethod
def getNotebookExperimentMinimalClass(cls):
return cls.getLabNotebookExperimentMinimalClass()
[docs]
@classmethod
def getLabNotebookExperimentMinimalClass(cls):
from LOGS.Entities.LabNotebookExperimentMinimal import (
LabNotebookExperimentMinimal,
)
return LabNotebookExperimentMinimal
[docs]
@classmethod
def getNotebookEntryMinimalClass(cls):
return cls.getLabNotebookEntryMinimalClass()
[docs]
@classmethod
def getLabNotebookEntryMinimalClass(cls):
from LOGS.Entities.LabNotebookEntryMinimal import LabNotebookEntryMinimal
return LabNotebookEntryMinimal
[docs]
@classmethod
def getNotebookTemplateMinimalClass(cls):
return cls.getLabNotebookTemplateMinimalClass()
[docs]
@classmethod
def getLabNotebookTemplateMinimalClass(cls):
from LOGS.Entities.LabNotebookTemplateMinimal import LabNotebookTemplateMinimal
return LabNotebookTemplateMinimal
[docs]
@classmethod
def getOriginMinimalClass(cls):
from LOGS.Entities.OriginMinimal import OriginMinimal
return OriginMinimal
[docs]
@classmethod
def getPersonMinimalClass(cls):
from LOGS.Entities.PersonMinimal import PersonMinimal
return PersonMinimal
[docs]
@classmethod
def getProjectMinimalClass(cls):
from LOGS.Entities.ProjectMinimal import ProjectMinimal
return ProjectMinimal
[docs]
@classmethod
def getSampleMinimalClass(cls):
from LOGS.Entities.SampleMinimal import SampleMinimal
return SampleMinimal
[docs]
@classmethod
def getSharedContentMinimalClass(cls):
from LOGS.Entities.SharedContentMinimal import SharedContentMinimal
return SharedContentMinimal
[docs]
@classmethod
def getInventoryItemMinimalClass(cls):
from LOGS.Entities.InventoryItemMinimal import InventoryItemMinimal
return InventoryItemMinimal
[docs]
@classmethod
def getCustomTypeMinimalClass(cls):
from LOGS.Entities.CustomTypeMinimal import CustomTypeMinimal
return CustomTypeMinimal
[docs]
@classmethod
def getCustomFieldMinimalClass(cls):
from LOGS.Entities.CustomFieldMinimal import CustomFieldMinimal
return CustomFieldMinimal