Define a frozen served record with explicit scientific property metadata.


from dataclasses import replace
from typing import Annotated

from httk.core import DataEntryRecord, Property, content_id, entry_record


@entry_record("example.measurement")
class Measurement(DataEntryRecord):
    """An energy measurement with a local sample label.

    :param energy: Energy per atom, in eV.
    :param label: A local sample label, not published as an OPTIMADE attribute.
    """

    energy: Annotated[float, Property(description="Energy per atom.", unit="eV")]
    label: str


measurement = Measurement(-1.2, "sample-1")
identified = replace(measurement, id="example-1-1", immutable_id="example-1-1~1")
assert measurement == identified
assert content_id(measurement) == content_id(identified)
assert "_httk_custom_label" not in Measurement.entry_type_definition().properties
print(Measurement.entry_type_definition().served_form().name)
print(measurement.energy, measurement.label)