Skip to content

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 field included.

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

QueryState

Enumeration of possible states for a Gateway Query.

The states are enumerated here in the expected evolvement.

CREATED

FINISHED

IN_PROGRESS

STARTED

Back to top