Source code for simdb.database.models.metadata
from typing import Any, Dict
from sqlalchemy import Column, ForeignKey, Index
from sqlalchemy import types as sql_types
from simdb.docstrings import inherit_docstrings
from simdb.remote.models import MetadataData
from .base import Base
[docs]
@inherit_docstrings
class MetaData(Base):
"""
Class to represent metadata in the database ORM.
"""
__tablename__ = "metadata"
id = Column(sql_types.Integer, primary_key=True)
sim_id = Column(sql_types.Integer, ForeignKey("simulations.id"), index=True)
element = Column(sql_types.String(250), nullable=False)
value = Column(sql_types.PickleType(0), nullable=True)
def __init__(self, key: str, value: Any) -> None:
self.element = key
self.value = value
def __str__(self):
return f"{self.element}: {self.value}"
[docs]
@classmethod
def from_data(cls, data: Dict) -> "MetaData":
meta = MetaData(data["element"], data["value"])
return meta
[docs]
@classmethod
def from_data_model(cls, data: MetadataData) -> "MetaData":
meta = MetaData(data.element, data.value)
return meta
[docs]
def data(self, recurse: bool = False) -> Dict[str, str]:
data = {
"element": self.element,
"value": self.value,
}
return data
[docs]
def to_model(self) -> MetadataData:
return MetadataData(element=self.element, value=self.value)
Index("metadata_index", MetaData.sim_id, MetaData.element, unique=True)