fetchurl-sdk 0.1.6__tar.gz → 0.2.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fetchurl-sdk
3
- Version: 0.1.6
3
+ Version: 0.2.0
4
4
  Summary: Protocol-level client SDK for fetchurl content-addressable cache servers
5
5
  Project-URL: Homepage, https://github.com/lucasew/fetchurl
6
6
  Project-URL: Repository, https://github.com/lucasew/fetchurl
@@ -242,7 +242,7 @@ class FetchSession:
242
242
 
243
243
  for server in servers:
244
244
  base = server.rstrip("/")
245
- url = f"{base}/api/fetchurl/{algo}/{hash}"
245
+ url = f"{base}/{algo}/{hash}"
246
246
  headers: dict[str, str] = {}
247
247
  if source_header:
248
248
  headers["X-Source-Urls"] = source_header
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "fetchurl-sdk"
7
- version = "0.1.6"
7
+ version = "0.2.0"
8
8
  description = "Protocol-level client SDK for fetchurl content-addressable cache servers"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.8"
@@ -93,7 +93,7 @@ class TestFetchSession(unittest.TestCase):
93
93
  with self.assertRaises(fetchurl.UnsupportedAlgorithmError):
94
94
  fetchurl.FetchSession("md5", "abc", ["http://src"])
95
95
 
96
- @patch.dict(os.environ, {"FETCHURL_SERVER": '"http://cache1", "http://cache2"'})
96
+ @patch.dict(os.environ, {"FETCHURL_SERVER": '"http://cache1/api/fetchurl", "http://cache2/api/fetchurl"'})
97
97
  def test_attempt_ordering(self):
98
98
  h = sha256hex(b"test")
99
99
  session = fetchurl.FetchSession(
@@ -115,7 +115,7 @@ class TestFetchSession(unittest.TestCase):
115
115
  self.assertIsNone(session.next_attempt())
116
116
  self.assertFalse(session.succeeded())
117
117
 
118
- @patch.dict(os.environ, {"FETCHURL_SERVER": '"http://cache"'})
118
+ @patch.dict(os.environ, {"FETCHURL_SERVER": '"http://cache/api/fetchurl"'})
119
119
  def test_success_stops(self):
120
120
  h = sha256hex(b"test")
121
121
  session = fetchurl.FetchSession("sha256", h, ["http://src"])
@@ -124,7 +124,7 @@ class TestFetchSession(unittest.TestCase):
124
124
  self.assertTrue(session.succeeded())
125
125
  self.assertIsNone(session.next_attempt())
126
126
 
127
- @patch.dict(os.environ, {"FETCHURL_SERVER": '"http://cache"'})
127
+ @patch.dict(os.environ, {"FETCHURL_SERVER": '"http://cache/api/fetchurl"'})
128
128
  def test_partial_stops(self):
129
129
  h = sha256hex(b"test")
130
130
  session = fetchurl.FetchSession("sha256", h, ["http://src"])
@@ -235,7 +235,7 @@ class TestFetch(unittest.TestCase):
235
235
  try:
236
236
  out = io.BytesIO()
237
237
  # Set server via env var
238
- with patch.dict(os.environ, {"FETCHURL_SERVER": f'"{bad_url}"'}):
238
+ with patch.dict(os.environ, {"FETCHURL_SERVER": f'"{bad_url}/api/fetchurl"'}):
239
239
  fetchurl.fetch(
240
240
  fetchurl.UrllibFetcher(), "sha256", h, [good_url], out
241
241
  )
@@ -74,7 +74,7 @@ class TestIntegration(unittest.TestCase):
74
74
  try:
75
75
  host = server.get_container_host_ip()
76
76
  port = server.get_exposed_port(8080)
77
- os.environ["FETCHURL_SERVER"] = f"\"http://{host}:{port}\""
77
+ os.environ["FETCHURL_SERVER"] = f"\"http://{host}:{port}/api/fetchurl\""
78
78
 
79
79
  fetchurl.fetch(
80
80
  TimeoutFetcher(),
@@ -186,16 +186,36 @@ wheels = [
186
186
  { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178, upload-time = "2020-04-20T14:23:36.581Z" },
187
187
  ]
188
188
 
189
+ [[package]]
190
+ name = "docker"
191
+ version = "5.0.3"
192
+ source = { registry = "https://pypi.org/simple" }
193
+ resolution-markers = [
194
+ "python_full_version < '3.9'",
195
+ ]
196
+ dependencies = [
197
+ { name = "pywin32", version = "227", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9' and sys_platform == 'win32'" },
198
+ { name = "requests", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
199
+ { name = "websocket-client", marker = "python_full_version < '3.9'" },
200
+ ]
201
+ sdist = { url = "https://files.pythonhosted.org/packages/ab/d2/45ea0ee13c6cffac96c32ac36db0299932447a736660537ec31ec3a6d877/docker-5.0.3.tar.gz", hash = "sha256:d916a26b62970e7c2f554110ed6af04c7ccff8e9f81ad17d0d40c75637e227fb", size = 209485, upload-time = "2021-10-07T22:54:52.22Z" }
202
+ wheels = [
203
+ { url = "https://files.pythonhosted.org/packages/54/f3/7af47ead249fbb798d64a0438bad5c26f17ef6ac5cd324d802038eb10d90/docker-5.0.3-py2.py3-none-any.whl", hash = "sha256:7a79bb439e3df59d0a72621775d600bc8bc8b422d285824cb37103eab91d1ce0", size = 146235, upload-time = "2021-10-07T22:54:50.194Z" },
204
+ ]
205
+
189
206
  [[package]]
190
207
  name = "docker"
191
208
  version = "7.1.0"
192
209
  source = { registry = "https://pypi.org/simple" }
210
+ resolution-markers = [
211
+ "python_full_version >= '3.10'",
212
+ "python_full_version >= '3.9.2' and python_full_version < '3.10'",
213
+ "python_full_version >= '3.9' and python_full_version < '3.9.2'",
214
+ ]
193
215
  dependencies = [
194
- { name = "pywin32", marker = "sys_platform == 'win32'" },
195
- { name = "requests", version = "2.32.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
216
+ { name = "pywin32", version = "311", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9' and sys_platform == 'win32'" },
196
217
  { name = "requests", version = "2.32.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9'" },
197
- { name = "urllib3", version = "2.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
198
- { name = "urllib3", version = "2.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9'" },
218
+ { name = "urllib3", marker = "python_full_version >= '3.9'" },
199
219
  ]
200
220
  sdist = { url = "https://files.pythonhosted.org/packages/91/9b/4a2ea29aeba62471211598dac5d96825bb49348fa07e906ea930394a83ce/docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c", size = 117834, upload-time = "2024-05-23T11:13:57.216Z" }
201
221
  wheels = [
@@ -301,10 +321,29 @@ wheels = [
301
321
  { url = "https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61", size = 21230, upload-time = "2025-10-26T15:12:09.109Z" },
302
322
  ]
303
323
 
324
+ [[package]]
325
+ name = "pywin32"
326
+ version = "227"
327
+ source = { registry = "https://pypi.org/simple" }
328
+ resolution-markers = [
329
+ "python_full_version < '3.9'",
330
+ ]
331
+ wheels = [
332
+ { url = "https://files.pythonhosted.org/packages/9f/cb/d693f7cdaed51d83bfec5c77a9fa895c1a5a18cf242ba53b06b98ee366dd/pywin32-227-cp38-cp38-win32.whl", hash = "sha256:7f18199fbf29ca99dff10e1f09451582ae9e372a892ff03a28528a24d55875bc", size = 8355798, upload-time = "2019-11-13T23:34:51.908Z" },
333
+ { url = "https://files.pythonhosted.org/packages/cf/06/0d55292927ada3f8516e437292d85e33d6f763dd2dcc6b95f62a91ad9740/pywin32-227-cp38-cp38-win_amd64.whl", hash = "sha256:7c1ae32c489dc012930787f06244426f8356e129184a02c25aef163917ce158e", size = 9065663, upload-time = "2019-11-13T23:35:08.915Z" },
334
+ { url = "https://files.pythonhosted.org/packages/9d/c9/953c3844d046577f5617f927d5c15760ef320e01699e4fd6d214917199c1/pywin32-227-cp39-cp39-win32.whl", hash = "sha256:c054c52ba46e7eb6b7d7dfae4dbd987a1bb48ee86debe3f245a2884ece46e295", size = 8355746, upload-time = "2019-11-13T23:35:31.998Z" },
335
+ { url = "https://files.pythonhosted.org/packages/56/74/3382d6a06050516f152ac703705794da033b92fc6385fda445631d645612/pywin32-227-cp39-cp39-win_amd64.whl", hash = "sha256:f27cec5e7f588c3d1051651830ecc00294f90728d19c3bf6916e6dba93ea357c", size = 9064939, upload-time = "2019-11-13T23:35:42.42Z" },
336
+ ]
337
+
304
338
  [[package]]
305
339
  name = "pywin32"
306
340
  version = "311"
307
341
  source = { registry = "https://pypi.org/simple" }
342
+ resolution-markers = [
343
+ "python_full_version >= '3.10'",
344
+ "python_full_version >= '3.9.2' and python_full_version < '3.10'",
345
+ "python_full_version >= '3.9' and python_full_version < '3.9.2'",
346
+ ]
308
347
  wheels = [
309
348
  { url = "https://files.pythonhosted.org/packages/7b/40/44efbb0dfbd33aca6a6483191dae0716070ed99e2ecb0c53683f400a0b4f/pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3", size = 8760432, upload-time = "2025-07-14T20:13:05.9Z" },
310
349
  { url = "https://files.pythonhosted.org/packages/5e/bf/360243b1e953bd254a82f12653974be395ba880e7ec23e3731d9f73921cc/pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b", size = 9590103, upload-time = "2025-07-14T20:13:07.698Z" },
@@ -330,20 +369,14 @@ wheels = [
330
369
 
331
370
  [[package]]
332
371
  name = "requests"
333
- version = "2.32.4"
372
+ version = "2.15.1"
334
373
  source = { registry = "https://pypi.org/simple" }
335
374
  resolution-markers = [
336
375
  "python_full_version < '3.9'",
337
376
  ]
338
- dependencies = [
339
- { name = "certifi", marker = "python_full_version < '3.9'" },
340
- { name = "charset-normalizer", marker = "python_full_version < '3.9'" },
341
- { name = "idna", marker = "python_full_version < '3.9'" },
342
- { name = "urllib3", version = "2.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
343
- ]
344
- sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload-time = "2025-06-09T16:43:07.34Z" }
377
+ sdist = { url = "https://files.pythonhosted.org/packages/6d/ed/3adebdc29ca33f11bca00c38c72125cd4a51091e13685375ba4426fb59dc/requests-2.15.1.tar.gz", hash = "sha256:e5659b9315a0610505e050bb7190bf6fa2ccee1ac295f2b760ef9d8a03ebbb2e", size = 548172, upload-time = "2017-05-27T02:14:22.414Z" }
345
378
  wheels = [
346
- { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload-time = "2025-06-09T16:43:05.728Z" },
379
+ { url = "https://files.pythonhosted.org/packages/fa/a5/e04c4607dc96e3e6b22dfa13ba8776c64bb65cb97ab90f05a3ee14096a0a/requests-2.15.1-py2.py3-none-any.whl", hash = "sha256:ff753b2196cd18b1bbeddc9dcd5c864056599f7a7d9a4fb5677e723efa2b7fb9", size = 558730, upload-time = "2017-05-27T02:14:19.048Z" },
347
380
  ]
348
381
 
349
382
  [[package]]
@@ -359,7 +392,7 @@ dependencies = [
359
392
  { name = "certifi", marker = "python_full_version >= '3.9'" },
360
393
  { name = "charset-normalizer", marker = "python_full_version >= '3.9'" },
361
394
  { name = "idna", marker = "python_full_version >= '3.9'" },
362
- { name = "urllib3", version = "2.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9'" },
395
+ { name = "urllib3", marker = "python_full_version >= '3.9'" },
363
396
  ]
364
397
  sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" }
365
398
  wheels = [
@@ -384,7 +417,7 @@ resolution-markers = [
384
417
  ]
385
418
  dependencies = [
386
419
  { name = "deprecation", marker = "python_full_version < '3.9'" },
387
- { name = "docker", marker = "python_full_version < '3.9'" },
420
+ { name = "docker", version = "5.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
388
421
  { name = "wrapt", version = "2.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
389
422
  ]
390
423
  wheels = [
@@ -399,10 +432,10 @@ resolution-markers = [
399
432
  "python_full_version >= '3.9' and python_full_version < '3.9.2'",
400
433
  ]
401
434
  dependencies = [
402
- { name = "docker", marker = "python_full_version >= '3.9' and python_full_version < '3.9.2'" },
435
+ { name = "docker", version = "7.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9' and python_full_version < '3.9.2'" },
403
436
  { name = "python-dotenv", marker = "python_full_version >= '3.9' and python_full_version < '3.9.2'" },
404
437
  { name = "typing-extensions", version = "4.15.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9' and python_full_version < '3.9.2'" },
405
- { name = "urllib3", version = "2.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9' and python_full_version < '3.9.2'" },
438
+ { name = "urllib3", marker = "python_full_version >= '3.9' and python_full_version < '3.9.2'" },
406
439
  { name = "wrapt", version = "2.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9' and python_full_version < '3.9.2'" },
407
440
  ]
408
441
  sdist = { url = "https://files.pythonhosted.org/packages/d7/e5/807161552b8bf7072d63a21d5fd3c7df54e29420e325d50b9001571fcbb6/testcontainers-4.13.0.tar.gz", hash = "sha256:ee2bc39324eeeeb710be779208ae070c8373fa9058861859203f536844b0f412", size = 77824, upload-time = "2025-09-09T13:23:49.976Z" }
@@ -418,10 +451,10 @@ resolution-markers = [
418
451
  "python_full_version >= '3.9.2' and python_full_version < '3.10'",
419
452
  ]
420
453
  dependencies = [
421
- { name = "docker", marker = "python_full_version >= '3.9.2' and python_full_version < '3.10'" },
454
+ { name = "docker", version = "7.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9.2' and python_full_version < '3.10'" },
422
455
  { name = "python-dotenv", marker = "python_full_version >= '3.9.2' and python_full_version < '3.10'" },
423
456
  { name = "typing-extensions", version = "4.15.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9.2' and python_full_version < '3.10'" },
424
- { name = "urllib3", version = "2.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9.2' and python_full_version < '3.10'" },
457
+ { name = "urllib3", marker = "python_full_version >= '3.9.2' and python_full_version < '3.10'" },
425
458
  { name = "wrapt", version = "2.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9.2' and python_full_version < '3.10'" },
426
459
  ]
427
460
  sdist = { url = "https://files.pythonhosted.org/packages/fc/b3/c272537f3ea2f312555efeb86398cc382cd07b740d5f3c730918c36e64e1/testcontainers-4.13.3.tar.gz", hash = "sha256:9d82a7052c9a53c58b69e1dc31da8e7a715e8b3ec1c4df5027561b47e2efe646", size = 79064, upload-time = "2025-11-14T05:08:47.584Z" }
@@ -437,10 +470,10 @@ resolution-markers = [
437
470
  "python_full_version >= '3.10'",
438
471
  ]
439
472
  dependencies = [
440
- { name = "docker", marker = "python_full_version >= '3.10'" },
473
+ { name = "docker", version = "7.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
441
474
  { name = "python-dotenv", marker = "python_full_version >= '3.10'" },
442
475
  { name = "typing-extensions", version = "4.15.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
443
- { name = "urllib3", version = "2.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
476
+ { name = "urllib3", marker = "python_full_version >= '3.10'" },
444
477
  { name = "wrapt", version = "2.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
445
478
  ]
446
479
  sdist = { url = "https://files.pythonhosted.org/packages/8b/02/ef62dec9e4f804189c44df23f0b86897c738d38e9c48282fcd410308632f/testcontainers-4.14.1.tar.gz", hash = "sha256:316f1bb178d829c003acd650233e3ff3c59a833a08d8661c074f58a4fbd42a64", size = 80148, upload-time = "2026-01-31T23:13:46.915Z" }
@@ -476,28 +509,20 @@ wheels = [
476
509
 
477
510
  [[package]]
478
511
  name = "urllib3"
479
- version = "2.2.3"
512
+ version = "2.6.3"
480
513
  source = { registry = "https://pypi.org/simple" }
481
- resolution-markers = [
482
- "python_full_version < '3.9'",
483
- ]
484
- sdist = { url = "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", size = 300677, upload-time = "2024-09-12T10:52:18.401Z" }
514
+ sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" }
485
515
  wheels = [
486
- { url = "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", size = 126338, upload-time = "2024-09-12T10:52:16.589Z" },
516
+ { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" },
487
517
  ]
488
518
 
489
519
  [[package]]
490
- name = "urllib3"
491
- version = "2.6.3"
520
+ name = "websocket-client"
521
+ version = "1.8.0"
492
522
  source = { registry = "https://pypi.org/simple" }
493
- resolution-markers = [
494
- "python_full_version >= '3.10'",
495
- "python_full_version >= '3.9.2' and python_full_version < '3.10'",
496
- "python_full_version >= '3.9' and python_full_version < '3.9.2'",
497
- ]
498
- sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" }
523
+ sdist = { url = "https://files.pythonhosted.org/packages/e6/30/fba0d96b4b5fbf5948ed3f4681f7da2f9f64512e1d303f94b4cc174c24a5/websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da", size = 54648, upload-time = "2024-04-23T22:16:16.976Z" }
499
524
  wheels = [
500
- { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" },
525
+ { url = "https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", size = 58826, upload-time = "2024-04-23T22:16:14.422Z" },
501
526
  ]
502
527
 
503
528
  [[package]]
File without changes
File without changes
File without changes