DataExcept 0.2.1__tar.gz → 0.3.0__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.
- {dataexcept-0.2.1 → dataexcept-0.3.0}/CHANGELOG.md +44 -1
- {dataexcept-0.2.1 → dataexcept-0.3.0}/CITATION.cff +1 -1
- {dataexcept-0.2.1 → dataexcept-0.3.0}/PKG-INFO +5 -5
- {dataexcept-0.2.1 → dataexcept-0.3.0}/README.md +4 -4
- dataexcept-0.3.0/dataexcept/__init__.py +298 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/pyproject.toml +1 -1
- dataexcept-0.2.1/dataexcept/__init__.py +0 -94
- {dataexcept-0.2.1 → dataexcept-0.3.0}/LICENSE +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/__main__.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/_deprecation.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/database_exceptions.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/dataengineering_exceptions.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/datascience_exceptions/__init__.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/datascience_exceptions/base.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/datascience_exceptions/ingestion.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/datascience_exceptions/operations.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/datascience_exceptions/training.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/exceptions/__init__.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/exceptions/authentication.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/exceptions/base.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/exceptions/configuration.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/exceptions/external.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/exceptions/lifecycle.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/exceptions/notification.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/exceptions/parsing.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/exceptions/scheduling.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/exceptions/validation.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/io_exceptions.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/job_exceptions.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/logging_helpers.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/network_exceptions.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/pandas_exceptions.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/pipeline_exceptions.py +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/py.typed +0 -0
- {dataexcept-0.2.1 → dataexcept-0.3.0}/dataexcept/security_exceptions.py +0 -0
|
@@ -7,6 +7,48 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.3.0] - 2026-08-24
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Every exception the package defines is now importable from `dataexcept`
|
|
15
|
+
directly.** All 98 classes are exported at the top level, so callers no
|
|
16
|
+
longer need to know which domain module a class lives in. The domain modules
|
|
17
|
+
export the same objects, so `from dataexcept import ValidationError` and
|
|
18
|
+
`from dataexcept.exceptions import ValidationError` are interchangeable and
|
|
19
|
+
`except` behaves identically either way.
|
|
20
|
+
|
|
21
|
+
This was only safe because 0.2.0 removed the two hazards that make a flat
|
|
22
|
+
namespace dangerous: there are no duplicate class names left, and nothing
|
|
23
|
+
shadows a Python builtin. Imports are explicit rather than generated at
|
|
24
|
+
runtime, so type checkers and IDEs see the full surface — the package ships
|
|
25
|
+
`py.typed`.
|
|
26
|
+
- `dataexcept.exceptions` and `dataexcept.logging_helpers` are now named in
|
|
27
|
+
`__all__` alongside the other domain modules; the stability policy already
|
|
28
|
+
described them as public.
|
|
29
|
+
- Tests covering the public surface: every exception the package defines must
|
|
30
|
+
be exported and resolve, each top-level export must be the *same object* as
|
|
31
|
+
the submodule one, no exported name may shadow a builtin, no two exceptions
|
|
32
|
+
may share a name, and `from dataexcept import *` must expose the documented
|
|
33
|
+
surface. Verified these fail when an unexported exception is introduced.
|
|
34
|
+
- Tests that `poetry.lock` is committed, and that `docs/requirements.txt`
|
|
35
|
+
agrees with the Poetry `docs` group — the two list the same packages and
|
|
36
|
+
could drift apart silently.
|
|
37
|
+
|
|
38
|
+
### Changed
|
|
39
|
+
|
|
40
|
+
- `poetry.lock` is committed, and CI installs from it. Every job previously ran
|
|
41
|
+
`pip install black flake8 isort mypy ruff` unpinned, so a new release of any
|
|
42
|
+
linter could turn the build red with no commit to point at. `poetry check
|
|
43
|
+
--lock` now fails the build if the lock and `pyproject.toml` disagree.
|
|
44
|
+
- The coverage badge is generated by `scripts/coverage_badge.py` instead of
|
|
45
|
+
the `coverage-badge` package. That package still imports `pkg_resources`,
|
|
46
|
+
removed in setuptools 81, so using it required pinning `setuptools<81` — and
|
|
47
|
+
dependency review flagged a moderate-severity advisory against the version
|
|
48
|
+
that pin selected. Its last release was August 2024. Generating the SVG
|
|
49
|
+
directly removes the dependency, the pin and the advisory together; the
|
|
50
|
+
output is byte-identical to the published badge apart from the percentage.
|
|
51
|
+
|
|
10
52
|
## [0.2.1] - 2026-08-24
|
|
11
53
|
|
|
12
54
|
Documentation and CLI fixes. 0.2.0's README is what PyPI renders as the
|
|
@@ -126,7 +168,8 @@ First public release.
|
|
|
126
168
|
- Published to PyPI via OIDC trusted publishing; no long-lived API token is
|
|
127
169
|
involved in a release.
|
|
128
170
|
|
|
129
|
-
[Unreleased]: https://github.com/DiogoRibeiro7/DataExcept/compare/v0.
|
|
171
|
+
[Unreleased]: https://github.com/DiogoRibeiro7/DataExcept/compare/v0.3.0...HEAD
|
|
172
|
+
[0.3.0]: https://github.com/DiogoRibeiro7/DataExcept/compare/v0.2.1...v0.3.0
|
|
130
173
|
[0.2.1]: https://github.com/DiogoRibeiro7/DataExcept/compare/v0.2.0...v0.2.1
|
|
131
174
|
[0.2.0]: https://github.com/DiogoRibeiro7/DataExcept/compare/v0.1.0...v0.2.0
|
|
132
175
|
[0.1.0]: https://github.com/DiogoRibeiro7/DataExcept/releases/tag/v0.1.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: DataExcept
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: A Python package providing structured, easily-extendable custom exception types.
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -42,6 +42,7 @@ Description-Content-Type: text/markdown
|
|
|
42
42
|
## 🎯 Key Features
|
|
43
43
|
|
|
44
44
|
- **🏗️ Hierarchical Structure**: Catch specific errors or broad categories
|
|
45
|
+
- **📦 One Import**: Every exception is available from `dataexcept` directly, or from its domain module — same objects either way
|
|
45
46
|
- **📊 Data Science Focused**: 98 exception classes covering ML pipelines, feature engineering, model training
|
|
46
47
|
- **🔧 Production Ready**: Comprehensive logging helpers and error context
|
|
47
48
|
- **📚 Academic Quality**: Proper documentation, type hints, and citation support
|
|
@@ -67,8 +68,7 @@ poetry install
|
|
|
67
68
|
### Basic Usage
|
|
68
69
|
|
|
69
70
|
```python
|
|
70
|
-
from dataexcept import ValidationError
|
|
71
|
-
from dataexcept.datascience_exceptions import DataLoadingError, ModelTrainingError
|
|
71
|
+
from dataexcept import DataLoadingError, ModelTrainingError, ValidationError
|
|
72
72
|
import pandas as pd
|
|
73
73
|
|
|
74
74
|
# Data validation with context
|
|
@@ -225,7 +225,7 @@ BiasDetectionError
|
|
|
225
225
|
|
|
226
226
|
# Check version
|
|
227
227
|
$ dataexcept --version
|
|
228
|
-
dataexcept 0.
|
|
228
|
+
dataexcept 0.3.0
|
|
229
229
|
```
|
|
230
230
|
|
|
231
231
|
## 🎯 Use Cases
|
|
@@ -375,7 +375,7 @@ If you use DataExcept in your research, please cite it:
|
|
|
375
375
|
author = {Ribeiro, Diogo},
|
|
376
376
|
title = {DataExcept: Structured Exception Handling for Data Science},
|
|
377
377
|
url = {https://github.com/DiogoRibeiro7/DataExcept},
|
|
378
|
-
version = {0.
|
|
378
|
+
version = {0.3.0},
|
|
379
379
|
year = {2026},
|
|
380
380
|
publisher = {GitHub}
|
|
381
381
|
}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
## 🎯 Key Features
|
|
17
17
|
|
|
18
18
|
- **🏗️ Hierarchical Structure**: Catch specific errors or broad categories
|
|
19
|
+
- **📦 One Import**: Every exception is available from `dataexcept` directly, or from its domain module — same objects either way
|
|
19
20
|
- **📊 Data Science Focused**: 98 exception classes covering ML pipelines, feature engineering, model training
|
|
20
21
|
- **🔧 Production Ready**: Comprehensive logging helpers and error context
|
|
21
22
|
- **📚 Academic Quality**: Proper documentation, type hints, and citation support
|
|
@@ -41,8 +42,7 @@ poetry install
|
|
|
41
42
|
### Basic Usage
|
|
42
43
|
|
|
43
44
|
```python
|
|
44
|
-
from dataexcept import ValidationError
|
|
45
|
-
from dataexcept.datascience_exceptions import DataLoadingError, ModelTrainingError
|
|
45
|
+
from dataexcept import DataLoadingError, ModelTrainingError, ValidationError
|
|
46
46
|
import pandas as pd
|
|
47
47
|
|
|
48
48
|
# Data validation with context
|
|
@@ -199,7 +199,7 @@ BiasDetectionError
|
|
|
199
199
|
|
|
200
200
|
# Check version
|
|
201
201
|
$ dataexcept --version
|
|
202
|
-
dataexcept 0.
|
|
202
|
+
dataexcept 0.3.0
|
|
203
203
|
```
|
|
204
204
|
|
|
205
205
|
## 🎯 Use Cases
|
|
@@ -349,7 +349,7 @@ If you use DataExcept in your research, please cite it:
|
|
|
349
349
|
author = {Ribeiro, Diogo},
|
|
350
350
|
title = {DataExcept: Structured Exception Handling for Data Science},
|
|
351
351
|
url = {https://github.com/DiogoRibeiro7/DataExcept},
|
|
352
|
-
version = {0.
|
|
352
|
+
version = {0.3.0},
|
|
353
353
|
year = {2026},
|
|
354
354
|
publisher = {GitHub}
|
|
355
355
|
}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
"""Top-level package for DataExcept.
|
|
2
|
+
|
|
3
|
+
Every exception the package defines is importable straight from here::
|
|
4
|
+
|
|
5
|
+
from dataexcept import ValidationError, ModelTrainingError
|
|
6
|
+
|
|
7
|
+
The domain modules (``datascience_exceptions``, ``pipeline_exceptions`` and so
|
|
8
|
+
on) remain importable and export the same objects, so both spellings work and
|
|
9
|
+
refer to the same classes.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
try: # Python >=3.11
|
|
15
|
+
import tomllib # type: ignore
|
|
16
|
+
except ModuleNotFoundError: # pragma: no cover - fallback for Python <3.11
|
|
17
|
+
import tomli as tomllib # type: ignore
|
|
18
|
+
|
|
19
|
+
from importlib import import_module, metadata
|
|
20
|
+
from typing import Any
|
|
21
|
+
|
|
22
|
+
from . import ( # noqa: F401
|
|
23
|
+
database_exceptions,
|
|
24
|
+
dataengineering_exceptions,
|
|
25
|
+
datascience_exceptions,
|
|
26
|
+
exceptions,
|
|
27
|
+
io_exceptions,
|
|
28
|
+
logging_helpers,
|
|
29
|
+
network_exceptions,
|
|
30
|
+
pandas_exceptions,
|
|
31
|
+
pipeline_exceptions,
|
|
32
|
+
security_exceptions,
|
|
33
|
+
)
|
|
34
|
+
from ._deprecation import resolve_deprecated
|
|
35
|
+
from .database_exceptions import (
|
|
36
|
+
DatabaseConnectionError,
|
|
37
|
+
DatabaseError,
|
|
38
|
+
QueryExecutionError,
|
|
39
|
+
TransactionError,
|
|
40
|
+
)
|
|
41
|
+
from .dataengineering_exceptions import (
|
|
42
|
+
BatchProcessingError,
|
|
43
|
+
DataEngineeringError,
|
|
44
|
+
DataTransformationError,
|
|
45
|
+
DataWarehouseConnectionError,
|
|
46
|
+
ETLJobError,
|
|
47
|
+
MissingPartitionError,
|
|
48
|
+
SchemaEvolutionError,
|
|
49
|
+
)
|
|
50
|
+
from .datascience_exceptions import (
|
|
51
|
+
BiasDetectionError,
|
|
52
|
+
ConvergenceError,
|
|
53
|
+
CrossValidationError,
|
|
54
|
+
DataAugmentationError,
|
|
55
|
+
DataDriftError,
|
|
56
|
+
DataExportError,
|
|
57
|
+
DataFormatError,
|
|
58
|
+
DataImbalanceError,
|
|
59
|
+
DataLeakageError,
|
|
60
|
+
DataLoadingError,
|
|
61
|
+
DataNormalizationError,
|
|
62
|
+
DataScienceError,
|
|
63
|
+
DataValidationError,
|
|
64
|
+
DeploymentError,
|
|
65
|
+
DimensionalityReductionError,
|
|
66
|
+
EarlyStoppingError,
|
|
67
|
+
ExperimentTrackingError,
|
|
68
|
+
ExplainabilityError,
|
|
69
|
+
FeatureEngineeringError,
|
|
70
|
+
FeatureScalingError,
|
|
71
|
+
FeatureSelectionError,
|
|
72
|
+
GPUOutOfMemoryError,
|
|
73
|
+
HyperparameterError,
|
|
74
|
+
HyperparameterTuningError,
|
|
75
|
+
MissingDataError,
|
|
76
|
+
ModelCompatibilityError,
|
|
77
|
+
ModelEvaluationError,
|
|
78
|
+
ModelInferenceError,
|
|
79
|
+
ModelSerializationError,
|
|
80
|
+
ModelTrainingError,
|
|
81
|
+
OutlierDetectionError,
|
|
82
|
+
OverfittingError,
|
|
83
|
+
PredictionError,
|
|
84
|
+
ResourceLimitError,
|
|
85
|
+
SchemaMismatchError,
|
|
86
|
+
TrainingTimeoutError,
|
|
87
|
+
UnderfittingError,
|
|
88
|
+
)
|
|
89
|
+
from .exceptions import (
|
|
90
|
+
AuthenticationError,
|
|
91
|
+
AuthorizationError,
|
|
92
|
+
ConfigurationError,
|
|
93
|
+
CronExpressionError,
|
|
94
|
+
DependencyError,
|
|
95
|
+
DeserializationError,
|
|
96
|
+
EmailError,
|
|
97
|
+
JobCancellationError,
|
|
98
|
+
JobError,
|
|
99
|
+
NotificationError,
|
|
100
|
+
OperationTimeoutError,
|
|
101
|
+
ParsingError,
|
|
102
|
+
ResourceNotFoundError,
|
|
103
|
+
ScheduleConflictError,
|
|
104
|
+
SerializationError,
|
|
105
|
+
ServiceConnectionError,
|
|
106
|
+
ValidationError,
|
|
107
|
+
WebhookError,
|
|
108
|
+
)
|
|
109
|
+
from .io_exceptions import (
|
|
110
|
+
CustomIOError,
|
|
111
|
+
FileLockError,
|
|
112
|
+
FileReadError,
|
|
113
|
+
FileWriteError,
|
|
114
|
+
)
|
|
115
|
+
from .logging_helpers import (
|
|
116
|
+
Context,
|
|
117
|
+
log_and_raise,
|
|
118
|
+
log_exception,
|
|
119
|
+
log_then_raise,
|
|
120
|
+
)
|
|
121
|
+
from .network_exceptions import (
|
|
122
|
+
ConnectionTimeoutError,
|
|
123
|
+
HostUnreachableError,
|
|
124
|
+
NetworkError,
|
|
125
|
+
ProtocolError,
|
|
126
|
+
)
|
|
127
|
+
from .pandas_exceptions import (
|
|
128
|
+
DtypeMismatchError,
|
|
129
|
+
IndexAlignmentError,
|
|
130
|
+
MergeKeyError,
|
|
131
|
+
MissingColumnError,
|
|
132
|
+
PandasError,
|
|
133
|
+
PandasIOError,
|
|
134
|
+
)
|
|
135
|
+
from .pipeline_exceptions import (
|
|
136
|
+
ApiError,
|
|
137
|
+
DataFetchError,
|
|
138
|
+
ExternalServiceError,
|
|
139
|
+
FeaturePreprocessingError,
|
|
140
|
+
PipelineError,
|
|
141
|
+
PipelineNotificationError,
|
|
142
|
+
PreprocessingError,
|
|
143
|
+
RetryLimitExceededError,
|
|
144
|
+
ServiceAuthenticationError,
|
|
145
|
+
ServiceAuthorizationError,
|
|
146
|
+
ServiceTimeoutError,
|
|
147
|
+
StorageError,
|
|
148
|
+
TimeDeltaTooLargeError,
|
|
149
|
+
TypeCheckError,
|
|
150
|
+
)
|
|
151
|
+
from .security_exceptions import (
|
|
152
|
+
DecryptionError,
|
|
153
|
+
EncryptionError,
|
|
154
|
+
InvalidTokenError,
|
|
155
|
+
SecurityError,
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
__all__ = [
|
|
159
|
+
# Every exception class the package defines.
|
|
160
|
+
"ApiError",
|
|
161
|
+
"AuthenticationError",
|
|
162
|
+
"AuthorizationError",
|
|
163
|
+
"BatchProcessingError",
|
|
164
|
+
"BiasDetectionError",
|
|
165
|
+
"ConfigurationError",
|
|
166
|
+
"ConnectionTimeoutError",
|
|
167
|
+
"ConvergenceError",
|
|
168
|
+
"CronExpressionError",
|
|
169
|
+
"CrossValidationError",
|
|
170
|
+
"CustomIOError",
|
|
171
|
+
"DataAugmentationError",
|
|
172
|
+
"DataDriftError",
|
|
173
|
+
"DataEngineeringError",
|
|
174
|
+
"DataExportError",
|
|
175
|
+
"DataFetchError",
|
|
176
|
+
"DataFormatError",
|
|
177
|
+
"DataImbalanceError",
|
|
178
|
+
"DataLeakageError",
|
|
179
|
+
"DataLoadingError",
|
|
180
|
+
"DataNormalizationError",
|
|
181
|
+
"DataScienceError",
|
|
182
|
+
"DataTransformationError",
|
|
183
|
+
"DataValidationError",
|
|
184
|
+
"DataWarehouseConnectionError",
|
|
185
|
+
"DatabaseConnectionError",
|
|
186
|
+
"DatabaseError",
|
|
187
|
+
"DecryptionError",
|
|
188
|
+
"DependencyError",
|
|
189
|
+
"DeploymentError",
|
|
190
|
+
"DeserializationError",
|
|
191
|
+
"DimensionalityReductionError",
|
|
192
|
+
"DtypeMismatchError",
|
|
193
|
+
"ETLJobError",
|
|
194
|
+
"EarlyStoppingError",
|
|
195
|
+
"EmailError",
|
|
196
|
+
"EncryptionError",
|
|
197
|
+
"ExperimentTrackingError",
|
|
198
|
+
"ExplainabilityError",
|
|
199
|
+
"ExternalServiceError",
|
|
200
|
+
"FeatureEngineeringError",
|
|
201
|
+
"FeaturePreprocessingError",
|
|
202
|
+
"FeatureScalingError",
|
|
203
|
+
"FeatureSelectionError",
|
|
204
|
+
"FileLockError",
|
|
205
|
+
"FileReadError",
|
|
206
|
+
"FileWriteError",
|
|
207
|
+
"GPUOutOfMemoryError",
|
|
208
|
+
"HostUnreachableError",
|
|
209
|
+
"HyperparameterError",
|
|
210
|
+
"HyperparameterTuningError",
|
|
211
|
+
"IndexAlignmentError",
|
|
212
|
+
"InvalidTokenError",
|
|
213
|
+
"JobCancellationError",
|
|
214
|
+
"JobError",
|
|
215
|
+
"MergeKeyError",
|
|
216
|
+
"MissingColumnError",
|
|
217
|
+
"MissingDataError",
|
|
218
|
+
"MissingPartitionError",
|
|
219
|
+
"ModelCompatibilityError",
|
|
220
|
+
"ModelEvaluationError",
|
|
221
|
+
"ModelInferenceError",
|
|
222
|
+
"ModelSerializationError",
|
|
223
|
+
"ModelTrainingError",
|
|
224
|
+
"NetworkError",
|
|
225
|
+
"NotificationError",
|
|
226
|
+
"OperationTimeoutError",
|
|
227
|
+
"OutlierDetectionError",
|
|
228
|
+
"OverfittingError",
|
|
229
|
+
"PandasError",
|
|
230
|
+
"PandasIOError",
|
|
231
|
+
"ParsingError",
|
|
232
|
+
"PipelineError",
|
|
233
|
+
"PipelineNotificationError",
|
|
234
|
+
"PredictionError",
|
|
235
|
+
"PreprocessingError",
|
|
236
|
+
"ProtocolError",
|
|
237
|
+
"QueryExecutionError",
|
|
238
|
+
"ResourceLimitError",
|
|
239
|
+
"ResourceNotFoundError",
|
|
240
|
+
"RetryLimitExceededError",
|
|
241
|
+
"ScheduleConflictError",
|
|
242
|
+
"SchemaEvolutionError",
|
|
243
|
+
"SchemaMismatchError",
|
|
244
|
+
"SecurityError",
|
|
245
|
+
"SerializationError",
|
|
246
|
+
"ServiceAuthenticationError",
|
|
247
|
+
"ServiceAuthorizationError",
|
|
248
|
+
"ServiceConnectionError",
|
|
249
|
+
"ServiceTimeoutError",
|
|
250
|
+
"StorageError",
|
|
251
|
+
"TimeDeltaTooLargeError",
|
|
252
|
+
"TrainingTimeoutError",
|
|
253
|
+
"TransactionError",
|
|
254
|
+
"TypeCheckError",
|
|
255
|
+
"UnderfittingError",
|
|
256
|
+
"ValidationError",
|
|
257
|
+
"WebhookError",
|
|
258
|
+
# Logging helpers.
|
|
259
|
+
"Context",
|
|
260
|
+
"log_and_raise",
|
|
261
|
+
"log_exception",
|
|
262
|
+
"log_then_raise",
|
|
263
|
+
# Domain modules, for callers who prefer a qualified import.
|
|
264
|
+
"database_exceptions",
|
|
265
|
+
"dataengineering_exceptions",
|
|
266
|
+
"datascience_exceptions",
|
|
267
|
+
"exceptions",
|
|
268
|
+
"io_exceptions",
|
|
269
|
+
"job_exceptions",
|
|
270
|
+
"logging_helpers",
|
|
271
|
+
"network_exceptions",
|
|
272
|
+
"pandas_exceptions",
|
|
273
|
+
"pipeline_exceptions",
|
|
274
|
+
"security_exceptions",
|
|
275
|
+
]
|
|
276
|
+
|
|
277
|
+
try:
|
|
278
|
+
__version__ = metadata.version("DataExcept")
|
|
279
|
+
except metadata.PackageNotFoundError: # pragma: no cover - fallback during dev
|
|
280
|
+
_root = Path(__file__).resolve().parents[1]
|
|
281
|
+
with open(_root / "pyproject.toml", "rb") as _f:
|
|
282
|
+
__version__ = tomllib.load(_f)["project"]["version"]
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
#: Renamed in 0.2.0 because they shadowed Python builtins without inheriting
|
|
286
|
+
#: from them. Each alias is the same class object as its replacement.
|
|
287
|
+
_DEPRECATED_ALIASES = {
|
|
288
|
+
"ConnectionError": ServiceConnectionError,
|
|
289
|
+
"TimeoutError": OperationTimeoutError,
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
def __getattr__(name: str) -> Any:
|
|
294
|
+
if name == "job_exceptions":
|
|
295
|
+
module = import_module("dataexcept.job_exceptions")
|
|
296
|
+
globals()[name] = module
|
|
297
|
+
return module
|
|
298
|
+
return resolve_deprecated(__name__, _DEPRECATED_ALIASES, name)
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
"""Top-level package for DataExcept.
|
|
2
|
-
|
|
3
|
-
Exposes the common job-related exceptions directly and also provides
|
|
4
|
-
access to data science specific exceptions via the ``datascience_exceptions``
|
|
5
|
-
module.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
|
|
10
|
-
try: # Python >=3.11
|
|
11
|
-
import tomllib # type: ignore
|
|
12
|
-
except ModuleNotFoundError: # pragma: no cover - fallback for Python <3.11
|
|
13
|
-
import tomli as tomllib # type: ignore
|
|
14
|
-
|
|
15
|
-
from importlib import import_module, metadata
|
|
16
|
-
from typing import Any
|
|
17
|
-
|
|
18
|
-
from . import (
|
|
19
|
-
database_exceptions,
|
|
20
|
-
dataengineering_exceptions,
|
|
21
|
-
datascience_exceptions,
|
|
22
|
-
)
|
|
23
|
-
from . import exceptions as _exceptions
|
|
24
|
-
from . import (
|
|
25
|
-
io_exceptions,
|
|
26
|
-
network_exceptions,
|
|
27
|
-
pandas_exceptions,
|
|
28
|
-
pipeline_exceptions,
|
|
29
|
-
security_exceptions,
|
|
30
|
-
)
|
|
31
|
-
from ._deprecation import resolve_deprecated
|
|
32
|
-
from .exceptions import ( # noqa: F401
|
|
33
|
-
AuthenticationError,
|
|
34
|
-
AuthorizationError,
|
|
35
|
-
ConfigurationError,
|
|
36
|
-
CronExpressionError,
|
|
37
|
-
DependencyError,
|
|
38
|
-
DeserializationError,
|
|
39
|
-
EmailError,
|
|
40
|
-
JobCancellationError,
|
|
41
|
-
JobError,
|
|
42
|
-
NotificationError,
|
|
43
|
-
OperationTimeoutError,
|
|
44
|
-
ParsingError,
|
|
45
|
-
ResourceNotFoundError,
|
|
46
|
-
ScheduleConflictError,
|
|
47
|
-
SerializationError,
|
|
48
|
-
ServiceConnectionError,
|
|
49
|
-
ValidationError,
|
|
50
|
-
WebhookError,
|
|
51
|
-
)
|
|
52
|
-
from .logging_helpers import (
|
|
53
|
-
log_and_raise,
|
|
54
|
-
log_exception,
|
|
55
|
-
log_then_raise,
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
try:
|
|
59
|
-
__version__ = metadata.version("DataExcept")
|
|
60
|
-
except metadata.PackageNotFoundError: # pragma: no cover - fallback during dev
|
|
61
|
-
_root = Path(__file__).resolve().parents[1]
|
|
62
|
-
with open(_root / "pyproject.toml", "rb") as _f:
|
|
63
|
-
__version__ = tomllib.load(_f)["project"]["version"]
|
|
64
|
-
|
|
65
|
-
__all__ = list(_exceptions.__all__) + [
|
|
66
|
-
"datascience_exceptions",
|
|
67
|
-
"job_exceptions",
|
|
68
|
-
"pipeline_exceptions",
|
|
69
|
-
"dataengineering_exceptions",
|
|
70
|
-
"network_exceptions",
|
|
71
|
-
"io_exceptions",
|
|
72
|
-
"database_exceptions",
|
|
73
|
-
"security_exceptions",
|
|
74
|
-
"pandas_exceptions",
|
|
75
|
-
"log_exception",
|
|
76
|
-
"log_and_raise",
|
|
77
|
-
"log_then_raise",
|
|
78
|
-
]
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
#: Renamed in 0.2.0 because they shadowed Python builtins without inheriting
|
|
82
|
-
#: from them. Each alias is the same class object as its replacement.
|
|
83
|
-
_DEPRECATED_ALIASES = {
|
|
84
|
-
"ConnectionError": ServiceConnectionError,
|
|
85
|
-
"TimeoutError": OperationTimeoutError,
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
def __getattr__(name: str) -> Any:
|
|
90
|
-
if name == "job_exceptions":
|
|
91
|
-
module = import_module("dataexcept.job_exceptions")
|
|
92
|
-
globals()[name] = module
|
|
93
|
-
return module
|
|
94
|
-
return resolve_deprecated(__name__, _DEPRECATED_ALIASES, name)
|
|
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
|