mp-api 0.46.5__tar.gz → 0.47.0rc0__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 (163) hide show
  1. mp_api-0.47.0rc0/PKG-INFO +63 -0
  2. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/_test_utils.py +4 -4
  3. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/__init__.py +8 -3
  4. mp_api-0.47.0rc0/mp_api/client/contribs/_logger.py +50 -0
  5. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/contribs/_types.py +4 -1
  6. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/contribs/client.py +191 -164
  7. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/contribs/settings.py +5 -1
  8. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/contribs/utils.py +5 -23
  9. mp_api-0.47.0rc0/mp_api/client/core/_display.py +862 -0
  10. mp_api-0.47.0rc0/mp_api/client/core/_entries.py +234 -0
  11. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/core/_oxygen_evolution.py +2 -4
  12. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/core/client.py +796 -383
  13. mp_api-0.47.0rc0/mp_api/client/core/delta.py +433 -0
  14. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/core/exceptions.py +14 -6
  15. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/core/schemas.py +67 -16
  16. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/core/settings.py +13 -0
  17. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/core/utils.py +89 -6
  18. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/mprester.py +341 -149
  19. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/_server.py +2 -2
  20. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/absorption.py +7 -2
  21. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/alloys.py +8 -3
  22. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/bonds.py +12 -7
  23. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/chemenv.py +19 -14
  24. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/dielectric.py +11 -6
  25. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/doi.py +2 -2
  26. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/elasticity.py +15 -10
  27. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/electrodes.py +26 -23
  28. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/electronic_structure.py +29 -23
  29. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/eos.py +6 -6
  30. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/grain_boundaries.py +7 -8
  31. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/magnetism.py +12 -7
  32. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/materials.py +18 -13
  33. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/oxidation_states.py +10 -5
  34. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/phonon.py +7 -6
  35. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/piezo.py +8 -3
  36. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/provenance.py +7 -2
  37. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/robocrys.py +11 -6
  38. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/similarity.py +2 -2
  39. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/substrates.py +5 -5
  40. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/summary.py +64 -69
  41. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/surface_properties.py +6 -7
  42. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/synthesis.py +25 -15
  43. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/tasks.py +8 -6
  44. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/thermo.py +53 -28
  45. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/xas.py +7 -8
  46. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/molecules/jcesr.py +9 -12
  47. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/molecules/summary.py +6 -6
  48. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/mcp/server.py +4 -0
  49. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/mcp/utils.py +2 -0
  50. {mp_api-0.46.5 → mp_api-0.47.0rc0}/pyproject.toml +31 -21
  51. mp_api-0.47.0rc0/tests/client/contribs/test_side_effects.py +192 -0
  52. mp_api-0.47.0rc0/tests/client/core/test_client_progress.py +179 -0
  53. mp_api-0.47.0rc0/tests/client/core/test_delta.py +517 -0
  54. mp_api-0.47.0rc0/tests/client/core/test_delta_versions.py +949 -0
  55. mp_api-0.47.0rc0/tests/client/core/test_display.py +335 -0
  56. mp_api-0.47.0rc0/tests/client/core/test_quiet.py +353 -0
  57. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/core/test_schemas.py +43 -11
  58. mp_api-0.47.0rc0/tests/client/core/test_session_headers.py +81 -0
  59. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_electrodes.py +16 -13
  60. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_eos.py +2 -2
  61. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_summary.py +26 -0
  62. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/molecules/test_jcesr.py +14 -7
  63. mp_api-0.47.0rc0/tests/client/molecules/test_molecules.py +21 -0
  64. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/test_client.py +1 -1
  65. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/test_core_client.py +1 -1
  66. mp_api-0.47.0rc0/tests/client/test_entry_progress.py +432 -0
  67. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/test_mprester.py +233 -148
  68. mp_api-0.47.0rc0/tests/conftest.py +23 -0
  69. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/mcp/test_utils.py +2 -2
  70. mp_api-0.46.5/.coveragerc +0 -7
  71. mp_api-0.46.5/.github/workflows/lint.yml +0 -30
  72. mp_api-0.46.5/.github/workflows/release.yml +0 -66
  73. mp_api-0.46.5/.github/workflows/testing.yml +0 -60
  74. mp_api-0.46.5/.github/workflows/upgrade_dependencies.yml +0 -89
  75. mp_api-0.46.5/.pre-commit-config.yaml +0 -42
  76. mp_api-0.46.5/CODE_OF_CONDUCT.md +0 -48
  77. mp_api-0.46.5/PKG-INFO +0 -71
  78. mp_api-0.46.5/README.md +0 -7
  79. mp_api-0.46.5/dev/generate_mcp_tools.py +0 -165
  80. mp_api-0.46.5/dev/inspect_mcp.sh +0 -12
  81. mp_api-0.46.5/docs/Makefile +0 -20
  82. mp_api-0.46.5/docs/_templates/custom-class-template.rst +0 -32
  83. mp_api-0.46.5/docs/_templates/custom-module-template.rst +0 -66
  84. mp_api-0.46.5/docs/conf.py +0 -122
  85. mp_api-0.46.5/docs/index.rst +0 -33
  86. mp_api-0.46.5/docs/make.bat +0 -35
  87. mp_api-0.46.5/docs/modules.rst +0 -14
  88. mp_api-0.46.5/mp_api/client/contribs/_logger.py +0 -97
  89. mp_api-0.46.5/mp_api.egg-info/PKG-INFO +0 -71
  90. mp_api-0.46.5/mp_api.egg-info/SOURCES.txt +0 -146
  91. mp_api-0.46.5/mp_api.egg-info/dependency_links.txt +0 -1
  92. mp_api-0.46.5/mp_api.egg-info/entry_points.txt +0 -2
  93. mp_api-0.46.5/mp_api.egg-info/requires.txt +0 -53
  94. mp_api-0.46.5/mp_api.egg-info/scm_file_list.json +0 -142
  95. mp_api-0.46.5/mp_api.egg-info/scm_version.json +0 -8
  96. mp_api-0.46.5/mp_api.egg-info/top_level.txt +0 -1
  97. mp_api-0.46.5/requirements/requirements-ubuntu-latest_py3.11.txt +0 -179
  98. mp_api-0.46.5/requirements/requirements-ubuntu-latest_py3.11_extras.txt +0 -711
  99. mp_api-0.46.5/requirements/requirements-ubuntu-latest_py3.12.txt +0 -177
  100. mp_api-0.46.5/requirements/requirements-ubuntu-latest_py3.12_extras.txt +0 -702
  101. mp_api-0.46.5/requirements/requirements-ubuntu-latest_py3.13.txt +0 -176
  102. mp_api-0.46.5/requirements/requirements-ubuntu-latest_py3.13_extras.txt +0 -696
  103. mp_api-0.46.5/requirements/requirements-ubuntu-latest_py3.14.txt +0 -176
  104. mp_api-0.46.5/requirements/requirements-ubuntu-latest_py3.14_extras.txt +0 -696
  105. mp_api-0.46.5/setup.cfg +0 -4
  106. mp_api-0.46.5/test_files/Si_mp_149.cif +0 -34
  107. mp_api-0.46.5/tests/client/molecules/test_molecules.py +0 -18
  108. {mp_api-0.46.5 → mp_api-0.47.0rc0}/.gitignore +0 -0
  109. {mp_api-0.46.5 → mp_api-0.47.0rc0}/LICENSE +0 -0
  110. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/__init__.py +0 -0
  111. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/_server_utils.py +0 -0
  112. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/contribs/__init__.py +0 -0
  113. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/contribs/_units.py +0 -0
  114. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/contribs/schemas.py +0 -0
  115. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/core/__init__.py +0 -0
  116. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/__init__.py +0 -0
  117. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/materials/__init__.py +0 -0
  118. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/molecules/__init__.py +0 -0
  119. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/client/routes/molecules/molecules.py +0 -0
  120. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/mcp/__init__.py +0 -0
  121. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/mcp/_schemas.py +0 -0
  122. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/mcp/mp_mcp.py +0 -0
  123. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/mcp/tools.py +0 -0
  124. {mp_api-0.46.5 → mp_api-0.47.0rc0}/mp_api/py.typed +0 -0
  125. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/__init__.py +0 -0
  126. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/__init__.py +0 -0
  127. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/contribs/conftest.py +0 -0
  128. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/contribs/test_client.py +0 -0
  129. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/contribs/test_contribs_schemas.py +0 -0
  130. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/contribs/test_contribs_utils.py +0 -0
  131. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/contribs/test_types.py +0 -0
  132. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/core/test_oxygen_evolution.py +0 -0
  133. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/core/test_utils.py +0 -0
  134. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/__init__.py +0 -0
  135. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_absorption.py +0 -0
  136. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_alloys.py +0 -0
  137. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_bonds.py +0 -0
  138. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_chemenv.py +0 -0
  139. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_dielectric.py +0 -0
  140. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_doi.py +0 -0
  141. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_elasticity.py +0 -0
  142. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_electronic_structure.py +0 -0
  143. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_grain_boundary.py +0 -0
  144. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_magnetism.py +0 -0
  145. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_materials.py +0 -0
  146. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_oxidation_states.py +0 -0
  147. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_phonon.py +0 -0
  148. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_piezo.py +0 -0
  149. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_provenance.py +0 -0
  150. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_robocrys.py +0 -0
  151. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_similarity.py +0 -0
  152. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_substrates.py +0 -0
  153. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_surface_properties.py +0 -0
  154. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_synthesis.py +0 -0
  155. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_tasks.py +0 -0
  156. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_thermo.py +0 -0
  157. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/materials/test_xas.py +0 -0
  158. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/molecules/__init__.py +0 -0
  159. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/molecules/test_summary.py +0 -0
  160. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/client/test_heartbeat.py +0 -0
  161. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/mcp/__init__.py +0 -0
  162. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/mcp/test_server.py +0 -0
  163. {mp_api-0.46.5 → mp_api-0.47.0rc0}/tests/mcp/test_tools.py +0 -0
@@ -0,0 +1,63 @@
1
+ Metadata-Version: 2.5
2
+ Name: mp-api
3
+ Version: 0.47.0rc0
4
+ Summary: API Client for the Materials Project
5
+ Author-email: The Materials Project <feedback@materialsproject.org>
6
+ License-Expression: BSD-3-Clause-LBNL
7
+ License-File: LICENSE
8
+ Classifier: Development Status :: 4 - Beta
9
+ Classifier: Intended Audience :: Information Technology
10
+ Classifier: Intended Audience :: Science/Research
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3 :: Only
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Programming Language :: Python :: 3.14
17
+ Classifier: Topic :: Scientific/Engineering
18
+ Requires-Python: >=3.12
19
+ Requires-Dist: boto3
20
+ Requires-Dist: deltalake<1.6.0,>=1.4.0
21
+ Requires-Dist: emmet-core<0.88.1,>=0.88.0rc
22
+ Requires-Dist: monty>=2024.12.10
23
+ Requires-Dist: orjson<4,>=3.10
24
+ Requires-Dist: pyarrow>=20.0.0
25
+ Requires-Dist: pymatgen>2024.2.20
26
+ Requires-Dist: requests>=2.23.0
27
+ Requires-Dist: rich>=13.0
28
+ Provides-Extra: all
29
+ Requires-Dist: custodian; extra == 'all'
30
+ Requires-Dist: emmet-core[all]<0.88.1,>=0.88.0rc; extra == 'all'
31
+ Requires-Dist: fastmcp; extra == 'all'
32
+ Requires-Dist: flask; extra == 'all'
33
+ Requires-Dist: ipywidgets; extra == 'all'
34
+ Provides-Extra: contribs
35
+ Requires-Dist: boltons; extra == 'contribs'
36
+ Requires-Dist: bravado; extra == 'contribs'
37
+ Requires-Dist: cachetools; extra == 'contribs'
38
+ Requires-Dist: filetype; extra == 'contribs'
39
+ Requires-Dist: ipython; extra == 'contribs'
40
+ Requires-Dist: json2html; extra == 'contribs'
41
+ Requires-Dist: pint>=0.25.0; extra == 'contribs'
42
+ Requires-Dist: pyisemail; extra == 'contribs'
43
+ Requires-Dist: pymongo; extra == 'contribs'
44
+ Requires-Dist: requests-futures; extra == 'contribs'
45
+ Requires-Dist: swagger-spec-validator; extra == 'contribs'
46
+ Provides-Extra: docs
47
+ Requires-Dist: sphinx; extra == 'docs'
48
+ Provides-Extra: mcp
49
+ Requires-Dist: fastmcp; extra == 'mcp'
50
+ Provides-Extra: notebook
51
+ Requires-Dist: ipywidgets; extra == 'notebook'
52
+ Provides-Extra: server
53
+ Requires-Dist: flask; extra == 'server'
54
+ Provides-Extra: test
55
+ Requires-Dist: mypy; extra == 'test'
56
+ Requires-Dist: pre-commit; extra == 'test'
57
+ Requires-Dist: pytest; extra == 'test'
58
+ Requires-Dist: pytest-asyncio; extra == 'test'
59
+ Requires-Dist: pytest-cov; extra == 'test'
60
+ Requires-Dist: pytest-mock; extra == 'test'
61
+ Requires-Dist: pytest-xdist; extra == 'test'
62
+ Requires-Dist: types-requests; extra == 'test'
63
+ Requires-Dist: types-setuptools; extra == 'test'
@@ -46,8 +46,8 @@ def client_search_testing(
46
46
  alt_name_dict (dict[str, str]): Alternative names for parameters used in the projection and subsequent data checking
47
47
  custom_field_tests (dict[str, Any]): Custom queries for specific fields.
48
48
  sub_doc_fields (list[str]): Prefixes for fields to check in resulting data. Useful when data to be tested is nested.
49
- int_bounds (tuple[int,int]) : integer bounds to use in testing int-type query arguments
50
- float_bounds (tuple[float,float]) : float bounds to use in testing float-type query arguments
49
+ int_bounds (tuple[int, int]) : integer bounds to use in testing int-type query arguments
50
+ float_bounds (tuple[float, float]) : float bounds to use in testing float-type query arguments
51
51
  """
52
52
  if search_method is None:
53
53
  return
@@ -58,7 +58,8 @@ def client_search_testing(
58
58
  for entry in param_tuples:
59
59
  param = entry[0]
60
60
 
61
- if param not in excluded_params + ["return"]:
61
+ # `db_version` selects a dataset version rather than filtering docs
62
+ if param not in excluded_params + ["return", "db_version"]:
62
63
  param_type = entry[1]
63
64
  q: dict[str, Any] = {"chunk_size": 1, "num_chunks": 1}
64
65
 
@@ -139,7 +140,6 @@ def client_sort(
139
140
  if k not in ("_page", "_sort_fields", "chunk_size", "fields")
140
141
  }
141
142
  for sort_field in [sort_fields] if isinstance(sort_fields, str) else sort_fields:
142
-
143
143
  asc = search_method(
144
144
  _page=1,
145
145
  _sort_fields=sort_field,
@@ -2,18 +2,23 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import logging
6
5
  import os
7
6
  from importlib.metadata import PackageNotFoundError, version
8
7
 
8
+ from mp_api.client.core._display import (
9
+ _configure_from_settings,
10
+ enable_logging,
11
+ is_quiet,
12
+ quiet,
13
+ )
9
14
  from mp_api.client.core.exceptions import MPRestError
10
15
  from mp_api.client.mprester import MPRester
11
16
 
12
- __all__ = ["MPRestError", "MPRester"]
17
+ __all__ = ["MPRestError", "MPRester", "enable_logging", "is_quiet", "quiet"]
13
18
 
14
19
  try:
15
20
  __version__ = version("mp_api")
16
21
  except PackageNotFoundError: # pragma: no cover
17
22
  __version__ = os.getenv("SETUPTOOLS_SCM_PRETEND_VERSION", "")
18
23
 
19
- logging.getLogger(__name__).addHandler(logging.NullHandler())
24
+ _configure_from_settings()
@@ -0,0 +1,50 @@
1
+ """Logger for the MPContribs client.
2
+
3
+ Records go through the `mp_api.client` logger's default handler (stderr),
4
+ see `mp_api.client.core._display`. No handlers or level are set here: the
5
+ level is configured once, for the whole client, with `MPRESTER_LOG_LEVEL`.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import logging
11
+ import os
12
+ import warnings
13
+
14
+ from mp_api.client.contribs.settings import MPCC_SETTINGS
15
+
16
+
17
+ class CustomLoggerAdapter(logging.LoggerAdapter):
18
+ """Prefix messages with the supervisor group/process, if running under supervisor."""
19
+
20
+ def process(self, msg, kwargs):
21
+ prefix = self.extra.get("prefix") # type: ignore[union-attr]
22
+ return f"[{prefix}] {msg}" if prefix else msg, kwargs
23
+
24
+
25
+ def get_logger(name: str = "mp_api.client.contribs") -> CustomLoggerAdapter:
26
+ """Get the contribs logger.
27
+
28
+ Args:
29
+ name (str) : logger name, a child of `mp_api.client`
30
+
31
+ Returns:
32
+ CustomLoggerAdapter
33
+ """
34
+ logger = logging.getLogger(name)
35
+ process = os.environ.get("SUPERVISOR_PROCESS_NAME")
36
+ group = os.environ.get("SUPERVISOR_GROUP_NAME")
37
+ cfg = {"prefix": f"{group}/{process}"} if process and group else {}
38
+ return CustomLoggerAdapter(logger, cfg)
39
+
40
+
41
+ if MPCC_SETTINGS.CLIENT_LOG_LEVEL is not None:
42
+ warnings.warn(
43
+ "MPCONTRIBS_CLIENT_LOG_LEVEL is deprecated and ignored, use MPRESTER_LOG_LEVEL "
44
+ "(which sets the level for the whole client) instead.",
45
+ FutureWarning,
46
+ stacklevel=2,
47
+ )
48
+
49
+
50
+ MPCC_LOGGER = get_logger()
@@ -69,7 +69,10 @@ class Table(pd.DataFrame, _Component):
69
69
  try:
70
70
  allowed_kwargs = getfullargspec(line_chart).args
71
71
  attrs = {k: v for k, v in self.attrs.items() if k in allowed_kwargs}
72
- return self.plot(**attrs)
72
+ # Plot with plotly directly, rather than changing the
73
+ # process-wide pandas plotting backend / plotly template.
74
+ attrs.setdefault("template", "simple_white")
75
+ return line_chart(self, **attrs)
73
76
  except Exception as e:
74
77
  MPCC_LOGGER.error(f"Can't display table: {e}")
75
78