Source code for simdb.database.models.metadata
from typing import Dict, Any
from sqlalchemy import Column, types as sql_types, ForeignKey, Index
from .base import Base
from .simulation import Simulation
from ...docstrings import inherit_docstrings
[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(Simulation.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 "{}: {}".format(self.element, self.value)
[docs]
@classmethod
def from_data(cls, data: Dict) -> "MetaData":
meta = MetaData(data["element"], data["value"])
return meta
[docs]
def data(self, recurse: bool = False) -> Dict[str, str]:
data = dict(
element=self.element,
value=self.value,
)
return data
Index("metadata_index", MetaData.sim_id, MetaData.element, unique=True)