Skip to content

Commit 6befdbb

Browse files
authored
Merge pull request #52 from RayCarterLab/v2
feat(ci): add pdates the package presentation on PyPI
2 parents 715b4c5 + 26ada7b commit 6befdbb

8 files changed

Lines changed: 123 additions & 17 deletions

File tree

.github/workflows/python-publish.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ jobs:
3434
uv.lock
3535
3636
- name: Build package
37-
run: uv build
37+
run: |
38+
rm -rf dist
39+
uv build
3840
3941
- name: Check package metadata
4042
run: uvx twine check dist/*

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file.
44

55
The format is inspired by Keep a Changelog and versioned according to PEP 440.
66

7+
## [2.0.0.post1] - 2026-03-28
8+
9+
This post-release updates the package presentation and release metadata for the
10+
stable ExcelAlchemy 2.0 line without changing the core import/export behavior.
11+
12+
### Changed
13+
14+
- Added a dedicated PyPI-friendly long description via `README-pypi.md`
15+
- Switched package metadata to use the PyPI-specific README
16+
- Replaced relative README assets with PyPI-safe absolute image and document links
17+
- Tuned Codecov status behavior for large release PRs and compatibility shim files
18+
719
## [2.0.0] - 2026-03-28
820

921
This release promotes the validated 2.0 release candidate to the first stable public

README-pypi.md

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# ExcelAlchemy
2+
3+
Schema-driven Python library for typed Excel import/export workflows with Pydantic and locale-aware workbooks.
4+
5+
ExcelAlchemy turns Pydantic models into typed workbook contracts:
6+
7+
- generate Excel templates from code
8+
- validate uploaded workbooks
9+
- map failures back to rows and cells
10+
- render workbook-facing output in `zh-CN` or `en`
11+
- keep storage pluggable through `ExcelStorage`
12+
13+
[GitHub Repository](https://github.com/RayCarterLab/ExcelAlchemy) · [Full README](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/README.md) · [Architecture](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/architecture.md) · [Migration Notes](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/MIGRATIONS.md)
14+
15+
## Screenshots
16+
17+
### Template
18+
19+
![Excel template screenshot](https://raw.githubusercontent.com/RayCarterLab/ExcelAlchemy/main/images/portfolio-template-en.png)
20+
21+
### Import Result
22+
23+
![Excel import result screenshot](https://raw.githubusercontent.com/RayCarterLab/ExcelAlchemy/main/images/portfolio-import-result-en.png)
24+
25+
## Install
26+
27+
```bash
28+
pip install ExcelAlchemy
29+
```
30+
31+
Optional Minio support:
32+
33+
```bash
34+
pip install "ExcelAlchemy[minio]"
35+
```
36+
37+
## Minimal Example
38+
39+
```python
40+
from pydantic import BaseModel
41+
42+
from excelalchemy import ExcelAlchemy, FieldMeta, ImporterConfig, Number, String
43+
44+
45+
class Importer(BaseModel):
46+
age: Number = FieldMeta(label='Age', order=1)
47+
name: String = FieldMeta(label='Name', order=2)
48+
49+
50+
alchemy = ExcelAlchemy(ImporterConfig(Importer, locale='en'))
51+
template = alchemy.download_template_artifact(filename='people-template.xlsx')
52+
53+
excel_bytes = template.as_bytes()
54+
```
55+
56+
## Modern Annotated Example
57+
58+
```python
59+
from typing import Annotated
60+
61+
from pydantic import BaseModel, Field
62+
63+
from excelalchemy import Email, ExcelAlchemy, ExcelMeta, ImporterConfig
64+
65+
66+
class Importer(BaseModel):
67+
email: Annotated[
68+
Email,
69+
Field(min_length=10),
70+
ExcelMeta(label='Email', order=1, hint='Use your work email'),
71+
]
72+
73+
74+
alchemy = ExcelAlchemy(ImporterConfig(Importer, locale='en'))
75+
template = alchemy.download_template_artifact(filename='people-template.xlsx')
76+
```
77+
78+
## Why ExcelAlchemy
79+
80+
- Pydantic v2-based schema extraction and validation
81+
- locale-aware workbook comments and result workbooks
82+
- pluggable storage instead of a hard-coded backend
83+
- `openpyxl`-based runtime path without pandas
84+
- contract tests, Ruff, and Pyright in the development workflow
85+
86+
## Learn More
87+
88+
- [Full project README](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/README.md)
89+
- [Architecture notes](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/architecture.md)
90+
- [Locale policy](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/locale.md)
91+
- [Migration notes](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/MIGRATIONS.md)

README.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
![Lint](https://img.shields.io/badge/lint-ruff-D7FF64)
77
![Typing](https://img.shields.io/badge/typing-pyright-2C6BED)
88

9-
[中文 README](./README_cn.md) · [About](./ABOUT.md) · [Architecture](./docs/architecture.md) · [Locale Policy](./docs/locale.md) · [Changelog](./CHANGELOG.md) · [Migration Notes](./MIGRATIONS.md)
9+
[中文 README](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/README_cn.md) · [About](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/ABOUT.md) · [Architecture](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/architecture.md) · [Locale Policy](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/locale.md) · [Changelog](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/CHANGELOG.md) · [Migration Notes](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/MIGRATIONS.md)
1010

1111
ExcelAlchemy is a schema-driven Python library for Excel import and export workflows.
1212
It turns Pydantic models into typed workbook contracts: generate templates, validate uploads, map failures back to rows
@@ -16,7 +16,7 @@ This repository is also a design artifact.
1616
It documents a series of deliberate engineering choices: `src/` layout, Pydantic v2 migration, pandas removal,
1717
pluggable storage, `uv`-based workflows, and locale-aware workbook output.
1818

19-
The current stable release line is `2.0.0`, the first public stable release of ExcelAlchemy 2.0.
19+
The current stable release line is `2.0.0.post1`, the first post-release update to the stable ExcelAlchemy 2.0 line.
2020

2121
## At a Glance
2222

@@ -31,7 +31,7 @@ The current stable release line is `2.0.0`, the first public stable release of E
3131

3232
| Template | Import Result |
3333
| --- | --- |
34-
| ![Excel template screenshot](./images/portfolio-template-en.png) | ![Excel import result screenshot](./images/portfolio-import-result-en.png) |
34+
| ![Excel template screenshot](https://raw.githubusercontent.com/RayCarterLab/ExcelAlchemy/main/images/portfolio-template-en.png) | ![Excel import result screenshot](https://raw.githubusercontent.com/RayCarterLab/ExcelAlchemy/main/images/portfolio-import-result-en.png) |
3535

3636
## Minimal Example
3737

@@ -126,7 +126,7 @@ flowchart TD
126126
E --> M[Runtime Error Messages]
127127
```
128128

129-
See the full breakdown in [docs/architecture.md](./docs/architecture.md).
129+
See the full breakdown in [docs/architecture.md](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/architecture.md).
130130

131131
## Workflow
132132

@@ -146,7 +146,7 @@ flowchart LR
146146
## Design Principles
147147

148148
This repository is guided by explicit design principles rather than accidental convenience.
149-
The full mapping is in [ABOUT.md](./ABOUT.md); the short version is:
149+
The full mapping is in [ABOUT.md](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/ABOUT.md); the short version is:
150150

151151
1. Schema first.
152152
2. Explicit metadata over implicit conventions.
@@ -182,7 +182,7 @@ pip install "ExcelAlchemy[minio]"
182182
- result workbook column titles
183183
- row validation status labels
184184

185-
The public locale policy is documented in [docs/locale.md](./docs/locale.md).
185+
The public locale policy is documented in [docs/locale.md](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/locale.md).
186186
In short:
187187

188188
- runtime exceptions are standardized in English
@@ -293,7 +293,7 @@ This repository intentionally records its evolution:
293293
- i18n foundation and locale-aware workbook text
294294

295295
These are not incidental refactors; they are the story of the codebase.
296-
See [ABOUT.md](./ABOUT.md) for the migration rationale behind each step.
296+
See [ABOUT.md](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/ABOUT.md) for the migration rationale behind each step.
297297

298298
## Pydantic v1 vs v2
299299

@@ -306,14 +306,14 @@ The short version:
306306
| Validation integration | Deep reliance on internals | Adapter + explicit runtime validation |
307307
| Upgrade path | Brittle | Layered |
308308

309-
More detail is documented in [ABOUT.md](./ABOUT.md).
309+
More detail is documented in [ABOUT.md](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/ABOUT.md).
310310

311311
## Docs Map
312312

313-
- [README.md](./README.md): product + design overview
314-
- [README_cn.md](./README_cn.md): Chinese usage-oriented guide
315-
- [ABOUT.md](./ABOUT.md): engineering rationale and evolution notes
316-
- [docs/architecture.md](./docs/architecture.md): component map and boundaries
313+
- [README.md](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/README.md): product + design overview
314+
- [README_cn.md](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/README_cn.md): Chinese usage-oriented guide
315+
- [ABOUT.md](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/ABOUT.md): engineering rationale and evolution notes
316+
- [docs/architecture.md](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/docs/architecture.md): component map and boundaries
317317

318318
## Development
319319

@@ -330,4 +330,4 @@ uv build
330330

331331
## License
332332

333-
MIT. See [LICENSE](./LICENSE).
333+
MIT. See [LICENSE](https://github.com/RayCarterLab/ExcelAlchemy/blob/main/LICENSE).

README_cn.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
ExcelAlchemy 是一个面向 Excel 导入导出的 schema-first Python 库。
66
它的核心思路不是“读写表格文件”,而是“把 Excel 当成一种带约束的业务契约”。
77

8-
当前稳定发布版本是 `2.0.0`,也就是 ExcelAlchemy 2.0 的首个公开正式版
8+
当前稳定发布版本是 `2.0.0.post1`,也就是 ExcelAlchemy 2.0 稳定线的首个 post-release 更新
99

1010
你用 Pydantic 模型定义结构,用 `FieldMeta` 定义 Excel 元数据,用显式的导入/导出流程去完成模板生成、数据校验、错误回写和后端集成。
1111

docs/releases/2.0.0.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ uv sync --extra development
2323
uv run ruff check .
2424
uv run pyright
2525
uv run pytest tests
26+
rm -rf dist
2627
uv build
2728
uvx twine check dist/*
2829
```

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ build-backend = 'flit_core.buildapi'
66
name = 'ExcelAlchemy'
77
description = 'Schema-driven Python library for typed Excel import/export workflows with Pydantic and locale-aware workbooks.'
88
authors = [{ name = 'Ray' }]
9-
readme = 'README.md'
9+
readme = { file = 'README-pypi.md', content-type = 'text/markdown' }
1010
license = { file = 'LICENSE' }
1111
keywords = ['excel', 'openpyxl', 'pydantic', 'minio', 'schema']
1212
classifiers = [

src/excelalchemy/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""A Python Library for Reading and Writing Excel Files"""
22

3-
__version__ = '2.0.0'
3+
__version__ = '2.0.0.post1'
44
from excelalchemy._primitives.constants import CharacterSet, DataRangeOption, DateFormat, Option
55
from excelalchemy._primitives.deprecation import ExcelAlchemyDeprecationWarning
66
from excelalchemy._primitives.identity import (

0 commit comments

Comments
 (0)