Source code for qcportal.molecules.models

from ..base_models import QueryModelBase, RestModelBase, QueryIteratorBase
from ..qcschema_v1 import Molecule, MoleculeIdentifiers


[docs] class MoleculeQueryFilters(QueryModelBase): molecule_id: list[int] | None = None molecule_hash: list[str] | None = None molecular_formula: list[str] | None = None identifiers: dict[str, list[str]] | None = None
[docs] class MoleculeModifyBody(RestModelBase): name: str | None = None comment: str | None = None identifiers: MoleculeIdentifiers | None = None overwrite_identifiers: bool = False
[docs] class MoleculeUploadOptions(RestModelBase): dummy: bool = True
[docs] class MoleculeQueryIterator(QueryIteratorBase[Molecule]): """ Iterator for molecule queries This iterator transparently handles batching and pagination over the results of a molecule query. """ def __init__(self, client, query_filters: MoleculeQueryFilters): """ Construct an iterator Parameters ---------- client QCPortal client object used to contact/retrieve data from the server query_filters The actual query information to send to the server """ api_limit = client.api_limits["get_molecules"] // 4 QueryIteratorBase.__init__(self, client, query_filters, api_limit) def _request(self) -> list[Molecule]: molecule_ids = self._client.make_request( "post", "api/v1/molecules/query", list[int], body_model=MoleculeQueryFilters, body=self._query_filters, ) molecules = self._client.get_molecules(molecule_ids) return molecules