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.
- {elapi-2.3.2 → elapi-2.3.3}/CHANGELOG.md +8 -0
- {elapi-2.3.2 → elapi-2.3.3}/PKG-INFO +1 -1
- {elapi-2.3.2 → elapi-2.3.3}/pyproject.toml +1 -1
- elapi-2.3.3/src/elapi/VERSION +1 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/cli.py +2 -9
- {elapi-2.3.2 → elapi-2.3.3}/uv.lock +0 -11
- elapi-2.3.2/src/elapi/VERSION +0 -1
- elapi-2.3.2/src/elapi/plugins/bill_teams/logging_handler.py +0 -34
- {elapi-2.3.2 → elapi-2.3.3}/.assets/.old/urz-elabftw-light-dark-border.png +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/.assets/.old/urz-elabftw-light-dark-border.svg +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/.assets/.old/urz-elabftw-original.svg +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/.assets/.old/urz-elabftw-white-border.png +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/.assets/elAPI_logo.png +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/.gitignore +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/.vscode/launch.json +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/.vscode/settings.json +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/CITATION.cff +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/LICENSE +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/README.md +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/README.md +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/bash/create_user/create_new_user.sh +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/bash/manage_resources/create_and_modify_new_resource.sh +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/bash/manage_resources/get_all_resources.sh +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/add_attachment_to_an_experiment/add_attachment_advanced.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/add_attachment_to_an_experiment/add_attachment_simple.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/add_attachment_to_an_experiment/attachments/ChemischeElemente_Beispiel.csv +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/add_attachment_to_an_experiment/attachments/elapi_get_architecture_old.pdf +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/awesome/cli.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/README.md +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/__init__.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/_cli_helpers.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/cli.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/names.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/obfuscate.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/pyproject.toml +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_plugins/obfuscate/utils.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_users/create_new_user_advanced.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_users/create_new_user_in_batch_advanced.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_users/create_new_user_simple.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_users/create_new_user_with_password_advanced.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/create_users/user_data.csv +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/download_experiment_attachment/download_single_attachment.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/download_experiments/download_bulk_experiments.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/download_experiments/download_single_experiment.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/manage_teams/expire_teams.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/write_to_experiment/append_new_content_to_experiment.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/examples/python/write_to_experiment/aspirin_new_reserach_result.txt +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/__init__.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/_names.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/api/__init__.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/api/api.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/api/endpoint.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/api/validators.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/cli/__init__.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/cli/__main__.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/cli/_plugin_handler.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/cli/_venv_state_manager.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/cli/doc.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/cli/elapi.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/configuration/__init__.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/configuration/_config_history.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/configuration/_overload_history.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/configuration/config.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/configuration/log_file.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/configuration/overridable_vars.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/configuration/validators.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/core_validators/__init__.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/core_validators/base.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/core_validators/path.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/loggers/__init__.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/loggers/base.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/loggers/handlers/__init__.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/loggers/handlers/file.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/loggers/handlers/stderr.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/path.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/__init__.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/__init__.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/_doc.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/bill_teams.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/configuration.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/formats.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/generate_table.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/names.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/registry.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/specification.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/utils.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/bill_teams/validators.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/commons/__init__.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/commons/cli_helpers.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/commons/export.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/commons/get_data_from_input_or_path.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/commons/get_information.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/commons/get_location_from_headers.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/experiments/__init__.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/experiments/_doc.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/experiments/cli.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/experiments/experiments.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/experiments/formats.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/plugins/show_config.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/__init__.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/_markdown_doc.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/_missing.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/base.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/colors.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/formats.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/highlight.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/styles/rich_utils.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/utils/__init__.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/utils/messages.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/utils/typer_patches.py +0 -0
- {elapi-2.3.2 → elapi-2.3.3}/src/elapi/utils/utils.py +0 -0
- {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.
|
|
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
|
|
@@ -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"
|
elapi-2.3.2/src/elapi/VERSION
DELETED
|
@@ -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
|
{elapi-2.3.2 → elapi-2.3.3}/examples/bash/manage_resources/create_and_modify_new_resource.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{elapi-2.3.2 → elapi-2.3.3}/examples/python/add_attachment_to_an_experiment/add_attachment_simple.py
RENAMED
|
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
|
{elapi-2.3.2 → elapi-2.3.3}/examples/python/create_users/create_new_user_in_batch_advanced.py
RENAMED
|
File without changes
|
|
File without changes
|
{elapi-2.3.2 → elapi-2.3.3}/examples/python/create_users/create_new_user_with_password_advanced.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{elapi-2.3.2 → elapi-2.3.3}/examples/python/download_experiments/download_bulk_experiments.py
RENAMED
|
File without changes
|
{elapi-2.3.2 → elapi-2.3.3}/examples/python/download_experiments/download_single_experiment.py
RENAMED
|
File without changes
|
|
File without changes
|
{elapi-2.3.2 → elapi-2.3.3}/examples/python/write_to_experiment/append_new_content_to_experiment.py
RENAMED
|
File without changes
|
{elapi-2.3.2 → elapi-2.3.3}/examples/python/write_to_experiment/aspirin_new_reserach_result.txt
RENAMED
|
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
|
|
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
|
|
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
|