python-calamine-reducto 0.7.6__tar.gz → 0.7.15__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.
- python_calamine_reducto-0.7.15/.github/workflows/release.yml +140 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/Cargo.lock +83 -2
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/Cargo.toml +2 -1
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/PKG-INFO +1 -1
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/src/types/grid.rs +396 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/src/types/workbook.rs +711 -66
- python_calamine_reducto-0.7.15/tests/data/table-multiple.xlsb +0 -0
- python_calamine_reducto-0.7.15/tests/data/temperature-table.xlsb +0 -0
- python_calamine_reducto-0.7.15/tests/test_band.py +343 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/test_grid.py +294 -0
- python_calamine_reducto-0.7.15/tests/test_tables.py +142 -0
- python_calamine_reducto-0.7.6/tests/test_tables.py +0 -73
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/.github/workflows/CI.yml +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/.gitignore +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/.pre-commit-config.yaml +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/.python-version +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/CLAUDE.md +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/LICENSE +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/README.md +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/build.rs +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/pyproject.toml +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/python/python_calamine/__init__.py +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/python/python_calamine/_python_calamine.pyi +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/python/python_calamine/py.typed +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/renovate.json +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/src/lib.rs +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/src/types/cell.rs +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/src/types/errors.rs +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/src/types/mod.rs +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/src/types/sheet.rs +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/src/types/table.rs +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/__init__.py +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/conftest.py +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/create_empty_merge_fixture.py +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/create_richtext_fixture.py +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/create_test_fixture.py +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/any_sheets.ods +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/any_sheets.xls +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/any_sheets.xlsb +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/any_sheets.xlsx +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/base.ods +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/base.xls +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/base.xlsb +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/base.xlsx +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/dropdown_test.xlsx +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/empty_file.ods +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/empty_file.xlsb +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/empty_file.xlsx +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/empty_merge_test.xlsx +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/formula_test.xlsx +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/grid_test.xlsx +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/image_test.xlsx +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/issue139.xlsx +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/multi_image_test.xlsx +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/password.ods +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/password.xls +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/password.xlsb +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/password.xlsx +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/richtext_test.xlsx +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/data/table-multiple.xlsx +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/test_base.py +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/test_images.py +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/test_pandas.py +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/tests/test_sheet_type.py +0 -0
- {python_calamine_reducto-0.7.6 → python_calamine_reducto-0.7.15}/uv.lock +0 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
# Build wheels + sdist and (optionally) publish to PyPI.
|
|
4
|
+
#
|
|
5
|
+
# Manual only: trigger from the Actions tab -> "Release" -> "Run workflow".
|
|
6
|
+
# The version published is whatever `version` in Cargo.toml is on the ref you
|
|
7
|
+
# run from (maturin reads it from there), so run this from `main` after the
|
|
8
|
+
# version-bump PR has merged.
|
|
9
|
+
#
|
|
10
|
+
# - publish = "no" (default): builds all wheels + sdist as a dry run. Use
|
|
11
|
+
# this to verify the matrix before committing to a version.
|
|
12
|
+
# - publish = "yes": also uploads to PyPI using the PYPI_API_TOKEN secret.
|
|
13
|
+
#
|
|
14
|
+
# PyPI filenames are immutable: a version can never be re-uploaded once any
|
|
15
|
+
# file for it lands, and a deleted file's name is burned forever. Re-running
|
|
16
|
+
# with publish=yes for an already-published version is safe — `skip-existing`
|
|
17
|
+
# skips files already on PyPI instead of failing. To change a release you must
|
|
18
|
+
# bump the version.
|
|
19
|
+
|
|
20
|
+
on:
|
|
21
|
+
workflow_dispatch:
|
|
22
|
+
inputs:
|
|
23
|
+
publish:
|
|
24
|
+
description: "Upload to PyPI? 'no' = build-only dry run; 'yes' = publish."
|
|
25
|
+
type: choice
|
|
26
|
+
options:
|
|
27
|
+
- "no"
|
|
28
|
+
- "yes"
|
|
29
|
+
default: "no"
|
|
30
|
+
|
|
31
|
+
permissions:
|
|
32
|
+
contents: read
|
|
33
|
+
|
|
34
|
+
env:
|
|
35
|
+
# Private Rust deps (reductoai/calamine, reductoai/ssfmt) are fetched over
|
|
36
|
+
# https with a token-embedded insteadOf rewrite; the CLI fetcher mirrors CI.
|
|
37
|
+
CARGO_NET_GIT_FETCH_WITH_CLI: "true"
|
|
38
|
+
|
|
39
|
+
jobs:
|
|
40
|
+
build-linux:
|
|
41
|
+
name: wheels linux-${{ matrix.target }}
|
|
42
|
+
runs-on: ubuntu-latest
|
|
43
|
+
strategy:
|
|
44
|
+
fail-fast: false
|
|
45
|
+
matrix:
|
|
46
|
+
# x86_64 is what every prod container runs on (required).
|
|
47
|
+
# aarch64 is the Graviton / ARM Linux target.
|
|
48
|
+
target:
|
|
49
|
+
- x86_64
|
|
50
|
+
- aarch64
|
|
51
|
+
steps:
|
|
52
|
+
- uses: actions/checkout@v6
|
|
53
|
+
|
|
54
|
+
- name: Build wheels
|
|
55
|
+
uses: PyO3/maturin-action@v1
|
|
56
|
+
with:
|
|
57
|
+
target: ${{ matrix.target }}
|
|
58
|
+
# glibc/manylinux only — all Reducto images are Debian/Chainguard glibc.
|
|
59
|
+
manylinux: "2_17"
|
|
60
|
+
args: --release --out dist --interpreter 3.11 3.12 3.13
|
|
61
|
+
# Runs as root inside the manylinux container before the build, so
|
|
62
|
+
# cargo can fetch the private reductoai/* git deps.
|
|
63
|
+
before-script-linux: |
|
|
64
|
+
git config --global url."https://x-access-token:${{ secrets.GH_PAT }}@github.com/".insteadOf "https://github.com/"
|
|
65
|
+
|
|
66
|
+
- uses: actions/upload-artifact@v4
|
|
67
|
+
with:
|
|
68
|
+
name: wheels-linux-${{ matrix.target }}
|
|
69
|
+
path: dist
|
|
70
|
+
|
|
71
|
+
build-macos:
|
|
72
|
+
name: wheels macos-${{ matrix.target }}
|
|
73
|
+
runs-on: macos-14
|
|
74
|
+
strategy:
|
|
75
|
+
fail-fast: false
|
|
76
|
+
matrix:
|
|
77
|
+
# arm64 is what dev laptops (Apple Silicon) use (required).
|
|
78
|
+
# x86_64 covers Intel Macs (optional).
|
|
79
|
+
target:
|
|
80
|
+
- aarch64
|
|
81
|
+
- x86_64
|
|
82
|
+
steps:
|
|
83
|
+
- uses: actions/checkout@v6
|
|
84
|
+
|
|
85
|
+
- name: Configure git for private deps
|
|
86
|
+
run: git config --global url."https://x-access-token:${{ secrets.GH_PAT }}@github.com/".insteadOf "https://github.com/"
|
|
87
|
+
|
|
88
|
+
- name: Build wheels
|
|
89
|
+
uses: PyO3/maturin-action@v1
|
|
90
|
+
with:
|
|
91
|
+
target: ${{ matrix.target }}
|
|
92
|
+
args: --release --out dist --interpreter 3.11 3.12 3.13
|
|
93
|
+
|
|
94
|
+
- uses: actions/upload-artifact@v4
|
|
95
|
+
with:
|
|
96
|
+
name: wheels-macos-${{ matrix.target }}
|
|
97
|
+
path: dist
|
|
98
|
+
|
|
99
|
+
sdist:
|
|
100
|
+
name: sdist
|
|
101
|
+
runs-on: ubuntu-latest
|
|
102
|
+
steps:
|
|
103
|
+
- uses: actions/checkout@v6
|
|
104
|
+
|
|
105
|
+
# `maturin sdist` runs `cargo metadata`, which must resolve the private
|
|
106
|
+
# reductoai/* git deps — so it needs the same credential rewrite as the
|
|
107
|
+
# wheel builds.
|
|
108
|
+
- name: Configure git for private deps
|
|
109
|
+
run: git config --global url."https://x-access-token:${{ secrets.GH_PAT }}@github.com/".insteadOf "https://github.com/"
|
|
110
|
+
|
|
111
|
+
- name: Build sdist
|
|
112
|
+
uses: PyO3/maturin-action@v1
|
|
113
|
+
with:
|
|
114
|
+
command: sdist
|
|
115
|
+
args: --out dist
|
|
116
|
+
|
|
117
|
+
- uses: actions/upload-artifact@v4
|
|
118
|
+
with:
|
|
119
|
+
name: sdist
|
|
120
|
+
path: dist
|
|
121
|
+
|
|
122
|
+
publish:
|
|
123
|
+
name: publish to PyPI
|
|
124
|
+
# Only uploads when the operator explicitly chose publish=yes.
|
|
125
|
+
if: ${{ inputs.publish == 'yes' }}
|
|
126
|
+
needs: [build-linux, build-macos, sdist]
|
|
127
|
+
runs-on: ubuntu-latest
|
|
128
|
+
steps:
|
|
129
|
+
- uses: actions/download-artifact@v4
|
|
130
|
+
with:
|
|
131
|
+
path: dist
|
|
132
|
+
merge-multiple: true
|
|
133
|
+
|
|
134
|
+
- name: Publish to PyPI
|
|
135
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
136
|
+
with:
|
|
137
|
+
packages-dir: dist
|
|
138
|
+
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
139
|
+
# Idempotent re-runs: skip files already on PyPI instead of failing.
|
|
140
|
+
skip-existing: true
|
|
@@ -80,7 +80,7 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
|
|
80
80
|
[[package]]
|
|
81
81
|
name = "calamine"
|
|
82
82
|
version = "0.32.0"
|
|
83
|
-
source = "git+https://github.com/reductoai/calamine.git?branch=main#
|
|
83
|
+
source = "git+https://github.com/reductoai/calamine.git?branch=main#89ef3e2e1cbbfe06cf61fd0ee1c7d54dff235a0e"
|
|
84
84
|
dependencies = [
|
|
85
85
|
"atoi_simd",
|
|
86
86
|
"byteorder",
|
|
@@ -406,6 +406,16 @@ dependencies = [
|
|
|
406
406
|
"hashbrown 0.16.1",
|
|
407
407
|
]
|
|
408
408
|
|
|
409
|
+
[[package]]
|
|
410
|
+
name = "matrixmultiply"
|
|
411
|
+
version = "0.3.10"
|
|
412
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
413
|
+
checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08"
|
|
414
|
+
dependencies = [
|
|
415
|
+
"autocfg",
|
|
416
|
+
"rawpointer",
|
|
417
|
+
]
|
|
418
|
+
|
|
409
419
|
[[package]]
|
|
410
420
|
name = "memchr"
|
|
411
421
|
version = "2.8.0"
|
|
@@ -422,6 +432,39 @@ dependencies = [
|
|
|
422
432
|
"simd-adler32",
|
|
423
433
|
]
|
|
424
434
|
|
|
435
|
+
[[package]]
|
|
436
|
+
name = "ndarray"
|
|
437
|
+
version = "0.17.2"
|
|
438
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
439
|
+
checksum = "520080814a7a6b4a6e9070823bb24b4531daac8c4627e08ba5de8c5ef2f2752d"
|
|
440
|
+
dependencies = [
|
|
441
|
+
"matrixmultiply",
|
|
442
|
+
"num-complex",
|
|
443
|
+
"num-integer",
|
|
444
|
+
"num-traits",
|
|
445
|
+
"portable-atomic",
|
|
446
|
+
"portable-atomic-util",
|
|
447
|
+
"rawpointer",
|
|
448
|
+
]
|
|
449
|
+
|
|
450
|
+
[[package]]
|
|
451
|
+
name = "num-complex"
|
|
452
|
+
version = "0.4.6"
|
|
453
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
454
|
+
checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
|
|
455
|
+
dependencies = [
|
|
456
|
+
"num-traits",
|
|
457
|
+
]
|
|
458
|
+
|
|
459
|
+
[[package]]
|
|
460
|
+
name = "num-integer"
|
|
461
|
+
version = "0.1.46"
|
|
462
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
463
|
+
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
|
|
464
|
+
dependencies = [
|
|
465
|
+
"num-traits",
|
|
466
|
+
]
|
|
467
|
+
|
|
425
468
|
[[package]]
|
|
426
469
|
name = "num-traits"
|
|
427
470
|
version = "0.2.19"
|
|
@@ -431,6 +474,22 @@ dependencies = [
|
|
|
431
474
|
"autocfg",
|
|
432
475
|
]
|
|
433
476
|
|
|
477
|
+
[[package]]
|
|
478
|
+
name = "numpy"
|
|
479
|
+
version = "0.28.0"
|
|
480
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
481
|
+
checksum = "778da78c64ddc928ebf5ad9df5edf0789410ff3bdbf3619aed51cd789a6af1e2"
|
|
482
|
+
dependencies = [
|
|
483
|
+
"libc",
|
|
484
|
+
"ndarray",
|
|
485
|
+
"num-complex",
|
|
486
|
+
"num-integer",
|
|
487
|
+
"num-traits",
|
|
488
|
+
"pyo3",
|
|
489
|
+
"pyo3-build-config",
|
|
490
|
+
"rustc-hash",
|
|
491
|
+
]
|
|
492
|
+
|
|
434
493
|
[[package]]
|
|
435
494
|
name = "once_cell"
|
|
436
495
|
version = "1.21.4"
|
|
@@ -443,6 +502,15 @@ version = "1.13.1"
|
|
|
443
502
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
444
503
|
checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
|
|
445
504
|
|
|
505
|
+
[[package]]
|
|
506
|
+
name = "portable-atomic-util"
|
|
507
|
+
version = "0.2.6"
|
|
508
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
509
|
+
checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3"
|
|
510
|
+
dependencies = [
|
|
511
|
+
"portable-atomic",
|
|
512
|
+
]
|
|
513
|
+
|
|
446
514
|
[[package]]
|
|
447
515
|
name = "prettyplease"
|
|
448
516
|
version = "0.2.37"
|
|
@@ -544,10 +612,11 @@ dependencies = [
|
|
|
544
612
|
|
|
545
613
|
[[package]]
|
|
546
614
|
name = "python-calamine-reducto"
|
|
547
|
-
version = "0.7.
|
|
615
|
+
version = "0.7.15"
|
|
548
616
|
dependencies = [
|
|
549
617
|
"calamine",
|
|
550
618
|
"chrono",
|
|
619
|
+
"numpy",
|
|
551
620
|
"pyo3",
|
|
552
621
|
"pyo3-build-config",
|
|
553
622
|
"pyo3-file",
|
|
@@ -588,6 +657,18 @@ version = "6.0.0"
|
|
|
588
657
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
589
658
|
checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
|
|
590
659
|
|
|
660
|
+
[[package]]
|
|
661
|
+
name = "rawpointer"
|
|
662
|
+
version = "0.2.1"
|
|
663
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
664
|
+
checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
|
|
665
|
+
|
|
666
|
+
[[package]]
|
|
667
|
+
name = "rustc-hash"
|
|
668
|
+
version = "2.1.2"
|
|
669
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
670
|
+
checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
|
|
671
|
+
|
|
591
672
|
[[package]]
|
|
592
673
|
name = "rustix"
|
|
593
674
|
version = "1.1.4"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "python-calamine-reducto"
|
|
3
|
-
version = "0.7.
|
|
3
|
+
version = "0.7.15"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
|
|
@@ -18,6 +18,7 @@ pyo3 = { version = "0.28.2", features = [
|
|
|
18
18
|
chrono = { version = "0.4.42", features = ["serde"] }
|
|
19
19
|
ssfmt = { git = "https://github.com/reductoai/ssfmt", branch = "main", features = ["chrono"] }
|
|
20
20
|
pyo3-file = { git = "https://github.com/dimastbk/pyo3-file.git", rev = "b0a5b260d13c6df14ea021b06c071a6f389fa805" }
|
|
21
|
+
numpy = "0.28"
|
|
21
22
|
|
|
22
23
|
[build-dependencies]
|
|
23
24
|
pyo3-build-config = "0.28.2"
|