Bases: Enum
Enumeration of aggregate values
Source code in optimade/models/links.py25
26
27
28
29
30
31 | class Aggregate(Enum):
"""Enumeration of aggregate values"""
OK = "ok"
TEST = "test"
STAGING = "staging"
NO = "no"
|
Bases: Enum
Enumeration of link_type values
Source code in optimade/models/links.py16
17
18
19
20
21
22 | class LinkType(Enum):
"""Enumeration of link_type values"""
CHILD = "child"
ROOT = "root"
EXTERNAL = "external"
PROVIDERS = "providers"
|
Bases: EntryResource
A Links endpoint resource object
Source code in optimade/models/links.py 98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120 | class LinksResource(EntryResource):
"""A Links endpoint resource object"""
type: Annotated[
Literal["links"],
StrictField(
description="These objects are described in detail in the section Links Endpoint",
pattern="^links$",
),
] = "links"
attributes: Annotated[
LinksResourceAttributes,
StrictField(
description="A dictionary containing key-value pairs representing the Links resource's properties.",
),
]
@model_validator(mode="after")
def relationships_must_not_be_present(self) -> "LinksResource":
if self.relationships or "relationships" in self.model_fields_set:
raise ValueError('"relationships" is not allowed for links resources')
return self
|
116
117
118
119
120 | @model_validator(mode="after")
def relationships_must_not_be_present(self) -> "LinksResource":
if self.relationships or "relationships" in self.model_fields_set:
raise ValueError('"relationships" is not allowed for links resources')
return self
|
Bases: Attributes
Links endpoint resource object attributes
Source code in optimade/models/links.py34
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 | class LinksResourceAttributes(Attributes):
"""Links endpoint resource object attributes"""
name: Annotated[
str,
StrictField(
description="Human-readable name for the OPTIMADE API implementation, e.g., for use in clients to show the name to the end-user.",
),
]
description: Annotated[
str,
StrictField(
description="Human-readable description for the OPTIMADE API implementation, e.g., for use in clients to show a description to the end-user.",
),
]
base_url: Annotated[
JsonLinkType | None,
StrictField(
description="JSON API links object, pointing to the base URL for this implementation",
),
]
homepage: Annotated[
JsonLinkType | None,
StrictField(
description="JSON API links object, pointing to a homepage URL for this implementation",
),
]
link_type: Annotated[
LinkType,
StrictField(
title="Link Type",
description="""The type of the linked relation.
MUST be one of these values: 'child', 'root', 'external', 'providers'.""",
),
]
aggregate: Annotated[
Aggregate | None,
StrictField(
title="Aggregate",
description="""A string indicating whether a client that is following links to aggregate results from different OPTIMADE implementations should follow this link or not.
This flag SHOULD NOT be indicated for links where `link_type` is not `child`.
If not specified, clients MAY assume that the value is `ok`.
If specified, and the value is anything different than `ok`, the client MUST assume that the server is suggesting not to follow the link during aggregation by default (also if the value is not among the known ones, in case a future specification adds new accepted values).
Specific values indicate the reason why the server is providing the suggestion.
A client MAY follow the link anyway if it has reason to do so (e.g., if the client is looking for all test databases, it MAY follow the links marked with `aggregate`=`test`).
If specified, it MUST be one of the values listed in section Link Aggregate Options.""",
),
] = Aggregate.OK
no_aggregate_reason: Annotated[
str | None,
StrictField(
description="""An OPTIONAL human-readable string indicating the reason for suggesting not to aggregate results following the link.
It SHOULD NOT be present if `aggregate`=`ok`.""",
),
] = None
|
330
331
332
333
334
335
336
337
338 | @model_validator(mode="after")
def check_illegal_attributes_fields(self) -> "Attributes":
illegal_fields = ("relationships", "links", "id", "type")
for field in illegal_fields:
if hasattr(self, field):
raise ValueError(
f"{illegal_fields} MUST NOT be fields under Attributes"
)
return self
|