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.
Files changed (86) hide show
  1. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/PKG-INFO +52 -3
  2. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/README-pypi.md +51 -2
  3. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/README.md +14 -0
  4. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/__init__.py +1 -1
  5. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/alchemy.py +7 -0
  6. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/import_session.py +7 -1
  7. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/LICENSE +0 -0
  8. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/pyproject.toml +0 -0
  9. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/_primitives/__init__.py +0 -0
  10. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/_primitives/constants.py +0 -0
  11. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/_primitives/deprecation.py +0 -0
  12. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/_primitives/diagnostics.py +0 -0
  13. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/_primitives/header_models.py +0 -0
  14. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/_primitives/identity.py +0 -0
  15. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/_primitives/payloads.py +0 -0
  16. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/artifacts.py +0 -0
  17. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/__init__.py +0 -0
  18. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/base.py +0 -0
  19. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/boolean.py +0 -0
  20. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/date.py +0 -0
  21. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/date_range.py +0 -0
  22. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/email.py +0 -0
  23. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/money.py +0 -0
  24. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/multi_checkbox.py +0 -0
  25. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/number.py +0 -0
  26. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/number_range.py +0 -0
  27. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/organization.py +0 -0
  28. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/phone_number.py +0 -0
  29. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/radio.py +0 -0
  30. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/staff.py +0 -0
  31. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/string.py +0 -0
  32. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/tree.py +0 -0
  33. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/codecs/url.py +0 -0
  34. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/config.py +0 -0
  35. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/const.py +0 -0
  36. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/__init__.py +0 -0
  37. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/abstract.py +0 -0
  38. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/executor.py +0 -0
  39. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/headers.py +0 -0
  40. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/preflight.py +0 -0
  41. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/rendering.py +0 -0
  42. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/rows.py +0 -0
  43. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/schema.py +0 -0
  44. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/storage.py +0 -0
  45. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/storage_minio.py +0 -0
  46. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/storage_protocol.py +0 -0
  47. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/table.py +0 -0
  48. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/core/writer.py +0 -0
  49. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/exc.py +0 -0
  50. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/exceptions.py +0 -0
  51. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/header_models.py +0 -0
  52. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/helper/__init__.py +0 -0
  53. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/helper/pydantic.py +0 -0
  54. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/i18n/__init__.py +0 -0
  55. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/i18n/messages.py +0 -0
  56. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/identity.py +0 -0
  57. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/metadata.py +0 -0
  58. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/py.typed +0 -0
  59. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/results.py +0 -0
  60. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/__init__.py +0 -0
  61. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/abstract.py +0 -0
  62. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/alchemy.py +0 -0
  63. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/field.py +0 -0
  64. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/header.py +0 -0
  65. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/identity.py +0 -0
  66. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/result.py +0 -0
  67. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/__init__.py +0 -0
  68. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/boolean.py +0 -0
  69. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/date.py +0 -0
  70. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/date_range.py +0 -0
  71. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/email.py +0 -0
  72. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/money.py +0 -0
  73. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/multi_checkbox.py +0 -0
  74. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/number.py +0 -0
  75. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/number_range.py +0 -0
  76. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/organization.py +0 -0
  77. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/phone_number.py +0 -0
  78. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/radio.py +0 -0
  79. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/staff.py +0 -0
  80. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/string.py +0 -0
  81. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/tree.py +0 -0
  82. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/types/value/url.py +0 -0
  83. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/util/__init__.py +0 -0
  84. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/util/converter.py +0 -0
  85. {excelalchemy-2.3.0 → excelalchemy-2.4.0}/src/excelalchemy/util/convertor.py +0 -0
  86. {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.0
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.3.0`, which continues the 2.x line with a
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
- [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) · [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)
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.3.0`, which continues the 2.x line with a
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
- [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) · [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)
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.0'
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