mp-api 0.46.2rc0__tar.gz → 0.46.2rc2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/PKG-INFO +1 -1
  2. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/contribs/_types.py +24 -0
  3. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/contribs/client.py +20 -9
  4. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/contribs/schemas.py +1 -1
  5. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api.egg-info/PKG-INFO +1 -1
  6. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/.coveragerc +0 -0
  7. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/.github/workflows/lint.yml +0 -0
  8. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/.github/workflows/release.yml +0 -0
  9. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/.github/workflows/testing.yml +0 -0
  10. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/.github/workflows/upgrade_dependencies.yml +0 -0
  11. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/.gitignore +0 -0
  12. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/.pre-commit-config.yaml +0 -0
  13. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/CODE_OF_CONDUCT.md +0 -0
  14. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/LICENSE +0 -0
  15. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/README.md +0 -0
  16. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/dev/generate_mcp_tools.py +0 -0
  17. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/dev/inspect_mcp.sh +0 -0
  18. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/docs/Makefile +0 -0
  19. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/docs/_templates/custom-class-template.rst +0 -0
  20. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/docs/_templates/custom-module-template.rst +0 -0
  21. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/docs/conf.py +0 -0
  22. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/docs/index.rst +0 -0
  23. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/docs/make.bat +0 -0
  24. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/docs/modules.rst +0 -0
  25. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/__init__.py +0 -0
  26. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/_test_utils.py +0 -0
  27. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/__init__.py +0 -0
  28. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/_server_utils.py +0 -0
  29. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/contribs/__init__.py +0 -0
  30. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/contribs/_logger.py +0 -0
  31. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/contribs/_units.py +0 -0
  32. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/contribs/settings.py +0 -0
  33. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/contribs/utils.py +0 -0
  34. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/core/__init__.py +0 -0
  35. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/core/_oxygen_evolution.py +0 -0
  36. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/core/client.py +0 -0
  37. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/core/exceptions.py +0 -0
  38. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/core/schemas.py +0 -0
  39. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/core/settings.py +0 -0
  40. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/core/utils.py +0 -0
  41. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/mprester.py +0 -0
  42. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/__init__.py +0 -0
  43. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/_server.py +0 -0
  44. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/__init__.py +0 -0
  45. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/absorption.py +0 -0
  46. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/alloys.py +0 -0
  47. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/bonds.py +0 -0
  48. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/chemenv.py +0 -0
  49. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/dielectric.py +0 -0
  50. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/doi.py +0 -0
  51. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/elasticity.py +0 -0
  52. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/electrodes.py +0 -0
  53. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/electronic_structure.py +0 -0
  54. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/eos.py +0 -0
  55. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/grain_boundaries.py +0 -0
  56. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/magnetism.py +0 -0
  57. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/materials.py +0 -0
  58. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/oxidation_states.py +0 -0
  59. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/phonon.py +0 -0
  60. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/piezo.py +0 -0
  61. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/provenance.py +0 -0
  62. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/robocrys.py +0 -0
  63. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/similarity.py +0 -0
  64. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/substrates.py +0 -0
  65. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/summary.py +0 -0
  66. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/surface_properties.py +0 -0
  67. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/synthesis.py +0 -0
  68. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/tasks.py +0 -0
  69. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/thermo.py +0 -0
  70. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/materials/xas.py +0 -0
  71. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/molecules/__init__.py +0 -0
  72. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/molecules/jcesr.py +0 -0
  73. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/molecules/molecules.py +0 -0
  74. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/client/routes/molecules/summary.py +0 -0
  75. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/mcp/__init__.py +0 -0
  76. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/mcp/_schemas.py +0 -0
  77. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/mcp/mp_mcp.py +0 -0
  78. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/mcp/server.py +0 -0
  79. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/mcp/tools.py +0 -0
  80. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/mcp/utils.py +0 -0
  81. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api/py.typed +0 -0
  82. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api.egg-info/SOURCES.txt +0 -0
  83. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api.egg-info/dependency_links.txt +0 -0
  84. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api.egg-info/entry_points.txt +0 -0
  85. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api.egg-info/requires.txt +0 -0
  86. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/mp_api.egg-info/top_level.txt +0 -0
  87. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/pyproject.toml +0 -0
  88. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/requirements/requirements-ubuntu-latest_py3.11.txt +0 -0
  89. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/requirements/requirements-ubuntu-latest_py3.11_extras.txt +0 -0
  90. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/requirements/requirements-ubuntu-latest_py3.12.txt +0 -0
  91. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/requirements/requirements-ubuntu-latest_py3.12_extras.txt +0 -0
  92. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/requirements/requirements-ubuntu-latest_py3.13.txt +0 -0
  93. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/requirements/requirements-ubuntu-latest_py3.13_extras.txt +0 -0
  94. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/requirements/requirements-ubuntu-latest_py3.14.txt +0 -0
  95. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/requirements/requirements-ubuntu-latest_py3.14_extras.txt +0 -0
  96. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/setup.cfg +0 -0
  97. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/test_files/Si_mp_149.cif +0 -0
  98. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/__init__.py +0 -0
  99. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/__init__.py +0 -0
  100. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/contribs/conftest.py +0 -0
  101. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/contribs/test_client.py +0 -0
  102. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/contribs/test_contribs_schemas.py +0 -0
  103. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/contribs/test_contribs_utils.py +0 -0
  104. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/contribs/test_types.py +0 -0
  105. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/core/test_oxygen_evolution.py +0 -0
  106. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/core/test_schemas.py +0 -0
  107. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/core/test_utils.py +0 -0
  108. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/__init__.py +0 -0
  109. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_absorption.py +0 -0
  110. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_alloys.py +0 -0
  111. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_bonds.py +0 -0
  112. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_chemenv.py +0 -0
  113. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_dielectric.py +0 -0
  114. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_doi.py +0 -0
  115. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_elasticity.py +0 -0
  116. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_electrodes.py +0 -0
  117. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_electronic_structure.py +0 -0
  118. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_eos.py +0 -0
  119. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_grain_boundary.py +0 -0
  120. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_magnetism.py +0 -0
  121. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_materials.py +0 -0
  122. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_oxidation_states.py +0 -0
  123. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_phonon.py +0 -0
  124. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_piezo.py +0 -0
  125. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_provenance.py +0 -0
  126. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_robocrys.py +0 -0
  127. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_similarity.py +0 -0
  128. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_substrates.py +0 -0
  129. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_summary.py +0 -0
  130. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_surface_properties.py +0 -0
  131. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_synthesis.py +0 -0
  132. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_tasks.py +0 -0
  133. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_thermo.py +0 -0
  134. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/materials/test_xas.py +0 -0
  135. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/molecules/__init__.py +0 -0
  136. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/molecules/test_jcesr.py +0 -0
  137. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/molecules/test_molecules.py +0 -0
  138. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/molecules/test_summary.py +0 -0
  139. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/test_client.py +0 -0
  140. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/test_core_client.py +0 -0
  141. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/test_heartbeat.py +0 -0
  142. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/client/test_mprester.py +0 -0
  143. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/mcp/__init__.py +0 -0
  144. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/mcp/test_server.py +0 -0
  145. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/mcp/test_tools.py +0 -0
  146. {mp_api-0.46.2rc0 → mp_api-0.46.2rc2}/tests/mcp/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mp-api
3
- Version: 0.46.2rc0
3
+ Version: 0.46.2rc2
4
4
  Summary: API Client for the Materials Project
5
5
  Author-email: The Materials Project <feedback@materialsproject.org>
6
6
  License-Expression: BSD-3-Clause-LBNL
@@ -316,12 +316,36 @@ class Attachment(dict, _Component):
316
316
  return cls((k, v) for k, v in dct.items() if k in keys)
317
317
 
318
318
 
319
+ """
320
+ The following type annotations are only used in type checking
321
+ (mypy) the ContribsClient.get_all_ids function.
322
+ This function has highly hetereogeneous output and these
323
+ represent the intermediate and final data structures returned
324
+ by that function.
325
+
326
+ They **shouldn't** have to be used elsewhere.
327
+ """
328
+
319
329
  ComponentIdSets = dict[str, set[str]]
330
+ """Use only when type checking of ContribsClient.get_all_ids(...,fmt="sets")."""
331
+
320
332
  ProjectIdSets = dict[str, set[str] | ComponentIdSets]
333
+ """Use only when type checking of ContribsClient.get_all_ids(...,fmt="sets")."""
334
+
321
335
  AllIdSets = dict[str, ProjectIdSets]
336
+ """Use only when type checking of ContribsClient.get_all_ids(...,fmt="sets")."""
322
337
 
323
338
  ComponentNameMap = dict[str, dict[str, str]]
339
+ """Use only when type checking of ContribsClient.get_all_ids(...,fmt="map")."""
340
+
324
341
  IdentifierLeaf = dict[str, str | ComponentNameMap]
342
+ """Use only when type checking of ContribsClient.get_all_ids(...,fmt="map")."""
343
+
325
344
  IdentifierBranch = dict[str, IdentifierLeaf]
345
+ """Use only when type checking of ContribsClient.get_all_ids(...,fmt="map")."""
346
+
326
347
  ProjectIdMap = dict[str, IdentifierLeaf | IdentifierBranch]
348
+ """Use only when type checking of ContribsClient.get_all_ids(...,fmt="map")."""
349
+
327
350
  AllIdMap = dict[str, ProjectIdMap]
351
+ """Use only when type checking of ContribsClient.get_all_ids(...,fmt="map")."""
@@ -50,6 +50,7 @@ from urllib3.util.retry import Retry
50
50
  from mp_api.client.contribs._logger import MPCC_LOGGER, TqdmToLogger
51
51
  from mp_api.client.contribs._types import (
52
52
  Attachment,
53
+ ComponentIdSets,
53
54
  MPCDict,
54
55
  MPCStructure,
55
56
  Table,
@@ -71,10 +72,9 @@ if TYPE_CHECKING:
71
72
  from collections.abc import Generator, Iterable, Sequence
72
73
  from typing import Any
73
74
 
74
- from mp_api.client.contribs.types import (
75
+ from mp_api.client.contribs._types import (
75
76
  AllIdMap,
76
77
  AllIdSets,
77
- ComponentIdSets,
78
78
  IdentifierLeaf,
79
79
  ProjectIdSets,
80
80
  )
@@ -88,11 +88,15 @@ warnings.formatwarning = lambda msg, *args, **kwargs: f"{msg}\n"
88
88
  warnings.filterwarnings("default", category=DeprecationWarning, module=__name__)
89
89
 
90
90
 
91
- def validate_email(email_string: str):
91
+ def validate_email(email_string: str) -> None:
92
92
  """Validate user email address.
93
93
 
94
94
  Args:
95
95
  email_string (str) : the user's email address
96
+ Returns:
97
+ None
98
+ Raises:
99
+ SwaggerValidationError on malformed email address.
96
100
  """
97
101
  if email_string.count(":") != 1:
98
102
  raise SwaggerValidationError(
@@ -107,6 +111,8 @@ def validate_email(email_string: str):
107
111
  if d > BaseDiagnosis.CATEGORIES["VALID"]:
108
112
  raise SwaggerValidationError(f"{email} {d.message}")
109
113
 
114
+ return None
115
+
110
116
 
111
117
  # TODO: mypy has some problems with putting a bare `str`
112
118
  # as a callable function in SwaggerFormat
@@ -791,7 +797,7 @@ class ContribsClient(SwaggerClient):
791
797
  ret = self.projects.queryProjects(**query).result() # first page
792
798
  total_count, total_pages = ret["total_count"], ret["total_pages"]
793
799
 
794
- if total_pages < 2:
800
+ if total_pages < 2 or ("page" in query):
795
801
  return (
796
802
  _convert_to_model( # type: ignore[return-value]
797
803
  ret["data"],
@@ -822,7 +828,12 @@ class ContribsClient(SwaggerClient):
822
828
  ]
823
829
  responses = _run_futures(futures, total=total_count, timeout=timeout)
824
830
 
825
- ret["data"].extend([resp["result"]["data"] for resp in responses.values()])
831
+ # NOTE: resp["result"]["data"] is a dict where each key is an int,
832
+ # and each value is a **list** of projects as dict
833
+ # Double iteration is necessary because of this nested structure
834
+ ret["data"].extend(
835
+ [entry for resp in responses.values() for entry in resp["result"]["data"]]
836
+ )
826
837
 
827
838
  return (
828
839
  _convert_to_model( # type: ignore[return-value]
@@ -2109,7 +2120,7 @@ class ContribsClient(SwaggerClient):
2109
2120
  digest in digests[project_name][component]
2110
2121
  or digest
2111
2122
  in existing.get(project_name, {})
2112
- .get(component, {})
2123
+ .get(component, {}) # type: ignore[union-attr]
2113
2124
  .get("md5s", [])
2114
2125
  )
2115
2126
 
@@ -2227,9 +2238,9 @@ class ContribsClient(SwaggerClient):
2227
2238
  pk=project_name, _fields=["unique_identifiers"]
2228
2239
  ).result()["unique_identifiers"]
2229
2240
  )
2230
- existing_ids = existing.get(project_name, {}).get(
2231
- "identifiers", []
2232
- )
2241
+ existing_ids: Iterable[str] = existing.get(
2242
+ project_name, {}
2243
+ ).get("identifiers", [])
2233
2244
  contribs[project_name] = [
2234
2245
  c
2235
2246
  for c in contribs[project_name]
@@ -372,5 +372,5 @@ class QueryResult(_DictLikeAccess):
372
372
 
373
373
  total_count: int
374
374
  total_pages: int
375
- data: list[BaseModel] | None = None
375
+ data: list[ContribData] | None = None
376
376
  has_more: bool = False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mp-api
3
- Version: 0.46.2rc0
3
+ Version: 0.46.2rc2
4
4
  Summary: API Client for the Materials Project
5
5
  Author-email: The Materials Project <feedback@materialsproject.org>
6
6
  License-Expression: BSD-3-Clause-LBNL
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes