xlsxturbo 0.9.0__tar.gz → 0.10.2__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 (28) hide show
  1. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/.github/workflows/ci.yml +29 -0
  2. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/.github/workflows/release.yml +1 -1
  3. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/CHANGELOG.md +69 -1
  4. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/Cargo.lock +48 -90
  5. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/Cargo.toml +3 -3
  6. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/PKG-INFO +226 -16
  7. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/README.md +225 -15
  8. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/ROADMAP.md +15 -19
  9. xlsxturbo-0.10.2/benchmarks/benchmark.py +652 -0
  10. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/pyproject.toml +1 -1
  11. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/python/xlsxturbo/__init__.pyi +71 -0
  12. xlsxturbo-0.10.2/python/xlsxturbo/py.typed +0 -0
  13. xlsxturbo-0.10.2/src/convert.rs +763 -0
  14. xlsxturbo-0.10.2/src/features.rs +1164 -0
  15. xlsxturbo-0.10.2/src/lib.rs +938 -0
  16. xlsxturbo-0.10.2/src/parse.rs +449 -0
  17. xlsxturbo-0.10.2/src/types.rs +143 -0
  18. xlsxturbo-0.10.2/tests/test_features.py +1827 -0
  19. xlsxturbo-0.9.0/benchmark.py +0 -237
  20. xlsxturbo-0.9.0/src/lib.rs +0 -2898
  21. xlsxturbo-0.9.0/tests/test_features.py +0 -674
  22. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/.github/dependabot.yml +0 -0
  23. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/.gitignore +0 -0
  24. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/BUILD.md +0 -0
  25. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/LICENSE +0 -0
  26. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2/benchmarks}/benchmark_parallel.py +0 -0
  27. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/python/xlsxturbo/__init__.py +0 -0
  28. {xlsxturbo-0.9.0 → xlsxturbo-0.10.2}/src/main.rs +0 -0
@@ -24,6 +24,35 @@ jobs:
24
24
  - name: Build
25
25
  run: cargo build --release
26
26
 
27
+ python-test:
28
+ runs-on: ubuntu-latest
29
+ steps:
30
+ - uses: actions/checkout@v6
31
+
32
+ - name: Set up Rust
33
+ uses: dtolnay/rust-toolchain@stable
34
+
35
+ - name: Set up Python
36
+ uses: actions/setup-python@v5
37
+ with:
38
+ python-version: '3.12'
39
+
40
+ - name: Install dependencies
41
+ run: |
42
+ python -m venv .venv
43
+ source .venv/bin/activate
44
+ pip install maturin pandas polars openpyxl
45
+
46
+ - name: Build and install xlsxturbo
47
+ run: |
48
+ source .venv/bin/activate
49
+ maturin develop --release
50
+
51
+ - name: Run Python integration tests
52
+ run: |
53
+ source .venv/bin/activate
54
+ python tests/test_features.py
55
+
27
56
  lint:
28
57
  runs-on: ubuntu-latest
29
58
  steps:
@@ -115,7 +115,7 @@ jobs:
115
115
  if: startsWith(github.ref, 'refs/tags/')
116
116
  environment:
117
117
  name: pypi
118
- url: https://pypi.org/p/fast_xlsx
118
+ url: https://pypi.org/p/xlsxturbo
119
119
  permissions:
120
120
  id-token: write # Required for trusted publishing
121
121
  steps:
@@ -5,6 +5,71 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.10.2] - 2026-02-06
9
+
10
+ ### Fixed
11
+ - **Wildcard pattern panic** - `matches_pattern("*")` no longer panics on lone `*` pattern
12
+ - **Silent datetime defaults** - Datetime/date attribute extraction now propagates errors instead of silently defaulting to 1900
13
+ - **Index overflow safety** - Row count and column count use checked casts (`u32::try_from`, `u16::try_from`) instead of `as` casts
14
+ - **PyPI URL in release workflow** - Fixed leftover `fast_xlsx` reference to `xlsxturbo`
15
+ - **Validation type aliases** - Added `whole`, `integer`, `number`, `textlength`, `length` aliases to type stubs
16
+ - **CHANGELOG accuracy** - `constant_memory` entry now lists all 12 disabled features
17
+
18
+ ### Changed
19
+ - **Module split** - Split monolithic `lib.rs` into `convert.rs`, `parse.rs`, `features.rs`, `types.rs`
20
+ - **Deduplicated option extraction** - New `ExtractedOptions` struct reduces `convert_dataframe_to_xlsx` from 22 to 12 parameters
21
+ - **Merged format parsers** - `parse_header_format` and `parse_column_format` share a single `parse_format_dict` implementation
22
+ - **Dependencies** - Updated `pyo3` 0.27 -> 0.28, `rust_xlsxwriter` 0.92 -> 0.93
23
+ - **CI** - Added Python integration test job (83 tests with pandas, polars, openpyxl)
24
+ - **PEP 561** - Added `py.typed` marker file for type checker support
25
+
26
+ ### Tests
27
+ - Added `TestConditionalFormatting` (5 tests), `TestConstantMemoryMode` (3 tests), `TestRowHeights` (3 tests)
28
+ - Upgraded ~10 shallow tests with openpyxl content verification (column widths, table names, header formats, validations, comments)
29
+ - Total: 83 Python integration tests, 12 Rust unit tests
30
+
31
+ ## [0.10.1] - 2026-01-16
32
+
33
+ ### Changed
34
+ - **Benchmark suite reorganization** - Moved benchmarks to `benchmarks/` directory
35
+ - New `benchmarks/benchmark.py` - comprehensive comparison vs polars, pandas+openpyxl, pandas+xlsxwriter
36
+ - Moved `benchmark_parallel.py` to `benchmarks/`
37
+ - Removed obsolete `benchmark.py` (referenced old Rust binary)
38
+ - **README Performance section** - Updated with reproducible benchmark methodology
39
+ - Changed performance claim from "~25x faster" to "~6x faster" (accurate for typical workloads)
40
+ - Added disclaimer that results vary by system
41
+ - Linked to Benchmarking section for running your own tests
42
+
43
+ ## [0.10.0] - 2026-01-16
44
+
45
+ ### Added
46
+ - **Comments/Notes** - Add cell annotations with optional author
47
+ - Simple text: `comments={'A1': 'Note text'}`
48
+ - With author: `comments={'A1': {'text': 'Note', 'author': 'John'}}`
49
+ - Available in both `df_to_xlsx()` and `dfs_to_xlsx()` with per-sheet overrides
50
+ - **Data Validation** - Add dropdowns and constraints to columns
51
+ - List (dropdown): `validations={'Status': {'type': 'list', 'values': ['Open', 'Closed']}}`
52
+ - Whole number: `validations={'Score': {'type': 'whole_number', 'min': 0, 'max': 100}}`
53
+ - Decimal: `validations={'Price': {'type': 'decimal', 'min': 0.0, 'max': 999.99}}`
54
+ - Text length: `validations={'Code': {'type': 'text_length', 'min': 3, 'max': 10}}`
55
+ - Supports input/error messages: `input_title`, `input_message`, `error_title`, `error_message`
56
+ - Supports column patterns (like `column_formats`)
57
+ - Available in both `df_to_xlsx()` and `dfs_to_xlsx()` with per-sheet overrides
58
+ - **Rich Text** - Multiple formats within a single cell
59
+ - Format segments: `rich_text={'A1': [('Bold', {'bold': True}), ' normal text']}`
60
+ - Supports: `bold`, `italic`, `font_color`, `bg_color`, `font_size`, `underline`
61
+ - Mix formatted and plain text segments
62
+ - Available in both `df_to_xlsx()` and `dfs_to_xlsx()` with per-sheet overrides
63
+ - **Images** - Embed PNG, JPEG, GIF, BMP images in cells
64
+ - Simple path: `images={'B5': 'logo.png'}`
65
+ - With options: `images={'B5': {'path': 'logo.png', 'scale_width': 0.5, 'scale_height': 0.5}}`
66
+ - Options: `path`, `scale_width`, `scale_height`, `alt_text`
67
+ - Available in both `df_to_xlsx()` and `dfs_to_xlsx()` with per-sheet overrides
68
+
69
+ ### Notes
70
+ - All new features are disabled in `constant_memory` mode (they require random access)
71
+ - Data validation list values are limited to 255 total characters (Excel limitation)
72
+
8
73
  ## [0.9.0] - 2026-01-15
9
74
 
10
75
  ### Added
@@ -110,7 +175,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
110
175
  - `constant_memory` parameter - minimize RAM usage for very large files
111
176
  - Uses rust_xlsxwriter's streaming mode to flush rows to disk
112
177
  - Ideal for files with millions of rows
113
- - Note: Disables `table_style`, `freeze_panes`, `row_heights`, and `autofit`
178
+ - Note: Disables `table_style`, `freeze_panes`, `row_heights`, `autofit`, `conditional_formats`, `formula_columns`, `merged_ranges`, `hyperlinks`, `comments`, `validations`, `rich_text`, and `images`
114
179
  - Column widths still work in constant memory mode
115
180
  - Example: `xlsxturbo.df_to_xlsx(df, "big.xlsx", constant_memory=True)`
116
181
  - `column_widths` parameter - set custom column widths by index
@@ -171,6 +236,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
171
236
  - Support for custom sheet names
172
237
  - Verbose mode for progress reporting
173
238
 
239
+ [0.10.2]: https://github.com/tstone-1/xlsxturbo/releases/tag/v0.10.2
240
+ [0.10.1]: https://github.com/tstone-1/xlsxturbo/releases/tag/v0.10.1
241
+ [0.10.0]: https://github.com/tstone-1/xlsxturbo/releases/tag/v0.10.0
174
242
  [0.9.0]: https://github.com/tstone-1/xlsxturbo/releases/tag/v0.9.0
175
243
  [0.8.0]: https://github.com/tstone-1/xlsxturbo/releases/tag/v0.8.0
176
244
  [0.7.0]: https://github.com/tstone-1/xlsxturbo/releases/tag/v0.7.0
@@ -67,15 +67,6 @@ dependencies = [
67
67
  "windows-sys",
68
68
  ]
69
69
 
70
- [[package]]
71
- name = "arbitrary"
72
- version = "1.4.2"
73
- source = "registry+https://github.com/rust-lang/crates.io-index"
74
- checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
75
- dependencies = [
76
- "derive_arbitrary",
77
- ]
78
-
79
70
  [[package]]
80
71
  name = "autocfg"
81
72
  version = "1.5.0"
@@ -96,9 +87,9 @@ checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
96
87
 
97
88
  [[package]]
98
89
  name = "cc"
99
- version = "1.2.52"
90
+ version = "1.2.55"
100
91
  source = "registry+https://github.com/rust-lang/crates.io-index"
101
- checksum = "cd4932aefd12402b36c60956a4fe0035421f544799057659ff86f923657aada3"
92
+ checksum = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29"
102
93
  dependencies = [
103
94
  "find-msvc-tools",
104
95
  "shlex",
@@ -125,9 +116,9 @@ dependencies = [
125
116
 
126
117
  [[package]]
127
118
  name = "clap"
128
- version = "4.5.54"
119
+ version = "4.5.57"
129
120
  source = "registry+https://github.com/rust-lang/crates.io-index"
130
- checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394"
121
+ checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a"
131
122
  dependencies = [
132
123
  "clap_builder",
133
124
  "clap_derive",
@@ -135,9 +126,9 @@ dependencies = [
135
126
 
136
127
  [[package]]
137
128
  name = "clap_builder"
138
- version = "4.5.54"
129
+ version = "4.5.57"
139
130
  source = "registry+https://github.com/rust-lang/crates.io-index"
140
- checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00"
131
+ checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238"
141
132
  dependencies = [
142
133
  "anstream",
143
134
  "anstyle",
@@ -147,9 +138,9 @@ dependencies = [
147
138
 
148
139
  [[package]]
149
140
  name = "clap_derive"
150
- version = "4.5.49"
141
+ version = "4.5.55"
151
142
  source = "registry+https://github.com/rust-lang/crates.io-index"
152
- checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671"
143
+ checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5"
153
144
  dependencies = [
154
145
  "heck",
155
146
  "proc-macro2",
@@ -230,17 +221,6 @@ dependencies = [
230
221
  "memchr",
231
222
  ]
232
223
 
233
- [[package]]
234
- name = "derive_arbitrary"
235
- version = "1.4.2"
236
- source = "registry+https://github.com/rust-lang/crates.io-index"
237
- checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a"
238
- dependencies = [
239
- "proc-macro2",
240
- "quote",
241
- "syn",
242
- ]
243
-
244
224
  [[package]]
245
225
  name = "either"
246
226
  version = "1.15.0"
@@ -271,17 +251,16 @@ checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
271
251
 
272
252
  [[package]]
273
253
  name = "find-msvc-tools"
274
- version = "0.1.7"
254
+ version = "0.1.9"
275
255
  source = "registry+https://github.com/rust-lang/crates.io-index"
276
- checksum = "f449e6c6c08c865631d4890cfacf252b3d396c9bcc83adb6623cdb02a8336c41"
256
+ checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
277
257
 
278
258
  [[package]]
279
259
  name = "flate2"
280
- version = "1.1.8"
260
+ version = "1.1.9"
281
261
  source = "registry+https://github.com/rust-lang/crates.io-index"
282
- checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369"
262
+ checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
283
263
  dependencies = [
284
- "crc32fast",
285
264
  "miniz_oxide",
286
265
  "zlib-rs",
287
266
  ]
@@ -312,9 +291,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
312
291
 
313
292
  [[package]]
314
293
  name = "iana-time-zone"
315
- version = "0.1.64"
294
+ version = "0.1.65"
316
295
  source = "registry+https://github.com/rust-lang/crates.io-index"
317
- checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
296
+ checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
318
297
  dependencies = [
319
298
  "android_system_properties",
320
299
  "core-foundation-sys",
@@ -344,15 +323,6 @@ dependencies = [
344
323
  "hashbrown",
345
324
  ]
346
325
 
347
- [[package]]
348
- name = "indoc"
349
- version = "2.0.7"
350
- source = "registry+https://github.com/rust-lang/crates.io-index"
351
- checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
352
- dependencies = [
353
- "rustversion",
354
- ]
355
-
356
326
  [[package]]
357
327
  name = "is_terminal_polyfill"
358
328
  version = "1.70.2"
@@ -399,15 +369,6 @@ version = "2.7.6"
399
369
  source = "registry+https://github.com/rust-lang/crates.io-index"
400
370
  checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
401
371
 
402
- [[package]]
403
- name = "memoffset"
404
- version = "0.9.1"
405
- source = "registry+https://github.com/rust-lang/crates.io-index"
406
- checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
407
- dependencies = [
408
- "autocfg",
409
- ]
410
-
411
372
  [[package]]
412
373
  name = "miniz_oxide"
413
374
  version = "0.8.9"
@@ -441,50 +402,47 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
441
402
 
442
403
  [[package]]
443
404
  name = "portable-atomic"
444
- version = "1.13.0"
405
+ version = "1.13.1"
445
406
  source = "registry+https://github.com/rust-lang/crates.io-index"
446
- checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950"
407
+ checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
447
408
 
448
409
  [[package]]
449
410
  name = "proc-macro2"
450
- version = "1.0.105"
411
+ version = "1.0.106"
451
412
  source = "registry+https://github.com/rust-lang/crates.io-index"
452
- checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7"
413
+ checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
453
414
  dependencies = [
454
415
  "unicode-ident",
455
416
  ]
456
417
 
457
418
  [[package]]
458
419
  name = "pyo3"
459
- version = "0.27.2"
420
+ version = "0.28.0"
460
421
  source = "registry+https://github.com/rust-lang/crates.io-index"
461
- checksum = "ab53c047fcd1a1d2a8820fe84f05d6be69e9526be40cb03b73f86b6b03e6d87d"
422
+ checksum = "fcf3ccafdf54c050be48a3a086d372f77ba6615f5057211607cd30e5ac5cec6d"
462
423
  dependencies = [
463
- "indoc",
464
424
  "libc",
465
- "memoffset",
466
425
  "once_cell",
467
426
  "portable-atomic",
468
427
  "pyo3-build-config",
469
428
  "pyo3-ffi",
470
429
  "pyo3-macros",
471
- "unindent",
472
430
  ]
473
431
 
474
432
  [[package]]
475
433
  name = "pyo3-build-config"
476
- version = "0.27.2"
434
+ version = "0.28.0"
477
435
  source = "registry+https://github.com/rust-lang/crates.io-index"
478
- checksum = "b455933107de8642b4487ed26d912c2d899dec6114884214a0b3bb3be9261ea6"
436
+ checksum = "972720a441c91fd9c49f212a1d2d74c6e3803b231ebc8d66c51efbd7ccab11c8"
479
437
  dependencies = [
480
438
  "target-lexicon",
481
439
  ]
482
440
 
483
441
  [[package]]
484
442
  name = "pyo3-ffi"
485
- version = "0.27.2"
443
+ version = "0.28.0"
486
444
  source = "registry+https://github.com/rust-lang/crates.io-index"
487
- checksum = "1c85c9cbfaddf651b1221594209aed57e9e5cff63c4d11d1feead529b872a089"
445
+ checksum = "5994456d9dab8934d600d3867571b6410f24fbd6002570ad56356733eb54859b"
488
446
  dependencies = [
489
447
  "libc",
490
448
  "pyo3-build-config",
@@ -492,9 +450,9 @@ dependencies = [
492
450
 
493
451
  [[package]]
494
452
  name = "pyo3-macros"
495
- version = "0.27.2"
453
+ version = "0.28.0"
496
454
  source = "registry+https://github.com/rust-lang/crates.io-index"
497
- checksum = "0a5b10c9bf9888125d917fb4d2ca2d25c8df94c7ab5a52e13313a07e050a3b02"
455
+ checksum = "11ce9cc8d81b3c4969748807604d92b4eef363c5bb82b1a1bdb34ec6f1093a18"
498
456
  dependencies = [
499
457
  "proc-macro2",
500
458
  "pyo3-macros-backend",
@@ -504,9 +462,9 @@ dependencies = [
504
462
 
505
463
  [[package]]
506
464
  name = "pyo3-macros-backend"
507
- version = "0.27.2"
465
+ version = "0.28.0"
508
466
  source = "registry+https://github.com/rust-lang/crates.io-index"
509
- checksum = "03b51720d314836e53327f5871d4c0cfb4fb37cc2c4a11cc71907a86342c40f9"
467
+ checksum = "eaf4b60036a154d23282679b658e3cc7d88d3b8c9a40b43824785f232d2e1b98"
510
468
  dependencies = [
511
469
  "heck",
512
470
  "proc-macro2",
@@ -517,9 +475,9 @@ dependencies = [
517
475
 
518
476
  [[package]]
519
477
  name = "quote"
520
- version = "1.0.43"
478
+ version = "1.0.44"
521
479
  source = "registry+https://github.com/rust-lang/crates.io-index"
522
- checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a"
480
+ checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4"
523
481
  dependencies = [
524
482
  "proc-macro2",
525
483
  ]
@@ -552,9 +510,9 @@ dependencies = [
552
510
 
553
511
  [[package]]
554
512
  name = "rust_xlsxwriter"
555
- version = "0.92.3"
513
+ version = "0.93.0"
556
514
  source = "registry+https://github.com/rust-lang/crates.io-index"
557
- checksum = "0733a44f344e900c4221f33a16aa92a59e3e7c7ad37d39a1c753afecb1f2bd02"
515
+ checksum = "84205e093885c6b4e2d93e225a148df2e7fe67a668c27e3322e56e0d93721848"
558
516
  dependencies = [
559
517
  "tempfile",
560
518
  "zip",
@@ -654,16 +612,16 @@ dependencies = [
654
612
  ]
655
613
 
656
614
  [[package]]
657
- name = "unicode-ident"
658
- version = "1.0.22"
615
+ name = "typed-path"
616
+ version = "0.12.2"
659
617
  source = "registry+https://github.com/rust-lang/crates.io-index"
660
- checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
618
+ checksum = "3015e6ce46d5ad8751e4a772543a30c7511468070e98e64e20165f8f81155b64"
661
619
 
662
620
  [[package]]
663
- name = "unindent"
664
- version = "0.2.4"
621
+ name = "unicode-ident"
622
+ version = "1.0.22"
665
623
  source = "registry+https://github.com/rust-lang/crates.io-index"
666
- checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
624
+ checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
667
625
 
668
626
  [[package]]
669
627
  name = "utf8parse"
@@ -673,9 +631,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
673
631
 
674
632
  [[package]]
675
633
  name = "wasip2"
676
- version = "1.0.1+wasi-0.2.4"
634
+ version = "1.0.2+wasi-0.2.9"
677
635
  source = "registry+https://github.com/rust-lang/crates.io-index"
678
- checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
636
+ checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
679
637
  dependencies = [
680
638
  "wit-bindgen",
681
639
  ]
@@ -795,13 +753,13 @@ dependencies = [
795
753
 
796
754
  [[package]]
797
755
  name = "wit-bindgen"
798
- version = "0.46.0"
756
+ version = "0.51.0"
799
757
  source = "registry+https://github.com/rust-lang/crates.io-index"
800
- checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
758
+ checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
801
759
 
802
760
  [[package]]
803
761
  name = "xlsxturbo"
804
- version = "0.9.0"
762
+ version = "0.10.2"
805
763
  dependencies = [
806
764
  "chrono",
807
765
  "clap",
@@ -814,23 +772,23 @@ dependencies = [
814
772
 
815
773
  [[package]]
816
774
  name = "zip"
817
- version = "6.0.0"
775
+ version = "7.4.0"
818
776
  source = "registry+https://github.com/rust-lang/crates.io-index"
819
- checksum = "eb2a05c7c36fde6c09b08576c9f7fb4cda705990f73b58fe011abf7dfb24168b"
777
+ checksum = "cc12baa6db2b15a140161ce53d72209dacea594230798c24774139b54ecaa980"
820
778
  dependencies = [
821
- "arbitrary",
822
779
  "crc32fast",
823
780
  "flate2",
824
781
  "indexmap",
825
782
  "memchr",
783
+ "typed-path",
826
784
  "zopfli",
827
785
  ]
828
786
 
829
787
  [[package]]
830
788
  name = "zlib-rs"
831
- version = "0.5.5"
789
+ version = "0.6.0"
832
790
  source = "registry+https://github.com/rust-lang/crates.io-index"
833
- checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3"
791
+ checksum = "a7948af682ccbc3342b6e9420e8c51c1fe5d7bf7756002b4a3c6cabfe96a7e3c"
834
792
 
835
793
  [[package]]
836
794
  name = "zopfli"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "xlsxturbo"
3
- version = "0.9.0"
3
+ version = "0.10.2"
4
4
  edition = "2021"
5
5
  description = "High-performance Excel writer with automatic type detection (pandas, polars, CSV)"
6
6
  license = "MIT"
@@ -18,10 +18,10 @@ name = "xlsxturbo"
18
18
  path = "src/main.rs"
19
19
 
20
20
  [dependencies]
21
- rust_xlsxwriter = { version = "0.92", features = ["constant_memory"] }
21
+ rust_xlsxwriter = { version = "0.93", features = ["constant_memory"] }
22
22
  csv = "1.3"
23
23
  clap = { version = "4.5", features = ["derive"] }
24
- pyo3 = { version = "0.27", features = ["extension-module", "abi3-py38"] }
24
+ pyo3 = { version = "0.28", features = ["extension-module", "abi3-py38"] }
25
25
  chrono = "0.4"
26
26
  rayon = "1.10"
27
27
  indexmap = "2.7"