|
28 | 28 | from mp_api.client.core.settings import MAPIClientSettings |
29 | 29 | from mp_api.client.core.utils import LazyImport, load_json, validate_ids |
30 | 30 | from mp_api.client.routes import GENERIC_RESTERS |
31 | | -from mp_api.client.routes.materials.materials import MATERIALS_RESTERS |
| 31 | +from mp_api.client.routes.materials import MATERIALS_RESTERS |
| 32 | +from mp_api.client.routes.molecules import MOLECULES_RESTERS |
| 33 | + |
32 | 34 |
|
33 | 35 | if TYPE_CHECKING: |
34 | 36 | from typing import Any, Literal |
|
41 | 43 | DEFAULT_THERMOTYPE_CRITERIA = {"thermo_types": ["GGA_GGA+U"]} |
42 | 44 |
|
43 | 45 | RESTER_LAYOUT = { |
| 46 | + "molecules/core": LazyImport("mp_api.client.routes.molecules.molecules.MoleculeRester"), |
| 47 | + "materials/core": MATERIALS_RESTERS["materials"], |
44 | 48 | **{ |
45 | 49 | f"materials/{k}": v |
46 | 50 | for k, v in MATERIALS_RESTERS.items() |
47 | 51 | if k not in {"materials", "doi"} |
48 | 52 | }, |
49 | | - "materials/core": MATERIALS_RESTERS["materials"], |
50 | 53 | "doi": MATERIALS_RESTERS["doi"], |
| 54 | + **{ |
| 55 | + f"molecules/{k}": v |
| 56 | + for k, v in MOLECULES_RESTERS.items() |
| 57 | + if k not in {"molecules",} |
| 58 | + }, |
51 | 59 | **GENERIC_RESTERS, |
52 | | - "molecules/core": LazyImport("mp_api.client.routes.molecules", "MoleculeRester"), |
53 | 60 | } |
54 | 61 |
|
55 | 62 |
|
@@ -200,82 +207,10 @@ def __init__( |
200 | 207 | } |
201 | 208 |
|
202 | 209 | # Set remaining top level resters, or get an attribute-class name mapping |
203 | | - # for all sub-resters |
204 | | - _sub_rester_suffix_map = {"materials": {}, "molecules": {}} |
205 | | - |
206 | | - # for cls in self._all_resters: |
207 | | - # if cls.suffix not in core_suffix: |
208 | | - # suffix_split = cls.suffix.split("/") |
209 | | - |
210 | | - # if len(suffix_split) == 1: |
211 | | - # # Disable monty decode on nested data which may give errors |
212 | | - # monty_disable = cls.__name__ in ["TaskRester", "ProvenanceRester"] |
213 | | - # monty_decode = False if monty_disable else self.monty_decode |
214 | | - # rester = cls( |
215 | | - # api_key=api_key, |
216 | | - # endpoint=self.endpoint, |
217 | | - # include_user_agent=include_user_agent, |
218 | | - # session=self.session, |
219 | | - # monty_decode=monty_decode, |
220 | | - # use_document_model=self.use_document_model, |
221 | | - # headers=self.headers, |
222 | | - # mute_progress_bars=self.mute_progress_bars, |
223 | | - # ) # type: BaseRester |
224 | | - # setattr( |
225 | | - # self, |
226 | | - # suffix_split[0], |
227 | | - # rester, |
228 | | - # ) |
229 | | - # else: |
230 | | - # attr = "_".join(suffix_split[1:]) |
231 | | - # if "materials" in suffix_split: |
232 | | - # _sub_rester_suffix_map["materials"][attr] = cls |
233 | | - # elif "molecules" in suffix_split: |
234 | | - # _sub_rester_suffix_map["molecules"][attr] = cls |
235 | | - |
236 | | - # TODO: Enable monty decoding when tasks and SNL schema is normalized |
237 | | - # |
238 | | - # Allow lazy loading of nested resters under materials and molecules using custom __getattr__ methods |
239 | | - def __core_custom_getattr(_self, _attr, _rester_map): |
240 | | - if _attr in RESTER_LAYOUT: |
241 | | - lazy_rester = RESTER_LAYOUT[_attr] |
242 | | - monty_disable = lazy_rester._class_name in [ |
243 | | - "TaskRester", |
244 | | - "ProvenanceRester", |
245 | | - ] |
246 | | - monty_decode = False if monty_disable else self.monty_decode |
247 | | - rester = lazy_rester( |
248 | | - api_key=api_key, |
249 | | - endpoint=self.endpoint, |
250 | | - include_user_agent=include_user_agent, |
251 | | - session=self.session, |
252 | | - monty_decode=monty_decode, |
253 | | - use_document_model=self.use_document_model, |
254 | | - headers=self.headers, |
255 | | - mute_progress_bars=self.mute_progress_bars, |
256 | | - ) # type: BaseRester |
257 | | - |
258 | | - return rester |
259 | | - else: |
260 | | - raise AttributeError( |
261 | | - f"{_self.__class__.__name__!r} object has no attribute {_attr!r}" |
262 | | - ) |
263 | | - |
264 | | - def __materials_getattr__(_self, attr): |
265 | | - rester = __core_custom_getattr(_self, attr, MATERIALS_RESTERS) |
266 | | - return rester |
267 | | - |
268 | | - def __molecules_getattr__(_self, attr): |
269 | | - _rester_map = _sub_rester_suffix_map["molecules"] |
270 | | - rester = __core_custom_getattr(_self, attr, _rester_map) |
271 | | - return rester |
272 | 210 |
|
273 | 211 | for attr, rester in core_resters.items(): |
274 | 212 | setattr(self, attr, rester) |
275 | 213 |
|
276 | | - # self.materials.__getattr__ = __materials_getattr__ # type: ignore |
277 | | - # MoleculeRester.__getattr__ = __molecules_getattr__ # type: ignore |
278 | | - |
279 | 214 | @property |
280 | 215 | def contribs(self): |
281 | 216 | if self._contribs is None: |
|
0 commit comments