wolfxl 0.1.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.
- wolfxl-0.1.0/.github/workflows/ci.yml +51 -0
- wolfxl-0.1.0/.github/workflows/release.yml +102 -0
- wolfxl-0.1.0/.gitignore +27 -0
- wolfxl-0.1.0/CHANGELOG.md +14 -0
- wolfxl-0.1.0/Cargo.lock +710 -0
- wolfxl-0.1.0/Cargo.toml +25 -0
- wolfxl-0.1.0/LICENSE +21 -0
- wolfxl-0.1.0/PKG-INFO +18 -0
- wolfxl-0.1.0/README.md +116 -0
- wolfxl-0.1.0/build.rs +57 -0
- wolfxl-0.1.0/pyproject.toml +37 -0
- wolfxl-0.1.0/python/wolfxl/__init__.py +58 -0
- wolfxl-0.1.0/python/wolfxl/_cell.py +422 -0
- wolfxl-0.1.0/python/wolfxl/_styles.py +128 -0
- wolfxl-0.1.0/python/wolfxl/_utils.py +45 -0
- wolfxl-0.1.0/python/wolfxl/_workbook.py +142 -0
- wolfxl-0.1.0/python/wolfxl/_worksheet.py +237 -0
- wolfxl-0.1.0/python/wolfxl/py.typed +0 -0
- wolfxl-0.1.0/src/calamine_styled_backend.rs +2455 -0
- wolfxl-0.1.0/src/lib.rs +41 -0
- wolfxl-0.1.0/src/ooxml_util.rs +134 -0
- wolfxl-0.1.0/src/rust_xlsxwriter_backend.rs +2156 -0
- wolfxl-0.1.0/src/util.rs +64 -0
- wolfxl-0.1.0/src/wolfxl/mod.rs +493 -0
- wolfxl-0.1.0/src/wolfxl/shared_strings.rs +130 -0
- wolfxl-0.1.0/src/wolfxl/sheet_patcher.rs +658 -0
- wolfxl-0.1.0/src/wolfxl/styles.rs +647 -0
- wolfxl-0.1.0/tests/fixtures/tier1/01_cell_values.xlsx +0 -0
- wolfxl-0.1.0/tests/fixtures/tier1/03_text_formatting.xlsx +0 -0
- wolfxl-0.1.0/tests/fixtures/tier1/04_background_colors.xlsx +0 -0
- wolfxl-0.1.0/tests/fixtures/tier1/09_multiple_sheets.xlsx +0 -0
- wolfxl-0.1.0/tests/fixtures/tier2/13_hyperlinks.xlsx +0 -0
- wolfxl-0.1.0/tests/fixtures/tier2/14_images.xlsx +0 -0
- wolfxl-0.1.0/tests/test_wolfxl_compat.py +829 -0
- wolfxl-0.1.0/uv.lock +8 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ${{ matrix.os }}
|
|
11
|
+
strategy:
|
|
12
|
+
fail-fast: false
|
|
13
|
+
matrix:
|
|
14
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
15
|
+
python-version: ["3.9", "3.12"]
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: ${{ matrix.python-version }}
|
|
22
|
+
|
|
23
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
24
|
+
|
|
25
|
+
- name: Install dependencies
|
|
26
|
+
run: |
|
|
27
|
+
python -m pip install --upgrade pip
|
|
28
|
+
pip install maturin pytest openpyxl
|
|
29
|
+
|
|
30
|
+
- name: Build wheel and install
|
|
31
|
+
run: |
|
|
32
|
+
maturin build --release --out dist
|
|
33
|
+
pip install --find-links dist wolfxl
|
|
34
|
+
|
|
35
|
+
- name: Run tests
|
|
36
|
+
run: pytest tests/ -v
|
|
37
|
+
|
|
38
|
+
lint:
|
|
39
|
+
runs-on: ubuntu-latest
|
|
40
|
+
steps:
|
|
41
|
+
- uses: actions/checkout@v4
|
|
42
|
+
|
|
43
|
+
- uses: actions/setup-python@v5
|
|
44
|
+
with:
|
|
45
|
+
python-version: "3.12"
|
|
46
|
+
|
|
47
|
+
- name: Install lint tools
|
|
48
|
+
run: pip install ruff
|
|
49
|
+
|
|
50
|
+
- name: Ruff check
|
|
51
|
+
run: ruff check python/ tests/
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
linux:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
strategy:
|
|
15
|
+
fail-fast: false
|
|
16
|
+
matrix:
|
|
17
|
+
target: [x86_64, aarch64]
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
- uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
- name: Build wheels
|
|
24
|
+
uses: PyO3/maturin-action@v1
|
|
25
|
+
with:
|
|
26
|
+
target: ${{ matrix.target }}
|
|
27
|
+
args: --release --out dist -i python3.9 python3.10 python3.11 python3.12 python3.13
|
|
28
|
+
manylinux: auto
|
|
29
|
+
- uses: actions/upload-artifact@v4
|
|
30
|
+
with:
|
|
31
|
+
name: wheels-linux-${{ matrix.target }}
|
|
32
|
+
path: dist
|
|
33
|
+
|
|
34
|
+
macos:
|
|
35
|
+
runs-on: ${{ matrix.runner }}
|
|
36
|
+
strategy:
|
|
37
|
+
fail-fast: false
|
|
38
|
+
matrix:
|
|
39
|
+
include:
|
|
40
|
+
- runner: macos-14
|
|
41
|
+
target: x86_64
|
|
42
|
+
- runner: macos-14
|
|
43
|
+
target: aarch64
|
|
44
|
+
steps:
|
|
45
|
+
- uses: actions/checkout@v4
|
|
46
|
+
- uses: actions/setup-python@v5
|
|
47
|
+
with:
|
|
48
|
+
python-version: "3.12"
|
|
49
|
+
- name: Build wheels
|
|
50
|
+
uses: PyO3/maturin-action@v1
|
|
51
|
+
with:
|
|
52
|
+
target: ${{ matrix.target }}-apple-darwin
|
|
53
|
+
args: --release --out dist
|
|
54
|
+
- uses: actions/upload-artifact@v4
|
|
55
|
+
with:
|
|
56
|
+
name: wheels-macos-${{ matrix.target }}
|
|
57
|
+
path: dist
|
|
58
|
+
|
|
59
|
+
windows:
|
|
60
|
+
runs-on: windows-latest
|
|
61
|
+
steps:
|
|
62
|
+
- uses: actions/checkout@v4
|
|
63
|
+
- uses: actions/setup-python@v5
|
|
64
|
+
with:
|
|
65
|
+
python-version: "3.12"
|
|
66
|
+
- name: Build wheels
|
|
67
|
+
uses: PyO3/maturin-action@v1
|
|
68
|
+
with:
|
|
69
|
+
args: --release --out dist
|
|
70
|
+
- uses: actions/upload-artifact@v4
|
|
71
|
+
with:
|
|
72
|
+
name: wheels-windows
|
|
73
|
+
path: dist
|
|
74
|
+
|
|
75
|
+
sdist:
|
|
76
|
+
runs-on: ubuntu-latest
|
|
77
|
+
steps:
|
|
78
|
+
- uses: actions/checkout@v4
|
|
79
|
+
- name: Build sdist
|
|
80
|
+
uses: PyO3/maturin-action@v1
|
|
81
|
+
with:
|
|
82
|
+
command: sdist
|
|
83
|
+
args: --out dist
|
|
84
|
+
- uses: actions/upload-artifact@v4
|
|
85
|
+
with:
|
|
86
|
+
name: wheels-sdist
|
|
87
|
+
path: dist
|
|
88
|
+
|
|
89
|
+
publish:
|
|
90
|
+
needs: [linux, macos, windows, sdist]
|
|
91
|
+
runs-on: ubuntu-latest
|
|
92
|
+
environment: pypi
|
|
93
|
+
permissions:
|
|
94
|
+
id-token: write
|
|
95
|
+
steps:
|
|
96
|
+
- uses: actions/download-artifact@v4
|
|
97
|
+
with:
|
|
98
|
+
pattern: wheels-*
|
|
99
|
+
merge-multiple: true
|
|
100
|
+
path: dist
|
|
101
|
+
- name: Publish to PyPI
|
|
102
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
wolfxl-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Rust
|
|
2
|
+
/target/
|
|
3
|
+
**/*.rs.bk
|
|
4
|
+
|
|
5
|
+
# Python
|
|
6
|
+
__pycache__/
|
|
7
|
+
*.py[cod]
|
|
8
|
+
*.so
|
|
9
|
+
*.pyd
|
|
10
|
+
*.egg-info/
|
|
11
|
+
dist/
|
|
12
|
+
build/
|
|
13
|
+
.eggs/
|
|
14
|
+
*.whl
|
|
15
|
+
|
|
16
|
+
# IDE
|
|
17
|
+
.idea/
|
|
18
|
+
.vscode/
|
|
19
|
+
*.swp
|
|
20
|
+
|
|
21
|
+
# Environment
|
|
22
|
+
.env
|
|
23
|
+
.venv/
|
|
24
|
+
|
|
25
|
+
# OS
|
|
26
|
+
.DS_Store
|
|
27
|
+
Thumbs.db
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.1.0 (2026-02-15)
|
|
4
|
+
|
|
5
|
+
Initial release. Extracted from [ExcelBench](https://github.com/wolfiesch/ExcelBench).
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- **Read mode**: Full-fidelity xlsx reading via calamine-styles (Font, Fill, Border, Alignment, NumberFormat)
|
|
10
|
+
- **Write mode**: Full-fidelity xlsx writing via rust_xlsxwriter
|
|
11
|
+
- **Modify mode**: Surgical ZIP patching for fast read-modify-write workflows (10-14x vs openpyxl)
|
|
12
|
+
- **openpyxl-compatible API**: `load_workbook()`, `Workbook()`, Cell/Worksheet/Font/PatternFill/Border
|
|
13
|
+
- **Bulk operations**: `read_sheet_values()` / `write_sheet_values()` for batch cell I/O
|
|
14
|
+
- **Performance**: 3-5x faster than openpyxl for per-cell operations, up to 5x for bulk writes
|