Skip to content

config

General OPTIMADE configuration models.

DEFAULT_CACHE_CONFIG_VALUES = {'expireTime': 60 * 60 * 24, 'tag': 'optimade'} module-attribute

Set the expireTime and tag to default values for the data cache.

OPTIMADEConfig

Bases: AttrDict

OPTIMADE configuration.

Source code in oteapi_optimade/models/config.py
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
class OPTIMADEConfig(AttrDict):
    """OPTIMADE configuration."""

    # OTEAPI-specific attributes
    downloadUrl: Annotated[
        Optional[OPTIMADEUrl],
        Field(description="Either a base OPTIMADE URL or a full OPTIMADE URL."),
    ] = None

    mediaType: Annotated[
        Optional[Literal["application/vnd.optimade+json", "application/vnd.optimade"]],
        BeforeValidator(lambda x: x.lower() if isinstance(x, str) else x),
        Field(
            description="The registered strategy name for OPTIMADEParseStrategy.",
        ),
    ] = None

    # OPTIMADE parse result attributes
    optimade_config: Annotated[
        Optional[OPTIMADEConfig],
        Field(description="A pre-existing instance of this OPTIMADE configuration."),
    ] = None

    # OPTIMADE-specific attributes
    version: Annotated[
        str,
        Field(
            description="The version part of the OPTIMADE versioned base URL.",
            pattern=r"^v[0-9]+(\.[0-9]+){0,2}$",
        ),
    ] = "v1"

    endpoint: Annotated[
        Literal["references", "structures"],
        Field(
            description="Supported OPTIMADE entry resource endpoint.",
        ),
    ] = "structures"

    query_parameters: Annotated[
        Optional[OPTIMADEQueryParameters],
        Field(
            description="URL query parameters to be used in the OPTIMADE query.",
        ),
    ] = None

    datacache_config: Annotated[
        DataCacheConfig,
        Field(
            description="Configuration options for the local data cache.",
        ),
    ] = DataCacheConfig(**DEFAULT_CACHE_CONFIG_VALUES)

    use_dlite: Annotated[
        bool,
        Field(
            description="Whether or not to store the results in a DLite Collection.",
        ),
    ] = False

    @field_validator("datacache_config", mode="after")
    @classmethod
    def _default_datacache_config(
        cls, datacache_config: DataCacheConfig
    ) -> DataCacheConfig:
        """Use default values for `DataCacheConfig` if not supplied."""
        original_set_values = len(datacache_config.model_fields_set)

        for field, default_value in DEFAULT_CACHE_CONFIG_VALUES.items():
            if field in datacache_config.model_fields_set:
                # Use the set value instead of the default
                continue
            setattr(datacache_config, field, default_value)

        if len(datacache_config.model_fields_set) > original_set_values:
            # Re-validate model and return it
            return datacache_config.model_validate(
                {
                    field: field_value
                    for field, field_value in datacache_config.model_dump().items()
                    if field in datacache_config.model_fields_set
                }
            )
        return datacache_config

datacache_config: Annotated[DataCacheConfig, Field(description='Configuration options for the local data cache.')] = DataCacheConfig(**DEFAULT_CACHE_CONFIG_VALUES) class-attribute instance-attribute

downloadUrl: Annotated[Optional[OPTIMADEUrl], Field(description='Either a base OPTIMADE URL or a full OPTIMADE URL.')] = None class-attribute instance-attribute

endpoint: Annotated[Literal['references', 'structures'], Field(description='Supported OPTIMADE entry resource endpoint.')] = 'structures' class-attribute instance-attribute

mediaType: Annotated[Optional[Literal['application/vnd.optimade+json', 'application/vnd.optimade']], BeforeValidator(lambda x: x.lower() if isinstance(x, str) else x), Field(description='The registered strategy name for OPTIMADEParseStrategy.')] = None class-attribute instance-attribute

optimade_config: Annotated[Optional[OPTIMADEConfig], Field(description='A pre-existing instance of this OPTIMADE configuration.')] = None class-attribute instance-attribute

query_parameters: Annotated[Optional[OPTIMADEQueryParameters], Field(description='URL query parameters to be used in the OPTIMADE query.')] = None class-attribute instance-attribute

use_dlite: Annotated[bool, Field(description='Whether or not to store the results in a DLite Collection.')] = False class-attribute instance-attribute

version: Annotated[str, Field(description='The version part of the OPTIMADE versioned base URL.', pattern='^v[0-9]+(\\.[0-9]+){0,2}$')] = 'v1' class-attribute instance-attribute

OPTIMADEDLiteConfig

Bases: OPTIMADEConfig

OPTIMADE configuration when using the DLite-specific strategies.

Source code in oteapi_optimade/models/config.py
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
class OPTIMADEDLiteConfig(OPTIMADEConfig):
    """OPTIMADE configuration when using the DLite-specific strategies."""

    # OTEAPI-specific attributes
    mediaType: Annotated[
        Optional[Literal["application/vnd.optimade+dlite"]],
        BeforeValidator(lambda x: x.lower() if isinstance(x, str) else x),
        Field(
            description="The registered strategy name for OPTIMADEDLiteParseStrategy.",
        ),
    ] = None  # type: ignore[assignment]

    # Dlite specific attributes
    collection_id: Annotated[
        Optional[str],
        Field(description="A reference to a DLite Collection."),
    ] = None

collection_id: Annotated[Optional[str], Field(description='A reference to a DLite Collection.')] = None class-attribute instance-attribute

mediaType: Annotated[Optional[Literal['application/vnd.optimade+dlite']], BeforeValidator(lambda x: x.lower() if isinstance(x, str) else x), Field(description='The registered strategy name for OPTIMADEDLiteParseStrategy.')] = None class-attribute instance-attribute