content-core 0.6.0__tar.gz → 0.7.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.

Potentially problematic release.


This version of content-core might be problematic. Click here for more details.

Files changed (59) hide show
  1. {content_core-0.6.0 → content_core-0.7.0}/PKG-INFO +3 -5
  2. {content_core-0.6.0 → content_core-0.7.0}/pyproject.toml +4 -5
  3. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/content/extraction/graph.py +2 -9
  4. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/processors/url.py +52 -0
  5. {content_core-0.6.0 → content_core-0.7.0}/uv.lock +14 -144
  6. {content_core-0.6.0 → content_core-0.7.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  7. {content_core-0.6.0 → content_core-0.7.0}/.github/workflows/publish.yml +0 -0
  8. {content_core-0.6.0 → content_core-0.7.0}/.gitignore +0 -0
  9. {content_core-0.6.0 → content_core-0.7.0}/.python-version +0 -0
  10. {content_core-0.6.0 → content_core-0.7.0}/CONTRIBUTING.md +0 -0
  11. {content_core-0.6.0 → content_core-0.7.0}/LICENSE +0 -0
  12. {content_core-0.6.0 → content_core-0.7.0}/Makefile +0 -0
  13. {content_core-0.6.0 → content_core-0.7.0}/README.md +0 -0
  14. {content_core-0.6.0 → content_core-0.7.0}/docs/processors.md +0 -0
  15. {content_core-0.6.0 → content_core-0.7.0}/docs/usage.md +0 -0
  16. {content_core-0.6.0 → content_core-0.7.0}/prompts/content/cleanup.jinja +0 -0
  17. {content_core-0.6.0 → content_core-0.7.0}/prompts/content/summarize.jinja +0 -0
  18. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/__init__.py +0 -0
  19. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/cc_config.yaml +0 -0
  20. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/common/__init__.py +0 -0
  21. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/common/exceptions.py +0 -0
  22. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/common/state.py +0 -0
  23. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/common/utils.py +0 -0
  24. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/config.py +0 -0
  25. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/content/__init__.py +0 -0
  26. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/content/cleanup/__init__.py +0 -0
  27. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/content/cleanup/core.py +0 -0
  28. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/content/extraction/__init__.py +0 -0
  29. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/content/summary/__init__.py +0 -0
  30. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/content/summary/core.py +0 -0
  31. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/logging.py +0 -0
  32. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/models.py +0 -0
  33. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/models_config.yaml +0 -0
  34. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/notebooks/run.ipynb +0 -0
  35. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/processors/audio.py +0 -0
  36. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/processors/docling.py +0 -0
  37. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/processors/office.py +0 -0
  38. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/processors/pdf.py +0 -0
  39. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/processors/text.py +0 -0
  40. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/processors/video.py +0 -0
  41. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/processors/youtube.py +0 -0
  42. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/py.typed +0 -0
  43. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/templated_message.py +0 -0
  44. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/tools/__init__.py +0 -0
  45. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/tools/cleanup.py +0 -0
  46. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/tools/extract.py +0 -0
  47. {content_core-0.6.0 → content_core-0.7.0}/src/content_core/tools/summarize.py +0 -0
  48. {content_core-0.6.0 → content_core-0.7.0}/tests/input_content/file.docx +0 -0
  49. {content_core-0.6.0 → content_core-0.7.0}/tests/input_content/file.epub +0 -0
  50. {content_core-0.6.0 → content_core-0.7.0}/tests/input_content/file.md +0 -0
  51. {content_core-0.6.0 → content_core-0.7.0}/tests/input_content/file.mp3 +0 -0
  52. {content_core-0.6.0 → content_core-0.7.0}/tests/input_content/file.mp4 +0 -0
  53. {content_core-0.6.0 → content_core-0.7.0}/tests/input_content/file.pdf +0 -0
  54. {content_core-0.6.0 → content_core-0.7.0}/tests/input_content/file.pptx +0 -0
  55. {content_core-0.6.0 → content_core-0.7.0}/tests/input_content/file.txt +0 -0
  56. {content_core-0.6.0 → content_core-0.7.0}/tests/input_content/file.xlsx +0 -0
  57. {content_core-0.6.0 → content_core-0.7.0}/tests/input_content/file_audio.mp3 +0 -0
  58. {content_core-0.6.0 → content_core-0.7.0}/tests/integration/test_extraction.py +0 -0
  59. {content_core-0.6.0 → content_core-0.7.0}/tests/unit/test_docling.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: content-core
3
- Version: 0.6.0
3
+ Version: 0.7.0
4
4
  Summary: Extract what matters from any media source
5
5
  Author-email: LUIS NOVO <lfnovo@gmail.com>
6
6
  License-File: LICENSE
@@ -9,14 +9,12 @@ Requires-Dist: ai-prompter>=0.2.3
9
9
  Requires-Dist: aiohttp>=3.11
10
10
  Requires-Dist: bs4>=0.0.2
11
11
  Requires-Dist: dicttoxml>=1.7.16
12
- Requires-Dist: esperanto>=1.2.0
13
- Requires-Dist: google-genai>=1.10.0
12
+ Requires-Dist: esperanto[openai]>=1.2.0
14
13
  Requires-Dist: jinja2>=3.1.6
15
14
  Requires-Dist: langdetect>=1.0.9
16
15
  Requires-Dist: langgraph>=0.3.29
17
16
  Requires-Dist: loguru>=0.7.3
18
17
  Requires-Dist: moviepy>=2.1.2
19
- Requires-Dist: openai>=1.73.0
20
18
  Requires-Dist: openpyxl>=3.1.5
21
19
  Requires-Dist: pandas>=2.2.3
22
20
  Requires-Dist: pymupdf>=1.25.5
@@ -28,7 +26,7 @@ Requires-Dist: validators>=0.34.0
28
26
  Requires-Dist: youtube-transcript-api>=1.0.3
29
27
  Provides-Extra: docling
30
28
  Requires-Dist: asciidoc; extra == 'docling'
31
- Requires-Dist: docling[ocr]; extra == 'docling'
29
+ Requires-Dist: docling; extra == 'docling'
32
30
  Requires-Dist: pandas; extra == 'docling'
33
31
  Requires-Dist: pillow; extra == 'docling'
34
32
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "content-core"
3
- version = "0.6.0"
3
+ version = "0.7.0"
4
4
  description = "Extract what matters from any media source"
5
5
  readme = "README.md"
6
6
  homepage = "https://github.com/lfnovo/content-core"
@@ -11,12 +11,10 @@ requires-python = ">=3.10"
11
11
  dependencies = [
12
12
  "aiohttp>=3.11",
13
13
  "bs4>=0.0.2",
14
- "esperanto>=1.2.0",
15
- "google-genai>=1.10.0",
14
+ "esperanto[openai]>=1.2.0",
16
15
  "jinja2>=3.1.6",
17
16
  "langdetect>=1.0.9",
18
17
  "loguru>=0.7.3",
19
- "openai>=1.73.0",
20
18
  "openpyxl>=3.1.5",
21
19
  "pandas>=2.2.3",
22
20
  "pymupdf>=1.25.5",
@@ -33,7 +31,7 @@ dependencies = [
33
31
  ]
34
32
 
35
33
  [project.optional-dependencies]
36
- docling = ["docling[ocr]", "Pillow", "pandas", "asciidoc"]
34
+ docling = ["docling", "Pillow", "pandas", "asciidoc"]
37
35
 
38
36
  [project.scripts]
39
37
  ccore = "content_core:ccore"
@@ -54,6 +52,7 @@ package-dir = {"content_core" = "src/content_core"}
54
52
  dev = [
55
53
  "ipykernel>=4.0.1",
56
54
  "ipywidgets>=4.0.0",
55
+ "openai>=1.78.1",
57
56
  "pyperclip>=1.9.0",
58
57
  "pytest>=7.2.0",
59
58
  "pytest-asyncio>=0.21.0",
@@ -15,10 +15,8 @@ from content_core.common import (
15
15
  from content_core.config import CONFIG # type: ignore
16
16
  from content_core.logging import logger
17
17
  from content_core.processors.audio import extract_audio_data # type: ignore
18
- from content_core.processors.docling import (
19
- DOCLING_SUPPORTED, # type: ignore
20
- extract_with_docling,
21
- )
18
+ from content_core.processors.docling import DOCLING_SUPPORTED # type: ignore
19
+ from content_core.processors.docling import extract_with_docling
22
20
  from content_core.processors.office import (
23
21
  SUPPORTED_OFFICE_TYPES,
24
22
  extract_office_content,
@@ -186,8 +184,3 @@ workflow.add_edge("download_remote_file", "file_type")
186
184
 
187
185
  # Compile graph
188
186
  graph = workflow.compile()
189
-
190
- # Compile graph
191
- graph = workflow.compile()
192
- # Compile graph
193
- graph = workflow.compile()
@@ -1,7 +1,9 @@
1
1
  import re
2
2
  from urllib.parse import urlparse
3
+ from io import BytesIO
3
4
 
4
5
  import aiohttp
6
+ import docx
5
7
  from bs4 import BeautifulSoup, Comment
6
8
 
7
9
  from content_core.common import ProcessSourceState
@@ -12,6 +14,49 @@ from content_core.processors.pdf import SUPPORTED_FITZ_TYPES
12
14
  # https://github.com/buriy/python-readability
13
15
  # also try readability: from readability import Document
14
16
 
17
+ DOCX_MIME_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
18
+
19
+ async def _extract_docx_content(docx_bytes: bytes, url: str):
20
+ """
21
+ Extract content from DOCX file bytes.
22
+ """
23
+ try:
24
+ logger.debug(f"Attempting to parse DOCX from URL: {url} with python-docx")
25
+ doc = docx.Document(BytesIO(docx_bytes))
26
+ content_parts = [p.text for p in doc.paragraphs if p.text]
27
+ full_content = "\n\n".join(content_parts)
28
+
29
+ # Try to get a title from document properties or first heading
30
+ title = doc.core_properties.title
31
+ if not title and doc.paragraphs:
32
+ # Look for a potential title in the first few paragraphs (e.g., if styled as heading)
33
+ for p in doc.paragraphs[:5]: # Check first 5 paragraphs
34
+ if p.style.name.startswith('Heading'):
35
+ title = p.text
36
+ break
37
+ if not title: # Fallback to first line if no heading found
38
+ title = doc.paragraphs[0].text.strip() if doc.paragraphs[0].text.strip() else None
39
+
40
+ # If no title found, use filename from URL
41
+ if not title:
42
+ title = urlparse(url).path.split('/')[-1]
43
+
44
+ logger.info(f"Successfully extracted content from DOCX: {url}, Title: {title}")
45
+ return {
46
+ "title": title,
47
+ "content": full_content,
48
+ "domain": urlparse(url).netloc,
49
+ "url": url,
50
+ }
51
+ except Exception as e:
52
+ logger.error(f"Failed to process DOCX content from {url}: {e}")
53
+ # Fallback or re-raise, depending on desired error handling
54
+ return {
55
+ "title": f"Error Processing DOCX: {urlparse(url).path.split('/')[-1]}",
56
+ "content": f"Failed to extract content from DOCX: {e}",
57
+ "domain": urlparse(url).netloc,
58
+ "url": url,
59
+ }
15
60
 
16
61
  async def url_provider(state: ProcessSourceState):
17
62
  """
@@ -54,6 +99,13 @@ async def extract_url_bs4(url: str):
54
99
  async with aiohttp.ClientSession() as session:
55
100
  async with session.get(url, headers=headers, timeout=10) as response:
56
101
  response.raise_for_status()
102
+ # Check content type for DOCX
103
+ if response.content_type == DOCX_MIME_TYPE:
104
+ logger.debug(f"Detected DOCX content type for {url}")
105
+ docx_bytes = await response.read()
106
+ return await _extract_docx_content(docx_bytes, url)
107
+
108
+ # If not DOCX, proceed as HTML
57
109
  html_content = await response.text()
58
110
 
59
111
  soup = BeautifulSoup(html_content, "html.parser")
@@ -234,15 +234,6 @@ wheels = [
234
234
  { url = "https://files.pythonhosted.org/packages/51/bb/bf7aab772a159614954d84aa832c129624ba6c32faa559dfb200a534e50b/bs4-0.0.2-py2.py3-none-any.whl", hash = "sha256:abf8742c0805ef7f662dce4b51cca104cffe52b835238afc169142ab9b3fbccc", size = 1189 },
235
235
  ]
236
236
 
237
- [[package]]
238
- name = "cachetools"
239
- version = "5.5.2"
240
- source = { registry = "https://pypi.org/simple" }
241
- sdist = { url = "https://files.pythonhosted.org/packages/6c/81/3747dad6b14fa2cf53fcf10548cf5aea6913e96fab41a3c198676f8948a5/cachetools-5.5.2.tar.gz", hash = "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4", size = 28380 }
242
- wheels = [
243
- { url = "https://files.pythonhosted.org/packages/72/76/20fa66124dbe6be5cafeb312ece67de6b61dd91a0247d1ea13db4ebb33c2/cachetools-5.5.2-py3-none-any.whl", hash = "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a", size = 10080 },
244
- ]
245
-
246
237
  [[package]]
247
238
  name = "certifi"
248
239
  version = "2025.1.31"
@@ -405,21 +396,19 @@ wheels = [
405
396
 
406
397
  [[package]]
407
398
  name = "content-core"
408
- version = "0.6.0"
399
+ version = "0.7.0"
409
400
  source = { editable = "." }
410
401
  dependencies = [
411
402
  { name = "ai-prompter" },
412
403
  { name = "aiohttp" },
413
404
  { name = "bs4" },
414
405
  { name = "dicttoxml" },
415
- { name = "esperanto" },
416
- { name = "google-genai" },
406
+ { name = "esperanto", extra = ["openai"] },
417
407
  { name = "jinja2" },
418
408
  { name = "langdetect" },
419
409
  { name = "langgraph" },
420
410
  { name = "loguru" },
421
411
  { name = "moviepy" },
422
- { name = "openai" },
423
412
  { name = "openpyxl" },
424
413
  { name = "pandas" },
425
414
  { name = "pymupdf" },
@@ -443,6 +432,7 @@ docling = [
443
432
  dev = [
444
433
  { name = "ipykernel" },
445
434
  { name = "ipywidgets" },
435
+ { name = "openai" },
446
436
  { name = "pyperclip" },
447
437
  { name = "pytest" },
448
438
  { name = "pytest-asyncio" },
@@ -455,15 +445,13 @@ requires-dist = [
455
445
  { name = "asciidoc", marker = "extra == 'docling'" },
456
446
  { name = "bs4", specifier = ">=0.0.2" },
457
447
  { name = "dicttoxml", specifier = ">=1.7.16" },
458
- { name = "docling", extras = ["ocr"], marker = "extra == 'docling'" },
459
- { name = "esperanto", specifier = ">=1.2.0" },
460
- { name = "google-genai", specifier = ">=1.10.0" },
448
+ { name = "docling", marker = "extra == 'docling'" },
449
+ { name = "esperanto", extras = ["openai"], specifier = ">=1.2.0" },
461
450
  { name = "jinja2", specifier = ">=3.1.6" },
462
451
  { name = "langdetect", specifier = ">=1.0.9" },
463
452
  { name = "langgraph", specifier = ">=0.3.29" },
464
453
  { name = "loguru", specifier = ">=0.7.3" },
465
454
  { name = "moviepy", specifier = ">=2.1.2" },
466
- { name = "openai", specifier = ">=1.73.0" },
467
455
  { name = "openpyxl", specifier = ">=3.1.5" },
468
456
  { name = "pandas", specifier = ">=2.2.3" },
469
457
  { name = "pandas", marker = "extra == 'docling'" },
@@ -481,6 +469,7 @@ requires-dist = [
481
469
  dev = [
482
470
  { name = "ipykernel", specifier = ">=4.0.1" },
483
471
  { name = "ipywidgets", specifier = ">=4.0.0" },
472
+ { name = "openai", specifier = ">=1.78.1" },
484
473
  { name = "pyperclip", specifier = ">=1.9.0" },
485
474
  { name = "pytest", specifier = ">=7.2.0" },
486
475
  { name = "pytest-asyncio", specifier = ">=0.21.0" },
@@ -718,6 +707,11 @@ wheels = [
718
707
  { url = "https://files.pythonhosted.org/packages/f9/79/5d74f2b8f9d73da83bfe80a39ff11505a2a285c03a869750db98cd89ddfd/esperanto-1.2.1-py3-none-any.whl", hash = "sha256:2fa41e5e35c847b1fe58395906d8877035f7e55d6429870d897781f7c9f17c42", size = 57680 },
719
708
  ]
720
709
 
710
+ [package.optional-dependencies]
711
+ openai = [
712
+ { name = "openai" },
713
+ ]
714
+
721
715
  [[package]]
722
716
  name = "et-xmlfile"
723
717
  version = "2.0.0"
@@ -841,38 +835,6 @@ wheels = [
841
835
  { url = "https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl", hash = "sha256:2daf8dc3d1dfa65b6aa37748d112773a7a08416f6c70d96b264c96476ecaf711", size = 194435 },
842
836
  ]
843
837
 
844
- [[package]]
845
- name = "google-auth"
846
- version = "2.39.0"
847
- source = { registry = "https://pypi.org/simple" }
848
- dependencies = [
849
- { name = "cachetools" },
850
- { name = "pyasn1-modules" },
851
- { name = "rsa" },
852
- ]
853
- sdist = { url = "https://files.pythonhosted.org/packages/cb/8e/8f45c9a32f73e786e954b8f9761c61422955d23c45d1e8c347f9b4b59e8e/google_auth-2.39.0.tar.gz", hash = "sha256:73222d43cdc35a3aeacbfdcaf73142a97839f10de930550d89ebfe1d0a00cde7", size = 274834 }
854
- wheels = [
855
- { url = "https://files.pythonhosted.org/packages/ce/12/ad37a1ef86006d0a0117fc06a4a00bd461c775356b534b425f00dde208ea/google_auth-2.39.0-py2.py3-none-any.whl", hash = "sha256:0150b6711e97fb9f52fe599f55648950cc4540015565d8fbb31be2ad6e1548a2", size = 212319 },
856
- ]
857
-
858
- [[package]]
859
- name = "google-genai"
860
- version = "1.10.0"
861
- source = { registry = "https://pypi.org/simple" }
862
- dependencies = [
863
- { name = "anyio" },
864
- { name = "google-auth" },
865
- { name = "httpx" },
866
- { name = "pydantic" },
867
- { name = "requests" },
868
- { name = "typing-extensions" },
869
- { name = "websockets" },
870
- ]
871
- sdist = { url = "https://files.pythonhosted.org/packages/0e/7a/224e2f70c835202042969685ee3da00a6475508d1b64f0f1e90144f96beb/google_genai-1.10.0.tar.gz", hash = "sha256:f59423e0f155dc66b7792c8a0e6724c75c72dc699d1eb7907d4d0006d4f6186f", size = 156355 }
872
- wheels = [
873
- { url = "https://files.pythonhosted.org/packages/ba/a0/56839a2e202d79c773edd1c1db124da8eb2a7b657267a888080b678d0369/google_genai-1.10.0-py3-none-any.whl", hash = "sha256:41b105a2fcf8a027fc45cc16694cd559b8cd1272eab7345ad58cfa2c353bf34f", size = 154705 },
874
- ]
875
-
876
838
  [[package]]
877
839
  name = "h11"
878
840
  version = "0.14.0"
@@ -1983,7 +1945,7 @@ wheels = [
1983
1945
 
1984
1946
  [[package]]
1985
1947
  name = "openai"
1986
- version = "1.74.0"
1948
+ version = "1.78.1"
1987
1949
  source = { registry = "https://pypi.org/simple" }
1988
1950
  dependencies = [
1989
1951
  { name = "anyio" },
@@ -1995,9 +1957,9 @@ dependencies = [
1995
1957
  { name = "tqdm" },
1996
1958
  { name = "typing-extensions" },
1997
1959
  ]
1998
- sdist = { url = "https://files.pythonhosted.org/packages/75/86/c605a6e84da0248f2cebfcd864b5a6076ecf78849245af5e11d2a5ec7977/openai-1.74.0.tar.gz", hash = "sha256:592c25b8747a7cad33a841958f5eb859a785caea9ee22b9e4f4a2ec062236526", size = 427571 }
1960
+ sdist = { url = "https://files.pythonhosted.org/packages/a4/3f/4e5e7b0548a15eabc4a755c93cd5f9564887e3d2fd45b6ff531352e5859d/openai-1.78.1.tar.gz", hash = "sha256:8b26b364531b100df1b961d03560042e5f5be11301d7d49a6cd1a2b9af824dca", size = 442985 }
1999
1961
  wheels = [
2000
- { url = "https://files.pythonhosted.org/packages/a9/91/8c150f16a96367e14bd7d20e86e0bbbec3080e3eb593e63f21a7f013f8e4/openai-1.74.0-py3-none-any.whl", hash = "sha256:aff3e0f9fb209836382ec112778667027f4fd6ae38bdb2334bc9e173598b092a", size = 644790 },
1962
+ { url = "https://files.pythonhosted.org/packages/3c/4c/3889bc332a6c743751eb78a4bada5761e50a8a847ff0e46c1bd23ce12362/openai-1.78.1-py3-none-any.whl", hash = "sha256:7368bf147ca499804cc408fe68cdb6866a060f38dec961bbc97b04f9d917907e", size = 680917 },
2001
1963
  ]
2002
1964
 
2003
1965
  [[package]]
@@ -2443,27 +2405,6 @@ wheels = [
2443
2405
  { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 },
2444
2406
  ]
2445
2407
 
2446
- [[package]]
2447
- name = "pyasn1"
2448
- version = "0.6.1"
2449
- source = { registry = "https://pypi.org/simple" }
2450
- sdist = { url = "https://files.pythonhosted.org/packages/ba/e9/01f1a64245b89f039897cb0130016d79f77d52669aae6ee7b159a6c4c018/pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034", size = 145322 }
2451
- wheels = [
2452
- { url = "https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629", size = 83135 },
2453
- ]
2454
-
2455
- [[package]]
2456
- name = "pyasn1-modules"
2457
- version = "0.4.2"
2458
- source = { registry = "https://pypi.org/simple" }
2459
- dependencies = [
2460
- { name = "pyasn1" },
2461
- ]
2462
- sdist = { url = "https://files.pythonhosted.org/packages/e9/e6/78ebbb10a8c8e4b61a59249394a4a594c1a7af95593dc933a349c8d00964/pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6", size = 307892 }
2463
- wheels = [
2464
- { url = "https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a", size = 181259 },
2465
- ]
2466
-
2467
2408
  [[package]]
2468
2409
  name = "pyclipper"
2469
2410
  version = "1.3.0.post6"
@@ -3205,18 +3146,6 @@ wheels = [
3205
3146
  { url = "https://files.pythonhosted.org/packages/b3/14/c492b9c7d5dd133e13f211ddea6bb9870f99e4f73932f11aa00bc09a9be9/rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6a727fd083009bc83eb83d6950f0c32b3c94c8b80a9b667c87f4bd1274ca30ba", size = 560885 },
3206
3147
  ]
3207
3148
 
3208
- [[package]]
3209
- name = "rsa"
3210
- version = "4.9"
3211
- source = { registry = "https://pypi.org/simple" }
3212
- dependencies = [
3213
- { name = "pyasn1" },
3214
- ]
3215
- sdist = { url = "https://files.pythonhosted.org/packages/aa/65/7d973b89c4d2351d7fb232c2e452547ddfa243e93131e7cfa766da627b52/rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21", size = 29711 }
3216
- wheels = [
3217
- { url = "https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7", size = 34315 },
3218
- ]
3219
-
3220
3149
  [[package]]
3221
3150
  name = "rtree"
3222
3151
  version = "1.4.0"
@@ -3901,65 +3830,6 @@ wheels = [
3901
3830
  { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 },
3902
3831
  ]
3903
3832
 
3904
- [[package]]
3905
- name = "websockets"
3906
- version = "15.0.1"
3907
- source = { registry = "https://pypi.org/simple" }
3908
- sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016 }
3909
- wheels = [
3910
- { url = "https://files.pythonhosted.org/packages/1e/da/6462a9f510c0c49837bbc9345aca92d767a56c1fb2939e1579df1e1cdcf7/websockets-15.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b", size = 175423 },
3911
- { url = "https://files.pythonhosted.org/packages/1c/9f/9d11c1a4eb046a9e106483b9ff69bce7ac880443f00e5ce64261b47b07e7/websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205", size = 173080 },
3912
- { url = "https://files.pythonhosted.org/packages/d5/4f/b462242432d93ea45f297b6179c7333dd0402b855a912a04e7fc61c0d71f/websockets-15.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a", size = 173329 },
3913
- { url = "https://files.pythonhosted.org/packages/6e/0c/6afa1f4644d7ed50284ac59cc70ef8abd44ccf7d45850d989ea7310538d0/websockets-15.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e", size = 182312 },
3914
- { url = "https://files.pythonhosted.org/packages/dd/d4/ffc8bd1350b229ca7a4db2a3e1c482cf87cea1baccd0ef3e72bc720caeec/websockets-15.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf", size = 181319 },
3915
- { url = "https://files.pythonhosted.org/packages/97/3a/5323a6bb94917af13bbb34009fac01e55c51dfde354f63692bf2533ffbc2/websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb", size = 181631 },
3916
- { url = "https://files.pythonhosted.org/packages/a6/cc/1aeb0f7cee59ef065724041bb7ed667b6ab1eeffe5141696cccec2687b66/websockets-15.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d", size = 182016 },
3917
- { url = "https://files.pythonhosted.org/packages/79/f9/c86f8f7af208e4161a7f7e02774e9d0a81c632ae76db2ff22549e1718a51/websockets-15.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9", size = 181426 },
3918
- { url = "https://files.pythonhosted.org/packages/c7/b9/828b0bc6753db905b91df6ae477c0b14a141090df64fb17f8a9d7e3516cf/websockets-15.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c", size = 181360 },
3919
- { url = "https://files.pythonhosted.org/packages/89/fb/250f5533ec468ba6327055b7d98b9df056fb1ce623b8b6aaafb30b55d02e/websockets-15.0.1-cp310-cp310-win32.whl", hash = "sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256", size = 176388 },
3920
- { url = "https://files.pythonhosted.org/packages/1c/46/aca7082012768bb98e5608f01658ff3ac8437e563eca41cf068bd5849a5e/websockets-15.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41", size = 176830 },
3921
- { url = "https://files.pythonhosted.org/packages/9f/32/18fcd5919c293a398db67443acd33fde142f283853076049824fc58e6f75/websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431", size = 175423 },
3922
- { url = "https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57", size = 173082 },
3923
- { url = "https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905", size = 173330 },
3924
- { url = "https://files.pythonhosted.org/packages/a5/90/1c37ae8b8a113d3daf1065222b6af61cc44102da95388ac0018fcb7d93d9/websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562", size = 182878 },
3925
- { url = "https://files.pythonhosted.org/packages/8e/8d/96e8e288b2a41dffafb78e8904ea7367ee4f891dafc2ab8d87e2124cb3d3/websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792", size = 181883 },
3926
- { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252 },
3927
- { url = "https://files.pythonhosted.org/packages/d4/78/2d4fed9123e6620cbf1706c0de8a1632e1a28e7774d94346d7de1bba2ca3/websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8", size = 182521 },
3928
- { url = "https://files.pythonhosted.org/packages/e7/3b/66d4c1b444dd1a9823c4a81f50231b921bab54eee2f69e70319b4e21f1ca/websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3", size = 181958 },
3929
- { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918 },
3930
- { url = "https://files.pythonhosted.org/packages/d8/75/994634a49b7e12532be6a42103597b71098fd25900f7437d6055ed39930a/websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85", size = 176388 },
3931
- { url = "https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065", size = 176828 },
3932
- { url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437 },
3933
- { url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096 },
3934
- { url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332 },
3935
- { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152 },
3936
- { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096 },
3937
- { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523 },
3938
- { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790 },
3939
- { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165 },
3940
- { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160 },
3941
- { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395 },
3942
- { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841 },
3943
- { url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440 },
3944
- { url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098 },
3945
- { url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329 },
3946
- { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111 },
3947
- { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054 },
3948
- { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496 },
3949
- { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829 },
3950
- { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217 },
3951
- { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195 },
3952
- { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393 },
3953
- { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837 },
3954
- { url = "https://files.pythonhosted.org/packages/02/9e/d40f779fa16f74d3468357197af8d6ad07e7c5a27ea1ca74ceb38986f77a/websockets-15.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3", size = 173109 },
3955
- { url = "https://files.pythonhosted.org/packages/bc/cd/5b887b8585a593073fd92f7c23ecd3985cd2c3175025a91b0d69b0551372/websockets-15.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1", size = 173343 },
3956
- { url = "https://files.pythonhosted.org/packages/fe/ae/d34f7556890341e900a95acf4886833646306269f899d58ad62f588bf410/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475", size = 174599 },
3957
- { url = "https://files.pythonhosted.org/packages/71/e6/5fd43993a87db364ec60fc1d608273a1a465c0caba69176dd160e197ce42/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9", size = 174207 },
3958
- { url = "https://files.pythonhosted.org/packages/2b/fb/c492d6daa5ec067c2988ac80c61359ace5c4c674c532985ac5a123436cec/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04", size = 174155 },
3959
- { url = "https://files.pythonhosted.org/packages/68/a1/dcb68430b1d00b698ae7a7e0194433bce4f07ded185f0ee5fb21e2a2e91e/websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122", size = 176884 },
3960
- { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743 },
3961
- ]
3962
-
3963
3833
  [[package]]
3964
3834
  name = "widgetsnbextension"
3965
3835
  version = "4.0.14"
File without changes
File without changes
File without changes
File without changes
File without changes