elapi 2.4.7__tar.gz → 2.4.9__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.4.7 → elapi-2.4.9}/PKG-INFO +74 -35
- {elapi-2.4.7 → elapi-2.4.9}/README.md +68 -31
- {elapi-2.4.7 → elapi-2.4.9}/pyproject.toml +8 -4
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_names.py +2 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_names.py +25 -0
- elapi-2.4.9/src/elapi/api/_supported_versions/5.3.8.json +56 -0
- elapi-2.4.9/src/elapi/api/_supported_versions/5.3.9.json +56 -0
- elapi-2.4.9/src/elapi/api/_supported_versions/5.4.0.json +58 -0
- elapi-2.4.9/src/elapi/api/_supported_versions/5.4.1.json +58 -0
- elapi-2.4.9/src/elapi/api/_supported_versions/5.4.2.json +58 -0
- elapi-2.4.9/src/elapi/api/_supported_versions/5.4.3.json +58 -0
- elapi-2.4.9/src/elapi/api/_supported_versions/5.4.4.json +58 -0
- elapi-2.4.9/src/elapi/api/_supported_versions/5.4.5.json +58 -0
- elapi-2.4.9/src/elapi/api/_supported_versions/5.4.6.json +58 -0
- elapi-2.4.9/src/elapi/api/_supported_versions/5.5.0.json +58 -0
- elapi-2.4.9/src/elapi/api/_supported_versions/5.5.1.json +58 -0
- elapi-2.4.9/src/elapi/api/_supported_versions/5.5.2.json +58 -0
- elapi-2.4.9/src/elapi/api/_supported_versions/5.5.3.json +58 -0
- elapi-2.4.9/src/elapi/api/_supported_versions/5.5.4.json +58 -0
- elapi-2.4.9/src/elapi/api/_supported_versions/5.5.5.json +59 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/api.py +44 -11
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/cli/elapi.py +14 -8
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/configuration/config.py +1 -1
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/get_whoami.py +8 -2
- {elapi-2.4.7 → elapi-2.4.9}/LICENSE +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/.DS_Store +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/VERSION +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_cache.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_loggers/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_loggers/base.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_loggers/handlers/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_loggers/handlers/base.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_loggers/handlers/callback.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_loggers/handlers/stderr.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_utils.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_vendor/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_vendor/haggis/LICENSE +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_vendor/haggis/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_vendor/haggis/logs.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_vendor/haggis/version.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_handle_unexp_response.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_openapi_parser.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.1.15.json +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.0.json +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.1.json +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.2.json +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.3.json +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.4.json +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.5.json +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.6.json +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.7.json +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.8.json +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.3.0.json +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.3.1.json +0 -0
- /elapi-2.4.7/src/elapi/api/_supported_versions/5.3.3.json → /elapi-2.4.9/src/elapi/api/_supported_versions/5.3.10.json +0 -0
- /elapi-2.4.7/src/elapi/api/_supported_versions/5.3.4.json → /elapi-2.4.9/src/elapi/api/_supported_versions/5.3.11.json +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.3.2.json +0 -0
- /elapi-2.4.7/src/elapi/api/_supported_versions/5.3.5.json → /elapi-2.4.9/src/elapi/api/_supported_versions/5.3.3.json +0 -0
- /elapi-2.4.7/src/elapi/api/_supported_versions/5.3.6.json → /elapi-2.4.9/src/elapi/api/_supported_versions/5.3.4.json +0 -0
- /elapi-2.4.7/src/elapi/api/_supported_versions/5.3.7.json → /elapi-2.4.9/src/elapi/api/_supported_versions/5.3.5.json +0 -0
- /elapi-2.4.7/src/elapi/api/_supported_versions/5.3.8.json → /elapi-2.4.9/src/elapi/api/_supported_versions/5.3.6.json +0 -0
- /elapi-2.4.7/src/elapi/api/_supported_versions/5.3.9.json → /elapi-2.4.9/src/elapi/api/_supported_versions/5.3.7.json +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/endpoint.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/validators.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/cli/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/cli/__main__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/cli/_plugin_handler.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/cli/_venv_state_manager.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/cli/doc.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/configuration/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/configuration/_config_history.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/configuration/_overload_history.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/configuration/overridable_vars.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/configuration/validators.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/core_validators/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/core_validators/base.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/core_validators/path.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/loggers/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/loggers/base.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/loggers/handlers/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/loggers/handlers/file.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/loggers/log_file.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/path.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/.DS_Store +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/_doc.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/bill_teams.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/cli.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/configuration.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/formats.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/generate_table.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/logger.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/names.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/registry.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/specification.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/utils.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/validators.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/cli.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/cli_helpers.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/export.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/get_data_from_input_or_path.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/get_information.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/get_location_from_headers.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/experiments/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/experiments/_doc.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/experiments/cli.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/experiments/experiments.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/experiments/formats.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/mail/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/mail/_yagmail_patch.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/mail/cli.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/mail/configuration.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/mail/mail.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/mail/names.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/mail/yagmail_configuration.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/show_config.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/_markdown_doc.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/_missing.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/base.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/colors.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/formats.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/highlight.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/rich_utils.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/utils/__init__.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/utils/messages.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/utils/typer_patches.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/utils/utils.py +0 -0
- {elapi-2.4.7 → elapi-2.4.9}/src/elapi/validators.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: elapi
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.9
|
|
4
4
|
Summary: elAPI is a powerful, extensible API client for eLabFTW.
|
|
5
5
|
Keywords: elabftw,api
|
|
6
6
|
Author: Alexander Haller, Mahadi Xion
|
|
@@ -20,7 +20,7 @@ Classifier: Topic :: Internet :: WWW/HTTP
|
|
|
20
20
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
21
|
Classifier: Topic :: System :: Systems Administration
|
|
22
22
|
Classifier: Topic :: Utilities
|
|
23
|
-
Requires-Dist: dynaconf>=3.2.
|
|
23
|
+
Requires-Dist: dynaconf>=3.2.13,<4
|
|
24
24
|
Requires-Dist: httpx[http2]>=0.28.1,<0.29
|
|
25
25
|
Requires-Dist: httpx-auth>=0.23.1,<0.24
|
|
26
26
|
Requires-Dist: rich>=13.8.0,<14
|
|
@@ -29,14 +29,16 @@ Requires-Dist: pyyaml==6.0.2
|
|
|
29
29
|
Requires-Dist: mistune==3.1.3
|
|
30
30
|
Requires-Dist: click>=8.1.8,<8.2
|
|
31
31
|
Requires-Dist: httpx-limiter>=0.3.0,<0.4.0
|
|
32
|
-
Requires-Dist: httpx-aiohttp>=0.1.
|
|
32
|
+
Requires-Dist: httpx-aiohttp>=0.1.12,<0.2
|
|
33
33
|
Requires-Dist: pydantic>=2.12.3
|
|
34
|
+
Requires-Dist: urllib3>=2.6.3
|
|
35
|
+
Requires-Dist: aiohttp>=3.13.5
|
|
34
36
|
Requires-Dist: jinja2>=3.1.6,<3.2 ; extra == 'mail'
|
|
35
37
|
Requires-Dist: nameparser>=1.1.3 ; extra == 'mail'
|
|
36
38
|
Requires-Dist: yagmail>=0.15.293,<0.16 ; extra == 'mail'
|
|
37
39
|
Requires-Dist: python-dateutil>=2.9.0.post0,<3 ; extra == 'uhd-urz'
|
|
38
40
|
Requires-Dist: tenacity>=9.1.2,<10 ; extra == 'uhd-urz'
|
|
39
|
-
Requires-Dist: uvloop>=0.
|
|
41
|
+
Requires-Dist: uvloop>=0.22.1,<0.23 ; extra == 'uhd-urz'
|
|
40
42
|
Maintainer: Mahadi Xion
|
|
41
43
|
Maintainer-email: Mahadi Xion <mahadi.xion@urz.uni-heidelberg.de>
|
|
42
44
|
Requires-Python: >=3.11.0, <4
|
|
@@ -58,7 +60,10 @@ Description-Content-Type: text/markdown
|
|
|
58
60
|
</a>
|
|
59
61
|
<a href="#compatibility">
|
|
60
62
|
<img alt="Static Badge" src="https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-%230d7dbe">
|
|
61
|
-
<img alt="Static Badge" src="https://img.shields.io/badge/eLabFTW%20support-5.1%20%7C%205.2%20%7C%205.3+-%2323b3be">
|
|
63
|
+
<img alt="Static Badge" src="https://img.shields.io/badge/eLabFTW%20support-5.1%20%7C%205.2%20%7C%205.3%20%7C%205.4%20%7C%205.5+-%2323b3be">
|
|
64
|
+
</a>
|
|
65
|
+
<a href="#talks-workshops-and-publications">
|
|
66
|
+
<img alt="Static Badge" src="https://img.shields.io/badge/DOI-10.11588%2FDATA%2FE4XHXZ-blue?style=plastic&link=https%3A%2F%2Fdoi.org%2F10.11588%2FDATA%2FE4XHXZ">
|
|
62
67
|
</a>
|
|
63
68
|
</p>
|
|
64
69
|
|
|
@@ -80,10 +85,10 @@ From [the API documentation](https://doc.elabftw.net/api/v2/#/Users/read-user):
|
|
|
80
85
|
With elAPI you can do the following:
|
|
81
86
|
|
|
82
87
|
```sh
|
|
83
|
-
|
|
88
|
+
elapi get experiments --format csv --export ~/Downloads/
|
|
84
89
|
```
|
|
85
90
|
|
|
86
|
-
Once the command is run, in the background, elAPI will read host (eLab server) address, API key and various other
|
|
91
|
+
Once the command is run, in the background, elAPI will read host (eLab server) address, API key, and various other
|
|
87
92
|
settings (see [configuration](#configuration)) from the configuration file `elapi.yml`, perform validation (e.g.,
|
|
88
93
|
whether the server address is valid), fetch all _experiments_ list, convert them to `CSV`, and export them to your
|
|
89
94
|
local `~/Downloads/` folder.
|
|
@@ -96,7 +101,7 @@ install packages in isolated virtual environments, so elAPI installed as a CLI t
|
|
|
96
101
|
installed inside other virtual environments.
|
|
97
102
|
|
|
98
103
|
```shell
|
|
99
|
-
|
|
104
|
+
uv tool install elapi
|
|
100
105
|
# elAPI can be updated to the latest version with
|
|
101
106
|
# uv tool upgrade elapi
|
|
102
107
|
```
|
|
@@ -129,7 +134,7 @@ Once you have elAPI [installed](#installation), to **quickly** get started, run
|
|
|
129
134
|
questions about your eLabFTW server with examples to help you fill in the answers. Here's a demo:
|
|
130
135
|
|
|
131
136
|
```shell
|
|
132
|
-
|
|
137
|
+
elapi init
|
|
133
138
|
```
|
|
134
139
|
|
|
135
140
|
<video src='https://github.com/user-attachments/assets/8d5f69ed-b644-4d75-b816-d06d4e937105'> </video>
|
|
@@ -143,7 +148,9 @@ your configuration details.
|
|
|
143
148
|
|
|
144
149
|
elAPI is compatible with the following Python versions: `3.11`, `3.12`, `3.13`, `3.14`. elAPI supports
|
|
145
150
|
the [eLabFTW REST API v2](https://doc.elabftw.net/api/v2/), and can be used with the following eLabFTW
|
|
146
|
-
versions: `5.
|
|
151
|
+
versions: `5.5.5`, `5.5.4`, `5.5.3`, `5.5.2`, `5.5.1`, `5.5.0`, `5.4.6`, `5.4.5`, `5.4.4`, `5.4.3`, `5.4.2`, `5.4.1`,
|
|
152
|
+
`5.4.0`, `5.3.11`, `5.3.10`, `5.3.9`, `5.3.8`, `5.3.7`, `5.3.6`,
|
|
153
|
+
`5.3.5`, `5.3.4`, `5.3.3`, `5.3.2`, `5.3.1`, `5.3.0`, `5.2.8`, `5.2.7`, `5.2.6`, `5.2.5`, `5.2.4`,
|
|
147
154
|
`5.2.3`, `5.2.2`, `5.2.1`, `5.2.0`, `5.1.1`.
|
|
148
155
|
|
|
149
156
|
### elAPI strict version support
|
|
@@ -186,7 +193,7 @@ host: <host API url>
|
|
|
186
193
|
api_token: <token with at least read-access>
|
|
187
194
|
# "A.k.a API key". You can generate an API token from eLabFTW user panel -> API keys tab.
|
|
188
195
|
export_dir: ~/Downloads/elAPI
|
|
189
|
-
elab_strict_version_match: "
|
|
196
|
+
elab_strict_version_match: "warn_minor_only"
|
|
190
197
|
unsafe_api_token_warning: true
|
|
191
198
|
enable_http2: false
|
|
192
199
|
verify_ssl: true
|
|
@@ -203,12 +210,20 @@ development_mode: false
|
|
|
203
210
|
- `elab_strict_version_match` controls what elAPI should do if an unsupported eLabFTW version is detected. eLabFTW does
|
|
204
211
|
introduce breaking API change from time to time. Starting from elAPI 2.4.5, elAPI maintains [a strict set of eLabFTW
|
|
205
212
|
versions](#compatibility), i.e., elAPI and its plugins are expected to work for these versions. This is to prevent
|
|
206
|
-
unexpected behavior due to the breaking changes. If the detected eLabFTW server version is not supported,
|
|
207
|
-
default (`elab_strict_version_match:
|
|
208
|
-
message and continue
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
213
|
+
unexpected behavior due to the breaking changes. If the detected eLabFTW server majo.minor version is not supported,
|
|
214
|
+
elAPI by default (`elab_strict_version_match: warn_minor_only`) will throw a warning
|
|
215
|
+
message and continue normally. `elab_strict_version_match` currently accepts the following
|
|
216
|
+
modes/values:
|
|
217
|
+
- `abort`: elAPI will show an `ERROR` message and abort immediately.
|
|
218
|
+
- `abort_minor_only`: elAPI will ignore the eLabFTW version patch number in _major.minor.patch_ version (
|
|
219
|
+
e.g., `1` is the patch number in version `5.5.1`). If the _major.minor_ version isn't
|
|
220
|
+
supported, elAPI will abort immediately.
|
|
221
|
+
- `warn`: elAPI will show an `WARNING` message and continue normally.
|
|
222
|
+
- `warn_minor_only`: The **default**. elAPI will ignore the eLabFTW version patch number in _major.minor.patch_
|
|
223
|
+
version (
|
|
224
|
+
e.g., `1` is the patch number in version `5.5.1`). If the _major.minor_ version isn't
|
|
225
|
+
supported, elAPI will show a warning and continue normally.
|
|
226
|
+
- `yolo`: elAPI will ignore any version support conflict.
|
|
212
227
|
- `enable_http2` enables HTTP/2 protocol support which by default is turned off. Be aware
|
|
213
228
|
of [known issues](https://github.com/encode/httpx/discussions/2112) with HTTP/2 if you are making async requests with
|
|
214
229
|
a heavy load.
|
|
@@ -233,7 +248,7 @@ You can get an overview of detected configuration with `elapi show-config`. `sho
|
|
|
233
248
|
which configuration values are actually used by elAPI – especially if you are working with multiple configuration files.
|
|
234
249
|
|
|
235
250
|
```shell
|
|
236
|
-
|
|
251
|
+
elapi show-config # host username: "culdesac"
|
|
237
252
|
```
|
|
238
253
|
|
|
239
254
|

|
|
@@ -256,7 +271,7 @@ juggling between multiple API keys can still lead to confusion as to which API k
|
|
|
256
271
|
`2.4.1` adds the `whomai` command that shows the essential information about the requesting eLab user.
|
|
257
272
|
|
|
258
273
|
```shell
|
|
259
|
-
|
|
274
|
+
elapi whoami
|
|
260
275
|
```
|
|
261
276
|
|
|
262
277
|

|
|
@@ -280,7 +295,7 @@ Check out the [examples directory](https://github.com/uhd-urz/elAPI/tree/main/ex
|
|
|
280
295
|
examples with elAPI. elAPI CLI usage details can be displayed with:
|
|
281
296
|
|
|
282
297
|
```shell
|
|
283
|
-
|
|
298
|
+
elapi --help
|
|
284
299
|
|
|
285
300
|
```
|
|
286
301
|
|
|
@@ -289,21 +304,21 @@ $ elapi --help
|
|
|
289
304
|
Request an overview of a running eLabFTW server:
|
|
290
305
|
|
|
291
306
|
```shell
|
|
292
|
-
|
|
307
|
+
elapi get info -F yml
|
|
293
308
|
# Here -F (or --format) defines the output format
|
|
294
309
|
```
|
|
295
310
|
|
|
296
311
|
You can request a list o all active experiments and export it to a `JSON` file.
|
|
297
312
|
|
|
298
313
|
```shell
|
|
299
|
-
|
|
314
|
+
elapi get experiments --export ~/Downoads/experiments.json
|
|
300
315
|
```
|
|
301
316
|
|
|
302
317
|
Enable built-in syntax highlighting with `--highlight` or `-H`. Here, the following command will fetch team information
|
|
303
318
|
of the team with team ID 1.
|
|
304
319
|
|
|
305
320
|
```shell
|
|
306
|
-
|
|
321
|
+
elapi get -H teams --id 1
|
|
307
322
|
```
|
|
308
323
|
|
|
309
324
|
elAPI runs a weak endpoint name validation against your eLabFTW API version. Run `elapi get --help` to see the
|
|
@@ -316,7 +331,7 @@ supported endpoint names for your eLabFTW server:
|
|
|
316
331
|
Create a new user by the name 'John Doe':
|
|
317
332
|
|
|
318
333
|
```shell
|
|
319
|
-
|
|
334
|
+
elapi post users --id <user id> -d '{"firstname": "John", "lastname": "Doe", "email": "test_test@itnerd.de"}'
|
|
320
335
|
```
|
|
321
336
|
|
|
322
337
|
### `PATCH` requests
|
|
@@ -324,20 +339,20 @@ $ elapi post users --id <user id> -d '{"firstname": "John", "lastname": "Doe", "
|
|
|
324
339
|
Update an existing user's email address:
|
|
325
340
|
|
|
326
341
|
```shell
|
|
327
|
-
|
|
342
|
+
elapi patch users --id <user id> -d '{"email": "new_email@itnerd.de"}'
|
|
328
343
|
```
|
|
329
344
|
|
|
330
345
|
`patch` command allows us to make changes to eLabFTW server settings. E.g., you can update the time (in minutes)
|
|
331
346
|
after which the authentication cookie will expire.
|
|
332
347
|
|
|
333
348
|
```shell
|
|
334
|
-
|
|
349
|
+
elapi patch config -d '{"cookie_validity_time": 43200}'
|
|
335
350
|
```
|
|
336
351
|
|
|
337
352
|
You can publish an announcement to all the members.
|
|
338
353
|
|
|
339
354
|
```shell
|
|
340
|
-
|
|
355
|
+
elapi patch config -d '{"announcement": "Notice: Server will be down tomorrow at midnight due to scheduled maintenance."}'
|
|
341
356
|
```
|
|
342
357
|
|
|
343
358
|
### `DELETE` requests
|
|
@@ -345,13 +360,13 @@ $ elapi patch config -d '{"announcement": "Notice: Server will be down tomorrow
|
|
|
345
360
|
Delete all the tags associated with an experiment:
|
|
346
361
|
|
|
347
362
|
```shell
|
|
348
|
-
|
|
363
|
+
elapi delete experiments -i <experiment ID> --sub tags
|
|
349
364
|
```
|
|
350
365
|
|
|
351
366
|
You can reset the configuration to default values.
|
|
352
367
|
|
|
353
368
|
```shell
|
|
354
|
-
|
|
369
|
+
elapi delete config
|
|
355
370
|
```
|
|
356
371
|
|
|
357
372
|
### `experiments` built-in plugin
|
|
@@ -360,28 +375,28 @@ $ elapi delete config
|
|
|
360
375
|
to `~/Downloads` directory.
|
|
361
376
|
|
|
362
377
|
```shell
|
|
363
|
-
|
|
378
|
+
elapi experiments get -i <experiment unique elabid> -F pdf --export ~/Downloads/
|
|
364
379
|
```
|
|
365
380
|
|
|
366
381
|
Append text in Markdown to an existing experiment by its ID:
|
|
367
382
|
|
|
368
383
|
```shell
|
|
369
|
-
|
|
384
|
+
elapi experiments append --id <experiment ID> -M -t "**New content.**"
|
|
370
385
|
```
|
|
371
386
|
|
|
372
387
|
You can also upload an attachment to an experiment.
|
|
373
388
|
|
|
374
389
|
```shell
|
|
375
|
-
|
|
390
|
+
elapi experiments upload-attachment --id <experiment ID> --path <path to attachment file> --comment <comment for your attachment>
|
|
376
391
|
```
|
|
377
392
|
|
|
378
393
|
### `mail` built-in plugin
|
|
379
394
|
|
|
380
395
|
Sometimes when a script has finished, you and your team would want to receive an email about its success/failure. elAPI
|
|
381
396
|
offers a no-code solution for this: the `mail` plugin. The `mail` plugin is not enabled by default. To enable it,
|
|
382
|
-
install elAPI with the optional dependency `mail`: `pip install elapi[mail]` or `uv add elapi[mail]`.
|
|
383
|
-
to read more about how to configure the `mail`
|
|
384
|
-
mail server configuration and trigger conditions. In a
|
|
397
|
+
install elAPI with the optional dependency `mail`: `pip install elapi[mail]` or `uv add elapi[mail]`.
|
|
398
|
+
[__See the wiki__](https://github.com/uhd-urz/elAPI/wiki/mail-plugin) to read more about how to configure the `mail`
|
|
399
|
+
plugin with your mail server configuration and trigger conditions. In a
|
|
385
400
|
nutshell, the `mail` plugin will scan the logs when a script/plugin is done to look for pre-configured trigger
|
|
386
401
|
conditions, and if found, it will send an email. The trigger conditions can be atomic and scope-based, i.e., an email
|
|
387
402
|
can be sent only when a specific plugin task/command is finished, and/or when a matching log state and/or a matching log
|
|
@@ -449,3 +464,27 @@ project_dir: ~/awesome # Path to the project root directory where the plugin is
|
|
|
449
464
|
This metadata file of plugin `awesome` must be placed inside `~/.local/share/elapi/plugins/awesome`. Notice, the plugin
|
|
450
465
|
name must also match the parent directory name of `elapi_plugin_metadata.yml`. This way we ensure a plugin name remains
|
|
451
466
|
unique.
|
|
467
|
+
|
|
468
|
+
## Talks, workshops, and publications
|
|
469
|
+
|
|
470
|
+
elAPI was presented/discussed in the following talks and workshops at various conferences and meetups:
|
|
471
|
+
|
|
472
|
+
1. [Automation in eLabFTW](https://www.fdm.nrw/wp-content/uploads/2025/06/Program_FDMWerkstatt_2024.pdf) at
|
|
473
|
+
FDM-Werkstatt 2024, RWTH Aachen University by [fdm.nrw](https://www.fdm.nrw/)
|
|
474
|
+
2. [elAPI 2.0 (Third-party plugins)](https://www.uni-muenster.de/Forschungsdaten/en/angebote/veranstaltungen/#top) at
|
|
475
|
+
eLab training 2024, University of Münster by [fdm.nrw](https://www.fdm.nrw/)
|
|
476
|
+
3. [Boost your productivity: Exploring eLabFTW's API live](https://web.archive.org/web/20240712155250/https://www.uni-marburg.de/en/hefdi/hefdi-data-event/hefdi-data-week-2024#hefdi-data-week-programme-overview)
|
|
477
|
+
at HeFDI Data Week 2024, Online
|
|
478
|
+
4. [elAPI](https://www.youtube.com/watch?v=UrX7a-IgGnI)
|
|
479
|
+
at [eLabFTW Community Meeting III](https://www.deltablot.com/posts/community-meeting-3/)
|
|
480
|
+
by [eLabFTW](https://github.com/elabftw/elabftw)
|
|
481
|
+
5. elAPI [poster](https://archiv.ub.uni-heidelberg.de/volltextserver/36226/3/elAPI_Poster_E-Science-Tage_2025.pdf)
|
|
482
|
+
and [paper](https://books.ub.uni-heidelberg.de/heibooks/catalog/book/1652/chapter/23952)
|
|
483
|
+
at [E-Science-Tage 2025](https://e-science-tage.de/en/programme-2025) by Heidelberg University, Germany
|
|
484
|
+
|
|
485
|
+
## Third-party plugins/apps
|
|
486
|
+
|
|
487
|
+
1. [elAPI Plugins](https://github.com/sfb1638/elAPI_Plugins): elAPI Plugins is a desktop application for bulk importing
|
|
488
|
+
and exporting resources and experiments in eLabFTW instances. The project is developed as part of the INF Project of
|
|
489
|
+
[CRC 1638](https://www.sfb1638.de/) at
|
|
490
|
+
the [Heidelberg University Biochemistry Center (BZH)](https://bzh.db-engine.de/).
|
|
@@ -8,7 +8,10 @@
|
|
|
8
8
|
</a>
|
|
9
9
|
<a href="#compatibility">
|
|
10
10
|
<img alt="Static Badge" src="https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-%230d7dbe">
|
|
11
|
-
<img alt="Static Badge" src="https://img.shields.io/badge/eLabFTW%20support-5.1%20%7C%205.2%20%7C%205.3+-%2323b3be">
|
|
11
|
+
<img alt="Static Badge" src="https://img.shields.io/badge/eLabFTW%20support-5.1%20%7C%205.2%20%7C%205.3%20%7C%205.4%20%7C%205.5+-%2323b3be">
|
|
12
|
+
</a>
|
|
13
|
+
<a href="#talks-workshops-and-publications">
|
|
14
|
+
<img alt="Static Badge" src="https://img.shields.io/badge/DOI-10.11588%2FDATA%2FE4XHXZ-blue?style=plastic&link=https%3A%2F%2Fdoi.org%2F10.11588%2FDATA%2FE4XHXZ">
|
|
12
15
|
</a>
|
|
13
16
|
</p>
|
|
14
17
|
|
|
@@ -30,10 +33,10 @@ From [the API documentation](https://doc.elabftw.net/api/v2/#/Users/read-user):
|
|
|
30
33
|
With elAPI you can do the following:
|
|
31
34
|
|
|
32
35
|
```sh
|
|
33
|
-
|
|
36
|
+
elapi get experiments --format csv --export ~/Downloads/
|
|
34
37
|
```
|
|
35
38
|
|
|
36
|
-
Once the command is run, in the background, elAPI will read host (eLab server) address, API key and various other
|
|
39
|
+
Once the command is run, in the background, elAPI will read host (eLab server) address, API key, and various other
|
|
37
40
|
settings (see [configuration](#configuration)) from the configuration file `elapi.yml`, perform validation (e.g.,
|
|
38
41
|
whether the server address is valid), fetch all _experiments_ list, convert them to `CSV`, and export them to your
|
|
39
42
|
local `~/Downloads/` folder.
|
|
@@ -46,7 +49,7 @@ install packages in isolated virtual environments, so elAPI installed as a CLI t
|
|
|
46
49
|
installed inside other virtual environments.
|
|
47
50
|
|
|
48
51
|
```shell
|
|
49
|
-
|
|
52
|
+
uv tool install elapi
|
|
50
53
|
# elAPI can be updated to the latest version with
|
|
51
54
|
# uv tool upgrade elapi
|
|
52
55
|
```
|
|
@@ -79,7 +82,7 @@ Once you have elAPI [installed](#installation), to **quickly** get started, run
|
|
|
79
82
|
questions about your eLabFTW server with examples to help you fill in the answers. Here's a demo:
|
|
80
83
|
|
|
81
84
|
```shell
|
|
82
|
-
|
|
85
|
+
elapi init
|
|
83
86
|
```
|
|
84
87
|
|
|
85
88
|
<video src='https://github.com/user-attachments/assets/8d5f69ed-b644-4d75-b816-d06d4e937105'> </video>
|
|
@@ -93,7 +96,9 @@ your configuration details.
|
|
|
93
96
|
|
|
94
97
|
elAPI is compatible with the following Python versions: `3.11`, `3.12`, `3.13`, `3.14`. elAPI supports
|
|
95
98
|
the [eLabFTW REST API v2](https://doc.elabftw.net/api/v2/), and can be used with the following eLabFTW
|
|
96
|
-
versions: `5.
|
|
99
|
+
versions: `5.5.5`, `5.5.4`, `5.5.3`, `5.5.2`, `5.5.1`, `5.5.0`, `5.4.6`, `5.4.5`, `5.4.4`, `5.4.3`, `5.4.2`, `5.4.1`,
|
|
100
|
+
`5.4.0`, `5.3.11`, `5.3.10`, `5.3.9`, `5.3.8`, `5.3.7`, `5.3.6`,
|
|
101
|
+
`5.3.5`, `5.3.4`, `5.3.3`, `5.3.2`, `5.3.1`, `5.3.0`, `5.2.8`, `5.2.7`, `5.2.6`, `5.2.5`, `5.2.4`,
|
|
97
102
|
`5.2.3`, `5.2.2`, `5.2.1`, `5.2.0`, `5.1.1`.
|
|
98
103
|
|
|
99
104
|
### elAPI strict version support
|
|
@@ -136,7 +141,7 @@ host: <host API url>
|
|
|
136
141
|
api_token: <token with at least read-access>
|
|
137
142
|
# "A.k.a API key". You can generate an API token from eLabFTW user panel -> API keys tab.
|
|
138
143
|
export_dir: ~/Downloads/elAPI
|
|
139
|
-
elab_strict_version_match: "
|
|
144
|
+
elab_strict_version_match: "warn_minor_only"
|
|
140
145
|
unsafe_api_token_warning: true
|
|
141
146
|
enable_http2: false
|
|
142
147
|
verify_ssl: true
|
|
@@ -153,12 +158,20 @@ development_mode: false
|
|
|
153
158
|
- `elab_strict_version_match` controls what elAPI should do if an unsupported eLabFTW version is detected. eLabFTW does
|
|
154
159
|
introduce breaking API change from time to time. Starting from elAPI 2.4.5, elAPI maintains [a strict set of eLabFTW
|
|
155
160
|
versions](#compatibility), i.e., elAPI and its plugins are expected to work for these versions. This is to prevent
|
|
156
|
-
unexpected behavior due to the breaking changes. If the detected eLabFTW server version is not supported,
|
|
157
|
-
default (`elab_strict_version_match:
|
|
158
|
-
message and continue
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
161
|
+
unexpected behavior due to the breaking changes. If the detected eLabFTW server majo.minor version is not supported,
|
|
162
|
+
elAPI by default (`elab_strict_version_match: warn_minor_only`) will throw a warning
|
|
163
|
+
message and continue normally. `elab_strict_version_match` currently accepts the following
|
|
164
|
+
modes/values:
|
|
165
|
+
- `abort`: elAPI will show an `ERROR` message and abort immediately.
|
|
166
|
+
- `abort_minor_only`: elAPI will ignore the eLabFTW version patch number in _major.minor.patch_ version (
|
|
167
|
+
e.g., `1` is the patch number in version `5.5.1`). If the _major.minor_ version isn't
|
|
168
|
+
supported, elAPI will abort immediately.
|
|
169
|
+
- `warn`: elAPI will show an `WARNING` message and continue normally.
|
|
170
|
+
- `warn_minor_only`: The **default**. elAPI will ignore the eLabFTW version patch number in _major.minor.patch_
|
|
171
|
+
version (
|
|
172
|
+
e.g., `1` is the patch number in version `5.5.1`). If the _major.minor_ version isn't
|
|
173
|
+
supported, elAPI will show a warning and continue normally.
|
|
174
|
+
- `yolo`: elAPI will ignore any version support conflict.
|
|
162
175
|
- `enable_http2` enables HTTP/2 protocol support which by default is turned off. Be aware
|
|
163
176
|
of [known issues](https://github.com/encode/httpx/discussions/2112) with HTTP/2 if you are making async requests with
|
|
164
177
|
a heavy load.
|
|
@@ -183,7 +196,7 @@ You can get an overview of detected configuration with `elapi show-config`. `sho
|
|
|
183
196
|
which configuration values are actually used by elAPI – especially if you are working with multiple configuration files.
|
|
184
197
|
|
|
185
198
|
```shell
|
|
186
|
-
|
|
199
|
+
elapi show-config # host username: "culdesac"
|
|
187
200
|
```
|
|
188
201
|
|
|
189
202
|

|
|
@@ -206,7 +219,7 @@ juggling between multiple API keys can still lead to confusion as to which API k
|
|
|
206
219
|
`2.4.1` adds the `whomai` command that shows the essential information about the requesting eLab user.
|
|
207
220
|
|
|
208
221
|
```shell
|
|
209
|
-
|
|
222
|
+
elapi whoami
|
|
210
223
|
```
|
|
211
224
|
|
|
212
225
|

|
|
@@ -230,7 +243,7 @@ Check out the [examples directory](https://github.com/uhd-urz/elAPI/tree/main/ex
|
|
|
230
243
|
examples with elAPI. elAPI CLI usage details can be displayed with:
|
|
231
244
|
|
|
232
245
|
```shell
|
|
233
|
-
|
|
246
|
+
elapi --help
|
|
234
247
|
|
|
235
248
|
```
|
|
236
249
|
|
|
@@ -239,21 +252,21 @@ $ elapi --help
|
|
|
239
252
|
Request an overview of a running eLabFTW server:
|
|
240
253
|
|
|
241
254
|
```shell
|
|
242
|
-
|
|
255
|
+
elapi get info -F yml
|
|
243
256
|
# Here -F (or --format) defines the output format
|
|
244
257
|
```
|
|
245
258
|
|
|
246
259
|
You can request a list o all active experiments and export it to a `JSON` file.
|
|
247
260
|
|
|
248
261
|
```shell
|
|
249
|
-
|
|
262
|
+
elapi get experiments --export ~/Downoads/experiments.json
|
|
250
263
|
```
|
|
251
264
|
|
|
252
265
|
Enable built-in syntax highlighting with `--highlight` or `-H`. Here, the following command will fetch team information
|
|
253
266
|
of the team with team ID 1.
|
|
254
267
|
|
|
255
268
|
```shell
|
|
256
|
-
|
|
269
|
+
elapi get -H teams --id 1
|
|
257
270
|
```
|
|
258
271
|
|
|
259
272
|
elAPI runs a weak endpoint name validation against your eLabFTW API version. Run `elapi get --help` to see the
|
|
@@ -266,7 +279,7 @@ supported endpoint names for your eLabFTW server:
|
|
|
266
279
|
Create a new user by the name 'John Doe':
|
|
267
280
|
|
|
268
281
|
```shell
|
|
269
|
-
|
|
282
|
+
elapi post users --id <user id> -d '{"firstname": "John", "lastname": "Doe", "email": "test_test@itnerd.de"}'
|
|
270
283
|
```
|
|
271
284
|
|
|
272
285
|
### `PATCH` requests
|
|
@@ -274,20 +287,20 @@ $ elapi post users --id <user id> -d '{"firstname": "John", "lastname": "Doe", "
|
|
|
274
287
|
Update an existing user's email address:
|
|
275
288
|
|
|
276
289
|
```shell
|
|
277
|
-
|
|
290
|
+
elapi patch users --id <user id> -d '{"email": "new_email@itnerd.de"}'
|
|
278
291
|
```
|
|
279
292
|
|
|
280
293
|
`patch` command allows us to make changes to eLabFTW server settings. E.g., you can update the time (in minutes)
|
|
281
294
|
after which the authentication cookie will expire.
|
|
282
295
|
|
|
283
296
|
```shell
|
|
284
|
-
|
|
297
|
+
elapi patch config -d '{"cookie_validity_time": 43200}'
|
|
285
298
|
```
|
|
286
299
|
|
|
287
300
|
You can publish an announcement to all the members.
|
|
288
301
|
|
|
289
302
|
```shell
|
|
290
|
-
|
|
303
|
+
elapi patch config -d '{"announcement": "Notice: Server will be down tomorrow at midnight due to scheduled maintenance."}'
|
|
291
304
|
```
|
|
292
305
|
|
|
293
306
|
### `DELETE` requests
|
|
@@ -295,13 +308,13 @@ $ elapi patch config -d '{"announcement": "Notice: Server will be down tomorrow
|
|
|
295
308
|
Delete all the tags associated with an experiment:
|
|
296
309
|
|
|
297
310
|
```shell
|
|
298
|
-
|
|
311
|
+
elapi delete experiments -i <experiment ID> --sub tags
|
|
299
312
|
```
|
|
300
313
|
|
|
301
314
|
You can reset the configuration to default values.
|
|
302
315
|
|
|
303
316
|
```shell
|
|
304
|
-
|
|
317
|
+
elapi delete config
|
|
305
318
|
```
|
|
306
319
|
|
|
307
320
|
### `experiments` built-in plugin
|
|
@@ -310,28 +323,28 @@ $ elapi delete config
|
|
|
310
323
|
to `~/Downloads` directory.
|
|
311
324
|
|
|
312
325
|
```shell
|
|
313
|
-
|
|
326
|
+
elapi experiments get -i <experiment unique elabid> -F pdf --export ~/Downloads/
|
|
314
327
|
```
|
|
315
328
|
|
|
316
329
|
Append text in Markdown to an existing experiment by its ID:
|
|
317
330
|
|
|
318
331
|
```shell
|
|
319
|
-
|
|
332
|
+
elapi experiments append --id <experiment ID> -M -t "**New content.**"
|
|
320
333
|
```
|
|
321
334
|
|
|
322
335
|
You can also upload an attachment to an experiment.
|
|
323
336
|
|
|
324
337
|
```shell
|
|
325
|
-
|
|
338
|
+
elapi experiments upload-attachment --id <experiment ID> --path <path to attachment file> --comment <comment for your attachment>
|
|
326
339
|
```
|
|
327
340
|
|
|
328
341
|
### `mail` built-in plugin
|
|
329
342
|
|
|
330
343
|
Sometimes when a script has finished, you and your team would want to receive an email about its success/failure. elAPI
|
|
331
344
|
offers a no-code solution for this: the `mail` plugin. The `mail` plugin is not enabled by default. To enable it,
|
|
332
|
-
install elAPI with the optional dependency `mail`: `pip install elapi[mail]` or `uv add elapi[mail]`.
|
|
333
|
-
to read more about how to configure the `mail`
|
|
334
|
-
mail server configuration and trigger conditions. In a
|
|
345
|
+
install elAPI with the optional dependency `mail`: `pip install elapi[mail]` or `uv add elapi[mail]`.
|
|
346
|
+
[__See the wiki__](https://github.com/uhd-urz/elAPI/wiki/mail-plugin) to read more about how to configure the `mail`
|
|
347
|
+
plugin with your mail server configuration and trigger conditions. In a
|
|
335
348
|
nutshell, the `mail` plugin will scan the logs when a script/plugin is done to look for pre-configured trigger
|
|
336
349
|
conditions, and if found, it will send an email. The trigger conditions can be atomic and scope-based, i.e., an email
|
|
337
350
|
can be sent only when a specific plugin task/command is finished, and/or when a matching log state and/or a matching log
|
|
@@ -399,3 +412,27 @@ project_dir: ~/awesome # Path to the project root directory where the plugin is
|
|
|
399
412
|
This metadata file of plugin `awesome` must be placed inside `~/.local/share/elapi/plugins/awesome`. Notice, the plugin
|
|
400
413
|
name must also match the parent directory name of `elapi_plugin_metadata.yml`. This way we ensure a plugin name remains
|
|
401
414
|
unique.
|
|
415
|
+
|
|
416
|
+
## Talks, workshops, and publications
|
|
417
|
+
|
|
418
|
+
elAPI was presented/discussed in the following talks and workshops at various conferences and meetups:
|
|
419
|
+
|
|
420
|
+
1. [Automation in eLabFTW](https://www.fdm.nrw/wp-content/uploads/2025/06/Program_FDMWerkstatt_2024.pdf) at
|
|
421
|
+
FDM-Werkstatt 2024, RWTH Aachen University by [fdm.nrw](https://www.fdm.nrw/)
|
|
422
|
+
2. [elAPI 2.0 (Third-party plugins)](https://www.uni-muenster.de/Forschungsdaten/en/angebote/veranstaltungen/#top) at
|
|
423
|
+
eLab training 2024, University of Münster by [fdm.nrw](https://www.fdm.nrw/)
|
|
424
|
+
3. [Boost your productivity: Exploring eLabFTW's API live](https://web.archive.org/web/20240712155250/https://www.uni-marburg.de/en/hefdi/hefdi-data-event/hefdi-data-week-2024#hefdi-data-week-programme-overview)
|
|
425
|
+
at HeFDI Data Week 2024, Online
|
|
426
|
+
4. [elAPI](https://www.youtube.com/watch?v=UrX7a-IgGnI)
|
|
427
|
+
at [eLabFTW Community Meeting III](https://www.deltablot.com/posts/community-meeting-3/)
|
|
428
|
+
by [eLabFTW](https://github.com/elabftw/elabftw)
|
|
429
|
+
5. elAPI [poster](https://archiv.ub.uni-heidelberg.de/volltextserver/36226/3/elAPI_Poster_E-Science-Tage_2025.pdf)
|
|
430
|
+
and [paper](https://books.ub.uni-heidelberg.de/heibooks/catalog/book/1652/chapter/23952)
|
|
431
|
+
at [E-Science-Tage 2025](https://e-science-tage.de/en/programme-2025) by Heidelberg University, Germany
|
|
432
|
+
|
|
433
|
+
## Third-party plugins/apps
|
|
434
|
+
|
|
435
|
+
1. [elAPI Plugins](https://github.com/sfb1638/elAPI_Plugins): elAPI Plugins is a desktop application for bulk importing
|
|
436
|
+
and exporting resources and experiments in eLabFTW instances. The project is developed as part of the INF Project of
|
|
437
|
+
[CRC 1638](https://www.sfb1638.de/) at
|
|
438
|
+
the [Heidelberg University Biochemistry Center (BZH)](https://bzh.db-engine.de/).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "elapi"
|
|
3
|
-
version = "2.4.
|
|
3
|
+
version = "2.4.9"
|
|
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.11.0,<4"
|
|
@@ -25,7 +25,7 @@ classifiers = [
|
|
|
25
25
|
"Topic :: Utilities",
|
|
26
26
|
]
|
|
27
27
|
dependencies = [
|
|
28
|
-
"dynaconf>=3.2.
|
|
28
|
+
"dynaconf>=3.2.13,<4",
|
|
29
29
|
"httpx[http2]>=0.28.1,<0.29",
|
|
30
30
|
"httpx-auth>=0.23.1,<0.24",
|
|
31
31
|
"rich>=13.8.0,<14",
|
|
@@ -34,8 +34,12 @@ dependencies = [
|
|
|
34
34
|
"mistune==3.1.3",
|
|
35
35
|
"click>=8.1.8,<8.2",
|
|
36
36
|
"httpx-limiter>=0.3.0,<0.4.0",
|
|
37
|
-
"httpx-aiohttp>=0.1.
|
|
37
|
+
"httpx-aiohttp>=0.1.12,<0.2",
|
|
38
38
|
"pydantic>=2.12.3",
|
|
39
|
+
"urllib3>=2.6.3",
|
|
40
|
+
# Used by yagmail, but added explicitly here to get an important security update
|
|
41
|
+
"aiohttp>=3.13.5",
|
|
42
|
+
# Used by httpx-aiohttp, but added explicitly here to get an important security update
|
|
39
43
|
]
|
|
40
44
|
license-files = [
|
|
41
45
|
"LICENSE",
|
|
@@ -46,7 +50,7 @@ license-files = [
|
|
|
46
50
|
uhd-urz = [
|
|
47
51
|
"python-dateutil>=2.9.0.post0,<3",
|
|
48
52
|
"tenacity>=9.1.2,<10",
|
|
49
|
-
"uvloop>=0.
|
|
53
|
+
"uvloop>=0.22.1,<0.23",
|
|
50
54
|
]
|
|
51
55
|
mail = [
|
|
52
56
|
"jinja2>=3.1.6,<3.2",
|
|
@@ -63,8 +63,10 @@ KEY_ELAB_STRICT_VERSION_MATCH: str = "ELAB_STRICT_VERSION_MATCH"
|
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
class ElabStrictVersionMatchModes(StrEnum):
|
|
66
|
+
abort_minor_only = "abort_minor_only"
|
|
66
67
|
abort = "abort"
|
|
67
68
|
warn = "warn"
|
|
69
|
+
warn_minor_only = "warn_minor_only"
|
|
68
70
|
yolo = "yolo"
|
|
69
71
|
|
|
70
72
|
|
|
@@ -32,6 +32,21 @@ class ElabScopes(IntEnum):
|
|
|
32
32
|
|
|
33
33
|
class ElabVersionDefaults:
|
|
34
34
|
supported_versions: tuple[str, ...] = (
|
|
35
|
+
"5.5.5",
|
|
36
|
+
"5.5.4",
|
|
37
|
+
"5.5.3",
|
|
38
|
+
"5.5.2",
|
|
39
|
+
"5.5.1",
|
|
40
|
+
"5.5.0",
|
|
41
|
+
"5.4.6",
|
|
42
|
+
"5.4.5",
|
|
43
|
+
"5.4.4",
|
|
44
|
+
"5.4.3",
|
|
45
|
+
"5.4.2",
|
|
46
|
+
"5.4.1",
|
|
47
|
+
"5.4.0",
|
|
48
|
+
"5.3.11",
|
|
49
|
+
"5.3.10",
|
|
35
50
|
"5.3.9",
|
|
36
51
|
"5.3.8",
|
|
37
52
|
"5.3.7",
|
|
@@ -55,3 +70,13 @@ class ElabVersionDefaults:
|
|
|
55
70
|
)
|
|
56
71
|
versions_dir: Path = Path(__file__).parent / "_supported_versions"
|
|
57
72
|
file_ext: str = "json"
|
|
73
|
+
|
|
74
|
+
@classmethod
|
|
75
|
+
def get_minor_versions(cls) -> tuple[str, ...]:
|
|
76
|
+
unique_versions = []
|
|
77
|
+
for version in cls.supported_versions:
|
|
78
|
+
major, minor, *_ = version.split(".")
|
|
79
|
+
minor_version = f"{major}.{minor}"
|
|
80
|
+
if minor_version not in unique_versions:
|
|
81
|
+
unique_versions.append(minor_version)
|
|
82
|
+
return tuple(unique_versions)
|