rekordbox-edit 0.4.0.dev35__tar.gz → 0.4.0.dev37__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 (47) hide show
  1. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/CHANGELOG.md +4 -1
  2. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/PKG-INFO +1 -1
  3. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/pyproject.toml +1 -1
  4. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/rekordbox_edit/_click.py +20 -0
  5. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/rekordbox_edit/commands/convert.py +9 -18
  6. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/rekordbox_edit/commands/edit.py +2 -18
  7. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/tests/commands/test_edit.py +41 -7
  8. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/uv.lock +20 -20
  9. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/.agent-style/RULES.md +0 -0
  10. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/.agent-style/claude-code.md +0 -0
  11. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/.github/actions/commitizen-bump/action.yml +0 -0
  12. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/.github/actions/commitizen-bump/commitizen-bump.sh +0 -0
  13. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/.github/actions/install/action.yml +0 -0
  14. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/.github/actions/lint/action.yml +0 -0
  15. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/.github/actions/test/action.yml +0 -0
  16. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/.github/workflows/cd.yml +0 -0
  17. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/.github/workflows/ci.yml +0 -0
  18. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/.github/workflows/publish.yml +0 -0
  19. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/.github/workflows/release.yml +0 -0
  20. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/.gitignore +0 -0
  21. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/.pre-commit-config.yaml +0 -0
  22. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/AGENTS.md +0 -0
  23. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/CLAUDE.md +0 -0
  24. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/CONTRIBUTING.md +0 -0
  25. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/LICENSE +0 -0
  26. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/Makefile +0 -0
  27. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/README.md +0 -0
  28. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/codecov.yml +0 -0
  29. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/rekordbox_edit/__init__.py +0 -0
  30. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/rekordbox_edit/cli.py +0 -0
  31. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/rekordbox_edit/commands/__init__.py +0 -0
  32. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/rekordbox_edit/commands/search.py +0 -0
  33. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/rekordbox_edit/display.py +0 -0
  34. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/rekordbox_edit/logger.py +0 -0
  35. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/rekordbox_edit/query.py +0 -0
  36. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/rekordbox_edit/utils.py +0 -0
  37. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/renovate.json5 +0 -0
  38. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/ruff.toml +0 -0
  39. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/tests/__init__.py +0 -0
  40. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/tests/commands/__init__.py +0 -0
  41. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/tests/commands/test_convert.py +0 -0
  42. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/tests/commands/test_search.py +0 -0
  43. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/tests/conftest.py +0 -0
  44. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/tests/test_display.py +0 -0
  45. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/tests/test_logger.py +0 -0
  46. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/tests/test_query.py +0 -0
  47. {rekordbox_edit-0.4.0.dev35 → rekordbox_edit-0.4.0.dev37}/tests/test_utils.py +0 -0
@@ -1,6 +1,9 @@
1
- ## v0.4.0.dev35 (2026-06-04)
1
+ ## v0.4.0.dev37 (2026-06-05)
2
2
 
3
3
 
4
+ - refactor(cli): extract shared confirmation flags into global_click_confirmations
5
+ - chore(deps): update linters to v0.0.42 (#58)
6
+ - Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
4
7
  - fix(display): Don't crash on unknown file type during print_track_info
5
8
  - chore(deps): update commit tooling to v4.16.3 (#54)
6
9
  - Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rekordbox-edit
3
- Version: 0.4.0.dev35
3
+ Version: 0.4.0.dev37
4
4
  Summary: Tools for managing and modifying a RekordBox library en-masse
5
5
  Project-URL: Homepage, https://github.com/jviall/rekordbox-edit
6
6
  Project-URL: Repository, https://github.com/jviall/rekordbox-edit
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "rekordbox-edit"
7
- version = "0.4.0.dev35"
7
+ version = "0.4.0.dev37"
8
8
  description = "Tools for managing and modifying a RekordBox library en-masse"
9
9
  authors = [{ name = "James Viall", email= "jamesviall@pm.me"}]
10
10
  license = "MIT"
@@ -101,6 +101,26 @@ global_click_filters = [
101
101
  ),
102
102
  ]
103
103
 
104
+ global_click_confirmations = [
105
+ click.option(
106
+ "--dry-run",
107
+ is_flag=True,
108
+ help="Show what would change without writing to the database or filesystem",
109
+ ),
110
+ click.option(
111
+ "--yes",
112
+ "-y",
113
+ is_flag=True,
114
+ help="Skip confirmation prompt",
115
+ ),
116
+ click.option(
117
+ "--interactive",
118
+ "-i",
119
+ is_flag=True,
120
+ help="Confirm each item individually before applying changes",
121
+ ),
122
+ ]
123
+
104
124
 
105
125
  def add_click_options(options):
106
126
  def _add_options(func):
@@ -16,6 +16,7 @@ from pyrekordbox.utils import get_rekordbox_pid
16
16
  from rekordbox_edit._click import (
17
17
  PrintChoice,
18
18
  add_click_options,
19
+ global_click_confirmations,
19
20
  global_click_filters,
20
21
  print_option,
21
22
  track_ids_argument,
@@ -244,17 +245,6 @@ def get_output_path(content, output_format) -> Tuple[str, str, str]:
244
245
  @click.command(
245
246
  epilog=f"Debug logs for each run can be found at:\n{get_debug_file_path().parent}"
246
247
  )
247
- @click.option(
248
- "--dry-run",
249
- is_flag=True,
250
- help="Show what would be converted without making changes",
251
- )
252
- @click.option(
253
- "--yes",
254
- "-y",
255
- is_flag=True,
256
- help="Auto-confirm the batch conversion (skip confirmation prompt)",
257
- )
258
248
  @click.option(
259
249
  "--delete/--keep",
260
250
  default=None,
@@ -265,19 +255,20 @@ def get_output_path(content, output_format) -> Tuple[str, str, str]:
265
255
  is_flag=True,
266
256
  help="Overwrite existing output files instead of skipping them",
267
257
  )
268
- @click.option(
269
- "--interactive",
270
- "-i",
271
- is_flag=True,
272
- help="Confirm each file individually before converting",
273
- )
274
258
  @click.option(
275
259
  "--format-out",
276
260
  type=click.Choice(["aiff", "flac", "wav", "alac", "mp3"], case_sensitive=False),
277
261
  default="aiff",
278
262
  help="Output format (default: aiff)",
279
263
  )
280
- @add_click_options([*global_click_filters, print_option, track_ids_argument])
264
+ @add_click_options(
265
+ [
266
+ *global_click_filters,
267
+ *global_click_confirmations,
268
+ print_option,
269
+ track_ids_argument,
270
+ ]
271
+ )
281
272
  def convert_command(
282
273
  dry_run,
283
274
  yes,
@@ -10,6 +10,7 @@ from pyrekordbox import Rekordbox6Database
10
10
  from rekordbox_edit._click import (
11
11
  PrintChoice,
12
12
  add_click_options,
13
+ global_click_confirmations,
13
14
  global_click_filters,
14
15
  print_option,
15
16
  track_ids_argument,
@@ -43,24 +44,7 @@ def _compute_new_value(
43
44
  @click.command(
44
45
  epilog=f"Debug logs for each run can be found at:\n{get_debug_file_path().parent}"
45
46
  )
46
- @add_click_options([*global_click_filters, print_option])
47
- @click.option(
48
- "--interactive",
49
- "-i",
50
- is_flag=True,
51
- help="Confirm each track individually before editing",
52
- )
53
- @click.option(
54
- "--yes",
55
- "-y",
56
- is_flag=True,
57
- help="Skip confirmation prompt",
58
- )
59
- @click.option(
60
- "--dry-run",
61
- is_flag=True,
62
- help="Show what would change without writing to the database",
63
- )
47
+ @add_click_options([*global_click_filters, *global_click_confirmations, print_option])
64
48
  @click.option(
65
49
  "--replace",
66
50
  "replace_value",
@@ -39,6 +39,7 @@ class TestEditCommandPhase1:
39
39
  mock_confirm.return_value = True
40
40
 
41
41
  from click.testing import CliRunner
42
+
42
43
  result = CliRunner().invoke(edit_command, ["Title", "--replace", "New Title"])
43
44
 
44
45
  assert result.exit_code == 0
@@ -57,7 +58,10 @@ class TestEditCommandPhase1:
57
58
  mock_gfc.return_value = mock_result
58
59
 
59
60
  from click.testing import CliRunner
60
- result = CliRunner().invoke(edit_command, ["Title", "--replace", "Same Title", "--yes"])
61
+
62
+ result = CliRunner().invoke(
63
+ edit_command, ["Title", "--replace", "Same Title", "--yes"]
64
+ )
61
65
 
62
66
  assert result.exit_code == 0
63
67
  mock_db.session.commit.assert_not_called()
@@ -77,7 +81,10 @@ class TestEditCommandPhase1:
77
81
  mock_gfc.return_value = mock_result
78
82
 
79
83
  from click.testing import CliRunner
80
- result = CliRunner().invoke(edit_command, ["Title", "--replace", "New", "--yes"])
84
+
85
+ result = CliRunner().invoke(
86
+ edit_command, ["Title", "--replace", "New", "--yes"]
87
+ )
81
88
 
82
89
  assert result.exit_code != 0
83
90
  mock_db.session.commit.assert_not_called()
@@ -95,7 +102,10 @@ class TestEditCommandPhase1:
95
102
  mock_gfc.return_value = mock_result
96
103
 
97
104
  from click.testing import CliRunner
98
- result = CliRunner().invoke(edit_command, ["Title", "--replace", "New Title", "--dry-run"])
105
+
106
+ result = CliRunner().invoke(
107
+ edit_command, ["Title", "--replace", "New Title", "--dry-run"]
108
+ )
99
109
 
100
110
  assert result.exit_code == 0
101
111
  mock_db.session.commit.assert_not_called()
@@ -114,7 +124,10 @@ class TestEditCommandPhase1:
114
124
  mock_gfc.return_value = mock_result
115
125
 
116
126
  from click.testing import CliRunner
117
- result = CliRunner().invoke(edit_command, ["Title", "--replace", "New Title", "--yes"])
127
+
128
+ result = CliRunner().invoke(
129
+ edit_command, ["Title", "--replace", "New Title", "--yes"]
130
+ )
118
131
 
119
132
  assert result.exit_code == 0
120
133
  mock_confirm.assert_not_called()
@@ -134,6 +147,7 @@ class TestEditCommandPhase1:
134
147
  mock_confirm.return_value = True
135
148
 
136
149
  from click.testing import CliRunner
150
+
137
151
  result = CliRunner().invoke(
138
152
  edit_command, ["Title", "--replace", "New Title", "--interactive"]
139
153
  )
@@ -151,6 +165,7 @@ class TestEditCommandPhase1:
151
165
  mock_db_class.return_value = mock_db
152
166
 
153
167
  from click.testing import CliRunner
168
+
154
169
  result = CliRunner().invoke(
155
170
  edit_command, ["Title", "--replace", "New Title"], input="12345"
156
171
  )
@@ -166,6 +181,7 @@ class TestEditCommandPhase1:
166
181
  mock_db_class.return_value = mock_db
167
182
 
168
183
  from click.testing import CliRunner
184
+
169
185
  result = CliRunner().invoke(
170
186
  edit_command, ["Title", "--replace", "New Title", "--print", "ids"]
171
187
  )
@@ -187,13 +203,17 @@ class TestEditCommandPhase1:
187
203
  mock_gfc.return_value = mock_result
188
204
 
189
205
  from click.testing import CliRunner
206
+
190
207
  CliRunner().invoke(
191
208
  edit_command,
192
209
  [
193
210
  "Title",
194
- "--replace", "New Title",
195
- "--artist", "Bicep",
196
- "--format", "flac",
211
+ "--replace",
212
+ "New Title",
213
+ "--artist",
214
+ "Bicep",
215
+ "--format",
216
+ "flac",
197
217
  "--match-all",
198
218
  "--yes",
199
219
  ],
@@ -217,6 +237,7 @@ class TestEditCommandPhase1:
217
237
  mock_gfc.return_value = mock_result
218
238
 
219
239
  from click.testing import CliRunner
240
+
220
241
  result = CliRunner().invoke(
221
242
  edit_command,
222
243
  ["Title", "--replace", "New Title", "--interactive", "--yes"],
@@ -239,6 +260,7 @@ class TestEditCommandPhase1:
239
260
  mock_gfc.return_value = mock_result
240
261
 
241
262
  from click.testing import CliRunner
263
+
242
264
  result = CliRunner().invoke(
243
265
  edit_command,
244
266
  ["Title", "--replace", "New Title", "--print", "ids", "--yes"],
@@ -265,6 +287,7 @@ class TestEditCommandPhase3:
265
287
  mock_confirm.return_value = True
266
288
 
267
289
  from click.testing import CliRunner
290
+
268
291
  result = CliRunner().invoke(
269
292
  edit_command,
270
293
  ["Title", "--match", "feat.", "--replace", "ft."],
@@ -286,6 +309,7 @@ class TestEditCommandPhase3:
286
309
  mock_gfc.return_value = mock_result
287
310
 
288
311
  from click.testing import CliRunner
312
+
289
313
  result = CliRunner().invoke(
290
314
  edit_command,
291
315
  ["Title", "--match", "feat.", "--replace", "ft.", "--yes"],
@@ -306,6 +330,7 @@ class TestEditCommandPhase3:
306
330
  mock_gfc.return_value = mock_result
307
331
 
308
332
  from click.testing import CliRunner
333
+
309
334
  result = CliRunner().invoke(
310
335
  edit_command,
311
336
  ["Title", "--match", "feat.", "--replace", "ft.", "--yes"],
@@ -327,6 +352,7 @@ class TestEditCommandPhase3:
327
352
  mock_gfc.return_value = mock_result
328
353
 
329
354
  from click.testing import CliRunner
355
+
330
356
  result = CliRunner().invoke(
331
357
  edit_command,
332
358
  ["Title", "--match", "1.0", "--replace", "2.0", "--yes"],
@@ -353,6 +379,7 @@ class TestEditCommandUnicode:
353
379
  mock_confirm.return_value = True
354
380
 
355
381
  from click.testing import CliRunner
382
+
356
383
  result = CliRunner().invoke(
357
384
  edit_command,
358
385
  ["Title", "--replace", "日本語タイトル"],
@@ -376,6 +403,7 @@ class TestEditCommandUnicode:
376
403
  mock_confirm.return_value = True
377
404
 
378
405
  from click.testing import CliRunner
406
+
379
407
  result = CliRunner().invoke(
380
408
  edit_command,
381
409
  ["Title", "--replace", "U-Bahn Nights (feat. Angstrom)"],
@@ -399,6 +427,7 @@ class TestEditCommandUnicode:
399
427
  mock_confirm.return_value = True
400
428
 
401
429
  from click.testing import CliRunner
430
+
402
431
  result = CliRunner().invoke(
403
432
  edit_command,
404
433
  ["Title", "--match", "feat.", "--replace", "ft."],
@@ -420,6 +449,7 @@ class TestEditCommandUnicode:
420
449
  mock_gfc.return_value = mock_result
421
450
 
422
451
  from click.testing import CliRunner
452
+
423
453
  result = CliRunner().invoke(
424
454
  edit_command,
425
455
  ["Title", "--replace", "Ø (Disambiguation)", "--yes"],
@@ -449,6 +479,7 @@ class TestEditCommandPhase4:
449
479
  mock_confirm.return_value = True
450
480
 
451
481
  from click.testing import CliRunner
482
+
452
483
  result = CliRunner().invoke(
453
484
  edit_command,
454
485
  ["Title", "--match", "feat.", "--replace", "ft.", "--multi"],
@@ -474,6 +505,7 @@ class TestEditCommandPhase4:
474
505
  mock_gfc.return_value = mock_result
475
506
 
476
507
  from click.testing import CliRunner
508
+
477
509
  result = CliRunner().invoke(
478
510
  edit_command, ["Title", "--replace", "New", "--yes"]
479
511
  )
@@ -497,6 +529,7 @@ class TestEditCommandPhase4:
497
529
  mock_gfc.return_value = mock_result
498
530
 
499
531
  from click.testing import CliRunner
532
+
500
533
  result = CliRunner().invoke(
501
534
  edit_command,
502
535
  ["Title", "--replace", "New", "--multi", "--yes"],
@@ -520,6 +553,7 @@ class TestEditCommandPhase4:
520
553
  mock_confirm.return_value = True
521
554
 
522
555
  from click.testing import CliRunner
556
+
523
557
  result = CliRunner().invoke(
524
558
  edit_command,
525
559
  ["Title", "--replace", "New Title", "--multi"],
@@ -1010,7 +1010,7 @@ wheels = [
1010
1010
 
1011
1011
  [[package]]
1012
1012
  name = "rekordbox-edit"
1013
- version = "0.4.0.dev35"
1013
+ version = "0.4.0.dev37"
1014
1014
  source = { editable = "." }
1015
1015
  dependencies = [
1016
1016
  { name = "click" },
@@ -1340,27 +1340,27 @@ wheels = [
1340
1340
 
1341
1341
  [[package]]
1342
1342
  name = "ty"
1343
- version = "0.0.40"
1343
+ version = "0.0.42"
1344
1344
  source = { registry = "https://pypi.org/simple" }
1345
- sdist = { url = "https://files.pythonhosted.org/packages/5a/f8/a754c96967b71de8723f88be17df8738216bd382ffed229cd500b7a24d13/ty-0.0.40.tar.gz", hash = "sha256:883b53dd98f6e5b33ab1c8e1a3cd94b0f29c762ef22cdf1e86aaffb4fd711c67", size = 5726484, upload-time = "2026-05-27T17:55:43.615Z" }
1345
+ sdist = { url = "https://files.pythonhosted.org/packages/d8/91/5b5ec4ed8721c18be8d9611778d7c07723cd755676f03b41bf0ea0caa5d3/ty-0.0.42.tar.gz", hash = "sha256:70f5553ac678fc63558d4d77b08a18a68a228f44be2a2fe1afc3f5988db662e7", size = 5769116, upload-time = "2026-06-01T19:40:32.869Z" }
1346
1346
  wheels = [
1347
- { url = "https://files.pythonhosted.org/packages/2c/42/d029a72165ad39f95228b67355927fbd35c821dc8e3e475d49f47c2eeb1e/ty-0.0.40-py3-none-linux_armv6l.whl", hash = "sha256:9defb4742450e569a6a09de286a04008d6c2e815112da4362c88b6eaa2f52a36", size = 11406372, upload-time = "2026-05-27T17:55:49.633Z" },
1348
- { url = "https://files.pythonhosted.org/packages/23/99/7f8ea09b7e49afbf795cb3341a3217f30f228db7e62a2268ed8cbbf813d6/ty-0.0.40-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:868258a3330db88b683fcafe2c4e936d6226a6312799bf15b585d93557b2d38c", size = 11159782, upload-time = "2026-05-27T17:55:47.405Z" },
1349
- { url = "https://files.pythonhosted.org/packages/04/d8/1ea745ee97a98b26ae9564d19a430a76a35297cd450e84dcaad22e1f7ee8/ty-0.0.40-py3-none-macosx_11_0_arm64.whl", hash = "sha256:589c81060cf1e7a9ffa2f45bfa35ffd9b9fbd214104e3f13959f113627efcd91", size = 10594139, upload-time = "2026-05-27T17:55:37.206Z" },
1350
- { url = "https://files.pythonhosted.org/packages/39/1a/fbef21273c6617ff4715b4827ee1c0b6550aa7d1df4b8c43b325545c1cf4/ty-0.0.40-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b06108990cb338d941c315ae6e9ba2fff8f518bc15d3f33e5619ff6a6c9beab", size = 11114156, upload-time = "2026-05-27T17:55:56.11Z" },
1351
- { url = "https://files.pythonhosted.org/packages/3c/f9/389fc4976d7ec016a7473cf1274bf9c4f491bb54c66649bd022bff9f2b6a/ty-0.0.40-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3913ef37336bec4f96bd2512f8c3a543ca34c259b7170f7eb5adf75b3ed7f04c", size = 11189050, upload-time = "2026-05-27T17:55:54.099Z" },
1352
- { url = "https://files.pythonhosted.org/packages/fa/a9/4ecabbf4bdda7df0d99d8d3892c6edac0efc8c4cae756a5109178a3d0e86/ty-0.0.40-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8fd1486bd5fe48779a8aa857137f3642a0a9161f5cf57d4380f4a0ecea01c8f3", size = 11664266, upload-time = "2026-05-27T17:55:28.17Z" },
1353
- { url = "https://files.pythonhosted.org/packages/45/02/0aa78730116507c265afb1d6d5961c583b49d4c2e368c4a49fd81bcae6dc/ty-0.0.40-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1668364d5254a734329917ee66c2c5fdd5665389d41043f6fce0f22ddb32b749", size = 12187743, upload-time = "2026-05-27T17:56:04.337Z" },
1354
- { url = "https://files.pythonhosted.org/packages/e6/68/ccabf2d173523598271a385c1d3f864dbda23e5ebdc67f5969b9e830ea05/ty-0.0.40-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43f77a73edb91e5dfa2ab9af7c4cac64614f8cc121f38a8875f22e830d3aba6a", size = 11862999, upload-time = "2026-05-27T17:55:58.087Z" },
1355
- { url = "https://files.pythonhosted.org/packages/03/8d/6d7ec22771bb23d534797cdb446eb644bccfe7a62b729bb99e7235a02fc3/ty-0.0.40-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1274ce0212ecbfed01bda7c3659c46e8bd0068e32d00c46c790466a95274c3df", size = 11743896, upload-time = "2026-05-27T17:56:00.017Z" },
1356
- { url = "https://files.pythonhosted.org/packages/cd/a4/f9fa076b010c91cb249b1fcc3476569b7b8462cb4b688da2d04c23a0622f/ty-0.0.40-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:5ee1261dbc363e5cc1a0c5bb0c8612c192bfe53491214df8bc85a540835685f9", size = 11883581, upload-time = "2026-05-27T17:56:02.319Z" },
1357
- { url = "https://files.pythonhosted.org/packages/fd/0f/5b776a2328c756d574dd4d6afbd30fc24e1ab4b76935c7c3c23f27ebbcb9/ty-0.0.40-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6220e2cd5cdc4683dd87fb150d195bbd9f1a021395e04cb08bd3c66ea6da6ef8", size = 11093946, upload-time = "2026-05-27T17:55:33.284Z" },
1358
- { url = "https://files.pythonhosted.org/packages/64/c4/eb23154bae83ad7c2935e9e5916660fb3e31598a92ee232aebd79410480c/ty-0.0.40-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:46b9ed69d01d98ef046afac9983c68336f572605ea2a27b90fbe6f80bfc8d6b7", size = 11210737, upload-time = "2026-05-27T17:55:45.523Z" },
1359
- { url = "https://files.pythonhosted.org/packages/ff/19/1fb2529703f708cacfd13a89f98613cae2907dfa941b26976467e6119803/ty-0.0.40-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ddbca9fab4406260f141674ab5efcfe7b02bd468e6985e4cdde0a21626e69ffe", size = 11332563, upload-time = "2026-05-27T17:55:41.674Z" },
1360
- { url = "https://files.pythonhosted.org/packages/87/69/b3f5a8ef26c31204e0391147b3adcdb0674eda3e7d99868478ef168a41c6/ty-0.0.40-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b1fcc082a749e6dc11b68fe9aab0420238bbf2a2374c2c7aa3c22e8c1618b136", size = 11843216, upload-time = "2026-05-27T17:55:35.367Z" },
1361
- { url = "https://files.pythonhosted.org/packages/ac/e8/20193069d32787f3e1a6ec8940aaa3759d3de8f48f9281bcc0c5cb0939da/ty-0.0.40-py3-none-win32.whl", hash = "sha256:75feb115b3587824c5bdf8f8305e9547b0d1e398e3077b0addc7a1988ea9bb50", size = 10670731, upload-time = "2026-05-27T17:55:31.316Z" },
1362
- { url = "https://files.pythonhosted.org/packages/a3/f9/8b2aa4da61db81322d4a2f9db227afeb48110ca15ae31d380f64c64ceb63/ty-0.0.40-py3-none-win_amd64.whl", hash = "sha256:b0f905edaad788bd61f779a85801b60a267a25ed57fca05aaddd168d9d8896be", size = 11766211, upload-time = "2026-05-27T17:55:51.898Z" },
1363
- { url = "https://files.pythonhosted.org/packages/04/87/369056ed46f1b235130ec0595393262f9cd2061ca3dab276d490980f9343/ty-0.0.40-py3-none-win_arm64.whl", hash = "sha256:07da2b09d9130e2c9a257d2a29beb53105835b0256ee5fdb288fe1aab83fee47", size = 11117369, upload-time = "2026-05-27T17:55:39.329Z" },
1347
+ { url = "https://files.pythonhosted.org/packages/d4/7c/2df5136ad7c0db69a3973b0b19da8f52bfacdc453c7dffc832d1bf7d23ff/ty-0.0.42-py3-none-linux_armv6l.whl", hash = "sha256:c08a0066610c13627b7d7ad758adb96ca99685791e641eb26837e20803851c53", size = 11544141, upload-time = "2026-06-01T19:40:41.065Z" },
1348
+ { url = "https://files.pythonhosted.org/packages/0a/82/96cf406d39d8976e825361a27e332224445812793060ac9506d8a5d32b39/ty-0.0.42-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3e944ee4e3d5cdaf70e4ea87f9dd474cc3db612837b50a3ce57afa8da400ecc2", size = 11283538, upload-time = "2026-06-01T19:40:26.758Z" },
1349
+ { url = "https://files.pythonhosted.org/packages/dc/fe/813b60b9332df835c16c05859ff5aac1896593d01b638ba0e461ede415ac/ty-0.0.42-py3-none-macosx_11_0_arm64.whl", hash = "sha256:603085306e4aac2ce592b39119a4b49ebf8b780cd394e2cfc7dbf3fd8228f954", size = 10711874, upload-time = "2026-06-01T19:40:28.77Z" },
1350
+ { url = "https://files.pythonhosted.org/packages/07/64/1f609265be0302ce0f51aa03a27636d018947a76100ff1405258d8445e6c/ty-0.0.42-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a58f17834d7f078c49326a01111a5aac16c979a774b98cdfd8e2350068316676", size = 11213021, upload-time = "2026-06-01T19:40:45.01Z" },
1351
+ { url = "https://files.pythonhosted.org/packages/88/c0/f147b2fde7cd01b5f77682937e85a5cdfe35f48b3f1d0f41021024cbd927/ty-0.0.42-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e6ed1027f313202c5c74e376007d1eb5d214494299beb0ea047078b8ad307d40", size = 11321604, upload-time = "2026-06-01T19:40:55.164Z" },
1352
+ { url = "https://files.pythonhosted.org/packages/a9/72/74a5e68a9bd194681f15c4aac7a0dfab378e76e7a107e8ecd93971a22377/ty-0.0.42-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:063838d2360c1d2c065b45ca76a56ecd6df07fff6570813e74183236559e16d9", size = 11802178, upload-time = "2026-06-01T19:40:19.558Z" },
1353
+ { url = "https://files.pythonhosted.org/packages/3c/9f/06a31dc9cc91faa2cb8a4bf2f0ba5f7a9a96a4828fb8434338682954ca86/ty-0.0.42-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c3f9ed508dfae4cbc943d7766324dd9c57ac8302c8543505fc29cae8ed425fe9", size = 12358436, upload-time = "2026-06-01T19:40:48.968Z" },
1354
+ { url = "https://files.pythonhosted.org/packages/06/33/a5bb1afcb671e0b9197f007264682b22f1063bf0e83c151eeaf9958f9047/ty-0.0.42-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fe1eb7d98472ac56ac19fec51c6ed8fe56d86ea0d232a11a127e8c62c882a66", size = 11997849, upload-time = "2026-06-01T19:40:42.951Z" },
1355
+ { url = "https://files.pythonhosted.org/packages/ee/8d/560e4ec4c2f69e68fa094bb93cd19b5eb92c9732d2e0f5e7cc3accde84c4/ty-0.0.42-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de75f9e78bfa81209f2f297528758977cfd4518ba35ef45a0acb516c892a27a5", size = 11869087, upload-time = "2026-06-01T19:40:24.38Z" },
1356
+ { url = "https://files.pythonhosted.org/packages/b2/dd/3794db15199c03eda60961690046a56c4fbf5d8ef073c82fe2402c851b8c/ty-0.0.42-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:c63281f2f1d4df339117fcd4a6dfe17cb999f84eafe707b30e9ebbe26f0bb54a", size = 12059000, upload-time = "2026-06-01T19:40:34.982Z" },
1357
+ { url = "https://files.pythonhosted.org/packages/98/9a/02b61cc65ecbd90f18bd02178845c5b756c78fb92643571e77df52c6eed8/ty-0.0.42-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:19e3856477f25255f772851fa7f16f5356c4e1927324d074d49c7bc9a9b211e1", size = 11195698, upload-time = "2026-06-01T19:40:37.109Z" },
1358
+ { url = "https://files.pythonhosted.org/packages/7b/d6/3927335c956b06a806269dcd2e5b46bc4284b0a95ecc6b0246094a1de28c/ty-0.0.42-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2f0f4acac9028264cee5ea0b88229df0b9b2586fc917dbadb6ee35a0e99e8b06", size = 11353487, upload-time = "2026-06-01T19:40:47.035Z" },
1359
+ { url = "https://files.pythonhosted.org/packages/d6/87/79e7ae4f5f9fb3bea5f3cfac2b4f8c60e905f13962e3c0d97f8b51a5bff6/ty-0.0.42-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ae244c84e30fdf2bb1a3cbf2b973da8aa535e57c701f12db44b2939604586c04", size = 11463474, upload-time = "2026-06-01T19:40:30.812Z" },
1360
+ { url = "https://files.pythonhosted.org/packages/49/f9/73305ead1b3ccc3d79c04258877db2cd7908c6a6c2060d4e598deca384d2/ty-0.0.42-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:2430434f4a52bec0da552ff6a061dcc1c5d11973259248679a1146d776c12f37", size = 11961710, upload-time = "2026-06-01T19:40:39.056Z" },
1361
+ { url = "https://files.pythonhosted.org/packages/e1/04/52b7325dad8d1a86653f90240208f3e3657bed5e3c8144eed367a0f736b0/ty-0.0.42-py3-none-win32.whl", hash = "sha256:984a55c2fe63b40dac03f5a144b99033c7ed720eb7611787e3f0bd49af8dcf12", size = 10783897, upload-time = "2026-06-01T19:40:22.189Z" },
1362
+ { url = "https://files.pythonhosted.org/packages/94/d2/3d2d61255c76c0843766f00b39290115c23cc1cd4fcb0471d84a48f482f1/ty-0.0.42-py3-none-win_amd64.whl", hash = "sha256:f7afd81b10b377d9d4ce6aad355a4f47fd37d47f443118c01ca6e79d46fe6608", size = 11878640, upload-time = "2026-06-01T19:40:50.903Z" },
1363
+ { url = "https://files.pythonhosted.org/packages/b4/91/1eb0c1e3d558707ead7424f8bfd89b58f42e576714cbed7ad46dcceef34a/ty-0.0.42-py3-none-win_arm64.whl", hash = "sha256:4068c24b0b264fc9f1901e06b97988a041fcaa36c90f18d7747f05124701c7b3", size = 11202335, upload-time = "2026-06-01T19:40:53.155Z" },
1364
1364
  ]
1365
1365
 
1366
1366
  [[package]]