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.
Files changed (134) hide show
  1. {elapi-2.4.7 → elapi-2.4.9}/PKG-INFO +74 -35
  2. {elapi-2.4.7 → elapi-2.4.9}/README.md +68 -31
  3. {elapi-2.4.7 → elapi-2.4.9}/pyproject.toml +8 -4
  4. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_names.py +2 -0
  5. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_names.py +25 -0
  6. elapi-2.4.9/src/elapi/api/_supported_versions/5.3.8.json +56 -0
  7. elapi-2.4.9/src/elapi/api/_supported_versions/5.3.9.json +56 -0
  8. elapi-2.4.9/src/elapi/api/_supported_versions/5.4.0.json +58 -0
  9. elapi-2.4.9/src/elapi/api/_supported_versions/5.4.1.json +58 -0
  10. elapi-2.4.9/src/elapi/api/_supported_versions/5.4.2.json +58 -0
  11. elapi-2.4.9/src/elapi/api/_supported_versions/5.4.3.json +58 -0
  12. elapi-2.4.9/src/elapi/api/_supported_versions/5.4.4.json +58 -0
  13. elapi-2.4.9/src/elapi/api/_supported_versions/5.4.5.json +58 -0
  14. elapi-2.4.9/src/elapi/api/_supported_versions/5.4.6.json +58 -0
  15. elapi-2.4.9/src/elapi/api/_supported_versions/5.5.0.json +58 -0
  16. elapi-2.4.9/src/elapi/api/_supported_versions/5.5.1.json +58 -0
  17. elapi-2.4.9/src/elapi/api/_supported_versions/5.5.2.json +58 -0
  18. elapi-2.4.9/src/elapi/api/_supported_versions/5.5.3.json +58 -0
  19. elapi-2.4.9/src/elapi/api/_supported_versions/5.5.4.json +58 -0
  20. elapi-2.4.9/src/elapi/api/_supported_versions/5.5.5.json +59 -0
  21. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/api.py +44 -11
  22. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/cli/elapi.py +14 -8
  23. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/configuration/config.py +1 -1
  24. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/get_whoami.py +8 -2
  25. {elapi-2.4.7 → elapi-2.4.9}/LICENSE +0 -0
  26. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/.DS_Store +0 -0
  27. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/VERSION +0 -0
  28. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/__init__.py +0 -0
  29. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/__init__.py +0 -0
  30. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_cache.py +0 -0
  31. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_loggers/__init__.py +0 -0
  32. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_loggers/base.py +0 -0
  33. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_loggers/handlers/__init__.py +0 -0
  34. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_loggers/handlers/base.py +0 -0
  35. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_loggers/handlers/callback.py +0 -0
  36. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_loggers/handlers/stderr.py +0 -0
  37. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_core_init/_utils.py +0 -0
  38. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_vendor/__init__.py +0 -0
  39. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_vendor/haggis/LICENSE +0 -0
  40. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_vendor/haggis/__init__.py +0 -0
  41. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_vendor/haggis/logs.py +0 -0
  42. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/_vendor/haggis/version.py +0 -0
  43. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/__init__.py +0 -0
  44. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_handle_unexp_response.py +0 -0
  45. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_openapi_parser.py +0 -0
  46. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.1.15.json +0 -0
  47. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.0.json +0 -0
  48. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.1.json +0 -0
  49. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.2.json +0 -0
  50. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.3.json +0 -0
  51. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.4.json +0 -0
  52. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.5.json +0 -0
  53. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.6.json +0 -0
  54. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.7.json +0 -0
  55. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.2.8.json +0 -0
  56. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.3.0.json +0 -0
  57. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.3.1.json +0 -0
  58. /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
  59. /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
  60. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/_supported_versions/5.3.2.json +0 -0
  61. /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
  62. /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
  63. /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
  64. /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
  65. /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
  66. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/endpoint.py +0 -0
  67. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/api/validators.py +0 -0
  68. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/cli/__init__.py +0 -0
  69. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/cli/__main__.py +0 -0
  70. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/cli/_plugin_handler.py +0 -0
  71. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/cli/_venv_state_manager.py +0 -0
  72. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/cli/doc.py +0 -0
  73. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/configuration/__init__.py +0 -0
  74. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/configuration/_config_history.py +0 -0
  75. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/configuration/_overload_history.py +0 -0
  76. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/configuration/overridable_vars.py +0 -0
  77. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/configuration/validators.py +0 -0
  78. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/core_validators/__init__.py +0 -0
  79. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/core_validators/base.py +0 -0
  80. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/core_validators/path.py +0 -0
  81. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/loggers/__init__.py +0 -0
  82. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/loggers/base.py +0 -0
  83. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/loggers/handlers/__init__.py +0 -0
  84. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/loggers/handlers/file.py +0 -0
  85. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/loggers/log_file.py +0 -0
  86. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/path.py +0 -0
  87. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/.DS_Store +0 -0
  88. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/__init__.py +0 -0
  89. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/__init__.py +0 -0
  90. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/_doc.py +0 -0
  91. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/bill_teams.py +0 -0
  92. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/cli.py +0 -0
  93. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/configuration.py +0 -0
  94. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/formats.py +0 -0
  95. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/generate_table.py +0 -0
  96. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/logger.py +0 -0
  97. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/names.py +0 -0
  98. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/registry.py +0 -0
  99. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/specification.py +0 -0
  100. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/utils.py +0 -0
  101. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/bill_teams/validators.py +0 -0
  102. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/__init__.py +0 -0
  103. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/cli.py +0 -0
  104. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/cli_helpers.py +0 -0
  105. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/export.py +0 -0
  106. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/get_data_from_input_or_path.py +0 -0
  107. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/get_information.py +0 -0
  108. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/commons/get_location_from_headers.py +0 -0
  109. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/experiments/__init__.py +0 -0
  110. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/experiments/_doc.py +0 -0
  111. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/experiments/cli.py +0 -0
  112. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/experiments/experiments.py +0 -0
  113. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/experiments/formats.py +0 -0
  114. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/mail/__init__.py +0 -0
  115. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/mail/_yagmail_patch.py +0 -0
  116. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/mail/cli.py +0 -0
  117. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/mail/configuration.py +0 -0
  118. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/mail/mail.py +0 -0
  119. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/mail/names.py +0 -0
  120. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/mail/yagmail_configuration.py +0 -0
  121. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/plugins/show_config.py +0 -0
  122. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/__init__.py +0 -0
  123. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/_markdown_doc.py +0 -0
  124. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/_missing.py +0 -0
  125. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/base.py +0 -0
  126. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/colors.py +0 -0
  127. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/formats.py +0 -0
  128. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/highlight.py +0 -0
  129. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/styles/rich_utils.py +0 -0
  130. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/utils/__init__.py +0 -0
  131. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/utils/messages.py +0 -0
  132. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/utils/typer_patches.py +0 -0
  133. {elapi-2.4.7 → elapi-2.4.9}/src/elapi/utils/utils.py +0 -0
  134. {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.7
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.0,<4
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.8,<0.2
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.21.0,<0.22 ; extra == 'uhd-urz'
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
- $ elapi get experiments --format csv --export ~/Downloads/
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
- $ uv tool install elapi
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
- $ elapi init
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.3.9`, `5.3.8`, `5.3.7`, ```5.3.6`, `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`,
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: "warn"
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, elAPI by
207
- default (`elab_strict_version_match: warn`) will throw a warning
208
- message and continue to run any command/plugin. When `elab_strict_version_match` is set to `abort`, elAPI will show an
209
- `ERROR`
210
- message and abort immediately. When `elab_strict_version_match` is set to `yolo`, elAPI will ignore any version
211
- support conflict.
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
- $ elapi show-config # host username: "culdesac"
251
+ elapi show-config # host username: "culdesac"
237
252
  ```
238
253
 
239
254
  ![elAPI show-config output](https://heibox.uni-heidelberg.de/f/00a8dabbf2124087aae4/?dl=1)
@@ -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
- $ elapi whoami
274
+ elapi whoami
260
275
  ```
261
276
 
262
277
  ![elapi whoami output](https://heibox.uni-heidelberg.de/f/e3096d5659db45e58a94/?dl=1)
@@ -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
- $ elapi --help
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
- $ elapi get info -F yml
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
- $ elapi get experiments --export ~/Downoads/experiments.json
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
- $ elapi get -H teams --id 1
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
- $ elapi post users --id <user id> -d '{"firstname": "John", "lastname": "Doe", "email": "test_test@itnerd.de"}'
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
- $ elapi patch users --id <user id> -d '{"email": "new_email@itnerd.de"}'
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
- $ elapi patch config -d '{"cookie_validity_time": 43200}'
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
- $ elapi patch config -d '{"announcement": "Notice: Server will be down tomorrow at midnight due to scheduled maintenance."}'
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
- $ elapi delete experiments -i <experiment ID> --sub tags
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
- $ elapi delete config
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
- $ elapi experiments get -i <experiment unique elabid> -F pdf --export ~/Downloads/
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
- $ elapi experiments append --id <experiment ID> -M -t "**New content.**"
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
- $ elapi experiments upload-attachment --id <experiment ID> --path <path to attachment file> --comment <comment for your attachment>
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]`. [__See the wiki__](https://github.com/uhd-urz/elAPI/wiki/mail-plugin)
383
- to read more about how to configure the `mail` plugin with your
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
- $ elapi get experiments --format csv --export ~/Downloads/
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
- $ uv tool install elapi
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
- $ elapi init
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.3.9`, `5.3.8`, `5.3.7`, ```5.3.6`, `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`,
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: "warn"
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, elAPI by
157
- default (`elab_strict_version_match: warn`) will throw a warning
158
- message and continue to run any command/plugin. When `elab_strict_version_match` is set to `abort`, elAPI will show an
159
- `ERROR`
160
- message and abort immediately. When `elab_strict_version_match` is set to `yolo`, elAPI will ignore any version
161
- support conflict.
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
- $ elapi show-config # host username: "culdesac"
199
+ elapi show-config # host username: "culdesac"
187
200
  ```
188
201
 
189
202
  ![elAPI show-config output](https://heibox.uni-heidelberg.de/f/00a8dabbf2124087aae4/?dl=1)
@@ -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
- $ elapi whoami
222
+ elapi whoami
210
223
  ```
211
224
 
212
225
  ![elapi whoami output](https://heibox.uni-heidelberg.de/f/e3096d5659db45e58a94/?dl=1)
@@ -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
- $ elapi --help
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
- $ elapi get info -F yml
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
- $ elapi get experiments --export ~/Downoads/experiments.json
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
- $ elapi get -H teams --id 1
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
- $ elapi post users --id <user id> -d '{"firstname": "John", "lastname": "Doe", "email": "test_test@itnerd.de"}'
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
- $ elapi patch users --id <user id> -d '{"email": "new_email@itnerd.de"}'
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
- $ elapi patch config -d '{"cookie_validity_time": 43200}'
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
- $ elapi patch config -d '{"announcement": "Notice: Server will be down tomorrow at midnight due to scheduled maintenance."}'
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
- $ elapi delete experiments -i <experiment ID> --sub tags
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
- $ elapi delete config
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
- $ elapi experiments get -i <experiment unique elabid> -F pdf --export ~/Downloads/
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
- $ elapi experiments append --id <experiment ID> -M -t "**New content.**"
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
- $ elapi experiments upload-attachment --id <experiment ID> --path <path to attachment file> --comment <comment for your attachment>
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]`. [__See the wiki__](https://github.com/uhd-urz/elAPI/wiki/mail-plugin)
333
- to read more about how to configure the `mail` plugin with your
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.7"
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.0,<4",
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.8,<0.2",
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.21.0,<0.22",
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)