Skip to content

Commit e31435a

Browse files
pcmt
1 parent 300a2fa commit e31435a

5 files changed

Lines changed: 55 additions & 38 deletions

File tree

mp_api/client/core/utils.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,36 +74,37 @@ def validate_ids(id_list: list[str]) -> list[str]:
7474
# return [validate_identifier(idx,serialize=True) for idx in id_list]
7575
return [str(validate_identifier(idx)) for idx in id_list]
7676

77+
7778
class LazyImport:
79+
"""Lazily import and load an object."""
7880

7981
__slots__ = ["_module_name", "_class_name", "_obj"]
8082

81-
def __init__(self, module_name : str, class_name : str,) -> None:
83+
def __init__( # noqa: D107
84+
self,
85+
module_name: str,
86+
class_name: str,
87+
) -> None:
8288
self._module_name = module_name
8389
self._class_name = class_name
8490
self._obj = None
85-
91+
8692
def __str__(self) -> str:
8793
return f"LazyImport of {self._module_name}.{self._class_name}"
88-
94+
8995
def __repr__(self) -> str:
9096
return self.__str__()
9197

9298
def __call__(self, *args, **kwargs):
9399
if self._obj is None:
94100
try:
95-
self._obj = getattr(
96-
import_module(self._module_name),
97-
self._class_name
98-
)(
101+
self._obj = getattr(import_module(self._module_name), self._class_name)(
99102
*args,
100103
**kwargs,
101104
)
102105
except Exception as exc:
103-
raise ImportError(
104-
f"Failed to import {self._class_name}:\n{exc}"
105-
)
106+
raise ImportError(f"Failed to import {self._class_name}:\n{exc}")
106107
return self._obj
107-
108-
def __getattr__(self,v):
109-
return getattr(self._obj,v)
108+
109+
def __getattr__(self, v):
110+
return getattr(self._obj, v)

mp_api/client/mprester.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
from mp_api.client.core import BaseRester, MPRestError
2727
from mp_api.client.core._oxygen_evolution import OxygenEvolution
2828
from mp_api.client.core.settings import MAPIClientSettings
29-
from mp_api.client.core.utils import load_json, validate_ids, LazyImport
29+
from mp_api.client.core.utils import LazyImport, load_json, validate_ids
3030
from mp_api.client.routes import GENERIC_RESTERS
3131
from mp_api.client.routes.materials.materials import MATERIALS_RESTERS
3232

@@ -42,16 +42,17 @@
4242

4343
RESTER_LAYOUT = {
4444
**{
45-
f"materials/{k}" : v
45+
f"materials/{k}": v
4646
for k, v in MATERIALS_RESTERS.items()
47-
if k not in {"materials","doi"}
47+
if k not in {"materials", "doi"}
4848
},
4949
"materials/core": MATERIALS_RESTERS["materials"],
5050
"doi": MATERIALS_RESTERS["doi"],
5151
**GENERIC_RESTERS,
52-
"molecules/core": LazyImport("mp_api.client.routes.molecules","MoleculeRester")
52+
"molecules/core": LazyImport("mp_api.client.routes.molecules", "MoleculeRester"),
5353
}
5454

55+
5556
class MPRester:
5657
"""Access the new Materials Project API."""
5758

@@ -238,7 +239,10 @@ def __init__(
238239
def __core_custom_getattr(_self, _attr, _rester_map):
239240
if _attr in RESTER_LAYOUT:
240241
lazy_rester = RESTER_LAYOUT[_attr]
241-
monty_disable = lazy_rester._class_name in ["TaskRester", "ProvenanceRester"]
242+
monty_disable = lazy_rester._class_name in [
243+
"TaskRester",
244+
"ProvenanceRester",
245+
]
242246
monty_decode = False if monty_disable else self.monty_decode
243247
rester = lazy_rester(
244248
api_key=api_key,

mp_api/client/routes/__init__.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
from mp_api.client.core.utils import LazyImport
44

55
GENERIC_RESTERS = {
6-
k : LazyImport(f"mp_api.client.routes.{k}", v) for k, v in {
6+
k: LazyImport(f"mp_api.client.routes.{k}", v)
7+
for k, v in {
78
"_general_store": "GeneralStoreRester",
89
"_messages": "MessagesRester",
9-
"_user_settings": "UserSettingsRester"
10+
"_user_settings": "UserSettingsRester",
1011
}.items()
11-
}
12+
}
Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,42 @@
11
"""Define routes and imports to materials resters."""
2+
from __future__ import annotations
23

34
from mp_api.client.core.utils import LazyImport
45

5-
MATERIALS_RESTERS : dict[str,LazyImport] = {
6-
route : LazyImport(f"mp_api.client.routes.materials.{module_name}", cls_name)
6+
MATERIALS_RESTERS: dict[str, LazyImport] = {
7+
route: LazyImport(f"mp_api.client.routes.materials.{module_name}", cls_name)
78
for route, module_name, cls_name in [
89
("absorption", "absorption", "AbsorptionRester"),
910
("alloys", "alloys", "AlloysRester"),
1011
("bonds", "bonds", "BondsRester"),
1112
("charge_density", "charge_density", "ChargeDensityRester"),
12-
("chemenv", "chemenv", "ChemenvRester",),
13-
("conversion_electrodes","electrodes","ConversionElectrodeRester"),
13+
(
14+
"chemenv",
15+
"chemenv",
16+
"ChemenvRester",
17+
),
18+
("conversion_electrodes", "electrodes", "ConversionElectrodeRester"),
1419
("dielectric", "dielectric", "DielectricRester"),
1520
("doi", "doi", "DOIRester"),
1621
("elasticity", "elasticity", "ElasticityRester"),
17-
("electronic_structure","electronic_structure","ElectronicStructureRester"),
18-
("electronic_structure_bandstructure","electronic_structure", "BandStructureRester"),
22+
("electronic_structure", "electronic_structure", "ElectronicStructureRester"),
23+
(
24+
"electronic_structure_bandstructure",
25+
"electronic_structure",
26+
"BandStructureRester",
27+
),
1928
("electronic_structure_dos", "electronic_structure", "DosRester"),
20-
("eos","eos","EOSRester"),
29+
("eos", "eos", "EOSRester"),
2130
("grain_boundaries", "grain_boundaries", "GrainBoundaryRester"),
22-
("insertion_electrodes","electrodes","ElectrodeRester"),
23-
("magnetism","magnetism","MagnetismRester"),
31+
("insertion_electrodes", "electrodes", "ElectrodeRester"),
32+
("magnetism", "magnetism", "MagnetismRester"),
2433
("materials", "materials", "MaterialsRester"),
2534
("oxidation_states", "oxidation_states", "OxidationStatesRester"),
26-
("phonon","phonon","PhononRester"),
27-
("piezoelectric","piezoelectric", "PiezoRester"),
28-
("provenance","provenance","ProvenanceRester"),
35+
("phonon", "phonon", "PhononRester"),
36+
("piezoelectric", "piezoelectric", "PiezoRester"),
37+
("provenance", "provenance", "ProvenanceRester"),
2938
("robocrys", "robocrys", "RobocrysRester"),
30-
("similarity","similarity","SimilarityRester"),
39+
("similarity", "similarity", "SimilarityRester"),
3140
("substrates", "substrates", "SubstratesRester"),
3241
("summary", "summary", "SummaryRester"),
3342
("surface_properties", "surface_properties", "SurfacePropertiesRester"),
@@ -36,4 +45,4 @@
3645
("thermo", "thermo", "ThermoRester"),
3746
("xas", "xas", "XASRester"),
3847
]
39-
}
48+
}

mp_api/client/routes/materials/materials.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,14 @@ class MaterialsRester(BaseRester):
4747
"chemenv",
4848
]
4949

50-
def __getattr__(self, v : str):
50+
def __getattr__(self, v: str):
5151
if v in self._sub_resters:
5252
if MATERIALS_RESTERS[v]._obj is None:
53-
5453
# TODO: Enable monty decoding when tasks and SNL schema is normalized
55-
monty_disable = MATERIALS_RESTERS[v]._class_name in ["TaskRester", "ProvenanceRester"]
54+
monty_disable = MATERIALS_RESTERS[v]._class_name in [
55+
"TaskRester",
56+
"ProvenanceRester",
57+
]
5658

5759
MATERIALS_RESTERS[v](
5860
api_key=self.api_key,

0 commit comments

Comments
 (0)