elapi 2.3.2__tar.gz → 2.3.3__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 (112) hide show
  1. {elapi-2.3.2 → elapi-2.3.3}/CHANGELOG.md +8 -0
  2. {elapi-2.3.2 → elapi-2.3.3}/PKG-INFO +1 -1
  3. {elapi-2.3.2 → elapi-2.3.3}/pyproject.toml +1 -1
  4. elapi-2.3.3/src/elapi/VERSION +1 -0
  5. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/cli.py +2 -9
  6. {elapi-2.3.2 → elapi-2.3.3}/uv.lock +0 -11
  7. elapi-2.3.2/src/elapi/VERSION +0 -1
  8. elapi-2.3.2/src/elapi/plugins/bill_teams/logging_handler.py +0 -34
  9. {elapi-2.3.2 → elapi-2.3.3}/.assets/.old/urz-elabftw-light-dark-border.png +0 -0
  10. {elapi-2.3.2 → elapi-2.3.3}/.assets/.old/urz-elabftw-light-dark-border.svg +0 -0
  11. {elapi-2.3.2 → elapi-2.3.3}/.assets/.old/urz-elabftw-original.svg +0 -0
  12. {elapi-2.3.2 → elapi-2.3.3}/.assets/.old/urz-elabftw-white-border.png +0 -0
  13. {elapi-2.3.2 → elapi-2.3.3}/.assets/elAPI_logo.png +0 -0
  14. {elapi-2.3.2 → elapi-2.3.3}/.gitignore +0 -0
  15. {elapi-2.3.2 → elapi-2.3.3}/.vscode/launch.json +0 -0
  16. {elapi-2.3.2 → elapi-2.3.3}/.vscode/settings.json +0 -0
  17. {elapi-2.3.2 → elapi-2.3.3}/CITATION.cff +0 -0
  18. {elapi-2.3.2 → elapi-2.3.3}/LICENSE +0 -0
  19. {elapi-2.3.2 → elapi-2.3.3}/README.md +0 -0
  20. {elapi-2.3.2 → elapi-2.3.3}/examples/README.md +0 -0
  21. {elapi-2.3.2 → elapi-2.3.3}/examples/bash/create_user/create_new_user.sh +0 -0
  22. {elapi-2.3.2 → elapi-2.3.3}/examples/bash/manage_resources/create_and_modify_new_resource.sh +0 -0
  23. {elapi-2.3.2 → elapi-2.3.3}/examples/bash/manage_resources/get_all_resources.sh +0 -0
  24. {elapi-2.3.2 → elapi-2.3.3}/examples/python/add_attachment_to_an_experiment/add_attachment_advanced.py +0 -0
  25. {elapi-2.3.2 → elapi-2.3.3}/examples/python/add_attachment_to_an_experiment/add_attachment_simple.py +0 -0
  26. {elapi-2.3.2 → elapi-2.3.3}/examples/python/add_attachment_to_an_experiment/attachments/ChemischeElemente_Beispiel.csv +0 -0
  27. {elapi-2.3.2 → elapi-2.3.3}/examples/python/add_attachment_to_an_experiment/attachments/elapi_get_architecture_old.pdf +0 -0
  28. {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/awesome/cli.py +0 -0
  29. {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/README.md +0 -0
  30. {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/__init__.py +0 -0
  31. {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/_cli_helpers.py +0 -0
  32. {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/cli.py +0 -0
  33. {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/names.py +0 -0
  34. {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/obfuscate.py +0 -0
  35. {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/pyproject.toml +0 -0
  36. {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/utils.py +0 -0
  37. {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_users/create_new_user_advanced.py +0 -0
  38. {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_users/create_new_user_in_batch_advanced.py +0 -0
  39. {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_users/create_new_user_simple.py +0 -0
  40. {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_users/create_new_user_with_password_advanced.py +0 -0
  41. {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_users/user_data.csv +0 -0
  42. {elapi-2.3.2 → elapi-2.3.3}/examples/python/download_experiment_attachment/download_single_attachment.py +0 -0
  43. {elapi-2.3.2 → elapi-2.3.3}/examples/python/download_experiments/download_bulk_experiments.py +0 -0
  44. {elapi-2.3.2 → elapi-2.3.3}/examples/python/download_experiments/download_single_experiment.py +0 -0
  45. {elapi-2.3.2 → elapi-2.3.3}/examples/python/manage_teams/expire_teams.py +0 -0
  46. {elapi-2.3.2 → elapi-2.3.3}/examples/python/write_to_experiment/append_new_content_to_experiment.py +0 -0
  47. {elapi-2.3.2 → elapi-2.3.3}/examples/python/write_to_experiment/aspirin_new_reserach_result.txt +0 -0
  48. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/__init__.py +0 -0
  49. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/_names.py +0 -0
  50. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/api/__init__.py +0 -0
  51. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/api/api.py +0 -0
  52. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/api/endpoint.py +0 -0
  53. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/api/validators.py +0 -0
  54. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/cli/__init__.py +0 -0
  55. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/cli/__main__.py +0 -0
  56. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/cli/_plugin_handler.py +0 -0
  57. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/cli/_venv_state_manager.py +0 -0
  58. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/cli/doc.py +0 -0
  59. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/cli/elapi.py +0 -0
  60. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/configuration/__init__.py +0 -0
  61. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/configuration/_config_history.py +0 -0
  62. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/configuration/_overload_history.py +0 -0
  63. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/configuration/config.py +0 -0
  64. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/configuration/log_file.py +0 -0
  65. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/configuration/overridable_vars.py +0 -0
  66. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/configuration/validators.py +0 -0
  67. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/core_validators/__init__.py +0 -0
  68. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/core_validators/base.py +0 -0
  69. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/core_validators/path.py +0 -0
  70. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/loggers/__init__.py +0 -0
  71. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/loggers/base.py +0 -0
  72. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/loggers/handlers/__init__.py +0 -0
  73. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/loggers/handlers/file.py +0 -0
  74. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/loggers/handlers/stderr.py +0 -0
  75. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/path.py +0 -0
  76. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/__init__.py +0 -0
  77. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/__init__.py +0 -0
  78. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/_doc.py +0 -0
  79. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/bill_teams.py +0 -0
  80. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/configuration.py +0 -0
  81. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/formats.py +0 -0
  82. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/generate_table.py +0 -0
  83. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/names.py +0 -0
  84. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/registry.py +0 -0
  85. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/specification.py +0 -0
  86. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/utils.py +0 -0
  87. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/validators.py +0 -0
  88. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/commons/__init__.py +0 -0
  89. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/commons/cli_helpers.py +0 -0
  90. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/commons/export.py +0 -0
  91. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/commons/get_data_from_input_or_path.py +0 -0
  92. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/commons/get_information.py +0 -0
  93. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/commons/get_location_from_headers.py +0 -0
  94. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/experiments/__init__.py +0 -0
  95. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/experiments/_doc.py +0 -0
  96. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/experiments/cli.py +0 -0
  97. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/experiments/experiments.py +0 -0
  98. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/experiments/formats.py +0 -0
  99. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/show_config.py +0 -0
  100. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/__init__.py +0 -0
  101. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/_markdown_doc.py +0 -0
  102. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/_missing.py +0 -0
  103. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/base.py +0 -0
  104. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/colors.py +0 -0
  105. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/formats.py +0 -0
  106. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/highlight.py +0 -0
  107. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/rich_utils.py +0 -0
  108. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/utils/__init__.py +0 -0
  109. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/utils/messages.py +0 -0
  110. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/utils/typer_patches.py +0 -0
  111. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/utils/utils.py +0 -0
  112. {elapi-2.3.2 → elapi-2.3.3}/src/elapi/validators.py +0 -0
@@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.3.3] - 2025-06-17
9
+
10
+ This is a hotfix release.
11
+
12
+ ### Fixed
13
+
14
+ - Bad PyPI publish
15
+
8
16
  ## [2.3.2] - 2025-06-17
9
17
 
10
18
  This is a hotfix release.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: elapi
3
- Version: 2.3.2
3
+ Version: 2.3.3
4
4
  Summary: elAPI is a powerful, extensible API client for eLabFTW.
5
5
  Project-URL: Homepage, https://www.urz.uni-heidelberg.de/de/service-katalog/software-und-anwendungen/elabftw
6
6
  Project-URL: Repository, https://github.com/uhd-urz/elAPI.git
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "elapi"
3
- version = "2.3.2"
3
+ version = "2.3.3"
4
4
  description = "elAPI is a powerful, extensible API client for eLabFTW."
5
5
  authors = [{ name = "Alexander Haller, Mahadi Xion", email = "elabftw@uni-heidelberg.de" }]
6
6
  requires-python = ">=3.9.0,<4"
@@ -0,0 +1 @@
1
+ 2.3.3
@@ -63,7 +63,6 @@ else:
63
63
  METADATA_BILLING_INTERNAL_EXTERNAL_TO_BOOL as int_ext_to_bool,
64
64
  OUTPUT_TABLE_FILE_NAME_STUB,
65
65
  )
66
- from .logging_handler import PostfixEmailHandler
67
66
 
68
67
  patch_typer_flag_value()
69
68
  app = Typer(
@@ -74,22 +73,16 @@ else:
74
73
  registry_app = Typer(
75
74
  name=REGISTRY_SUB_PLUGIN_NAME, help=f"Manage {PLUGIN_NAME} registry."
76
75
  )
77
- app.add_typer(registry_app, rich_help_panel="Sub-plugins")
76
+ app.add_typer(registry_app, rich_help_panel=f"Sub-plugins")
78
77
 
79
78
  logger = Logger()
80
- for handler in logger.handlers:
81
- if isinstance(handler, PostfixEmailHandler):
82
- break
83
- else:
84
- logger.addHandler(PostfixEmailHandler())
85
79
 
86
80
  @app.command(name="teams-info")
87
81
  @tenacity.retry(
88
82
  retry=retry_if_exception_type((InterruptedError, RuntimeValidationError)),
89
83
  stop=stop_after_attempt(6), # including the very first attempt
90
84
  wait=wait_exponential(multiplier=60, min=5, max=4260),
91
- retry_error_callback=lambda _: ...,
92
- # meant to suppress raising the final exception once all attempts have been made
85
+ retry_error_callback=lambda _: ..., # meant to suppress raising final exception once all attempts have been made
93
86
  )
94
87
  def get_teams(
95
88
  data_format: Annotated[
@@ -92,7 +92,6 @@ dependencies = [
92
92
  [package.optional-dependencies]
93
93
  uhd-urz = [
94
94
  { name = "python-dateutil" },
95
- { name = "sh" },
96
95
  { name = "tenacity" },
97
96
  { name = "uvloop" },
98
97
  ]
@@ -113,7 +112,6 @@ requires-dist = [
113
112
  { name = "python-dateutil", marker = "extra == 'uhd-urz'", specifier = ">=2.9.0.post0,<3" },
114
113
  { name = "pyyaml", specifier = ">=6.0.1,<7" },
115
114
  { name = "rich", specifier = ">=13.8.0,<14" },
116
- { name = "sh", marker = "extra == 'uhd-urz'", specifier = ">=2.2.2" },
117
115
  { name = "tenacity", marker = "extra == 'uhd-urz'", specifier = ">=9.0.0,<10" },
118
116
  { name = "typer", extras = ["all"], specifier = ">=0.9.0,<0.10" },
119
117
  { name = "uvloop", marker = "extra == 'uhd-urz'", specifier = ">=0.20.0,<0.21" },
@@ -389,15 +387,6 @@ wheels = [
389
387
  { url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424, upload-time = "2024-11-01T16:43:55.817Z" },
390
388
  ]
391
389
 
392
- [[package]]
393
- name = "sh"
394
- version = "2.2.2"
395
- source = { registry = "https://pypi.org/simple" }
396
- sdist = { url = "https://files.pythonhosted.org/packages/59/52/f43920223c93e31874677c681b8603d36a40d3d8502d3a37f80d3995d43e/sh-2.2.2.tar.gz", hash = "sha256:653227a7c41a284ec5302173fbc044ee817c7bad5e6e4d8d55741b9aeb9eb65b", size = 345866, upload-time = "2025-02-24T07:16:25.363Z" }
397
- wheels = [
398
- { url = "https://files.pythonhosted.org/packages/70/98/d82f14ac7ffedbd38dfa2383f142b26d18d23ca6cf35a40f4af60df666bd/sh-2.2.2-py3-none-any.whl", hash = "sha256:e0b15b4ae8ffcd399bc8ffddcbd770a43c7a70a24b16773fbb34c001ad5d52af", size = 38295, upload-time = "2025-02-24T07:16:23.782Z" },
399
- ]
400
-
401
390
  [[package]]
402
391
  name = "shellingham"
403
392
  version = "1.5.4"
@@ -1 +0,0 @@
1
- 2.3.2
@@ -1,34 +0,0 @@
1
- import logging
2
-
3
- import sh
4
-
5
-
6
- class PostfixEmailHandler(logging.Handler):
7
- def __init__(self):
8
- super().__init__()
9
-
10
- @staticmethod
11
- def send_email(email_body: str):
12
- # noinspection PyUnresolvedReferences
13
- mail = sh.mail
14
- mail(
15
- "-s",
16
- "Test mail from elAPI bill-team",
17
- "mahadi.xion@urz.uni-heidelberg.de",
18
- # "alexander.haller@urz.uni-heidelberg.de",
19
- _in=sh.echo(email_body),
20
- )
21
-
22
- def emit(self, record):
23
- if record.levelno >= 40:
24
- main_log: str = f"""{record.levelname} at {record.asctime}: {record.msg}"""
25
- email_body: str = f"""Hi,
26
-
27
- This is a test message. elAPI has encountered the following error while running {record.funcName} in {record.pathname}.
28
-
29
- {main_log}
30
-
31
- Best regards,
32
- <eLabFTW Billing Team>
33
- """
34
- self.send_email(email_body)
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
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
File without changes