mm-btc 0.2.1__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. {mm_btc-0.2.1 → mm_btc-0.3.0}/PKG-INFO +2 -2
  2. mm_btc-0.3.0/dict.dic +6 -0
  3. {mm_btc-0.2.1 → mm_btc-0.3.0}/pyproject.toml +6 -3
  4. {mm_btc-0.2.1 → mm_btc-0.3.0}/src/mm_btc/blockstream.py +6 -8
  5. {mm_btc-0.2.1 → mm_btc-0.3.0}/src/mm_btc/cli/cli.py +2 -2
  6. {mm_btc-0.2.1 → mm_btc-0.3.0}/src/mm_btc/cli/cmd/create_tx_cmd.py +1 -2
  7. {mm_btc-0.2.1 → mm_btc-0.3.0}/tests/test_blockstream.py +2 -2
  8. {mm_btc-0.2.1 → mm_btc-0.3.0}/uv.lock +64 -30
  9. mm_btc-0.2.1/src/mm_btc/cli/cli_utils.py +0 -19
  10. {mm_btc-0.2.1 → mm_btc-0.3.0}/.env.example +0 -0
  11. {mm_btc-0.2.1 → mm_btc-0.3.0}/.gitignore +0 -0
  12. {mm_btc-0.2.1 → mm_btc-0.3.0}/README.txt +0 -0
  13. {mm_btc-0.2.1 → mm_btc-0.3.0}/justfile +0 -0
  14. {mm_btc-0.2.1 → mm_btc-0.3.0}/src/mm_btc/__init__.py +0 -0
  15. {mm_btc-0.2.1 → mm_btc-0.3.0}/src/mm_btc/cli/__init__.py +0 -0
  16. {mm_btc-0.2.1 → mm_btc-0.3.0}/src/mm_btc/cli/cmd/__init__.py +0 -0
  17. {mm_btc-0.2.1 → mm_btc-0.3.0}/src/mm_btc/cli/cmd/address_cmd.py +0 -0
  18. {mm_btc-0.2.1 → mm_btc-0.3.0}/src/mm_btc/cli/cmd/decode_tx_cmd.py +0 -0
  19. {mm_btc-0.2.1 → mm_btc-0.3.0}/src/mm_btc/cli/cmd/mnemonic_cmd.py +0 -0
  20. {mm_btc-0.2.1 → mm_btc-0.3.0}/src/mm_btc/cli/cmd/utxo_cmd.py +0 -0
  21. {mm_btc-0.2.1 → mm_btc-0.3.0}/src/mm_btc/py.typed +0 -0
  22. {mm_btc-0.2.1 → mm_btc-0.3.0}/src/mm_btc/tx.py +0 -0
  23. {mm_btc-0.2.1 → mm_btc-0.3.0}/src/mm_btc/wallet.py +0 -0
  24. {mm_btc-0.2.1 → mm_btc-0.3.0}/tests/__init__.py +0 -0
  25. {mm_btc-0.2.1 → mm_btc-0.3.0}/tests/cmd/__init__.py +0 -0
  26. {mm_btc-0.2.1 → mm_btc-0.3.0}/tests/cmd/test_mnemonic_cmd.py +0 -0
  27. {mm_btc-0.2.1 → mm_btc-0.3.0}/tests/conftest.py +0 -0
  28. {mm_btc-0.2.1 → mm_btc-0.3.0}/tests/test_wallet.py +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mm-btc
3
- Version: 0.2.1
3
+ Version: 0.3.0
4
4
  Requires-Python: >=3.12
5
5
  Requires-Dist: bitcoinlib~=0.7.1
6
6
  Requires-Dist: bit~=0.8.0
7
7
  Requires-Dist: hdwallet~=3.2.3
8
- Requires-Dist: mm-std~=0.1.11
8
+ Requires-Dist: mm-crypto-utils>=0.1.3
9
9
  Requires-Dist: mnemonic~=0.21
10
10
  Requires-Dist: typer~=0.15.1
mm_btc-0.3.0/dict.dic ADDED
@@ -0,0 +1,6 @@
1
+ vsize
2
+ mempool
3
+ txid
4
+ vout
5
+ bech
6
+ segwit
@@ -1,10 +1,10 @@
1
1
  [project]
2
2
  name = "mm-btc"
3
- version = "0.2.1"
3
+ version = "0.3.0"
4
4
  description = ""
5
5
  requires-python = ">=3.12"
6
6
  dependencies = [
7
- "mm-std~=0.1.11",
7
+ "mm-crypto-utils>=0.1.3",
8
8
  "hdwallet~=3.2.3",
9
9
  "bit~=0.8.0",
10
10
  "bitcoinlib~=0.7.1",
@@ -24,7 +24,7 @@ dev-dependencies = [
24
24
  "pytest~=8.3.4",
25
25
  "pytest-xdist~=3.6.1",
26
26
  "pytest-httpserver~=1.1.0",
27
- "ruff~=0.9.2",
27
+ "ruff~=0.9.4",
28
28
  "pip-audit~=2.7.3",
29
29
  "bandit~=1.8.2",
30
30
  "mypy~=1.14.1",
@@ -47,6 +47,7 @@ target-version = "py313"
47
47
  [tool.ruff.lint]
48
48
  select = ["ALL"]
49
49
  ignore = [
50
+ "TC", # flake8-type-checking, TYPE_CHECKING is dangerous, for example it doesn't work with pydantic
50
51
  "A005", # flake8-builtins: stdlib-module-shadowing
51
52
  "ERA001", # eradicate: commented-out-code
52
53
  "PT", # flake8-pytest-style
@@ -68,6 +69,8 @@ ignore = [
68
69
  "RET503", # flake8-return: implicit-return
69
70
  "COM812", # it's used in ruff formatter
70
71
  ]
72
+ [tool.ruff.lint.pep8-naming]
73
+ classmethod-decorators = ["field_validator"]
71
74
  [tool.ruff.lint.per-file-ignores]
72
75
  "tests/*.py" = ["ANN", "S"]
73
76
  [tool.ruff.format]
@@ -7,8 +7,10 @@ from pydantic import BaseModel
7
7
  MAINNET_BASE_URL = "https://blockstream.info/api"
8
8
  TESTNET_BASE_URL = "https://blockstream.info/testnet/api"
9
9
 
10
- ERROR_INVALID_ADDRESS = "INVALID_ADDRESS"
11
- ERROR_INVALID_NETWORK = "INVALID_NETWORK"
10
+ # ERROR_INVALID_ADDRESS = "INVALID_ADDRESS"
11
+ # ERROR_INVALID_NETWORK = "INVALID_NETWORK"
12
+
13
+ ERROR_400_BAD_REQUEST = "400 Bad Request"
12
14
 
13
15
  type Proxy = str | Sequence[str] | None
14
16
 
@@ -67,12 +69,8 @@ class BlockstreamClient:
67
69
  try:
68
70
  res = self._request(f"/address/{address}")
69
71
  data = res.to_dict()
70
- if res.code == 400 and (
71
- "invalid bitcoin address" in res.body.lower() or "bech32 segwit decoding error" in res.body.lower()
72
- ):
73
- return Err(ERROR_INVALID_ADDRESS, data=data)
74
- if res.code == 400 and "invalid network" in res.body.lower():
75
- return Err(ERROR_INVALID_NETWORK, data=data)
72
+ if res.code == 400:
73
+ return Err("400 Bad Request", data=data)
76
74
  return Ok(Address(**res.json), data=data)
77
75
  except Exception as err:
78
76
  result = Err(err, data=data)
@@ -1,3 +1,4 @@
1
+ import importlib.metadata
1
2
  from pathlib import Path
2
3
  from typing import Annotated
3
4
 
@@ -7,7 +8,6 @@ from mm_std import print_plain
7
8
 
8
9
  from mm_btc.wallet import AddressType
9
10
 
10
- from . import cli_utils
11
11
  from .cmd import address_cmd, create_tx_cmd, decode_tx_cmd, mnemonic_cmd, utxo_cmd
12
12
 
13
13
  app = typer.Typer(no_args_is_help=True, pretty_exceptions_enable=False, add_completion=False)
@@ -67,7 +67,7 @@ def utxo_command(address: str) -> None:
67
67
 
68
68
  def version_callback(value: bool) -> None:
69
69
  if value:
70
- print_plain(f"mm-btc: v{cli_utils.get_version()}")
70
+ print_plain(f"mm-btc: v{importlib.metadata.version('mm-btc')}")
71
71
  raise typer.Exit
72
72
 
73
73
 
@@ -3,7 +3,6 @@ from pathlib import Path
3
3
  from bit import PrivateKey, PrivateKeyTestnet
4
4
  from mm_std import BaseConfig, print_console
5
5
 
6
- from mm_btc.cli.cli_utils import read_config
7
6
  from mm_btc.wallet import is_testnet_address
8
7
 
9
8
 
@@ -18,7 +17,7 @@ class Config(BaseConfig):
18
17
 
19
18
 
20
19
  def run(config_path: Path) -> None:
21
- config = read_config(Config, config_path)
20
+ config = Config.read_toml_config_or_exit(config_path)
22
21
  testnet = is_testnet_address(config.from_address)
23
22
  key = PrivateKeyTestnet(config.private) if testnet else PrivateKey(config.private)
24
23
 
@@ -15,11 +15,11 @@ def test_get_address(binance_address, proxies):
15
15
 
16
16
  # invalid address
17
17
  res = client.get_address("bc1pa48c294qk7yd7sc8y0wxydc3a2frv5j83e65rvm48v3ej098s5zs8kvh5d")
18
- assert res.unwrap_err() == blockstream.ERROR_INVALID_ADDRESS
18
+ assert res.unwrap_err() == blockstream.ERROR_400_BAD_REQUEST
19
19
 
20
20
  # invalid network
21
21
  res = client.get_address("mqkwWDWdgXhYunfoKvQfYyydwB5vdma3cK")
22
- assert res.unwrap_err() == blockstream.ERROR_INVALID_NETWORK
22
+ assert res.unwrap_err() == blockstream.ERROR_400_BAD_REQUEST
23
23
 
24
24
 
25
25
  def test_get_confirmed_balance(binance_address, proxies):
@@ -541,6 +541,19 @@ wheels = [
541
541
  { url = "https://files.pythonhosted.org/packages/fc/f8/5699e6d6ea5156d53059ff07464b5d64389b084f67cb08ec97c711e587fc/license_expression-30.4.0-py3-none-any.whl", hash = "sha256:7c8f240c6e20d759cb8455e49cb44a923d9e25c436bf48d7e5b8eea660782c04", size = 110571 },
542
542
  ]
543
543
 
544
+ [[package]]
545
+ name = "loguru"
546
+ version = "0.7.3"
547
+ source = { registry = "https://pypi.org/simple" }
548
+ dependencies = [
549
+ { name = "colorama", marker = "sys_platform == 'win32'" },
550
+ { name = "win32-setctime", marker = "sys_platform == 'win32'" },
551
+ ]
552
+ sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559 }
553
+ wheels = [
554
+ { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595 },
555
+ ]
556
+
544
557
  [[package]]
545
558
  name = "markdown-it-py"
546
559
  version = "3.0.0"
@@ -602,13 +615,13 @@ wheels = [
602
615
 
603
616
  [[package]]
604
617
  name = "mm-btc"
605
- version = "0.2.0"
618
+ version = "0.3.0"
606
619
  source = { editable = "." }
607
620
  dependencies = [
608
621
  { name = "bit" },
609
622
  { name = "bitcoinlib" },
610
623
  { name = "hdwallet" },
611
- { name = "mm-std" },
624
+ { name = "mm-crypto-utils" },
612
625
  { name = "mnemonic" },
613
626
  { name = "typer" },
614
627
  ]
@@ -630,7 +643,7 @@ requires-dist = [
630
643
  { name = "bit", specifier = "~=0.8.0" },
631
644
  { name = "bitcoinlib", specifier = "~=0.7.1" },
632
645
  { name = "hdwallet", specifier = "~=3.2.3" },
633
- { name = "mm-std", specifier = "~=0.1.11" },
646
+ { name = "mm-crypto-utils", specifier = ">=0.1.3" },
634
647
  { name = "mnemonic", specifier = "~=0.21" },
635
648
  { name = "typer", specifier = "~=0.15.1" },
636
649
  ]
@@ -643,13 +656,25 @@ dev = [
643
656
  { name = "pytest", specifier = "~=8.3.4" },
644
657
  { name = "pytest-httpserver", specifier = "~=1.1.0" },
645
658
  { name = "pytest-xdist", specifier = "~=3.6.1" },
646
- { name = "ruff", specifier = "~=0.9.2" },
659
+ { name = "ruff", specifier = "~=0.9.4" },
647
660
  { name = "types-pyyaml", specifier = "~=6.0.12.20241230" },
648
661
  ]
649
662
 
663
+ [[package]]
664
+ name = "mm-crypto-utils"
665
+ version = "0.1.3"
666
+ source = { registry = "https://pypi.org/simple" }
667
+ dependencies = [
668
+ { name = "loguru" },
669
+ { name = "mm-std" },
670
+ ]
671
+ wheels = [
672
+ { url = "https://files.pythonhosted.org/packages/67/a5/b6ff50a8b70b76c14c62b5cf7eebc8b9b9ba3422a4cb8cd895570ce4a1fc/mm_crypto_utils-0.1.3-py3-none-any.whl", hash = "sha256:ef6dd7639f4a298c29b5e5e7b11d0fc74cf66405f96c91daf1343695728bdeb7", size = 7847 },
673
+ ]
674
+
650
675
  [[package]]
651
676
  name = "mm-std"
652
- version = "0.1.11"
677
+ version = "0.2.1"
653
678
  source = { registry = "https://pypi.org/simple" }
654
679
  dependencies = [
655
680
  { name = "cryptography" },
@@ -661,7 +686,7 @@ dependencies = [
661
686
  { name = "rich" },
662
687
  ]
663
688
  wheels = [
664
- { url = "https://files.pythonhosted.org/packages/45/44/9b5b90015a3aa2906f1eb15a4d4404635f6b05e43c5023b770bd4c7d7774/mm_std-0.1.11-py3-none-any.whl", hash = "sha256:3ea736ccb313bf6d0c37272104ba1f79deb0874c07bd6091d504fcf9e703cdfe", size = 14444 },
689
+ { url = "https://files.pythonhosted.org/packages/f3/ef/cb423cc357cc116313fcd97e9d0ff673234f5f1725f4a73929ced27b1d00/mm_std-0.2.1-py3-none-any.whl", hash = "sha256:71fa84f2fa897901c925614327123e8d0bc6ae61ff7873479dc9a53889442237", size = 14620 },
665
690
  ]
666
691
 
667
692
  [[package]]
@@ -906,16 +931,16 @@ wheels = [
906
931
 
907
932
  [[package]]
908
933
  name = "pydantic"
909
- version = "2.10.5"
934
+ version = "2.10.6"
910
935
  source = { registry = "https://pypi.org/simple" }
911
936
  dependencies = [
912
937
  { name = "annotated-types" },
913
938
  { name = "pydantic-core" },
914
939
  { name = "typing-extensions" },
915
940
  ]
916
- sdist = { url = "https://files.pythonhosted.org/packages/6a/c7/ca334c2ef6f2e046b1144fe4bb2a5da8a4c574e7f2ebf7e16b34a6a2fa92/pydantic-2.10.5.tar.gz", hash = "sha256:278b38dbbaec562011d659ee05f63346951b3a248a6f3642e1bc68894ea2b4ff", size = 761287 }
941
+ sdist = { url = "https://files.pythonhosted.org/packages/b7/ae/d5220c5c52b158b1de7ca89fc5edb72f304a70a4c540c84c8844bf4008de/pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236", size = 761681 }
917
942
  wheels = [
918
- { url = "https://files.pythonhosted.org/packages/58/26/82663c79010b28eddf29dcdd0ea723439535fa917fce5905885c0e9ba562/pydantic-2.10.5-py3-none-any.whl", hash = "sha256:4dd4e322dbe55472cb7ca7e73f4b63574eecccf2835ffa2af9021ce113c83c53", size = 431426 },
943
+ { url = "https://files.pythonhosted.org/packages/f4/3c/8cc1cc84deffa6e25d2d0c688ebb80635dfdbf1dbea3e30c541c8cf4d860/pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584", size = 431696 },
919
944
  ]
920
945
 
921
946
  [[package]]
@@ -1112,27 +1137,27 @@ wheels = [
1112
1137
 
1113
1138
  [[package]]
1114
1139
  name = "ruff"
1115
- version = "0.9.2"
1116
- source = { registry = "https://pypi.org/simple" }
1117
- sdist = { url = "https://files.pythonhosted.org/packages/80/63/77ecca9d21177600f551d1c58ab0e5a0b260940ea7312195bd2a4798f8a8/ruff-0.9.2.tar.gz", hash = "sha256:b5eceb334d55fae5f316f783437392642ae18e16dcf4f1858d55d3c2a0f8f5d0", size = 3553799 }
1118
- wheels = [
1119
- { url = "https://files.pythonhosted.org/packages/af/b9/0e168e4e7fb3af851f739e8f07889b91d1a33a30fca8c29fa3149d6b03ec/ruff-0.9.2-py3-none-linux_armv6l.whl", hash = "sha256:80605a039ba1454d002b32139e4970becf84b5fee3a3c3bf1c2af6f61a784347", size = 11652408 },
1120
- { url = "https://files.pythonhosted.org/packages/2c/22/08ede5db17cf701372a461d1cb8fdde037da1d4fa622b69ac21960e6237e/ruff-0.9.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b9aab82bb20afd5f596527045c01e6ae25a718ff1784cb92947bff1f83068b00", size = 11587553 },
1121
- { url = "https://files.pythonhosted.org/packages/42/05/dedfc70f0bf010230229e33dec6e7b2235b2a1b8cbb2a991c710743e343f/ruff-0.9.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fbd337bac1cfa96be615f6efcd4bc4d077edbc127ef30e2b8ba2a27e18c054d4", size = 11020755 },
1122
- { url = "https://files.pythonhosted.org/packages/df/9b/65d87ad9b2e3def67342830bd1af98803af731243da1255537ddb8f22209/ruff-0.9.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82b35259b0cbf8daa22a498018e300b9bb0174c2bbb7bcba593935158a78054d", size = 11826502 },
1123
- { url = "https://files.pythonhosted.org/packages/93/02/f2239f56786479e1a89c3da9bc9391120057fc6f4a8266a5b091314e72ce/ruff-0.9.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b6a9701d1e371bf41dca22015c3f89769da7576884d2add7317ec1ec8cb9c3c", size = 11390562 },
1124
- { url = "https://files.pythonhosted.org/packages/c9/37/d3a854dba9931f8cb1b2a19509bfe59e00875f48ade632e95aefcb7a0aee/ruff-0.9.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9cc53e68b3c5ae41e8faf83a3b89f4a5d7b2cb666dff4b366bb86ed2a85b481f", size = 12548968 },
1125
- { url = "https://files.pythonhosted.org/packages/fa/c3/c7b812bb256c7a1d5553433e95980934ffa85396d332401f6b391d3c4569/ruff-0.9.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:8efd9da7a1ee314b910da155ca7e8953094a7c10d0c0a39bfde3fcfd2a015684", size = 13187155 },
1126
- { url = "https://files.pythonhosted.org/packages/bd/5a/3c7f9696a7875522b66aa9bba9e326e4e5894b4366bd1dc32aa6791cb1ff/ruff-0.9.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3292c5a22ea9a5f9a185e2d131dc7f98f8534a32fb6d2ee7b9944569239c648d", size = 12704674 },
1127
- { url = "https://files.pythonhosted.org/packages/be/d6/d908762257a96ce5912187ae9ae86792e677ca4f3dc973b71e7508ff6282/ruff-0.9.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a605fdcf6e8b2d39f9436d343d1f0ff70c365a1e681546de0104bef81ce88df", size = 14529328 },
1128
- { url = "https://files.pythonhosted.org/packages/2d/c2/049f1e6755d12d9cd8823242fa105968f34ee4c669d04cac8cea51a50407/ruff-0.9.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c547f7f256aa366834829a08375c297fa63386cbe5f1459efaf174086b564247", size = 12385955 },
1129
- { url = "https://files.pythonhosted.org/packages/91/5a/a9bdb50e39810bd9627074e42743b00e6dc4009d42ae9f9351bc3dbc28e7/ruff-0.9.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d18bba3d3353ed916e882521bc3e0af403949dbada344c20c16ea78f47af965e", size = 11810149 },
1130
- { url = "https://files.pythonhosted.org/packages/e5/fd/57df1a0543182f79a1236e82a79c68ce210efb00e97c30657d5bdb12b478/ruff-0.9.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b338edc4610142355ccf6b87bd356729b62bf1bc152a2fad5b0c7dc04af77bfe", size = 11479141 },
1131
- { url = "https://files.pythonhosted.org/packages/dc/16/bc3fd1d38974f6775fc152a0554f8c210ff80f2764b43777163c3c45d61b/ruff-0.9.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:492a5e44ad9b22a0ea98cf72e40305cbdaf27fac0d927f8bc9e1df316dcc96eb", size = 12014073 },
1132
- { url = "https://files.pythonhosted.org/packages/47/6b/e4ca048a8f2047eb652e1e8c755f384d1b7944f69ed69066a37acd4118b0/ruff-0.9.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:af1e9e9fe7b1f767264d26b1075ac4ad831c7db976911fa362d09b2d0356426a", size = 12435758 },
1133
- { url = "https://files.pythonhosted.org/packages/c2/40/4d3d6c979c67ba24cf183d29f706051a53c36d78358036a9cd21421582ab/ruff-0.9.2-py3-none-win32.whl", hash = "sha256:71cbe22e178c5da20e1514e1e01029c73dc09288a8028a5d3446e6bba87a5145", size = 9796916 },
1134
- { url = "https://files.pythonhosted.org/packages/c3/ef/7f548752bdb6867e6939489c87fe4da489ab36191525fadc5cede2a6e8e2/ruff-0.9.2-py3-none-win_amd64.whl", hash = "sha256:c5e1d6abc798419cf46eed03f54f2e0c3adb1ad4b801119dedf23fcaf69b55b5", size = 10773080 },
1135
- { url = "https://files.pythonhosted.org/packages/0e/4e/33df635528292bd2d18404e4daabcd74ca8a9853b2e1df85ed3d32d24362/ruff-0.9.2-py3-none-win_arm64.whl", hash = "sha256:a1b63fa24149918f8b37cef2ee6fff81f24f0d74b6f0bdc37bc3e1f2143e41c6", size = 10001738 },
1140
+ version = "0.9.4"
1141
+ source = { registry = "https://pypi.org/simple" }
1142
+ sdist = { url = "https://files.pythonhosted.org/packages/c0/17/529e78f49fc6f8076f50d985edd9a2cf011d1dbadb1cdeacc1d12afc1d26/ruff-0.9.4.tar.gz", hash = "sha256:6907ee3529244bb0ed066683e075f09285b38dd5b4039370df6ff06041ca19e7", size = 3599458 }
1143
+ wheels = [
1144
+ { url = "https://files.pythonhosted.org/packages/b6/f8/3fafb7804d82e0699a122101b5bee5f0d6e17c3a806dcbc527bb7d3f5b7a/ruff-0.9.4-py3-none-linux_armv6l.whl", hash = "sha256:64e73d25b954f71ff100bb70f39f1ee09e880728efb4250c632ceed4e4cdf706", size = 11668400 },
1145
+ { url = "https://files.pythonhosted.org/packages/2e/a6/2efa772d335da48a70ab2c6bb41a096c8517ca43c086ea672d51079e3d1f/ruff-0.9.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6ce6743ed64d9afab4fafeaea70d3631b4d4b28b592db21a5c2d1f0ef52934bf", size = 11628395 },
1146
+ { url = "https://files.pythonhosted.org/packages/dc/d7/cd822437561082f1c9d7225cc0d0fbb4bad117ad7ac3c41cd5d7f0fa948c/ruff-0.9.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:54499fb08408e32b57360f6f9de7157a5fec24ad79cb3f42ef2c3f3f728dfe2b", size = 11090052 },
1147
+ { url = "https://files.pythonhosted.org/packages/9e/67/3660d58e893d470abb9a13f679223368ff1684a4ef40f254a0157f51b448/ruff-0.9.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37c892540108314a6f01f105040b5106aeb829fa5fb0561d2dcaf71485021137", size = 11882221 },
1148
+ { url = "https://files.pythonhosted.org/packages/79/d1/757559995c8ba5f14dfec4459ef2dd3fcea82ac43bc4e7c7bf47484180c0/ruff-0.9.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:de9edf2ce4b9ddf43fd93e20ef635a900e25f622f87ed6e3047a664d0e8f810e", size = 11424862 },
1149
+ { url = "https://files.pythonhosted.org/packages/c0/96/7915a7c6877bb734caa6a2af424045baf6419f685632469643dbd8eb2958/ruff-0.9.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87c90c32357c74f11deb7fbb065126d91771b207bf9bfaaee01277ca59b574ec", size = 12626735 },
1150
+ { url = "https://files.pythonhosted.org/packages/0e/cc/dadb9b35473d7cb17c7ffe4737b4377aeec519a446ee8514123ff4a26091/ruff-0.9.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:56acd6c694da3695a7461cc55775f3a409c3815ac467279dfa126061d84b314b", size = 13255976 },
1151
+ { url = "https://files.pythonhosted.org/packages/5f/c3/ad2dd59d3cabbc12df308cced780f9c14367f0321e7800ca0fe52849da4c/ruff-0.9.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0c93e7d47ed951b9394cf352d6695b31498e68fd5782d6cbc282425655f687a", size = 12752262 },
1152
+ { url = "https://files.pythonhosted.org/packages/c7/17/5f1971e54bd71604da6788efd84d66d789362b1105e17e5ccc53bba0289b/ruff-0.9.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d4c8772670aecf037d1bf7a07c39106574d143b26cfe5ed1787d2f31e800214", size = 14401648 },
1153
+ { url = "https://files.pythonhosted.org/packages/30/24/6200b13ea611b83260501b6955b764bb320e23b2b75884c60ee7d3f0b68e/ruff-0.9.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfc5f1d7afeda8d5d37660eeca6d389b142d7f2b5a1ab659d9214ebd0e025231", size = 12414702 },
1154
+ { url = "https://files.pythonhosted.org/packages/34/cb/f5d50d0c4ecdcc7670e348bd0b11878154bc4617f3fdd1e8ad5297c0d0ba/ruff-0.9.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:faa935fc00ae854d8b638c16a5f1ce881bc3f67446957dd6f2af440a5fc8526b", size = 11859608 },
1155
+ { url = "https://files.pythonhosted.org/packages/d6/f4/9c8499ae8426da48363bbb78d081b817b0f64a9305f9b7f87eab2a8fb2c1/ruff-0.9.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a6c634fc6f5a0ceae1ab3e13c58183978185d131a29c425e4eaa9f40afe1e6d6", size = 11485702 },
1156
+ { url = "https://files.pythonhosted.org/packages/18/59/30490e483e804ccaa8147dd78c52e44ff96e1c30b5a95d69a63163cdb15b/ruff-0.9.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:433dedf6ddfdec7f1ac7575ec1eb9844fa60c4c8c2f8887a070672b8d353d34c", size = 12067782 },
1157
+ { url = "https://files.pythonhosted.org/packages/3d/8c/893fa9551760b2f8eb2a351b603e96f15af167ceaf27e27ad873570bc04c/ruff-0.9.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d612dbd0f3a919a8cc1d12037168bfa536862066808960e0cc901404b77968f0", size = 12483087 },
1158
+ { url = "https://files.pythonhosted.org/packages/23/15/f6751c07c21ca10e3f4a51ea495ca975ad936d780c347d9808bcedbd7182/ruff-0.9.4-py3-none-win32.whl", hash = "sha256:db1192ddda2200671f9ef61d9597fcef89d934f5d1705e571a93a67fb13a4402", size = 9852302 },
1159
+ { url = "https://files.pythonhosted.org/packages/12/41/2d2d2c6a72e62566f730e49254f602dfed23019c33b5b21ea8f8917315a1/ruff-0.9.4-py3-none-win_amd64.whl", hash = "sha256:05bebf4cdbe3ef75430d26c375773978950bbf4ee3c95ccb5448940dc092408e", size = 10850051 },
1160
+ { url = "https://files.pythonhosted.org/packages/c6/e6/3d6ec3bc3d254e7f005c543a661a41c3e788976d0e52a1ada195bd664344/ruff-0.9.4-py3-none-win_arm64.whl", hash = "sha256:585792f1e81509e38ac5123492f8875fbc36f3ede8185af0a26df348e5154f41", size = 10078251 },
1136
1161
  ]
1137
1162
 
1138
1163
  [[package]]
@@ -1292,3 +1317,12 @@ sdist = { url = "https://files.pythonhosted.org/packages/9f/69/83029f1f6300c5fb2
1292
1317
  wheels = [
1293
1318
  { url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", size = 224498 },
1294
1319
  ]
1320
+
1321
+ [[package]]
1322
+ name = "win32-setctime"
1323
+ version = "1.2.0"
1324
+ source = { registry = "https://pypi.org/simple" }
1325
+ sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867 }
1326
+ wheels = [
1327
+ { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083 },
1328
+ ]
@@ -1,19 +0,0 @@
1
- import importlib.metadata
2
- import sys
3
- from pathlib import Path
4
-
5
- from mm_std import BaseConfig
6
- from rich import print_json
7
-
8
-
9
- def get_version() -> str:
10
- return importlib.metadata.version("mm-btc")
11
-
12
-
13
- def read_config[T: BaseConfig](config_type: type[T], config_path: Path) -> T:
14
- res = config_type.read_config(config_path)
15
- if res.is_ok():
16
- return res.unwrap()
17
-
18
- print_json(res.err)
19
- sys.exit(1)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes