httk.core.property_definitions¶
First-class OPTIMADE property and entry-type definitions.
An OPTIMADE property definition is a self-describing JSON document giving a
property’s canonical identifier, type, unit, requirements, and human-readable
description. An entry-type definition bundles the property definitions of one
entry type (structures, references, …) together with the entry type’s
own description.
This module models both as immutable Python objects:
PropertyDefinitionwraps one full property-definition document. It can be built from a vendored OPTIMADE definition (PropertyDefinition.from_optimade()) or generated from a compact description (PropertyDefinition.from_simple()).EntryTypeDefinitionwraps an entry type’s description and the ordered mapping of its property definitions, and can beextended()with database-specific custom properties.
The vendored OPTIMADE standard definitions shipped with httk-core (the
references, files, and calculations entry types) are loaded through
load_entry_type_definition() / standard_entry_type(). The
authoritative, supported copies are the JSON files checked in under
httk/core/optimade_defs/ (see the README there).
On the “1.2” definition-format stamp: PropertyDefinition.from_simple()
generates only property-definition features that already exist in format
"1.2" of the OPTIMADE property-definition schema, so every generated
definition is stamped x-optimade-definition.format == "1.2". The definition
format is versioned in lockstep with the OPTIMADE specification and is only
bumped when a definition actually uses features introduced by a newer format;
custom generated definitions therefore keep the "1.2" stamp even for
entry types (such as calculations) whose specification version is newer.
Attributes¶
Classes¶
An immutable wrapper around one full OPTIMADE property definition. |
|
An immutable OPTIMADE entry-type definition. |
Functions¶
|
Register a database-specific OPTIMADE property-name |
|
Return the registered database-specific property-name prefixes. |
|
Load a vendored OPTIMADE entry-type definition JSON from a package. |
|
Return one of httk-core's vendored standard OPTIMADE entry types. |
Module Contents¶
- httk.core.property_definitions.PROPERTY_DEFINITION_META_SCHEMA = 'https://schemas.optimade.org/meta/v1.2/optimade/property_definition.json'[source]¶
- httk.core.property_definitions.register_definition_prefix(prefix: str, id_base: str) None[source]¶
Register a database-specific OPTIMADE property-name
prefix.A custom property served by a database MUST use such a prefix (see the OPTIMADE specification, “Database-Specific Properties”). Once registered, a property name carrying
prefixgets its$idsynthesized underid_basebyPropertyDefinition.from_simple(), andEntryTypeDefinition.extended()accepts it as a custom property.prefixmust be a lower-case alphanumeric token wrapped in single underscores (matching_[a-z0-9]+_); anything else raises a clearValueError. Re-registering an existing prefix overwrites its base.
- httk.core.property_definitions.known_definition_prefixes() tuple[str, Ellipsis][source]¶
Return the registered database-specific property-name prefixes.
The tuple reflects the current state of the prefix registry (see
register_definition_prefix());_httk_and_omdb_are pre-registered.
- class httk.core.property_definitions.PropertyDefinition(name: str, payload: collections.abc.Mapping[str, Any])[source]¶
An immutable wrapper around one full OPTIMADE property definition.
Instances are constructed from a vendored definition document (
from_optimade()) or generated from a compact description (from_simple()). The wrapped document is always deep-copied on the way in and out, so an instance never shares mutable state with its inputs or its callers.- classmethod from_optimade(name: str, definition: collections.abc.Mapping[str, Any]) Self[source]¶
Wrap a full vendored OPTIMADE property definition.
definitionmust at least carry$id,description,x-optimade-type, andtype; a clearValueErroris raised otherwise. The document is deep-copied.
- classmethod from_simple(name: str, *, description: str, fulltype: str = 'string', unit: str | None = None, dimensions: collections.abc.Mapping[str, Any] | None = None, dict_properties: collections.abc.Mapping[str, str] | None = None, metadata_definition: collections.abc.Mapping[str, Any] | None = None, required_response: bool = False, definition_id: str | None = None) Self[source]¶
Generate a property definition from a compact description.
This mirrors the OPTIMADE property-definition generator: it emits the
$schemameta-schema reference, a synthesized$id(under the base registered for a matching prefix viaregister_definition_prefix()— e.g.httk.orgfor_httk_/_omdb_— underschemas.optimade.orgotherwise, unlessdefinition_idoverrides it), a title, thedescription, the OPTIMADE type derived fromfulltype("string","integer","float","boolean","timestamp","dict", or"list of ..."), thex-optimade-unit(with an ångström unit definition whenunit == "angstrom"), thex-optimade-definitionstamp (format"1.2"; see the module docstring), the JSONtypewith nullability derived fromrequired_response,itemsfor lists, adate-timeformat for timestamps, innerpropertiesfor dicts (fromdict_properties),x-optimade-dimensionsfromdimensions, and anx-optimade-metadata-definition(explicit, or a generatedlist_axesdefinition whendimensionsis given).The result is implementation-neutral: per-deployment
sortableandresponse-defaultflags are layered on later viawith_implementation().
- property requirements: collections.abc.Mapping[str, Any][source]¶
- property dimensions: collections.abc.Mapping[str, Any] | None[source]¶
- property metadata_definition: collections.abc.Mapping[str, Any] | None[source]¶
- with_implementation(*, sortable: bool | None = None, response_default: bool | None = None) Self[source]¶
Return a copy carrying this deployment’s implementation flags.
Adds an
x-optimade-implementationobject with thesortableandresponse-defaultkeys that are provided (aNoneargument leaves that key unset), and — whensortableis given — mirrors it in a top-levelsortablefield. The original instance is untouched.
- class httk.core.property_definitions.EntryTypeDefinition(name: str, description: str, properties: collections.abc.Mapping[str, PropertyDefinition])[source]¶
An immutable OPTIMADE entry-type definition.
Bundles the entry type’s
nameanddescriptionwith an insertion-ordered mapping ofPropertyDefinitionobjects (one per described property). A standard definition typically describes more properties than any given deployment serves; the served subset is chosen separately (anEntryProvidernames it through itscolumns()).- classmethod from_optimade(name: str, entrytype: collections.abc.Mapping[str, Any]) Self[source]¶
Build an entry-type definition from a vendored OPTIMADE entry type.
entrytypeis the vendored document shape: adescriptionstring and apropertiesmapping of property name to full property definition. A clearValueErroris raised when either is missing.
- property properties: collections.abc.Mapping[str, PropertyDefinition][source]¶
- extended(extra: collections.abc.Mapping[str, PropertyDefinition], *, allow_unprefixed: bool = False) Self[source]¶
Return a copy with
extracustom property definitions merged in.Each name in
extraMUST be new (a collision with an existing property raisesValueErrornaming it) and, unlessallow_unprefixedis set, MUST carry a registered database-specific prefix (seeregister_definition_prefix()/known_definition_prefixes()); a custom property that does not is rejected with aValueErrorexplaining the OPTIMADE prefix rule.
- httk.core.property_definitions.load_entry_type_definition(package: str, name: str) EntryTypeDefinition[source]¶
Load a vendored OPTIMADE entry-type definition JSON from a package.
Reads
optimade_defs/<name>.jsonfrompackage(viaimportlib.resources) and models it as anEntryTypeDefinition. Results are cached per(package, name).
- httk.core.property_definitions.standard_entry_type(name: str) EntryTypeDefinition[source]¶
Return one of httk-core’s vendored standard OPTIMADE entry types.
Supported names are
"references","files", and"calculations"; an unknown name raises aValueErrorlisting the known ones. Thestructuresstandard is vendored by httk-atomistic, not httk-core.