deltadefi 0.1.0__tar.gz → 0.1.1__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 deltadefi might be problematic. Click here for more details.

Files changed (37) hide show
  1. {deltadefi-0.1.0 → deltadefi-0.1.1}/.env.example +1 -1
  2. {deltadefi-0.1.0 → deltadefi-0.1.1}/.gitignore +1 -1
  3. deltadefi-0.1.1/.pre-commit-config.yaml +67 -0
  4. {deltadefi-0.1.0 → deltadefi-0.1.1}/Makefile +10 -1
  5. {deltadefi-0.1.0 → deltadefi-0.1.1}/PKG-INFO +1 -1
  6. {deltadefi-0.1.0 → deltadefi-0.1.1}/coverage.xml +41 -39
  7. {deltadefi-0.1.0 → deltadefi-0.1.1}/pyproject.toml +6 -3
  8. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/api.py +1 -1
  9. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/clients/accounts.py +1 -1
  10. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/clients/markets.py +1 -1
  11. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/clients/orders.py +1 -1
  12. deltadefi-0.1.1/src/deltadefi/utils/__init__.py +2 -0
  13. deltadefi-0.1.1/src/deltadefi/utils/helpers.py +46 -0
  14. {deltadefi-0.1.0 → deltadefi-0.1.1}/tests/clients/test_accounts.py +5 -2
  15. {deltadefi-0.1.0 → deltadefi-0.1.1}/tests/clients/test_order.py +6 -3
  16. {deltadefi-0.1.0 → deltadefi-0.1.1}/uv.lock +147 -1
  17. {deltadefi-0.1.0 → deltadefi-0.1.1}/.github/workflows/publish.yml +0 -0
  18. {deltadefi-0.1.0 → deltadefi-0.1.1}/README.md +0 -0
  19. {deltadefi-0.1.0 → deltadefi-0.1.1}/examples/websocket_example.py +0 -0
  20. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/__init__.py +0 -0
  21. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/api_resources/__init__.py +0 -0
  22. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/api_resources/auth.py +0 -0
  23. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/api_resources/validation.py +0 -0
  24. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/clients/__init__.py +0 -0
  25. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/clients/client.py +0 -0
  26. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/clients/websocket.py +0 -0
  27. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/constants/__init__.py +0 -0
  28. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/constants/constants.py +0 -0
  29. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/error.py +0 -0
  30. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/models/__init__.py +0 -0
  31. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/models/models.py +0 -0
  32. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/responses/__init__.py +0 -0
  33. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/responses/accounts.py +0 -0
  34. {deltadefi-0.1.0 → deltadefi-0.1.1}/src/deltadefi/responses/responses.py +0 -0
  35. {deltadefi-0.1.0 → deltadefi-0.1.1}/tests/__init__.py +0 -0
  36. {deltadefi-0.1.0 → deltadefi-0.1.1}/tests/clients/__init__.py +0 -0
  37. {deltadefi-0.1.0 → deltadefi-0.1.1}/tests/clients/test_sign.py +0 -0
@@ -1,3 +1,3 @@
1
1
  TRADING_PASSWORD="xxxxxxxx"
2
2
  DELTADEFI_API_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
3
- BASE_URL="http://localhost:8080"
3
+ BASE_URL="http://localhost:8080"
@@ -59,4 +59,4 @@ docs/_build/
59
59
 
60
60
  # OS
61
61
  .DS_Store
62
- Thumbs.db
62
+ Thumbs.db
@@ -0,0 +1,67 @@
1
+ repos:
2
+ # Standard pre-commit hooks
3
+ - repo: https://github.com/pre-commit/pre-commit-hooks
4
+ rev: v5.0.0
5
+ hooks:
6
+ - id: trailing-whitespace
7
+ - id: end-of-file-fixer
8
+ - id: check-yaml
9
+ - id: check-added-large-files
10
+ - id: check-json
11
+ - id: check-toml
12
+ - id: check-merge-conflict
13
+ - id: debug-statements
14
+
15
+ # Ruff for linting and formatting
16
+ - repo: https://github.com/astral-sh/ruff-pre-commit
17
+ rev: v0.12.10
18
+ hooks:
19
+ - id: ruff
20
+ args: [--fix]
21
+ - id: ruff-format
22
+
23
+ # MyPy for type checking (lenient for now)
24
+ - repo: https://github.com/pre-commit/mirrors-mypy
25
+ rev: v1.17.1
26
+ hooks:
27
+ - id: mypy
28
+ additional_dependencies: [types-requests]
29
+ args: [--ignore-missing-imports, --disable-error-code=no-any-return, --disable-error-code=call-arg]
30
+
31
+ # Custom hooks for project-specific checks
32
+ - repo: local
33
+ hooks:
34
+ # Install dependencies
35
+ - id: uv-sync
36
+ name: Install dependencies
37
+ entry: uv sync --dev
38
+ language: system
39
+ pass_filenames: false
40
+ stages: [pre-commit]
41
+
42
+ # Run tests
43
+ - id: pytest
44
+ name: Run tests
45
+ entry: uv run pytest
46
+ language: system
47
+ pass_filenames: false
48
+ stages: [pre-commit]
49
+
50
+ # Build package
51
+ - id: uv-build
52
+ name: Build package
53
+ entry: uv build --out-dir .pre-commit-build
54
+ language: system
55
+ pass_filenames: false
56
+ stages: [pre-commit]
57
+
58
+ # Clean up build artifacts
59
+ - id: cleanup-build
60
+ name: Clean build artifacts
61
+ entry: rm -rf .pre-commit-build
62
+ language: system
63
+ pass_filenames: false
64
+ stages: [pre-commit]
65
+
66
+ # Configure which hooks run at different stages
67
+ default_stages: [pre-commit]
@@ -59,7 +59,7 @@ cov-html: cov ## Check code coverage and generate HTML report [test]
59
59
  @$(UV) run coverage html -d cov_html
60
60
  @echo "Coverage report generated in cov_html/"
61
61
 
62
- # 🏗️ Building & Distribution
62
+ # 🏗️ Building & Distribution
63
63
  build: install ## Build the package [build]
64
64
  @$(UV) build
65
65
 
@@ -83,3 +83,12 @@ clean: clean-test ## Remove caches, build artifacts, and temp files
83
83
  version: ## Show uv and Python versions
84
84
  @$(UV) --version
85
85
  @$(UV) run $(PY) -c "import platform; print('Python', platform.python_version())"
86
+
87
+ precommit-install: ## Install pre-commit hooks
88
+ @$(UV) run pre-commit install
89
+
90
+ precommit: ## Run pre-commit hooks on all files
91
+ @$(UV) run pre-commit run --all-files
92
+
93
+ precommit-update: ## Update pre-commit hooks
94
+ @$(UV) run pre-commit autoupdate
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deltadefi
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: Python SDK for DeltaDeFi protocol.
5
5
  Author-email: HinsonSIDAN <wongkahinhinson@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" ?>
2
- <coverage version="7.10.6" timestamp="1756706611321" lines-valid="620" lines-covered="282" line-rate="0.4548" branches-covered="0" branches-valid="0" branch-rate="0" complexity="0">
2
+ <coverage version="7.10.6" timestamp="1756763730245" lines-valid="621" lines-covered="283" line-rate="0.4557" branches-covered="0" branches-valid="0" branch-rate="0" complexity="0">
3
3
  <!-- Generated by coverage.py: https://coverage.readthedocs.io/en/7.10.6 -->
4
4
  <!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd -->
5
5
  <sources>
@@ -175,8 +175,8 @@
175
175
  <line number="5" hits="1"/>
176
176
  <line number="6" hits="1"/>
177
177
  <line number="7" hits="1"/>
178
- <line number="8" hits="1"/>
179
- <line number="18" hits="1"/>
178
+ <line number="17" hits="1"/>
179
+ <line number="24" hits="1"/>
180
180
  <line number="27" hits="1"/>
181
181
  <line number="32" hits="1"/>
182
182
  <line number="34" hits="1"/>
@@ -313,7 +313,7 @@
313
313
  <line number="1" hits="1"/>
314
314
  <line number="2" hits="1"/>
315
315
  <line number="3" hits="1"/>
316
- <line number="4" hits="1"/>
316
+ <line number="8" hits="1"/>
317
317
  <line number="11" hits="1"/>
318
318
  <line number="16" hits="1"/>
319
319
  <line number="18" hits="1"/>
@@ -526,41 +526,6 @@
526
526
  </class>
527
527
  </classes>
528
528
  </package>
529
- <package name="src.deltadefi.lib" line-rate="0.3636" branch-rate="0" complexity="0">
530
- <classes>
531
- <class name="__init__.py" filename="src/deltadefi/lib/__init__.py" complexity="0" line-rate="1" branch-rate="0">
532
- <methods/>
533
- <lines/>
534
- </class>
535
- <class name="utils.py" filename="src/deltadefi/lib/utils.py" complexity="0" line-rate="0.3636" branch-rate="0">
536
- <methods/>
537
- <lines>
538
- <line number="1" hits="1"/>
539
- <line number="3" hits="1"/>
540
- <line number="10" hits="1"/>
541
- <line number="11" hits="0"/>
542
- <line number="12" hits="0"/>
543
- <line number="13" hits="0"/>
544
- <line number="14" hits="0"/>
545
- <line number="15" hits="0"/>
546
- <line number="18" hits="1"/>
547
- <line number="19" hits="0"/>
548
- <line number="20" hits="0"/>
549
- <line number="23" hits="1"/>
550
- <line number="31" hits="0"/>
551
- <line number="32" hits="0"/>
552
- <line number="35" hits="1"/>
553
- <line number="36" hits="0"/>
554
- <line number="37" hits="0"/>
555
- <line number="40" hits="1"/>
556
- <line number="41" hits="0"/>
557
- <line number="42" hits="0"/>
558
- <line number="45" hits="1"/>
559
- <line number="46" hits="0"/>
560
- </lines>
561
- </class>
562
- </classes>
563
- </package>
564
529
  <package name="src.deltadefi.models" line-rate="1" branch-rate="0" complexity="0">
565
530
  <classes>
566
531
  <class name="__init__.py" filename="src/deltadefi/models/__init__.py" complexity="0" line-rate="1" branch-rate="0">
@@ -758,5 +723,42 @@
758
723
  </class>
759
724
  </classes>
760
725
  </package>
726
+ <package name="src.deltadefi.utils" line-rate="0.3913" branch-rate="0" complexity="0">
727
+ <classes>
728
+ <class name="__init__.py" filename="src/deltadefi/utils/__init__.py" complexity="0" line-rate="1" branch-rate="0">
729
+ <methods/>
730
+ <lines>
731
+ <line number="2" hits="1"/>
732
+ </lines>
733
+ </class>
734
+ <class name="helpers.py" filename="src/deltadefi/utils/helpers.py" complexity="0" line-rate="0.3636" branch-rate="0">
735
+ <methods/>
736
+ <lines>
737
+ <line number="1" hits="1"/>
738
+ <line number="3" hits="1"/>
739
+ <line number="10" hits="1"/>
740
+ <line number="11" hits="0"/>
741
+ <line number="12" hits="0"/>
742
+ <line number="13" hits="0"/>
743
+ <line number="14" hits="0"/>
744
+ <line number="15" hits="0"/>
745
+ <line number="18" hits="1"/>
746
+ <line number="19" hits="0"/>
747
+ <line number="20" hits="0"/>
748
+ <line number="23" hits="1"/>
749
+ <line number="31" hits="0"/>
750
+ <line number="32" hits="0"/>
751
+ <line number="35" hits="1"/>
752
+ <line number="36" hits="0"/>
753
+ <line number="37" hits="0"/>
754
+ <line number="40" hits="1"/>
755
+ <line number="41" hits="0"/>
756
+ <line number="42" hits="0"/>
757
+ <line number="45" hits="1"/>
758
+ <line number="46" hits="0"/>
759
+ </lines>
760
+ </class>
761
+ </classes>
762
+ </package>
761
763
  </packages>
762
764
  </coverage>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "deltadefi"
3
- version = "0.1.0"
3
+ version = "0.1.1"
4
4
  description = "Python SDK for DeltaDeFi protocol."
5
5
  readme = "README.md"
6
6
  requires-python = ">3.11,<4.0.0"
@@ -26,7 +26,7 @@ dependencies = [
26
26
  "sidan-gin>=0.1.6",
27
27
  "requests>=2.25.0",
28
28
  "certifi>=2024.8.30",
29
- "charset-normalizer>=3.4.0",
29
+ "charset-normalizer>=3.4.0",
30
30
  "idna>=3.10",
31
31
  "urllib3>=2.2.3",
32
32
  "pycardano>=0.12.3",
@@ -42,6 +42,8 @@ dev = [
42
42
  "ruff>=0.12.10",
43
43
  "mypy>=1.17.1",
44
44
  "twine>=5.0.0",
45
+ "build>=1.3.0",
46
+ "pre-commit>=4.3.0",
45
47
  ]
46
48
 
47
49
  docs = [
@@ -54,6 +56,7 @@ docs = [
54
56
  requires = ["hatchling"]
55
57
  build-backend = "hatchling.build"
56
58
 
59
+
57
60
  [tool.ruff]
58
61
  line-length = 88
59
62
  target-version = "py311"
@@ -63,7 +66,7 @@ exclude = [
63
66
  ".venv",
64
67
  "__pycache__",
65
68
  "build",
66
- "dist",
69
+ "dist",
67
70
  ".pytest_cache",
68
71
  ".mypy_cache",
69
72
  ".ruff_cache",
@@ -3,7 +3,7 @@ import json
3
3
  import requests
4
4
 
5
5
  from deltadefi.error import ClientError, ServerError
6
- from deltadefi.lib.utils import clean_none_value, encoded_string
6
+ from deltadefi.utils import clean_none_value, encoded_string
7
7
 
8
8
 
9
9
  class API:
@@ -3,7 +3,6 @@
3
3
  from sidan_gin import Asset, UTxO
4
4
 
5
5
  from deltadefi.api import API
6
- from deltadefi.lib.utils import check_required_parameter, check_required_parameters
7
6
  from deltadefi.models.models import OrderStatusType
8
7
  from deltadefi.responses import (
9
8
  BuildDepositTransactionResponse,
@@ -22,6 +21,7 @@ from deltadefi.responses.accounts import (
22
21
  GetOrderRecordsResponse,
23
22
  SubmitTransferalTransactionResponse,
24
23
  )
24
+ from deltadefi.utils import check_required_parameter, check_required_parameters
25
25
 
26
26
 
27
27
  class Accounts(API):
@@ -1,8 +1,8 @@
1
1
  from typing import Literal
2
2
 
3
3
  from deltadefi.api import API
4
- from deltadefi.lib.utils import check_required_parameter, check_required_parameters
5
4
  from deltadefi.responses import GetAggregatedPriceResponse, GetMarketPriceResponse
5
+ from deltadefi.utils import check_required_parameter, check_required_parameters
6
6
 
7
7
 
8
8
  class Market(API):
@@ -1,11 +1,11 @@
1
1
  from deltadefi.api import API
2
- from deltadefi.lib.utils import check_required_parameter, check_required_parameters
3
2
  from deltadefi.models.models import OrderSide, OrderType
4
3
  from deltadefi.responses import (
5
4
  BuildCancelOrderTransactionResponse,
6
5
  BuildPlaceOrderTransactionResponse,
7
6
  SubmitPlaceOrderTransactionResponse,
8
7
  )
8
+ from deltadefi.utils import check_required_parameter, check_required_parameters
9
9
 
10
10
 
11
11
  class Order(API):
@@ -0,0 +1,2 @@
1
+ # flake8: noqa
2
+ from .helpers import *
@@ -0,0 +1,46 @@
1
+ from urllib.parse import urlencode
2
+
3
+ from deltadefi.error import (
4
+ ParameterRequiredError,
5
+ ParameterTypeError,
6
+ ParameterValueError,
7
+ )
8
+
9
+
10
+ def clean_none_value(d) -> dict:
11
+ out = {}
12
+ for k in d:
13
+ if d[k] is not None:
14
+ out[k] = d[k]
15
+ return out
16
+
17
+
18
+ def check_required_parameter(value, name):
19
+ if not value and value != 0:
20
+ raise ParameterRequiredError([name])
21
+
22
+
23
+ def check_required_parameters(params):
24
+ """Validate multiple parameters
25
+ params = [
26
+ ['btcusdt', 'symbol'],
27
+ [10, 'price']
28
+ ]
29
+
30
+ """
31
+ for p in params:
32
+ check_required_parameter(p[0], p[1])
33
+
34
+
35
+ def check_enum_parameter(value, enum_class):
36
+ if value not in {item.value for item in enum_class}:
37
+ raise ParameterValueError([value])
38
+
39
+
40
+ def check_type_parameter(value, name, data_type):
41
+ if value is not None and not isinstance(value, data_type):
42
+ raise ParameterTypeError([name, data_type])
43
+
44
+
45
+ def encoded_string(query):
46
+ return urlencode(query, True).replace("%40", "@")
@@ -2,19 +2,22 @@
2
2
  import os
3
3
  import unittest
4
4
 
5
+ import dotenv
6
+
5
7
  from deltadefi.clients import ApiClient
6
8
  from deltadefi.responses import GetAccountBalanceResponse
7
9
  from deltadefi.responses.accounts import GetOperationKeyResponse
8
10
 
11
+ dotenv.load_dotenv()
12
+
9
13
 
10
14
  class TestAccounts(unittest.TestCase):
11
15
  def setUp(self):
12
16
  api_key = os.getenv("DELTADEFI_API_KEY")
13
- base_url = os.getenv("BASE_URL", "http://localhost:8080")
14
17
  print(api_key)
15
18
  if not api_key:
16
19
  self.skipTest("DELTADEFI_API_KEY not set in environment variables")
17
- self.api = ApiClient(api_key=api_key, base_url=base_url)
20
+ self.api = ApiClient(api_key=api_key)
18
21
 
19
22
  def test_get_operation_key(self):
20
23
  response: GetOperationKeyResponse = self.api.accounts.get_operation_key()
@@ -2,20 +2,23 @@
2
2
  import os
3
3
  import unittest
4
4
 
5
- from sidan_gin import Wallet
5
+ import dotenv
6
6
 
7
7
  from deltadefi.clients import ApiClient
8
8
  from deltadefi.responses import PostOrderResponse
9
9
 
10
+ dotenv.load_dotenv()
11
+
10
12
 
11
13
  class TestOrder(unittest.TestCase):
12
14
  def setUp(self):
13
15
  api_key = os.getenv("DELTADEFI_API_KEY")
14
16
  password = os.getenv("TRADING_PASSWORD")
15
- base_url = os.getenv("BASE_URL", "http://localhost:8080")
16
17
  if not api_key:
17
18
  self.skipTest("DELTADEFI_API_KEY not set in environment variables")
18
- api = ApiClient(api_key=api_key, base_url=base_url)
19
+ if not password:
20
+ self.skipTest("TRADING_PASSWORD not set in environment variables")
21
+ api = ApiClient(api_key=api_key)
19
22
  api.load_operation_key(password)
20
23
  self.api = api
21
24
 
@@ -68,6 +68,20 @@ wheels = [
68
68
  { url = "https://files.pythonhosted.org/packages/f7/5a/340b4d06f20ec087a86012bc2294db1ed7c6c85a764d19b329993787a28b/blockfrost_python-0.6.0-py3-none-any.whl", hash = "sha256:c88840b8034b30dc06c637ccd14806e472d830d63522d2a667d9263640a354f4", size = 30857, upload-time = "2024-08-28T10:42:37.412Z" },
69
69
  ]
70
70
 
71
+ [[package]]
72
+ name = "build"
73
+ version = "1.3.0"
74
+ source = { registry = "https://pypi.org/simple" }
75
+ dependencies = [
76
+ { name = "colorama", marker = "os_name == 'nt'" },
77
+ { name = "packaging" },
78
+ { name = "pyproject-hooks" },
79
+ ]
80
+ sdist = { url = "https://files.pythonhosted.org/packages/25/1c/23e33405a7c9eac261dff640926b8b5adaed6a6eb3e1767d441ed611d0c0/build-1.3.0.tar.gz", hash = "sha256:698edd0ea270bde950f53aed21f3a0135672206f3911e0176261a31e0e07b397", size = 48544, upload-time = "2025-08-01T21:27:09.268Z" }
81
+ wheels = [
82
+ { url = "https://files.pythonhosted.org/packages/cb/8c/2b30c12155ad8de0cf641d76a8b396a16d2c36bc6d50b621a62b7c4567c1/build-1.3.0-py3-none-any.whl", hash = "sha256:7145f0b5061ba90a1500d60bd1b13ca0a8a4cebdd0cc16ed8adf1c0e739f43b4", size = 23382, upload-time = "2025-08-01T21:27:07.844Z" },
83
+ ]
84
+
71
85
  [[package]]
72
86
  name = "cachetools"
73
87
  version = "5.5.2"
@@ -204,6 +218,15 @@ wheels = [
204
218
  { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" },
205
219
  ]
206
220
 
221
+ [[package]]
222
+ name = "cfgv"
223
+ version = "3.4.0"
224
+ source = { registry = "https://pypi.org/simple" }
225
+ sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload-time = "2023-08-12T20:38:17.776Z" }
226
+ wheels = [
227
+ { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload-time = "2023-08-12T20:38:16.269Z" },
228
+ ]
229
+
207
230
  [[package]]
208
231
  name = "charset-normalizer"
209
232
  version = "3.4.3"
@@ -412,7 +435,7 @@ wheels = [
412
435
 
413
436
  [[package]]
414
437
  name = "deltadefi"
415
- version = "0.1.0"
438
+ version = "0.1.1"
416
439
  source = { editable = "." }
417
440
  dependencies = [
418
441
  { name = "certifi" },
@@ -428,7 +451,9 @@ dependencies = [
428
451
 
429
452
  [package.dev-dependencies]
430
453
  dev = [
454
+ { name = "build" },
431
455
  { name = "mypy" },
456
+ { name = "pre-commit" },
432
457
  { name = "pytest" },
433
458
  { name = "pytest-cov" },
434
459
  { name = "pytest-xdist" },
@@ -456,7 +481,9 @@ requires-dist = [
456
481
 
457
482
  [package.metadata.requires-dev]
458
483
  dev = [
484
+ { name = "build", specifier = ">=1.3.0" },
459
485
  { name = "mypy", specifier = ">=1.17.1" },
486
+ { name = "pre-commit", specifier = ">=4.3.0" },
460
487
  { name = "pytest", specifier = ">=8.2.0" },
461
488
  { name = "pytest-cov", specifier = ">=5.0.0" },
462
489
  { name = "pytest-xdist", specifier = ">=3.5.0" },
@@ -469,6 +496,15 @@ docs = [
469
496
  { name = "sphinx-rtd-theme", specifier = ">=2.0.0" },
470
497
  ]
471
498
 
499
+ [[package]]
500
+ name = "distlib"
501
+ version = "0.4.0"
502
+ source = { registry = "https://pypi.org/simple" }
503
+ sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605, upload-time = "2025-07-17T16:52:00.465Z" }
504
+ wheels = [
505
+ { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload-time = "2025-07-17T16:51:58.613Z" },
506
+ ]
507
+
472
508
  [[package]]
473
509
  name = "docker"
474
510
  version = "7.1.0"
@@ -522,6 +558,15 @@ wheels = [
522
558
  { url = "https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc", size = 40612, upload-time = "2024-04-08T09:04:17.414Z" },
523
559
  ]
524
560
 
561
+ [[package]]
562
+ name = "filelock"
563
+ version = "3.19.1"
564
+ source = { registry = "https://pypi.org/simple" }
565
+ sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687, upload-time = "2025-08-14T16:56:03.016Z" }
566
+ wheels = [
567
+ { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988, upload-time = "2025-08-14T16:56:01.633Z" },
568
+ ]
569
+
525
570
  [[package]]
526
571
  name = "frozendict"
527
572
  version = "2.4.6"
@@ -634,6 +679,15 @@ wheels = [
634
679
  { url = "https://files.pythonhosted.org/packages/9f/cb/18326d2d89ad3b0dd143da971e77afd1e6ca6674f1b1c3df4b6bec6279fc/id-1.5.0-py3-none-any.whl", hash = "sha256:f1434e1cef91f2cbb8a4ec64663d5a23b9ed43ef44c4c957d02583d61714c658", size = 13611, upload-time = "2024-12-04T19:53:03.02Z" },
635
680
  ]
636
681
 
682
+ [[package]]
683
+ name = "identify"
684
+ version = "2.6.13"
685
+ source = { registry = "https://pypi.org/simple" }
686
+ sdist = { url = "https://files.pythonhosted.org/packages/82/ca/ffbabe3635bb839aa36b3a893c91a9b0d368cb4d8073e03a12896970af82/identify-2.6.13.tar.gz", hash = "sha256:da8d6c828e773620e13bfa86ea601c5a5310ba4bcd65edf378198b56a1f9fb32", size = 99243, upload-time = "2025-08-09T19:35:00.6Z" }
687
+ wheels = [
688
+ { url = "https://files.pythonhosted.org/packages/e7/ce/461b60a3ee109518c055953729bf9ed089a04db895d47e95444071dcdef2/identify-2.6.13-py2.py3-none-any.whl", hash = "sha256:60381139b3ae39447482ecc406944190f690d4a2997f2584062089848361b33b", size = 99153, upload-time = "2025-08-09T19:34:59.1Z" },
689
+ ]
690
+
637
691
  [[package]]
638
692
  name = "idna"
639
693
  version = "3.10"
@@ -915,6 +969,15 @@ wheels = [
915
969
  { url = "https://files.pythonhosted.org/packages/5b/76/3165e84e5266d146d967a6cc784ff2fbf6ddd00985a55ec006b72bc39d5d/nh3-0.3.0-cp38-abi3-win_arm64.whl", hash = "sha256:d97d3efd61404af7e5721a0e74d81cdbfc6e5f97e11e731bb6d090e30a7b62b2", size = 585971, upload-time = "2025-07-17T14:43:35.936Z" },
916
970
  ]
917
971
 
972
+ [[package]]
973
+ name = "nodeenv"
974
+ version = "1.9.1"
975
+ source = { registry = "https://pypi.org/simple" }
976
+ sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload-time = "2024-06-04T18:44:11.171Z" }
977
+ wheels = [
978
+ { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload-time = "2024-06-04T18:44:08.352Z" },
979
+ ]
980
+
918
981
  [[package]]
919
982
  name = "ogmios"
920
983
  version = "1.3.0"
@@ -1039,6 +1102,15 @@ wheels = [
1039
1102
  { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" },
1040
1103
  ]
1041
1104
 
1105
+ [[package]]
1106
+ name = "platformdirs"
1107
+ version = "4.4.0"
1108
+ source = { registry = "https://pypi.org/simple" }
1109
+ sdist = { url = "https://files.pythonhosted.org/packages/23/e8/21db9c9987b0e728855bd57bff6984f67952bea55d6f75e055c46b5383e8/platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf", size = 21634, upload-time = "2025-08-26T14:32:04.268Z" }
1110
+ wheels = [
1111
+ { url = "https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85", size = 18654, upload-time = "2025-08-26T14:32:02.735Z" },
1112
+ ]
1113
+
1042
1114
  [[package]]
1043
1115
  name = "pluggy"
1044
1116
  version = "1.6.0"
@@ -1057,6 +1129,22 @@ wheels = [
1057
1129
  { url = "https://files.pythonhosted.org/packages/4e/d1/e4ed95fdd3ef13b78630280d9e9e240aeb65cc7c544ec57106149c3942fb/pprintpp-0.4.0-py2.py3-none-any.whl", hash = "sha256:b6b4dcdd0c0c0d75e4d7b2f21a9e933e5b2ce62b26e1a54537f9651ae5a5c01d", size = 16952, upload-time = "2018-07-01T01:42:36.496Z" },
1058
1130
  ]
1059
1131
 
1132
+ [[package]]
1133
+ name = "pre-commit"
1134
+ version = "4.3.0"
1135
+ source = { registry = "https://pypi.org/simple" }
1136
+ dependencies = [
1137
+ { name = "cfgv" },
1138
+ { name = "identify" },
1139
+ { name = "nodeenv" },
1140
+ { name = "pyyaml" },
1141
+ { name = "virtualenv" },
1142
+ ]
1143
+ sdist = { url = "https://files.pythonhosted.org/packages/ff/29/7cf5bbc236333876e4b41f56e06857a87937ce4bf91e117a6991a2dbb02a/pre_commit-4.3.0.tar.gz", hash = "sha256:499fe450cc9d42e9d58e606262795ecb64dd05438943c62b66f6a8673da30b16", size = 193792, upload-time = "2025-08-09T18:56:14.651Z" }
1144
+ wheels = [
1145
+ { url = "https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl", hash = "sha256:2b0747ad7e6e967169136edffee14c16e148a778a54e4f967921aa1ebf2308d8", size = 220965, upload-time = "2025-08-09T18:56:13.192Z" },
1146
+ ]
1147
+
1060
1148
  [[package]]
1061
1149
  name = "ptyprocess"
1062
1150
  version = "0.7.0"
@@ -1211,6 +1299,15 @@ wheels = [
1211
1299
  { url = "https://files.pythonhosted.org/packages/5e/22/d3db169895faaf3e2eda892f005f433a62db2decbcfbc2f61e6517adfa87/PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93", size = 212141, upload-time = "2022-01-07T22:06:01.861Z" },
1212
1300
  ]
1213
1301
 
1302
+ [[package]]
1303
+ name = "pyproject-hooks"
1304
+ version = "1.2.0"
1305
+ source = { registry = "https://pypi.org/simple" }
1306
+ sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" }
1307
+ wheels = [
1308
+ { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" },
1309
+ ]
1310
+
1214
1311
  [[package]]
1215
1312
  name = "pyreadline3"
1216
1313
  version = "3.5.4"
@@ -1300,6 +1397,41 @@ wheels = [
1300
1397
  { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" },
1301
1398
  ]
1302
1399
 
1400
+ [[package]]
1401
+ name = "pyyaml"
1402
+ version = "6.0.2"
1403
+ source = { registry = "https://pypi.org/simple" }
1404
+ sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" }
1405
+ wheels = [
1406
+ { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" },
1407
+ { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" },
1408
+ { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" },
1409
+ { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" },
1410
+ { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" },
1411
+ { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" },
1412
+ { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" },
1413
+ { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" },
1414
+ { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" },
1415
+ { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" },
1416
+ { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" },
1417
+ { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" },
1418
+ { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" },
1419
+ { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" },
1420
+ { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" },
1421
+ { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" },
1422
+ { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" },
1423
+ { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" },
1424
+ { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" },
1425
+ { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" },
1426
+ { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" },
1427
+ { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" },
1428
+ { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" },
1429
+ { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" },
1430
+ { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" },
1431
+ { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" },
1432
+ { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" },
1433
+ ]
1434
+
1303
1435
  [[package]]
1304
1436
  name = "readme-renderer"
1305
1437
  version = "44.0"
@@ -1635,6 +1767,20 @@ wheels = [
1635
1767
  { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" },
1636
1768
  ]
1637
1769
 
1770
+ [[package]]
1771
+ name = "virtualenv"
1772
+ version = "20.34.0"
1773
+ source = { registry = "https://pypi.org/simple" }
1774
+ dependencies = [
1775
+ { name = "distlib" },
1776
+ { name = "filelock" },
1777
+ { name = "platformdirs" },
1778
+ ]
1779
+ sdist = { url = "https://files.pythonhosted.org/packages/1c/14/37fcdba2808a6c615681cd216fecae00413c9dab44fb2e57805ecf3eaee3/virtualenv-20.34.0.tar.gz", hash = "sha256:44815b2c9dee7ed86e387b842a84f20b93f7f417f95886ca1996a72a4138eb1a", size = 6003808, upload-time = "2025-08-13T14:24:07.464Z" }
1780
+ wheels = [
1781
+ { url = "https://files.pythonhosted.org/packages/76/06/04c8e804f813cf972e3262f3f8584c232de64f0cde9f703b46cf53a45090/virtualenv-20.34.0-py3-none-any.whl", hash = "sha256:341f5afa7eee943e4984a9207c025feedd768baff6753cd660c857ceb3e36026", size = 5983279, upload-time = "2025-08-13T14:24:05.111Z" },
1782
+ ]
1783
+
1638
1784
  [[package]]
1639
1785
  name = "websocket-client"
1640
1786
  version = "1.8.0"
File without changes
File without changes