Skip to content

Commit

Permalink
Switch to maggma ReadOnlyResource
Browse files Browse the repository at this point in the history
  • Loading branch information
munrojm committed May 25, 2021
1 parent a10e5fa commit 4542064
Show file tree
Hide file tree
Showing 25 changed files with 90 additions and 165 deletions.
5 changes: 3 additions & 2 deletions src/mp_api/routes/_consumer/resources.py
@@ -1,4 +1,5 @@
from mp_api.core.resource import ConsumerPostResource, GetResource
from mp_api.core.resource import ConsumerPostResource
from maggma.api.resource import ReadOnlyResource
from mp_api.routes._consumer.models import UserSettingsDoc
from mp_api.routes._consumer.query_operator import UserSettingsPostQuery, UserSettingsGetQuery

Expand All @@ -16,7 +17,7 @@ def set_settings_resource(consumer_settings_store):


def get_settings_resource(consumer_settings_store):
resource = GetResource(
resource = ReadOnlyResource(
consumer_settings_store,
UserSettingsDoc,
query_operators=[UserSettingsGetQuery()],
Expand Down
10 changes: 3 additions & 7 deletions src/mp_api/routes/charge_density/models.py
@@ -1,6 +1,5 @@
from pydantic import BaseModel, Field, validator
from pydantic import BaseModel, Field
from datetime import datetime
from monty.json import MontyDecoder
from pymatgen.io.vasp import Chgcar


Expand All @@ -9,13 +8,10 @@ class ChgcarDataDoc(BaseModel):
Electron charge density for selected materials.
"""

fs_id: str = Field(
None, description="Unique object ID for the charge density data."
)
fs_id: str = Field(None, description="Unique object ID for the charge density data.")

last_updated: datetime = Field(
None,
description="Timestamp for the most recent update to the charge density data.",
None, description="Timestamp for the most recent update to the charge density data.",
)

task_id: str = Field(
Expand Down
23 changes: 7 additions & 16 deletions src/mp_api/routes/charge_density/resources.py
@@ -1,5 +1,5 @@
from fastapi.param_functions import Path
from mp_api.core.resource import GetResource
from maggma.api.resource import ReadOnlyResource
from mp_api.core.models import Response
from mp_api.routes.charge_density.models import ChgcarDataDoc
from mp_api.core.query_operator import PaginationQuery, SparseFieldsQuery, SortQuery
Expand All @@ -15,15 +15,11 @@ def custom_charge_density_endpoint_prep(self):
model_name = model.__name__
key_name = "task_id"

field_input = SparseFieldsQuery(
model, [key_name, self.s3.last_updated_field]
).query
field_input = SparseFieldsQuery(model, [key_name, self.s3.last_updated_field]).query

async def get_chgcar_data(
material_id: str = Path(
...,
alias=key_name,
title=f"The Material ID ({key_name}) associated with the {model_name}",
..., alias=key_name, title=f"The Material ID ({key_name}) associated with the {model_name}",
),
fields: STORE_PARAMS = Depends(field_input),
):
Expand All @@ -39,14 +35,11 @@ async def get_chgcar_data(

self.s3.connect()

item = self.s3.query_one(
{key_name: material_id}, properties=fields["properties"]
)
item = self.s3.query_one({key_name: material_id}, properties=fields["properties"])

if item is None:
raise HTTPException(
status_code=404,
detail=f"Item with {key_name} = {material_id} not found",
status_code=404, detail=f"Item with {key_name} = {material_id} not found",
)
else:
return {"data": [item]}
Expand All @@ -59,15 +52,13 @@ async def get_chgcar_data(
tags=self.tags,
)(get_chgcar_data)

resource = GetResource(
resource = ReadOnlyResource(
s3_store,
ChgcarDataDoc,
query_operators=[
SortQuery(),
PaginationQuery(),
SparseFieldsQuery(
ChgcarDataDoc, default_fields=["task_id", "last_updated"]
),
SparseFieldsQuery(ChgcarDataDoc, default_fields=["task_id", "last_updated"]),
],
tags=["Charge Density"],
custom_endpoint_funcs=[custom_charge_density_endpoint_prep],
Expand Down
8 changes: 3 additions & 5 deletions src/mp_api/routes/dielectric/resources.py
@@ -1,21 +1,19 @@
from mp_api.core.resource import GetResource
from maggma.api.resource import ReadOnlyResource
from mp_api.routes.dielectric.models import DielectricDoc

from mp_api.core.query_operator import PaginationQuery, SortQuery, SparseFieldsQuery
from mp_api.routes.dielectric.query_operators import DielectricQuery


def dielectric_resource(dielectric_store):
resource = GetResource(
resource = ReadOnlyResource(
dielectric_store,
DielectricDoc,
query_operators=[
DielectricQuery(),
SortQuery(),
PaginationQuery(),
SparseFieldsQuery(
DielectricDoc, default_fields=["task_id", "last_updated"]
),
SparseFieldsQuery(DielectricDoc, default_fields=["task_id", "last_updated"]),
],
tags=["Dielectric"],
)
Expand Down
9 changes: 3 additions & 6 deletions src/mp_api/routes/dois/resources.py
@@ -1,17 +1,14 @@
from mp_api.core.resource import GetResource
from maggma.api.resource import ReadOnlyResource
from mp_api.routes.dois.models import DOIDoc

from mp_api.core.query_operator import PaginationQuery, SparseFieldsQuery


def dois_resource(dois_store):
resource = GetResource(
resource = ReadOnlyResource(
dois_store,
DOIDoc,
query_operators=[
PaginationQuery(),
SparseFieldsQuery(DOIDoc, default_fields=["task_id", "doi"]),
],
query_operators=[PaginationQuery(), SparseFieldsQuery(DOIDoc, default_fields=["task_id", "doi"]),],
tags=["DOIs"],
enable_default_search=False,
)
Expand Down
8 changes: 3 additions & 5 deletions src/mp_api/routes/elasticity/resources.py
@@ -1,4 +1,4 @@
from mp_api.core.resource import GetResource
from maggma.api.resource import ReadOnlyResource
from mp_api.routes.elasticity.models import ElasticityDoc

from mp_api.core.query_operator import PaginationQuery, SortQuery, SparseFieldsQuery
Expand All @@ -11,7 +11,7 @@


def elasticity_resource(elasticity_store):
resource = GetResource(
resource = ReadOnlyResource(
elasticity_store,
ElasticityDoc,
query_operators=[
Expand All @@ -21,9 +21,7 @@ def elasticity_resource(elasticity_store):
PoissonQuery(),
SortQuery(),
PaginationQuery(),
SparseFieldsQuery(
ElasticityDoc, default_fields=["task_id", "pretty_formula"],
),
SparseFieldsQuery(ElasticityDoc, default_fields=["task_id", "pretty_formula"],),
],
tags=["Elasticity"],
)
Expand Down
8 changes: 3 additions & 5 deletions src/mp_api/routes/electrodes/resources.py
@@ -1,4 +1,4 @@
from mp_api.core.resource import GetResource
from maggma.api.resource import ReadOnlyResource
from emmet.core.electrode import InsertionElectrodeDoc

from mp_api.core.query_operator import PaginationQuery, SortQuery, SparseFieldsQuery
Expand All @@ -12,7 +12,7 @@


def insertion_electrodes_resource(insertion_electrodes_store):
resource = GetResource(
resource = ReadOnlyResource(
insertion_electrodes_store,
InsertionElectrodeDoc,
query_operators=[
Expand All @@ -23,9 +23,7 @@ def insertion_electrodes_resource(insertion_electrodes_store):
InsertionElectrodeQuery(),
SortQuery(),
PaginationQuery(),
SparseFieldsQuery(
InsertionElectrodeDoc, default_fields=["battery_id", "last_updated"],
),
SparseFieldsQuery(InsertionElectrodeDoc, default_fields=["battery_id", "last_updated"],),
],
tags=["Electrodes"],
)
Expand Down
42 changes: 13 additions & 29 deletions src/mp_api/routes/electronic_structure/resources.py
@@ -1,4 +1,4 @@
from mp_api.core.resource import GetResource
from maggma.api.resource import ReadOnlyResource
from emmet.core.electronic_structure import ElectronicStructureDoc

from fastapi import HTTPException
Expand All @@ -23,7 +23,7 @@


def es_resource(es_store):
resource = GetResource(
resource = ReadOnlyResource(
es_store,
ElectronicStructureDoc,
query_operators=[
Expand All @@ -33,9 +33,7 @@ def es_resource(es_store):
MinMaxQuery(),
SortQuery(),
PaginationQuery(),
SparseFieldsQuery(
ElectronicStructureDoc, default_fields=["material_id", "last_updated"]
),
SparseFieldsQuery(ElectronicStructureDoc, default_fields=["material_id", "last_updated"]),
],
tags=["Electronic Structure"],
)
Expand All @@ -52,9 +50,7 @@ def custom_bs_endpoint_prep(self):
key_name = "task_id"

async def get_object(
task_id: str = Query(
..., alias=key_name, title=f"The {key_name} of the {model_name} to get",
),
task_id: str = Query(..., alias=key_name, title=f"The {key_name} of the {model_name} to get",),
):
f"""
Get's a document by the primary key in the store
Expand All @@ -75,14 +71,12 @@ async def get_object(

if not bs_object_doc:
raise HTTPException(
status_code=404,
detail=f"Band structure with task_id = {task_id} not found",
status_code=404, detail=f"Band structure with task_id = {task_id} not found",
)

except ValueError:
raise HTTPException(
status_code=404,
detail=f"Band structure with task_id = {task_id} not found",
status_code=404, detail=f"Band structure with task_id = {task_id} not found",
)

return {"data": [bs_object_doc]}
Expand All @@ -95,17 +89,14 @@ async def get_object(
tags=self.tags,
)(get_object)

resource = GetResource(
resource = ReadOnlyResource(
es_store,
ElectronicStructureDoc,
query_operators=[
BSDataQuery(),
SortQuery(),
PaginationQuery(),
SparseFieldsQuery(
ElectronicStructureDoc,
default_fields=["material_id", "last_updated", "bandstructure"],
),
SparseFieldsQuery(ElectronicStructureDoc, default_fields=["material_id", "last_updated", "bandstructure"],),
],
tags=["Electronic Structure"],
enable_get_by_key=False,
Expand All @@ -124,9 +115,7 @@ def custom_dos_endpoint_prep(self):
key_name = "task_id"

async def get_object(
task_id: str = Query(
..., alias=key_name, title=f"The {key_name} of the {model_name} to get",
),
task_id: str = Query(..., alias=key_name, title=f"The {key_name} of the {model_name} to get",),
):
f"""
Get's a document by the primary key in the store
Expand All @@ -147,14 +136,12 @@ async def get_object(

if not dos_object_doc:
raise HTTPException(
status_code=404,
detail=f"Density of states with task_id = {task_id} not found",
status_code=404, detail=f"Density of states with task_id = {task_id} not found",
)

except ValueError:
raise HTTPException(
status_code=404,
detail=f"Density of states with task_id = {task_id} not found",
status_code=404, detail=f"Density of states with task_id = {task_id} not found",
)

return {"data": [dos_object_doc]}
Expand All @@ -167,17 +154,14 @@ async def get_object(
tags=self.tags,
)(get_object)

resource = GetResource(
resource = ReadOnlyResource(
es_store,
ElectronicStructureDoc,
query_operators=[
DOSDataQuery(),
SortQuery(),
PaginationQuery(),
SparseFieldsQuery(
ElectronicStructureDoc,
default_fields=["material_id", "last_updated", "dos"],
),
SparseFieldsQuery(ElectronicStructureDoc, default_fields=["material_id", "last_updated", "dos"],),
],
tags=["Electronic Structure"],
custom_endpoint_funcs=[custom_dos_endpoint_prep],
Expand Down
4 changes: 2 additions & 2 deletions src/mp_api/routes/eos/resources.py
@@ -1,12 +1,12 @@
from mp_api.core.resource import GetResource
from maggma.api.resource import ReadOnlyResource
from mp_api.routes.eos.models import EOSDoc

from mp_api.core.query_operator import PaginationQuery, SortQuery, SparseFieldsQuery
from mp_api.routes.eos.query_operators import EnergyVolumeQuery


def eos_resource(eos_store):
resource = GetResource(
resource = ReadOnlyResource(
eos_store,
EOSDoc,
query_operators=[
Expand Down
9 changes: 3 additions & 6 deletions src/mp_api/routes/fermi/resources.py
@@ -1,17 +1,14 @@
from mp_api.core.resource import GetResource
from maggma.api.resource import ReadOnlyResource
from mp_api.routes.fermi.models import FermiDoc

from mp_api.core.query_operator import PaginationQuery, SparseFieldsQuery


def fermi_resource(fermi_store):
resource = GetResource(
resource = ReadOnlyResource(
fermi_store,
FermiDoc,
query_operators=[
PaginationQuery(),
SparseFieldsQuery(FermiDoc, default_fields=["task_id", "last_updated"]),
],
query_operators=[PaginationQuery(), SparseFieldsQuery(FermiDoc, default_fields=["task_id", "last_updated"]),],
tags=["Electronic Structure"],
)

Expand Down
4 changes: 2 additions & 2 deletions src/mp_api/routes/grain_boundary/resources.py
@@ -1,12 +1,12 @@
from mp_api.core.resource import GetResource
from maggma.api.resource import ReadOnlyResource
from mp_api.routes.grain_boundary.models import GrainBoundaryDoc

from mp_api.routes.grain_boundary.query_operators import GBEnergyQuery, GBStructureQuery, GBTaskIDQuery
from mp_api.core.query_operator import PaginationQuery, SortQuery, SparseFieldsQuery


def gb_resource(gb_store):
resource = GetResource(
resource = ReadOnlyResource(
gb_store,
GrainBoundaryDoc,
query_operators=[
Expand Down
4 changes: 2 additions & 2 deletions src/mp_api/routes/magnetism/resources.py
@@ -1,12 +1,12 @@
from mp_api.core.resource import GetResource
from maggma.api.resource import ReadOnlyResource
from mp_api.routes.magnetism.models import MagnetismDoc

from mp_api.core.query_operator import PaginationQuery, SortQuery, SparseFieldsQuery
from mp_api.routes.magnetism.query_operators import MagneticQuery


def magnetism_resource(magnetism_store):
resource = GetResource(
resource = ReadOnlyResource(
magnetism_store,
MagnetismDoc,
query_operators=[
Expand Down

0 comments on commit 4542064

Please sign in to comment.