elapi 2.4.2__tar.gz → 2.4.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.4.2 → elapi-2.4.3}/PKG-INFO +1 -1
- {elapi-2.4.2 → elapi-2.4.3}/pyproject.toml +1 -1
- elapi-2.4.3/src/elapi/VERSION +1 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/configuration/validators.py +20 -13
- elapi-2.4.2/src/elapi/VERSION +0 -1
- {elapi-2.4.2 → elapi-2.4.3}/LICENSE +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/README.md +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/.DS_Store +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/_core_init/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/_core_init/_loggers/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/_core_init/_loggers/base.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/_core_init/_loggers/handlers/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/_core_init/_loggers/handlers/base.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/_core_init/_loggers/handlers/callback.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/_core_init/_loggers/handlers/stderr.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/_core_init/_utils.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/_names.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/_vendor/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/_vendor/haggis/LICENSE +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/_vendor/haggis/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/_vendor/haggis/logs.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/_vendor/haggis/version.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/api/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/api/api.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/api/endpoint.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/api/validators.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/cli/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/cli/__main__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/cli/_plugin_handler.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/cli/_venv_state_manager.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/cli/doc.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/cli/elapi.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/configuration/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/configuration/_config_history.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/configuration/_overload_history.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/configuration/config.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/configuration/overridable_vars.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/core_validators/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/core_validators/base.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/core_validators/path.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/loggers/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/loggers/base.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/loggers/handlers/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/loggers/handlers/file.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/loggers/log_file.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/path.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/.DS_Store +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/bill_teams/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/bill_teams/_doc.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/bill_teams/bill_teams.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/bill_teams/cli.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/bill_teams/configuration.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/bill_teams/formats.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/bill_teams/generate_table.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/bill_teams/logger.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/bill_teams/names.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/bill_teams/registry.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/bill_teams/specification.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/bill_teams/utils.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/bill_teams/validators.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/commons/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/commons/cli.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/commons/cli_helpers.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/commons/export.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/commons/get_data_from_input_or_path.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/commons/get_information.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/commons/get_location_from_headers.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/commons/get_whoami.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/experiments/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/experiments/_doc.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/experiments/cli.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/experiments/experiments.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/experiments/formats.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/mail/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/mail/_yagmail_patch.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/mail/cli.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/mail/configuration.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/mail/mail.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/mail/names.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/mail/yagmail_configuration.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/plugins/show_config.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/styles/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/styles/_markdown_doc.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/styles/_missing.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/styles/base.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/styles/colors.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/styles/formats.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/styles/highlight.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/styles/rich_utils.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/utils/__init__.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/utils/messages.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/utils/typer_patches.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/utils/utils.py +0 -0
- {elapi-2.4.2 → elapi-2.4.3}/src/elapi/validators.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "elapi"
|
|
3
|
-
version = "2.4.
|
|
3
|
+
version = "2.4.3"
|
|
4
4
|
description = "elAPI is a powerful, extensible API client for eLabFTW."
|
|
5
5
|
authors = [{ name = "Alexander Haller, Mahadi Xion", email = "elabftw@uni-heidelberg.de" }]
|
|
6
6
|
requires-python = ">=3.11.0,<4"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.4.3
|
|
@@ -5,6 +5,7 @@ from typing import Iterable, Optional
|
|
|
5
5
|
|
|
6
6
|
from dynaconf.utils.boxing import DynaBox
|
|
7
7
|
|
|
8
|
+
from .._names import APP_NAME
|
|
8
9
|
from ..configuration.config import CANON_YAML_EXTENSION, CONFIG_FILE_NAME
|
|
9
10
|
from ..core_validators import (
|
|
10
11
|
CriticalValidationError,
|
|
@@ -15,15 +16,18 @@ from ..core_validators import (
|
|
|
15
16
|
Validator,
|
|
16
17
|
)
|
|
17
18
|
from ..loggers import DefaultLogLevels, Logger
|
|
19
|
+
from ..path import ProperPath
|
|
18
20
|
from ..styles import Missing, stdout_console
|
|
19
21
|
from ..styles.highlight import NoteText
|
|
20
22
|
from ..utils import add_message
|
|
21
23
|
from ._config_history import FieldValueWithKey, MinimalActiveConfiguration
|
|
22
24
|
from .config import (
|
|
25
|
+
_XDG_DOWNLOAD_DIR,
|
|
23
26
|
ASYNC_CAPACITY_DEFAULT_VAL,
|
|
24
27
|
ASYNC_RATE_LIMIT_DEFAULT_VAL,
|
|
25
28
|
DEVELOPMENT_MODE_DEFAULT_VAL,
|
|
26
29
|
ENABLE_HTTP2_DEFAULT_VAL,
|
|
30
|
+
FALLBACK_EXPORT_DIR,
|
|
27
31
|
KEY_ASYNC_CAPACITY,
|
|
28
32
|
KEY_ASYNC_RATE_LIMIT,
|
|
29
33
|
KEY_DEVELOPMENT_MODE,
|
|
@@ -48,14 +52,14 @@ class ConfigurationValidation:
|
|
|
48
52
|
self.active_configuration = minimal_active_config_obj
|
|
49
53
|
|
|
50
54
|
@property
|
|
51
|
-
def active_configuration(self) -> MinimalActiveConfiguration:
|
|
55
|
+
def active_configuration(self) -> MinimalActiveConfiguration | dict:
|
|
52
56
|
return self._active_configuration
|
|
53
57
|
|
|
54
58
|
@active_configuration.setter
|
|
55
|
-
def active_configuration(self, value: MinimalActiveConfiguration):
|
|
56
|
-
if not isinstance(value, MinimalActiveConfiguration):
|
|
59
|
+
def active_configuration(self, value: MinimalActiveConfiguration | dict):
|
|
60
|
+
if not isinstance(value, (MinimalActiveConfiguration, dict)):
|
|
57
61
|
raise TypeError(
|
|
58
|
-
f"Value must be an instance of {MinimalActiveConfiguration.__name__}."
|
|
62
|
+
f"Value must be an instance of dict or {MinimalActiveConfiguration.__name__}."
|
|
59
63
|
)
|
|
60
64
|
self._active_configuration = value
|
|
61
65
|
|
|
@@ -68,6 +72,7 @@ class HostConfigurationValidator(ConfigurationValidation, Validator):
|
|
|
68
72
|
super().__init__(*args)
|
|
69
73
|
|
|
70
74
|
def validate(self) -> str:
|
|
75
|
+
self.active_configuration: MinimalActiveConfiguration
|
|
71
76
|
_HOST_EXAMPLE: str = f"{KEY_HOST.lower()}: 'https://demo.elabftw.net/api/v2'"
|
|
72
77
|
|
|
73
78
|
if isinstance(self.active_configuration.get_value(KEY_HOST), Missing):
|
|
@@ -126,10 +131,9 @@ class APITokenConfigurationValidator(ConfigurationValidation, Validator):
|
|
|
126
131
|
super().__init__(*args)
|
|
127
132
|
|
|
128
133
|
def validate(self) -> str:
|
|
129
|
-
from ..loggers import Logger
|
|
130
134
|
from .config import KEY_API_TOKEN
|
|
131
135
|
|
|
132
|
-
|
|
136
|
+
self.active_configuration: MinimalActiveConfiguration
|
|
133
137
|
if isinstance(self.active_configuration.get_value(KEY_API_TOKEN), Missing):
|
|
134
138
|
logger.critical(
|
|
135
139
|
f"'{KEY_API_TOKEN.lower()}' is missing from configuration file."
|
|
@@ -197,10 +201,10 @@ class ExportDirConfigurationValidator(ConfigurationValidation, Validator):
|
|
|
197
201
|
super().__init__(*args)
|
|
198
202
|
|
|
199
203
|
def validate(self) -> Path:
|
|
204
|
+
self.active_configuration: MinimalActiveConfiguration
|
|
205
|
+
|
|
200
206
|
def get_validated_fallback():
|
|
201
|
-
|
|
202
|
-
from ..path import ProperPath
|
|
203
|
-
from .config import _XDG_DOWNLOAD_DIR, FALLBACK_EXPORT_DIR
|
|
207
|
+
global FALLBACK_EXPORT_DIR, _XDG_DOWNLOAD_DIR, ProperPath
|
|
204
208
|
|
|
205
209
|
ACTUAL_FALLBACK_EXPORT_DIR = FALLBACK_EXPORT_DIR
|
|
206
210
|
if _XDG_DOWNLOAD_DIR is not None:
|
|
@@ -274,9 +278,6 @@ class ModesWithFallbackConfigurationValidator(ConfigurationValidation, Validator
|
|
|
274
278
|
self.fallback_value = fallback_value
|
|
275
279
|
|
|
276
280
|
def validate(self) -> bool:
|
|
277
|
-
from ..loggers import Logger
|
|
278
|
-
|
|
279
|
-
logger = Logger()
|
|
280
281
|
if isinstance(
|
|
281
282
|
value := self.active_configuration.get_value(self.key_name), Missing
|
|
282
283
|
):
|
|
@@ -312,7 +313,9 @@ class TimeWithFallbackConfigurationValidator(ConfigurationValidation, Validator)
|
|
|
312
313
|
self.fallback_value = fallback_value
|
|
313
314
|
self.allow_none = allow_none
|
|
314
315
|
|
|
315
|
-
def validate(self) -> float:
|
|
316
|
+
def validate(self) -> Optional[float]:
|
|
317
|
+
self.active_configuration: MinimalActiveConfiguration
|
|
318
|
+
|
|
316
319
|
if isinstance(
|
|
317
320
|
value := self.active_configuration.get_value(self.key_name), Missing
|
|
318
321
|
):
|
|
@@ -349,6 +352,8 @@ class DiscreteWithFallbackConfigurationValidator(ConfigurationValidation, Valida
|
|
|
349
352
|
self.allow_none = allow_none
|
|
350
353
|
|
|
351
354
|
def validate(self) -> Optional[int]:
|
|
355
|
+
self.active_configuration: MinimalActiveConfiguration
|
|
356
|
+
|
|
352
357
|
if isinstance(
|
|
353
358
|
value := self.active_configuration.get_value(self.key_name), Missing
|
|
354
359
|
):
|
|
@@ -380,7 +385,9 @@ class PluginConfigurationValidator(ConfigurationValidation, Validator):
|
|
|
380
385
|
self.fallback_value = fallback_value
|
|
381
386
|
|
|
382
387
|
def validate(self) -> dict:
|
|
388
|
+
self.active_configuration: MinimalActiveConfiguration
|
|
383
389
|
value: DynaBox = self.active_configuration.get_value(self.key_name)
|
|
390
|
+
|
|
384
391
|
if isinstance(value, Missing):
|
|
385
392
|
return self.fallback_value
|
|
386
393
|
if value is None:
|
elapi-2.4.2/src/elapi/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
2.4.2
|
|
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
|
|
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
|