def test_msonable(owner_store): owner_resource = ReadOnlyResource(store=owner_store, model=Owner) endpoint_dict = owner_resource.as_dict() for k in ["@class", "@module", "store", "model"]: assert k in endpoint_dict assert isinstance(endpoint_dict["model"], str) assert endpoint_dict["model"] == "tests.api.test_read_resource.Owner"
def test_msonable(owner_store, pet_store): owner_endpoint = ReadOnlyResource(owner_store, Owner) pet_endpoint = ReadOnlyResource(pet_store, Pet) manager = API({"owners": owner_endpoint, "pets": pet_endpoint}) api_dict = manager.as_dict() for k in ["@class", "@module", "resources"]: assert k in api_dict
def test_init(owner_store): resource = ReadOnlyResource(store=owner_store, model=Owner) assert len(resource.router.routes) == 3 resource = ReadOnlyResource(store=owner_store, model=Owner, enable_get_by_key=False) assert len(resource.router.routes) == 2 resource = ReadOnlyResource(store=owner_store, model=Owner, enable_default_search=False) assert len(resource.router.routes) == 2
def summary_resource(summary_store): resource = ReadOnlyResource( summary_store, SummaryDoc, query_operators=[ MaterialIDsSearchQuery(), FormulaQuery(), ElementsQuery(), SymmetryQuery(), SearchIsStableQuery(), SearchIsTheoreticalQuery(), SearchMagneticQuery(), SearchESQuery(), NumericQuery(model=SummaryDoc, excluded_fields=["composition"]), SearchHasReconstructedQuery(), HasPropsQuery(), DeprecationQuery(), SortQuery(), PaginationQuery(), SparseFieldsQuery(SummaryDoc, default_fields=["material_id"]), ], tags=["Summary"], disable_validation=True, ) return resource
def xas_resource(xas_store): resource = ReadOnlyResource( xas_store, XASDoc, query_operators=[ FormulaQuery(), ElementsQuery(), XASQuery(), XASTaskIDQuery(), SortQuery(), PaginationQuery(), SparseFieldsQuery( XASDoc, default_fields=[ "xas_id", "task_id", "edge", "absorbing_element", "formula_pretty", "spectrum_type", "last_updated", ], ), ], tags=["XAS"], disable_validation=True, ) return resource
def test_problem_query_params(owner_store): endpoint = ReadOnlyResource(owner_store, Owner) app = FastAPI() app.include_router(endpoint.router) client = TestClient(app) client.get("/?param=test").status_code
def test_key_fields(owner_store): endpoint = ReadOnlyResource(owner_store, Owner, key_fields=["name"]) app = FastAPI() app.include_router(endpoint.router) client = TestClient(app) assert client.get("/Person1/").status_code == 200 assert client.get("/Person1/").json()["data"][0]["name"] == "Person1"
def robo_resource(robo_store): resource = ReadOnlyResource( robo_store, RobocrysDoc, tags=["Robocrystallographer"], enable_default_search=False, ) return resource
def test_mapi(owner_store, pet_store): owner_endpoint = ReadOnlyResource(owner_store, Owner) pet_endpoint = ReadOnlyResource(pet_store, Pet) manager = MAPI({"owners": [owner_endpoint], "pets": [pet_endpoint]}) api_dict = manager.as_dict() for k in ["@class", "@module", "resources"]: assert k in api_dict assert manager.app.openapi()["components"]["securitySchemes"] == { "ApiKeyAuth": { "descriptions": "MP API key to authorize requests", "name": "X-API-KEY", "in": "header", "type": "apiKey", } }
def test_get_by_key(owner_store): endpoint = ReadOnlyResource(owner_store, Owner, disable_validation=True) app = FastAPI() app.include_router(endpoint.router) client = TestClient(app) assert client.get("/").status_code == 200 assert client.get("/Person1/").status_code == 200 assert client.get("/Person1/").json()["data"][0]["name"] == "Person1"
def trajectory_resource(task_store): resource = ReadOnlyResource( task_store, TrajectoryDoc, query_operators=[TrajectoryQuery(), PaginationQuery()], key_fields=["task_id", "calcs_reversed"], tags=["Tasks"], sub_path="/trajectory/", ) return resource
def task_deprecation_resource(materials_store): resource = ReadOnlyResource( materials_store, DeprecationDoc, query_operators=[DeprecationQuery(), PaginationQuery()], tags=["Tasks"], enable_get_by_key=False, enable_default_search=True, sub_path="/deprecation/", ) return resource
def fermi_resource(fermi_store): resource = ReadOnlyResource( fermi_store, FermiDoc, query_operators=[ PaginationQuery(), SparseFieldsQuery(FermiDoc, default_fields=["task_id", "last_updated"]), ], tags=["Electronic Structure"], disable_validation=True, ) return resource
def similarity_resource(similarity_store): resource = ReadOnlyResource( similarity_store, SimilarityDoc, query_operators=[ PaginationQuery(), SparseFieldsQuery(SimilarityDoc, default_fields=["task_id"]), ], tags=["Similarity"], enable_default_search=False, disable_validation=True, ) return resource
def dois_resource(dois_store): resource = ReadOnlyResource( dois_store, DOIDoc, query_operators=[ PaginationQuery(), SparseFieldsQuery(DOIDoc, default_fields=["task_id", "doi"]), ], tags=["DOIs"], enable_default_search=False, disable_validation=True, ) return resource
def wulff_resource(wulff_store): resource = ReadOnlyResource( wulff_store, WulffDoc, query_operators=[ PaginationQuery(), SparseFieldsQuery(WulffDoc, default_fields=["task_id"]), ], tags=["Surface Properties"], enable_default_search=False, disable_validation=True, ) return resource
def eos_resource(eos_store): resource = ReadOnlyResource( eos_store, EOSDoc, query_operators=[ NumericQuery(model=EOSDoc), SortQuery(), PaginationQuery(), SparseFieldsQuery(EOSDoc, default_fields=["task_id"]), ], tags=["EOS"], disable_validation=True, ) return resource
def dielectric_resource(dielectric_store): resource = ReadOnlyResource( dielectric_store, DielectricDoc, query_operators=[ DielectricQuery(), SortQuery(), PaginationQuery(), SparseFieldsQuery(DielectricDoc, default_fields=["task_id", "last_updated"]), ], tags=["Dielectric"], disable_validation=True, ) return resource
def magnetism_resource(magnetism_store): resource = ReadOnlyResource( magnetism_store, MagnetismDoc, query_operators=[ MagneticQuery(), SortQuery(), PaginationQuery(), SparseFieldsQuery(MagnetismDoc, default_fields=["task_id", "last_updated"]), ], tags=["Magnetism"], disable_validation=True, ) return resource
def phonon_bsdos_resource(phonon_bs_store): resource = ReadOnlyResource( phonon_bs_store, PhononBSDOSDoc, query_operators=[ PaginationQuery(), SparseFieldsQuery( PhononBSDOSDoc, default_fields=["task_id", "last_updated"] ), ], tags=["Phonon"], enable_default_search=False, disable_validation=True, ) return resource
def surface_props_resource(surface_prop_store): resource = ReadOnlyResource( surface_prop_store, SurfacePropDoc, query_operators=[ NumericQuery(model=SurfacePropDoc), ReconstructedQuery(), SortQuery(), PaginationQuery(), SparseFieldsQuery(SurfacePropDoc, default_fields=["task_id"]), ], tags=["Surface Properties"], disable_validation=True, ) return resource
def bs_obj_resource(s3_store): resource = ReadOnlyResource( s3_store, BSObjectDoc, query_operators=[ ObjectQuery(), SparseFieldsQuery(BSObjectDoc, default_fields=["task_id", "last_updated"]), ], tags=["Electronic Structure"], enable_get_by_key=False, enable_default_search=True, sub_path="/bandstructure/object/", disable_validation=True, ) return resource
def oxi_states_resource(oxi_states_store): resource = ReadOnlyResource( oxi_states_store, OxidationStateDoc, query_operators=[ FormulaQuery(), PossibleOxiStateQuery(), SortQuery(), PaginationQuery(), SparseFieldsQuery( OxidationStateDoc, default_fields=["material_id", "last_updated"] ), ], tags=["Oxidation States"], disable_validation=True, ) return resource
def molecules_resource(molecules_store): resource = ReadOnlyResource( molecules_store, MoleculesDoc, query_operators=[ MoleculeBaseQuery(), MoleculeElementsQuery(), MoleculeFormulaQuery(), MultipleTaskIDsQuery(), SortQuery(), PaginationQuery(), SparseFieldsQuery(MoleculesDoc, default_fields=["task_id"]), ], tags=["Molecules"], disable_validation=True, ) return resource
def task_resource(task_store): resource = ReadOnlyResource( task_store, TaskDoc, query_operators=[ FormulaQuery(), ElementsQuery(), MultipleTaskIDsQuery(), SortQuery(), PaginationQuery(), SparseFieldsQuery( TaskDoc, default_fields=["task_id", "formula_pretty", "last_updated"], ), ], tags=["Tasks"], ) return resource
def charge_density_resource(s3_store): resource = ReadOnlyResource( s3_store, ChgcarDataDoc, query_operators=[ ChgcarTaskIDQuery(), PaginationQuery(default_limit=5, max_limit=10), SparseFieldsQuery( ChgcarDataDoc, default_fields=["task_id", "last_updated"], ), ], tags=["Charge Density"], enable_default_search=True, enable_get_by_key=False, disable_validation=True, ) return resource
def es_resource(es_store): resource = ReadOnlyResource( es_store, ElectronicStructureDoc, query_operators=[ ESSummaryDataQuery(), FormulaQuery(), ElementsQuery(), NumericQuery(model=ElectronicStructureDoc), SortQuery(), PaginationQuery(), SparseFieldsQuery(ElectronicStructureDoc, default_fields=["material_id", "last_updated"]), ], tags=["Electronic Structure"], disable_validation=True, ) return resource
def elasticity_resource(elasticity_store): resource = ReadOnlyResource( elasticity_store, ElasticityDoc, query_operators=[ ChemsysQuery(), BulkModulusQuery(), ShearModulusQuery(), PoissonQuery(), SortQuery(), PaginationQuery(), SparseFieldsQuery( ElasticityDoc, default_fields=["task_id", "pretty_formula"], ), ], tags=["Elasticity"], disable_validation=False, ) return resource
def substrates_resource(substrates_store): resource = ReadOnlyResource( substrates_store, SubstratesDoc, query_operators=[ SubstrateStructureQuery(), NumericQuery(model=SubstratesDoc), StringQueryOperator( model=SubstratesDoc, excluded_fields=["film_orient", "orient"] ), SortQuery(), PaginationQuery(), SparseFieldsQuery(SubstratesDoc, default_fields=["film_id", "sub_id"]), ], tags=["Substrates"], enable_get_by_key=False, disable_validation=True, ) return resource
def dos_resource(es_store): resource = ReadOnlyResource( es_store, ElectronicStructureDoc, query_operators=[ DOSDataQuery(), SortQuery(), PaginationQuery(), SparseFieldsQuery( ElectronicStructureDoc, default_fields=["material_id", "last_updated", "dos"], ), ], tags=["Electronic Structure"], enable_get_by_key=False, sub_path="/dos/", disable_validation=True, ) return resource