ExcelAlchemy 2.3.0__tar.gz → 2.4.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.
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/PKG-INFO +52 -3
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/README-pypi.md +51 -2
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/README.md +14 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/__init__.py +1 -1
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/alchemy.py +7 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/import_session.py +7 -1
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/LICENSE +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/pyproject.toml +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/_primitives/__init__.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/_primitives/constants.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/_primitives/deprecation.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/_primitives/diagnostics.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/_primitives/header_models.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/_primitives/identity.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/_primitives/payloads.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/artifacts.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/__init__.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/base.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/boolean.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/date.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/date_range.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/email.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/money.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/multi_checkbox.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/number.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/number_range.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/organization.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/phone_number.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/radio.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/staff.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/string.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/tree.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/url.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/config.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/const.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/__init__.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/abstract.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/executor.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/headers.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/preflight.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/rendering.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/rows.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/schema.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/storage.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/storage_minio.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/storage_protocol.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/table.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/writer.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/exc.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/exceptions.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/header_models.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/helper/__init__.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/helper/pydantic.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/i18n/__init__.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/i18n/messages.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/identity.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/metadata.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/py.typed +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/results.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/__init__.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/abstract.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/alchemy.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/field.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/header.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/identity.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/result.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/__init__.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/boolean.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/date.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/date_range.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/email.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/money.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/multi_checkbox.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/number.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/number_range.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/organization.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/phone_number.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/radio.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/staff.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/string.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/tree.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/url.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/util/__init__.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/util/converter.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/util/convertor.py +0 -0
- {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/util/file.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ExcelAlchemy
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4.0
|
|
4
4
|
Summary: Schema-driven Python library for typed Excel import/export workflows with Pydantic and locale-aware workbooks.
|
|
5
5
|
Keywords: excel,openpyxl,pydantic,minio,schema
|
|
6
6
|
Author: Ray
|
|
@@ -49,12 +49,20 @@ ExcelAlchemy turns Pydantic models into typed workbook contracts:
|
|
|
49
49
|
- render workbook-facing output in `zh-CN` or `en`
|
|
50
50
|
- keep storage pluggable through `ExcelStorage`
|
|
51
51
|
|
|
52
|
-
The current stable release is `2.
|
|
52
|
+
The current stable release is `2.4.0`, which continues the 2.x line with a
|
|
53
53
|
more complete import workflow: clearer template guidance before upload,
|
|
54
54
|
lightweight structural preflight before execution, synchronous lifecycle
|
|
55
55
|
visibility during import, and remediation-oriented payloads after failures.
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
At the top level, that import workflow is:
|
|
58
|
+
|
|
59
|
+
- template authoring
|
|
60
|
+
- preflight gate
|
|
61
|
+
- import runtime
|
|
62
|
+
- result intelligence
|
|
63
|
+
- artifact and delivery
|
|
64
|
+
|
|
65
|
+
[GitHub Repository](https://github.com/RayCarterLab/ExcelAlchemy) · [Full README](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/README.md) · [Getting Started](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/getting-started.md) · [Integration Roadmap](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/integration-roadmap.md) · [Platform Architecture](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/platform-architecture.md) · [Runtime Model](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/runtime-model.md) · [Integration Blueprints](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/integration-blueprints.md) · [Result Objects](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/result-objects.md) · [API Response Cookbook](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/api-response-cookbook.md) · [Examples Showcase](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/examples-showcase.md) · [Architecture](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/architecture.md) · [Migration Notes](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/MIGRATIONS.md)
|
|
58
66
|
|
|
59
67
|
## Screenshots
|
|
60
68
|
|
|
@@ -128,6 +136,44 @@ This template metadata is additive: it leaves the worksheet layout alone and
|
|
|
128
136
|
improves the generated header comment with both guidance text and a concrete
|
|
129
137
|
example value.
|
|
130
138
|
|
|
139
|
+
## Import Workflow Overview
|
|
140
|
+
|
|
141
|
+
The shortest path through the import workflow is:
|
|
142
|
+
|
|
143
|
+
```text
|
|
144
|
+
template -> preflight -> import -> remediation -> delivery
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Minimal example:
|
|
148
|
+
|
|
149
|
+
```python
|
|
150
|
+
from excelalchemy.results import build_frontend_remediation_payload
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
events: list[dict[str, object]] = []
|
|
154
|
+
|
|
155
|
+
preflight = alchemy.preflight_import('employees.xlsx')
|
|
156
|
+
if preflight.is_valid:
|
|
157
|
+
result = await alchemy.import_data(
|
|
158
|
+
'employees.xlsx',
|
|
159
|
+
'employees-result.xlsx',
|
|
160
|
+
on_event=events.append,
|
|
161
|
+
)
|
|
162
|
+
payload = build_frontend_remediation_payload(
|
|
163
|
+
result=result,
|
|
164
|
+
cell_error_map=alchemy.cell_error_map,
|
|
165
|
+
row_error_map=alchemy.row_error_map,
|
|
166
|
+
)
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
See also:
|
|
170
|
+
|
|
171
|
+
- [Platform Architecture](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/platform-architecture.md)
|
|
172
|
+
- [Runtime Model](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/runtime-model.md)
|
|
173
|
+
- [Integration Blueprints](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/integration-blueprints.md)
|
|
174
|
+
- [Result Objects](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/result-objects.md)
|
|
175
|
+
- [API Response Cookbook](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/api-response-cookbook.md)
|
|
176
|
+
|
|
131
177
|
## Example Outputs
|
|
132
178
|
|
|
133
179
|
These fixed outputs are generated from the repository examples by
|
|
@@ -205,6 +251,9 @@ for configured selection fields.
|
|
|
205
251
|
## Learn More
|
|
206
252
|
|
|
207
253
|
- [Full project README](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/README.md)
|
|
254
|
+
- [Platform architecture](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/platform-architecture.md)
|
|
255
|
+
- [Runtime model](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/runtime-model.md)
|
|
256
|
+
- [Integration blueprints](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/integration-blueprints.md)
|
|
208
257
|
- [Architecture notes](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/architecture.md)
|
|
209
258
|
- [Locale policy](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/locale.md)
|
|
210
259
|
- [Migration notes](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/MIGRATIONS.md)
|
|
@@ -10,12 +10,20 @@ ExcelAlchemy turns Pydantic models into typed workbook contracts:
|
|
|
10
10
|
- render workbook-facing output in `zh-CN` or `en`
|
|
11
11
|
- keep storage pluggable through `ExcelStorage`
|
|
12
12
|
|
|
13
|
-
The current stable release is `2.
|
|
13
|
+
The current stable release is `2.4.0`, which continues the 2.x line with a
|
|
14
14
|
more complete import workflow: clearer template guidance before upload,
|
|
15
15
|
lightweight structural preflight before execution, synchronous lifecycle
|
|
16
16
|
visibility during import, and remediation-oriented payloads after failures.
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
At the top level, that import workflow is:
|
|
19
|
+
|
|
20
|
+
- template authoring
|
|
21
|
+
- preflight gate
|
|
22
|
+
- import runtime
|
|
23
|
+
- result intelligence
|
|
24
|
+
- artifact and delivery
|
|
25
|
+
|
|
26
|
+
[GitHub Repository](https://github.com/RayCarterLab/ExcelAlchemy) · [Full README](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/README.md) · [Getting Started](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/getting-started.md) · [Integration Roadmap](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/integration-roadmap.md) · [Platform Architecture](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/platform-architecture.md) · [Runtime Model](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/runtime-model.md) · [Integration Blueprints](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/integration-blueprints.md) · [Result Objects](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/result-objects.md) · [API Response Cookbook](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/api-response-cookbook.md) · [Examples Showcase](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/examples-showcase.md) · [Architecture](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/architecture.md) · [Migration Notes](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/MIGRATIONS.md)
|
|
19
27
|
|
|
20
28
|
## Screenshots
|
|
21
29
|
|
|
@@ -89,6 +97,44 @@ This template metadata is additive: it leaves the worksheet layout alone and
|
|
|
89
97
|
improves the generated header comment with both guidance text and a concrete
|
|
90
98
|
example value.
|
|
91
99
|
|
|
100
|
+
## Import Workflow Overview
|
|
101
|
+
|
|
102
|
+
The shortest path through the import workflow is:
|
|
103
|
+
|
|
104
|
+
```text
|
|
105
|
+
template -> preflight -> import -> remediation -> delivery
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Minimal example:
|
|
109
|
+
|
|
110
|
+
```python
|
|
111
|
+
from excelalchemy.results import build_frontend_remediation_payload
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
events: list[dict[str, object]] = []
|
|
115
|
+
|
|
116
|
+
preflight = alchemy.preflight_import('employees.xlsx')
|
|
117
|
+
if preflight.is_valid:
|
|
118
|
+
result = await alchemy.import_data(
|
|
119
|
+
'employees.xlsx',
|
|
120
|
+
'employees-result.xlsx',
|
|
121
|
+
on_event=events.append,
|
|
122
|
+
)
|
|
123
|
+
payload = build_frontend_remediation_payload(
|
|
124
|
+
result=result,
|
|
125
|
+
cell_error_map=alchemy.cell_error_map,
|
|
126
|
+
row_error_map=alchemy.row_error_map,
|
|
127
|
+
)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
See also:
|
|
131
|
+
|
|
132
|
+
- [Platform Architecture](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/platform-architecture.md)
|
|
133
|
+
- [Runtime Model](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/runtime-model.md)
|
|
134
|
+
- [Integration Blueprints](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/integration-blueprints.md)
|
|
135
|
+
- [Result Objects](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/result-objects.md)
|
|
136
|
+
- [API Response Cookbook](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/api-response-cookbook.md)
|
|
137
|
+
|
|
92
138
|
## Example Outputs
|
|
93
139
|
|
|
94
140
|
These fixed outputs are generated from the repository examples by
|
|
@@ -166,6 +212,9 @@ for configured selection fields.
|
|
|
166
212
|
## Learn More
|
|
167
213
|
|
|
168
214
|
- [Full project README](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/README.md)
|
|
215
|
+
- [Platform architecture](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/platform-architecture.md)
|
|
216
|
+
- [Runtime model](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/runtime-model.md)
|
|
217
|
+
- [Integration blueprints](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/integration-blueprints.md)
|
|
169
218
|
- [Architecture notes](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/architecture.md)
|
|
170
219
|
- [Locale policy](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/locale.md)
|
|
171
220
|
- [Migration notes](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/MIGRATIONS.md)
|
|
@@ -20,6 +20,13 @@ It is meant for developers and AI agents who need to change implementation detai
|
|
|
20
20
|
- the internal orchestration that implements import, export, template generation, rendering, and storage integration
|
|
21
21
|
- compatibility modules retained for the 2.x line
|
|
22
22
|
- The package is organized around a small public facade and a set of focused internal collaborators.
|
|
23
|
+
- In the v2.4 docs, those collaborators are also described through a higher-level
|
|
24
|
+
import platform model:
|
|
25
|
+
- template authoring
|
|
26
|
+
- preflight gate
|
|
27
|
+
- import runtime
|
|
28
|
+
- result intelligence
|
|
29
|
+
- artifact and delivery
|
|
23
30
|
|
|
24
31
|
## High-Level Package Structure
|
|
25
32
|
|
|
@@ -263,6 +270,13 @@ These exist to support the 2.x line and should not be treated as preferred imple
|
|
|
263
270
|
|
|
264
271
|
## Major Internal Flows
|
|
265
272
|
|
|
273
|
+
The package guide keeps the internal ownership view.
|
|
274
|
+
If you want the capability-oriented platform view above these flows, start with:
|
|
275
|
+
|
|
276
|
+
- [`../../docs/platform-architecture.md`](../../docs/platform-architecture.md)
|
|
277
|
+
- [`../../docs/runtime-model.md`](../../docs/runtime-model.md)
|
|
278
|
+
- [`../../docs/platform-code-mapping.md`](../../docs/platform-code-mapping.md)
|
|
279
|
+
|
|
266
280
|
### Import validation flow
|
|
267
281
|
|
|
268
282
|
The import path is implemented roughly in this order:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""A Python Library for Reading and Writing Excel Files"""
|
|
2
2
|
|
|
3
|
-
__version__ = '2.
|
|
3
|
+
__version__ = '2.4.0'
|
|
4
4
|
from excelalchemy._primitives.constants import CharacterSet, DataRangeOption, DateFormat, Option
|
|
5
5
|
from excelalchemy._primitives.deprecation import ExcelAlchemyDeprecationWarning
|
|
6
6
|
from excelalchemy._primitives.identity import (
|
|
@@ -152,6 +152,13 @@ class ExcelAlchemy[
|
|
|
152
152
|
*,
|
|
153
153
|
on_event: Callable[[dict[str, object]], None] | None = None,
|
|
154
154
|
) -> ImportResult:
|
|
155
|
+
"""Run one import session and optionally emit additive runtime events.
|
|
156
|
+
|
|
157
|
+
The callback receives best-effort event dictionaries emitted inline on
|
|
158
|
+
the same import path. These events are useful for service-layer
|
|
159
|
+
progress tracking, but they do not create a separate job framework or
|
|
160
|
+
background execution model.
|
|
161
|
+
"""
|
|
155
162
|
assert isinstance(self.config, ImporterConfig)
|
|
156
163
|
if self.excel_mode != ExcelMode.IMPORT:
|
|
157
164
|
raise ConfigError(msg(MessageKey.IMPORT_MODE_ONLY_METHOD))
|
|
@@ -66,7 +66,13 @@ class ImportSession[
|
|
|
66
66
|
ImportCreateModelT: BaseModel,
|
|
67
67
|
ImportUpdateModelT: BaseModel,
|
|
68
68
|
]:
|
|
69
|
-
"""Keep all single-run import state outside of the long-lived facade.
|
|
69
|
+
"""Keep all single-run import state outside of the long-lived facade.
|
|
70
|
+
|
|
71
|
+
This class owns the concrete runtime event payloads emitted during one
|
|
72
|
+
import run. Platform docs may describe broader stage labels such as
|
|
73
|
+
"Rows Processed", while the runtime event dictionaries emitted here keep
|
|
74
|
+
their current concrete names such as ``row_processed``.
|
|
75
|
+
"""
|
|
70
76
|
|
|
71
77
|
def __init__(
|
|
72
78
|
self,
|
|
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
|