python-dateutil-rust 2.9.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 (65) hide show
  1. python_dateutil_rust-2.9.0/.github/workflows/release.yml +191 -0
  2. python_dateutil_rust-2.9.0/.gitignore +9 -0
  3. python_dateutil_rust-2.9.0/Cargo.lock +251 -0
  4. python_dateutil_rust-2.9.0/Cargo.toml +21 -0
  5. python_dateutil_rust-2.9.0/LICENSE +54 -0
  6. python_dateutil_rust-2.9.0/NOTICE +21 -0
  7. python_dateutil_rust-2.9.0/PKG-INFO +45 -0
  8. python_dateutil_rust-2.9.0/README.md +25 -0
  9. python_dateutil_rust-2.9.0/bench_parser/MANIFEST.sha256 +6 -0
  10. python_dateutil_rust-2.9.0/bench_parser/WORKLOAD.md +87 -0
  11. python_dateutil_rust-2.9.0/bench_parser/bench.py +521 -0
  12. python_dateutil_rust-2.9.0/bench_parser/corpus_boundary.txt +21 -0
  13. python_dateutil_rust-2.9.0/bench_parser/corpus_clean.txt +11 -0
  14. python_dateutil_rust-2.9.0/bench_parser/corpus_edge.txt +20 -0
  15. python_dateutil_rust-2.9.0/bench_parser/corpus_large.txt +2003 -0
  16. python_dateutil_rust-2.9.0/bench_parser/corpus_noisy.txt +12 -0
  17. python_dateutil_rust-2.9.0/dateutil/__init__.py +29 -0
  18. python_dateutil_rust-2.9.0/dateutil-core/Cargo.toml +13 -0
  19. python_dateutil_rust-2.9.0/dateutil-core/src/civil.rs +184 -0
  20. python_dateutil_rust-2.9.0/dateutil-core/src/easter.rs +57 -0
  21. python_dateutil_rust-2.9.0/dateutil-core/src/ical.rs +232 -0
  22. python_dateutil_rust-2.9.0/dateutil-core/src/lib.rs +14 -0
  23. python_dateutil_rust-2.9.0/dateutil-core/src/parser/dec.rs +103 -0
  24. python_dateutil_rust-2.9.0/dateutil-core/src/parser/isoparser.rs +408 -0
  25. python_dateutil_rust-2.9.0/dateutil-core/src/parser/lex.rs +749 -0
  26. python_dateutil_rust-2.9.0/dateutil-core/src/parser/mod.rs +249 -0
  27. python_dateutil_rust-2.9.0/dateutil-core/src/parser/parse.rs +476 -0
  28. python_dateutil_rust-2.9.0/dateutil-core/src/parser/tables.rs +125 -0
  29. python_dateutil_rust-2.9.0/dateutil-core/src/parser/ymd.rs +260 -0
  30. python_dateutil_rust-2.9.0/dateutil-core/src/relativedelta.rs +202 -0
  31. python_dateutil_rust-2.9.0/dateutil-core/src/rrule.rs +800 -0
  32. python_dateutil_rust-2.9.0/dateutil-core/src/tz.rs +283 -0
  33. python_dateutil_rust-2.9.0/dateutil-core/src/tzfile.rs +334 -0
  34. python_dateutil_rust-2.9.0/dateutil-core/testdata/est5edt.tz +0 -0
  35. python_dateutil_rust-2.9.0/dateutil-core/testdata/new_york.tz +0 -0
  36. python_dateutil_rust-2.9.0/dateutil-core/tests/parser_iso_vectors.rs +109 -0
  37. python_dateutil_rust-2.9.0/dateutil-core/tests/parser_vectors.rs +315 -0
  38. python_dateutil_rust-2.9.0/pyproject.toml +40 -0
  39. python_dateutil_rust-2.9.0/release.toml +60 -0
  40. python_dateutil_rust-2.9.0/src/dateutil/__init__.py +24 -0
  41. python_dateutil_rust-2.9.0/src/dateutil/_common.py +43 -0
  42. python_dateutil_rust-2.9.0/src/dateutil/easter.py +89 -0
  43. python_dateutil_rust-2.9.0/src/dateutil/parser/__init__.py +64 -0
  44. python_dateutil_rust-2.9.0/src/dateutil/parser/_parser.py +66 -0
  45. python_dateutil_rust-2.9.0/src/dateutil/parser/_parser_py.py +1609 -0
  46. python_dateutil_rust-2.9.0/src/dateutil/parser/isoparser.py +15 -0
  47. python_dateutil_rust-2.9.0/src/dateutil/relativedelta.py +12 -0
  48. python_dateutil_rust-2.9.0/src/dateutil/rrule.py +38 -0
  49. python_dateutil_rust-2.9.0/src/dateutil/tz/__init__.py +12 -0
  50. python_dateutil_rust-2.9.0/src/dateutil/tz/_common.py +421 -0
  51. python_dateutil_rust-2.9.0/src/dateutil/tz/_factories.py +80 -0
  52. python_dateutil_rust-2.9.0/src/dateutil/tz/tz.py +657 -0
  53. python_dateutil_rust-2.9.0/src/dateutil/tz/win.py +370 -0
  54. python_dateutil_rust-2.9.0/src/dateutil/tzwin.py +2 -0
  55. python_dateutil_rust-2.9.0/src/dateutil/utils.py +71 -0
  56. python_dateutil_rust-2.9.0/src/dateutil/zoneinfo/__init__.py +167 -0
  57. python_dateutil_rust-2.9.0/src/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz +0 -0
  58. python_dateutil_rust-2.9.0/src/dateutil/zoneinfo/rebuild.py +75 -0
  59. python_dateutil_rust-2.9.0/src/isoparser_mod.rs +237 -0
  60. python_dateutil_rust-2.9.0/src/lib.rs +58 -0
  61. python_dateutil_rust-2.9.0/src/parser_mod.rs +1625 -0
  62. python_dateutil_rust-2.9.0/src/relativedelta_mod.rs +1039 -0
  63. python_dateutil_rust-2.9.0/src/rrule_mod.rs +3531 -0
  64. python_dateutil_rust-2.9.0/src/tz_mod.rs +2164 -0
  65. python_dateutil_rust-2.9.0/src/util.rs +339 -0
@@ -0,0 +1,191 @@
1
+ # Release workflow for python-dateutil-rust (generated by `rustsmith release-prep`).
2
+ #
3
+ # DO NOT hand-edit here: regenerate from `release.toml` so the workflow stays
4
+ # in sync with the release configuration. Publishing order is fixed:
5
+ # TestPyPI first (automatic), then manual dispatch publishes the Rust core
6
+ # to crates.io FIRST (the binding depends on it by version) and the SAME
7
+ # tested artifacts to production PyPI, after the TestPyPI install check.
8
+ #
9
+ # Trust model: OpenID Connect trusted publishing on both registries. No
10
+ # long-lived tokens live in secrets. First-time setup (accounts, publisher
11
+ # identities, environments) is in TRUSTED_PUBLISHING_SETUP.md next to this file.
12
+
13
+ name: release
14
+
15
+ on:
16
+ push:
17
+ tags: ["v*"]
18
+ workflow_dispatch:
19
+ inputs:
20
+ publish_production:
21
+ description: "Publish verified artifacts to PyPI and the Rust core to crates.io"
22
+ required: true
23
+ default: "false"
24
+
25
+ permissions:
26
+ contents: read
27
+
28
+ jobs:
29
+ build:
30
+ name: build wheels (${{ matrix.os }} py${{ matrix.python-version }})
31
+ runs-on: ${{ matrix.os }}
32
+ strategy:
33
+ fail-fast: true
34
+ matrix:
35
+ os: ['ubuntu-22.04', 'macos-14', 'windows-2022']
36
+ python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
37
+ steps:
38
+ - uses: actions/checkout@v4
39
+ - uses: actions/setup-python@v5
40
+ with:
41
+ python-version: ${{ matrix.python-version }}
42
+ - uses: dtolnay/rust-toolchain@stable
43
+ - name: build wheel
44
+ uses: PyO3/maturin-action@v1
45
+ with:
46
+ command: build
47
+ args: --release --out dist
48
+ - name: core tests (same core Rust consumers use)
49
+ run: cargo test --release --manifest-path dateutil-core/Cargo.toml
50
+ if: matrix.os == 'ubuntu-22.04' && matrix.python-version == '3.9'
51
+ - name: upload wheel (exact file the publish jobs reuse)
52
+ uses: actions/upload-artifact@v4
53
+ with:
54
+ name: wheels-${{ matrix.os }}-py${{ matrix.python-version }}
55
+ path: dist/*.whl
56
+ if-no-files-found: error
57
+
58
+ sdist:
59
+ name: build sdist (includes the Rust core)
60
+ runs-on: ubuntu-22.04
61
+ steps:
62
+ - uses: actions/checkout@v4
63
+ - uses: actions/setup-python@v5
64
+ with:
65
+ python-version: "3.9"
66
+ - name: build sdist
67
+ uses: PyO3/maturin-action@v1
68
+ with:
69
+ command: sdist
70
+ args: --out dist
71
+ - name: sdist carries the core (rebuild proof runs in release-prep)
72
+ run: tar tzf dist/*.tar.gz | grep -q 'dateutil-core/Cargo.toml'
73
+ - uses: actions/upload-artifact@v4
74
+ with:
75
+ name: sdist
76
+ path: dist/*.tar.gz
77
+ if-no-files-found: error
78
+
79
+ test-wheels:
80
+ name: test wheel (fresh install, no network build)
81
+ needs: [build]
82
+ runs-on: ubuntu-22.04
83
+ steps:
84
+ - uses: actions/download-artifact@v4
85
+ with:
86
+ # Reference cell only: dist/ then holds exactly one wheel, so the
87
+ # install below cannot mix wheels from other OS/Python cells.
88
+ name: wheels-ubuntu-22.04-py3.9
89
+ path: dist
90
+ - uses: actions/setup-python@v5
91
+ with:
92
+ python-version: "3.9"
93
+ - name: install the reference wheel from disk (same file that ships)
94
+ run: pip install dist/*.whl
95
+ - name: smoke (installed package, pinned vectors)
96
+ run: |
97
+ python - <<'PYEOF'
98
+ import dateutil
99
+ assert dateutil.parser.parse('2020-03-01T12:30:00').isoformat() == '2020-03-01T12:30:00', "smoke check failed"
100
+ assert dateutil.rrule.rrule(dateutil.rrule.DAILY, count=5, dtstart=dateutil.parser.parse('2020-01-01')).count() == 5, "smoke check failed"
101
+ PYEOF
102
+ - name: upload tested wheels (publish consumes THESE files)
103
+ uses: actions/upload-artifact@v4
104
+ with:
105
+ name: tested-dist
106
+ path: dist/*
107
+
108
+ publish-testpypi:
109
+ name: publish to TestPyPI
110
+ needs: [test-wheels, sdist]
111
+ runs-on: ubuntu-22.04
112
+ environment: testpypi
113
+ permissions:
114
+ id-token: write
115
+ steps:
116
+ - uses: actions/download-artifact@v4
117
+ with:
118
+ name: tested-dist
119
+ path: dist
120
+ - uses: actions/download-artifact@v4
121
+ with:
122
+ name: sdist
123
+ path: dist
124
+ - name: publish the tested artifacts to TestPyPI (no rebuild)
125
+ uses: pypa/gh-action-pypi-publish@release/v1
126
+ with:
127
+ repository-url: https://test.pypi.org/legacy/
128
+ packages-dir: dist/
129
+ verify-metadata: true
130
+ skip-existing: true
131
+
132
+ verify-testpypi:
133
+ name: verify install from TestPyPI
134
+ needs: [publish-testpypi]
135
+ runs-on: ubuntu-22.04
136
+ steps:
137
+ - uses: actions/setup-python@v5
138
+ with:
139
+ python-version: "3.9"
140
+ - name: install from TestPyPI (proves the index, not the local file)
141
+ run: pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ python-dateutil-rust==2.9.0
142
+ - name: smoke (index-installed package)
143
+ run: |
144
+ python - <<'PYEOF'
145
+ import dateutil
146
+ assert dateutil.parser.parse('2020-03-01T12:30:00').isoformat() == '2020-03-01T12:30:00', "smoke check failed"
147
+ assert dateutil.rrule.rrule(dateutil.rrule.DAILY, count=5, dtstart=dateutil.parser.parse('2020-01-01')).count() == 5, "smoke check failed"
148
+ PYEOF
149
+
150
+ release:
151
+ name: production release (crates.io core first, then PyPI, manual only)
152
+ needs: [verify-testpypi]
153
+ if: github.event_name == 'workflow_dispatch' && inputs.publish_production == 'true'
154
+ runs-on: ubuntu-22.04
155
+ environment: pypi
156
+ permissions:
157
+ id-token: write
158
+ steps:
159
+ - uses: actions/checkout@v4
160
+ - uses: actions/download-artifact@v4
161
+ with:
162
+ name: tested-dist
163
+ path: dist
164
+ - uses: actions/download-artifact@v4
165
+ with:
166
+ name: sdist
167
+ path: dist
168
+ - uses: dtolnay/rust-toolchain@stable
169
+ - name: authenticate to crates.io (OIDC, no stored token)
170
+ id: auth
171
+ uses: rust-lang/crates-io-auth-action@v1
172
+ - name: publish the Rust core to crates.io (core first: the binding depends on it)
173
+ run: cargo publish --manifest-path dateutil-core/Cargo.toml
174
+ env:
175
+ CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}
176
+ - name: publish the SAME tested artifacts to PyPI (no rebuild)
177
+ uses: pypa/gh-action-pypi-publish@release/v1
178
+ with:
179
+ packages-dir: dist/
180
+ verify-metadata: true
181
+ skip-existing: false
182
+ - name: upload release evidence (what release-prep verified plus the state seed)
183
+ # Per-registry recording stays manual via `release-record` (see
184
+ # TRUSTED_PUBLISHING_SETUP.md section 6); this artifact is the audit trail.
185
+ uses: actions/upload-artifact@v4
186
+ with:
187
+ name: release-evidence
188
+ path: |
189
+ verification.json
190
+ release-state.json
191
+ if-no-files-found: warn
@@ -0,0 +1,9 @@
1
+ worktree-*
2
+ .bundles/
3
+ .grade-venv/
4
+ orig_src/
5
+ __pycache__/
6
+ target/
7
+ *.so
8
+ build/
9
+ rust/*/target/
@@ -0,0 +1,251 @@
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 4
4
+
5
+ [[package]]
6
+ name = "autocfg"
7
+ version = "1.5.1"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
10
+
11
+ [[package]]
12
+ name = "bitflags"
13
+ version = "2.13.2"
14
+ source = "registry+https://github.com/rust-lang/crates.io-index"
15
+ checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06"
16
+
17
+ [[package]]
18
+ name = "cfg-if"
19
+ version = "1.0.5"
20
+ source = "registry+https://github.com/rust-lang/crates.io-index"
21
+ checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600"
22
+
23
+ [[package]]
24
+ name = "dateutil-core"
25
+ version = "2.9.0"
26
+
27
+ [[package]]
28
+ name = "heck"
29
+ version = "0.5.0"
30
+ source = "registry+https://github.com/rust-lang/crates.io-index"
31
+ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
32
+
33
+ [[package]]
34
+ name = "indoc"
35
+ version = "2.0.7"
36
+ source = "registry+https://github.com/rust-lang/crates.io-index"
37
+ checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
38
+ dependencies = [
39
+ "rustversion",
40
+ ]
41
+
42
+ [[package]]
43
+ name = "libc"
44
+ version = "0.2.190"
45
+ source = "registry+https://github.com/rust-lang/crates.io-index"
46
+ checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78"
47
+
48
+ [[package]]
49
+ name = "lock_api"
50
+ version = "0.4.14"
51
+ source = "registry+https://github.com/rust-lang/crates.io-index"
52
+ checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
53
+ dependencies = [
54
+ "scopeguard",
55
+ ]
56
+
57
+ [[package]]
58
+ name = "memoffset"
59
+ version = "0.9.1"
60
+ source = "registry+https://github.com/rust-lang/crates.io-index"
61
+ checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
62
+ dependencies = [
63
+ "autocfg",
64
+ ]
65
+
66
+ [[package]]
67
+ name = "once_cell"
68
+ version = "1.21.4"
69
+ source = "registry+https://github.com/rust-lang/crates.io-index"
70
+ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
71
+
72
+ [[package]]
73
+ name = "parking_lot"
74
+ version = "0.12.5"
75
+ source = "registry+https://github.com/rust-lang/crates.io-index"
76
+ checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
77
+ dependencies = [
78
+ "lock_api",
79
+ "parking_lot_core",
80
+ ]
81
+
82
+ [[package]]
83
+ name = "parking_lot_core"
84
+ version = "0.9.12"
85
+ source = "registry+https://github.com/rust-lang/crates.io-index"
86
+ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
87
+ dependencies = [
88
+ "cfg-if",
89
+ "libc",
90
+ "redox_syscall",
91
+ "smallvec",
92
+ "windows-link",
93
+ ]
94
+
95
+ [[package]]
96
+ name = "portable-atomic"
97
+ version = "1.15.0"
98
+ source = "registry+https://github.com/rust-lang/crates.io-index"
99
+ checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85"
100
+
101
+ [[package]]
102
+ name = "proc-macro2"
103
+ version = "1.0.107"
104
+ source = "registry+https://github.com/rust-lang/crates.io-index"
105
+ checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
106
+ dependencies = [
107
+ "unicode-ident",
108
+ ]
109
+
110
+ [[package]]
111
+ name = "pyo3"
112
+ version = "0.23.5"
113
+ source = "registry+https://github.com/rust-lang/crates.io-index"
114
+ checksum = "7778bffd85cf38175ac1f545509665d0b9b92a198ca7941f131f85f7a4f9a872"
115
+ dependencies = [
116
+ "cfg-if",
117
+ "indoc",
118
+ "libc",
119
+ "memoffset",
120
+ "once_cell",
121
+ "portable-atomic",
122
+ "pyo3-build-config",
123
+ "pyo3-ffi",
124
+ "pyo3-macros",
125
+ "unindent",
126
+ ]
127
+
128
+ [[package]]
129
+ name = "pyo3-build-config"
130
+ version = "0.23.5"
131
+ source = "registry+https://github.com/rust-lang/crates.io-index"
132
+ checksum = "94f6cbe86ef3bf18998d9df6e0f3fc1050a8c5efa409bf712e661a4366e010fb"
133
+ dependencies = [
134
+ "once_cell",
135
+ "target-lexicon",
136
+ ]
137
+
138
+ [[package]]
139
+ name = "pyo3-ffi"
140
+ version = "0.23.5"
141
+ source = "registry+https://github.com/rust-lang/crates.io-index"
142
+ checksum = "e9f1b4c431c0bb1c8fb0a338709859eed0d030ff6daa34368d3b152a63dfdd8d"
143
+ dependencies = [
144
+ "libc",
145
+ "pyo3-build-config",
146
+ ]
147
+
148
+ [[package]]
149
+ name = "pyo3-macros"
150
+ version = "0.23.5"
151
+ source = "registry+https://github.com/rust-lang/crates.io-index"
152
+ checksum = "fbc2201328f63c4710f68abdf653c89d8dbc2858b88c5d88b0ff38a75288a9da"
153
+ dependencies = [
154
+ "proc-macro2",
155
+ "pyo3-macros-backend",
156
+ "quote",
157
+ "syn",
158
+ ]
159
+
160
+ [[package]]
161
+ name = "pyo3-macros-backend"
162
+ version = "0.23.5"
163
+ source = "registry+https://github.com/rust-lang/crates.io-index"
164
+ checksum = "fca6726ad0f3da9c9de093d6f116a93c1a38e417ed73bf138472cf4064f72028"
165
+ dependencies = [
166
+ "heck",
167
+ "proc-macro2",
168
+ "pyo3-build-config",
169
+ "quote",
170
+ "syn",
171
+ ]
172
+
173
+ [[package]]
174
+ name = "python-dateutil-rust"
175
+ version = "2.9.0"
176
+ dependencies = [
177
+ "dateutil-core",
178
+ "parking_lot",
179
+ "pyo3",
180
+ ]
181
+
182
+ [[package]]
183
+ name = "quote"
184
+ version = "1.0.47"
185
+ source = "registry+https://github.com/rust-lang/crates.io-index"
186
+ checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
187
+ dependencies = [
188
+ "proc-macro2",
189
+ ]
190
+
191
+ [[package]]
192
+ name = "redox_syscall"
193
+ version = "0.5.18"
194
+ source = "registry+https://github.com/rust-lang/crates.io-index"
195
+ checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
196
+ dependencies = [
197
+ "bitflags",
198
+ ]
199
+
200
+ [[package]]
201
+ name = "rustversion"
202
+ version = "1.0.23"
203
+ source = "registry+https://github.com/rust-lang/crates.io-index"
204
+ checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
205
+
206
+ [[package]]
207
+ name = "scopeguard"
208
+ version = "1.2.0"
209
+ source = "registry+https://github.com/rust-lang/crates.io-index"
210
+ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
211
+
212
+ [[package]]
213
+ name = "smallvec"
214
+ version = "1.16.2"
215
+ source = "registry+https://github.com/rust-lang/crates.io-index"
216
+ checksum = "f9395f0f0eee849a9b707b2f06bb92a6a422090e2123bb2ef8e87a0e61892a8e"
217
+
218
+ [[package]]
219
+ name = "syn"
220
+ version = "2.0.119"
221
+ source = "registry+https://github.com/rust-lang/crates.io-index"
222
+ checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
223
+ dependencies = [
224
+ "proc-macro2",
225
+ "quote",
226
+ "unicode-ident",
227
+ ]
228
+
229
+ [[package]]
230
+ name = "target-lexicon"
231
+ version = "0.12.16"
232
+ source = "registry+https://github.com/rust-lang/crates.io-index"
233
+ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
234
+
235
+ [[package]]
236
+ name = "unicode-ident"
237
+ version = "1.0.26"
238
+ source = "registry+https://github.com/rust-lang/crates.io-index"
239
+ checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954"
240
+
241
+ [[package]]
242
+ name = "unindent"
243
+ version = "0.2.4"
244
+ source = "registry+https://github.com/rust-lang/crates.io-index"
245
+ checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
246
+
247
+ [[package]]
248
+ name = "windows-link"
249
+ version = "0.2.1"
250
+ source = "registry+https://github.com/rust-lang/crates.io-index"
251
+ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
@@ -0,0 +1,21 @@
1
+ [package]
2
+ name = "python-dateutil-rust"
3
+ version = "2.9.0"
4
+ edition = "2021"
5
+ description = "Pure-Rust dateutil engine (rrule/relativedelta/tz/parser/isoparser) with Python bindings (rustsmith Stage-1 mirror of dateutil/dateutil)"
6
+ license = "Apache-2.0"
7
+ repository = "https://github.com/John-Cusack/dateutil-rust"
8
+ homepage = "https://github.com/dateutil/dateutil"
9
+ readme = "README.md"
10
+
11
+ [lib]
12
+ name = "_dateutil"
13
+ crate-type = ["cdylib"]
14
+
15
+ [dependencies]
16
+ dateutil-core = { path = "dateutil-core", version = "2.9.0" }
17
+ pyo3 = { version = "0.23", features = ["macros"] }
18
+ parking_lot = "0.12"
19
+
20
+ [workspace]
21
+ members = ["dateutil-core"]
@@ -0,0 +1,54 @@
1
+ Copyright 2017- Paul Ganssle <paul@ganssle.io>
2
+ Copyright 2017- dateutil contributors (see AUTHORS file)
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+
16
+ The above license applies to all contributions after 2017-12-01, as well as
17
+ all contributions that have been re-licensed (see AUTHORS file for the list of
18
+ contributors who have re-licensed their code).
19
+ --------------------------------------------------------------------------------
20
+ dateutil - Extensions to the standard Python datetime module.
21
+
22
+ Copyright (c) 2003-2011 - Gustavo Niemeyer <gustavo@niemeyer.net>
23
+ Copyright (c) 2012-2014 - Tomi Pieviläinen <tomi.pievilainen@iki.fi>
24
+ Copyright (c) 2014-2016 - Yaron de Leeuw <me@jarondl.net>
25
+ Copyright (c) 2015- - Paul Ganssle <paul@ganssle.io>
26
+ Copyright (c) 2015- - dateutil contributors (see AUTHORS file)
27
+
28
+ All rights reserved.
29
+
30
+ Redistribution and use in source and binary forms, with or without
31
+ modification, are permitted provided that the following conditions are met:
32
+
33
+ * Redistributions of source code must retain the above copyright notice,
34
+ this list of conditions and the following disclaimer.
35
+ * Redistributions in binary form must reproduce the above copyright notice,
36
+ this list of conditions and the following disclaimer in the documentation
37
+ and/or other materials provided with the distribution.
38
+ * Neither the name of the copyright holder nor the names of its
39
+ contributors may be used to endorse or promote products derived from
40
+ this software without specific prior written permission.
41
+
42
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
43
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
44
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
45
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
46
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
47
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
48
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
49
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
50
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
51
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
52
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
53
+
54
+ The above BSD License Applies to all code, even that also covered by Apache 2.0.
@@ -0,0 +1,21 @@
1
+ dateutil-rust: Rust port of dateutil/dateutil
2
+ ============================================
3
+
4
+ This directory holds the rustsmith Stage-1 mirror of
5
+ https://github.com/dateutil/dateutil (rrule, relativedelta, tz, and the
6
+ fuzzy/ISO parser, all backed by the Rust `dateutil._dateutil` engine).
7
+
8
+ * Upstream authors: dateutil contributors
9
+ * Upstream license: Apache-2.0 (dual-licensed Apache-2.0/BSD; the engine
10
+ files carry the Apache-2.0 SPDX tag).
11
+ * This port: behavior-identical, same public API
12
+ (`dateutil._dateutil` extension module plus the
13
+ `src/dateutil/{rrule,relativedelta,tz/tz,parser/_parser}.py` shims),
14
+ published as the `python-dateutil-rust` distribution on PyPI
15
+ (import name unchanged: `import dateutil`) with reusable core
16
+ crate `dateutil-core` on crates.io.
17
+
18
+ Provenance: every artifact preserves the upstream license header and this
19
+ attribution (provenance gate). The vendored
20
+ `src/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz` is the release timezone
21
+ database from the python-dateutil 2.9.0.post0 sdist (package_data).
@@ -0,0 +1,45 @@
1
+ Metadata-Version: 2.4
2
+ Name: python-dateutil-rust
3
+ Version: 2.9.0
4
+ Classifier: Programming Language :: Rust
5
+ Classifier: Programming Language :: Python :: Implementation :: CPython
6
+ Classifier: License :: OSI Approved :: Apache Software License
7
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
8
+ License-File: LICENSE
9
+ License-File: NOTICE
10
+ Summary: Pure-Rust dateutil engine: rrule, relativedelta, tz and parser/isoparser with the dateutil interface (rustsmith Stage-1 mirror of dateutil/dateutil)
11
+ Keywords: dateutil,rrule,timezone,rust
12
+ Home-Page: https://github.com/dateutil/dateutil
13
+ Author: dateutil contributors
14
+ License-Expression: Apache-2.0
15
+ Requires-Python: >=3.9, <4.0
16
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
17
+ Project-URL: Homepage, https://github.com/John-Cusack/dateutil-rust
18
+ Project-URL: Upstream, https://github.com/dateutil/dateutil
19
+
20
+ # python-dateutil-rust
21
+
22
+ Pure-Rust port of the `python-dateutil` engine (`rrule`, `relativedelta`,
23
+ `tz`) plus the whole `parser`/`isoparser` path, with Python bindings
24
+ preserving the `dateutil` interface.
25
+ rustsmith Stage-1 mirror of [dateutil/dateutil](https://github.com/dateutil/dateutil)
26
+ (Apache-2.0), covering the recurrence/calendar/timezone engine and the
27
+ fuzzy/strict/ISO parse path (ADR-015 supersedes the ADR-013 parser
28
+ exclusion).
29
+
30
+ Layout: reusable core crate (`dateutil-core`, no Python dependency) plus a
31
+ thin PyO3 binding (`dateutil._dateutil`); `src/dateutil/{rrule,relativedelta,tz/tz}.py`
32
+ and `src/dateutil/parser/{_parser,isoparser}.py` are re-export shims over
33
+ the extension (`_parser_py.py` alongside is the verbatim upstream module
34
+ kept for the `_tzparser` lineage). Custom `parserinfo` subclasses and
35
+ `tzinfos` callables stay dynamic via the `Info`-trait/Python-callback seam
36
+ documented in `src/parser_mod.rs`. Two-track bench corpora + harness live
37
+ in `bench_parser/` (manifest hashes frozen before measurement; workload
38
+ contract and repro command in `bench_parser/WORKLOAD.md`).
39
+
40
+ <!-- RUSTSMITH-PERF:BEGIN (generated by `rustsmith release-prep`; do not hand-edit) -->
41
+ ## Measured performance
42
+ No accepted optimizations yet (mirror baseline); re-run `release-prep` after `run --stage optimize` merges winners.
43
+ Artifact hashes are intentionally absent here; see `release-manifest.json`.
44
+ <!-- RUSTSMITH-PERF:END -->
45
+
@@ -0,0 +1,25 @@
1
+ # python-dateutil-rust
2
+
3
+ Pure-Rust port of the `python-dateutil` engine (`rrule`, `relativedelta`,
4
+ `tz`) plus the whole `parser`/`isoparser` path, with Python bindings
5
+ preserving the `dateutil` interface.
6
+ rustsmith Stage-1 mirror of [dateutil/dateutil](https://github.com/dateutil/dateutil)
7
+ (Apache-2.0), covering the recurrence/calendar/timezone engine and the
8
+ fuzzy/strict/ISO parse path (ADR-015 supersedes the ADR-013 parser
9
+ exclusion).
10
+
11
+ Layout: reusable core crate (`dateutil-core`, no Python dependency) plus a
12
+ thin PyO3 binding (`dateutil._dateutil`); `src/dateutil/{rrule,relativedelta,tz/tz}.py`
13
+ and `src/dateutil/parser/{_parser,isoparser}.py` are re-export shims over
14
+ the extension (`_parser_py.py` alongside is the verbatim upstream module
15
+ kept for the `_tzparser` lineage). Custom `parserinfo` subclasses and
16
+ `tzinfos` callables stay dynamic via the `Info`-trait/Python-callback seam
17
+ documented in `src/parser_mod.rs`. Two-track bench corpora + harness live
18
+ in `bench_parser/` (manifest hashes frozen before measurement; workload
19
+ contract and repro command in `bench_parser/WORKLOAD.md`).
20
+
21
+ <!-- RUSTSMITH-PERF:BEGIN (generated by `rustsmith release-prep`; do not hand-edit) -->
22
+ ## Measured performance
23
+ No accepted optimizations yet (mirror baseline); re-run `release-prep` after `run --stage optimize` merges winners.
24
+ Artifact hashes are intentionally absent here; see `release-manifest.json`.
25
+ <!-- RUSTSMITH-PERF:END -->
@@ -0,0 +1,6 @@
1
+ 49c0e20546ab348e944a05d648c377d756e87ee7033c7d1b70a0d8dc3b9b70d1 corpus_clean.txt
2
+ fc8dee636649d0ebff45dd475402ce3f206bcbe39d930bf678be58e054e78a86 corpus_noisy.txt
3
+ d8f32bed37ad46ff29ae1f88bce3683edc67e9570aa4c0c0d2fa72c98671be4a corpus_boundary.txt
4
+ 82ef93d2329f80b03b3f2907e4a7360ee3dbc028fdf2ed61f0503a43172a23fe bench.py
5
+ cbb9fb1637e03537f8d8fcdbc41c31550b81dac057642cc42746919807c64ded corpus_edge.txt
6
+ 61fc90fe35b7d4cf003d34586becb17160d803bad7db987559890c025b1ea484 corpus_large.txt