queries¶
Pydantic models/schemas for the Queries resource
QUERY_PARAMETERS
¶
Entry listing URL query parameters from the optimade
package (EntryListingQueryParams
).
OptimadeQueryParameters
pydantic-model
¶
Common OPTIMADE entry listing endpoint query parameters.
email_address: EmailStr
pydantic-field
¶
An email address of the user making the request. The email SHOULD be that of a person and not an automatic system. Example: http://example.com/v1/structures?email_address=user@example.com
filter: str
pydantic-field
¶
A filter string, in the format described in section API Filtering Format Specification of the specification.
include: str
pydantic-field
¶
A server MAY implement the JSON API concept of returning compound documents by utilizing the include
query parameter as specified by JSON API 1.0.
All related resource objects MUST be returned as part of an array value for the top-level included
field, see the section JSON Response Schema: Common Fields.
The value of include
MUST be a comma-separated list of "relationship paths", as defined in the JSON API. If relationship paths are not supported, or a server is unable to identify a relationship path a 400 Bad Request
response MUST be made.
The default value for include
is references
. This means references
entries MUST always be included under the top-level field included
as default, since a server assumes if include
is not specified by a client in the request, it is still specified as include=references
. Note, if a client explicitly specifies include
and leaves out references
, references
resource objects MUST NOT be included under the top-level field included
, as per the definition of included
, see section JSON Response Schema: Common Fields.
Note: A query with the parameter
include
set to the empty string means no related resource objects are to be returned under the top-level fieldincluded
.
page_above: ConstrainedIntValue
pydantic-field
¶
RECOMMENDED for use with value-based pagination: using page_above
/page_below
and page_limit
is RECOMMENDED. Example: Fetch up to 100 structures above sort-field value 4000 (in this example, server chooses to fetch results sorted by increasing id
, so page_above
value refers to an id
value): /structures?page_above=4000&page_limit=100
.
page_below: ConstrainedIntValue
pydantic-field
¶
RECOMMENDED for use with value-based pagination: using page_above
/page_below
and page_limit
is RECOMMENDED.
page_cursor: ConstrainedIntValue
pydantic-field
¶
RECOMMENDED for use with cursor-based pagination: using page_cursor
and page_limit
is RECOMMENDED.
page_limit: ConstrainedIntValue
pydantic-field
¶
Sets a numerical limit on the number of entries returned. See JSON API 1.0. The API implementation MUST return no more than the number specified. It MAY return fewer. The database MAY have a maximum limit and not accept larger numbers (in which case an error code -- 403 Forbidden -- MUST be returned). The default limit value is up to the API implementation to decide. Example: http://example.com/optimade/v1/structures?page_limit=100
page_number: ConstrainedIntValue
pydantic-field
¶
RECOMMENDED for use with page-based pagination: using page_number
and page_limit
is RECOMMENDED. It is RECOMMENDED that the first page has number 1, i.e., that page_number
is 1-based. Example: Fetch page 2 of up to 50 structures per page: /structures?page_number=2&page_limit=50
.
page_offset: ConstrainedIntValue
pydantic-field
¶
RECOMMENDED for use with offset-based pagination: using page_offset
and page_limit
is RECOMMENDED. Example: Skip 50 structures and fetch up to 100: /structures?page_offset=50&page_limit=100
.
response_fields: ConstrainedStrValue
pydantic-field
¶
A comma-delimited set of fields to be provided in the output. If provided, these fields MUST be returned along with the REQUIRED fields. Other OPTIONAL fields MUST NOT be returned when this parameter is present. Example: http://example.com/v1/structures?response_fields=last_modified,nsites
response_format: str
pydantic-field
¶
The output format requested (see section Response Format). Defaults to the format string 'json', which specifies the standard output format described in this specification. Example: http://example.com/v1/structures?response_format=xml
sort: ConstrainedStrValue
pydantic-field
¶
If supporting sortable queries, an implementation MUST use the sort
query parameter with format as specified by JSON API 1.0.
An implementation MAY support multiple sort fields for a single query. If it does, it again MUST conform to the JSON API 1.0 specification.
If an implementation supports sorting for an entry listing endpoint, then the /info/<entries>
endpoint MUST include, for each field name <fieldname>
in its data.properties.<fieldname>
response value that can be used for sorting, the key sortable
with value true
. If a field name under an entry listing endpoint supporting sorting cannot be used for sorting, the server MUST either leave out the sortable
key or set it equal to false
for the specific field name. The set of field names, with sortable
equal to true
are allowed to be used in the "sort fields" list according to its definition in the JSON API 1.0 specification. The field sortable
is in addition to each property description and other OPTIONAL fields. An example is shown in the section Entry Listing Info Endpoints.
QueryCreate
pydantic-model
¶
Model for creating new Query resources in the MongoDB
sort_not_supported(value)
classmethod
¶
Warn and reset value if sort
is supplied.
Source code in optimade_gateway/models/queries.py
@validator("query_parameters")
def sort_not_supported(
cls, value: OptimadeQueryParameters
) -> OptimadeQueryParameters:
"""Warn and reset value if `sort` is supplied."""
if value.sort:
warnings.warn(SortNotSupported())
value.sort = None
return value
QueryResource
pydantic-model
¶
OPTIMADE query resource for a gateway
QueryResourceAttributes
pydantic-model
¶
Attributes for an OPTIMADE gateway query
endpoint: str
pydantic-field
required
¶
The entry endpoint queried, e.g., 'structures'.
endpoint_model: Tuple[str, str]
pydantic-field
required
¶
The full importable path to the pydantic response model class (not an instance of the class). It should be a tuple of the Python module and the Class name.
gateway_id: str
pydantic-field
required
¶
The OPTIMADE gateway ID for this query.
query_parameters: OptimadeQueryParameters
pydantic-field
required
¶
OPTIMADE query parameters for entry listing endpoints used for this query.
response: Union[optimade.models.responses.EntryResponseMany, optimade.models.responses.ErrorResponse]
pydantic-field
¶
Response from gateway query.
state: QueryState
pydantic-field
¶
Current state of Gateway Query.
remove_endpoints_slashes(value)
classmethod
¶
Remove prep-/appended slashes (/
)
Source code in optimade_gateway/models/queries.py
@validator("endpoint")
def remove_endpoints_slashes(cls, value: str) -> str:
"""Remove prep-/appended slashes (`/`)"""
org_value = value
value = value.strip()
while value.startswith("/"):
value = value[1:]
while value.endswith("/"):
value = value[:-1]
if not value:
raise ValueError(
"endpoint must not be an empty string or be prep-/appended with slashes (`/`). "
f"Original value: {org_value!r}. Final value (after removing prep-/appended "
f"slashes): {value!r}"
)
# Temporarily only allow queries to "structures" endpoints.
if value != "structures":
raise NotImplementedError(
'OPTIMADE Gateway temporarily only supports queries to "structures" endpoints, '
'i.e.: endpoint="structures"'
)
return value