Merge branch 'UpstreamData:master' into master
This commit is contained in:
17
README.md
17
README.md
@@ -19,6 +19,23 @@ Welcome to `pyasic`! `pyasic` uses an asynchronous method of communicating with
|
|||||||
|
|
||||||
[Click here to view supported miner types](https://docs.pyasic.org/en/latest/miners/supported_types/)
|
[Click here to view supported miner types](https://docs.pyasic.org/en/latest/miners/supported_types/)
|
||||||
|
|
||||||
|
---
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
It is recommended to install `pyasic` in a [virtual environment](https://realpython.com/python-virtual-environments-a-primer/#what-other-popular-options-exist-aside-from-venv) to isolate it from the rest of your system. Options include:
|
||||||
|
- [venv](https://docs.python.org/3/library/venv.html): included in Python standard library but has fewer features than other options
|
||||||
|
- [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv): [pyenv](https://github.com/pyenv/pyenv) plugin for managing virtualenvs
|
||||||
|
```
|
||||||
|
pyenv install <python version number>
|
||||||
|
pyenv virtualenv <python version number> <env name>
|
||||||
|
pyenv activate <env name>
|
||||||
|
```
|
||||||
|
- [conda](https://docs.conda.io/en/latest/)
|
||||||
|
|
||||||
|
##### Installing `pyasic`
|
||||||
|
|
||||||
|
`python -m pip install .` or `poetry install`
|
||||||
|
|
||||||
---
|
---
|
||||||
## Getting started
|
## Getting started
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,23 @@ Welcome to `pyasic`! `pyasic` uses an asynchronous method of communicating with
|
|||||||
|
|
||||||
[Click here to view supported miner types](miners/supported_types.md)
|
[Click here to view supported miner types](miners/supported_types.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
It is recommended to install `pyasic` in a [virtual environment](https://realpython.com/python-virtual-environments-a-primer/#what-other-popular-options-exist-aside-from-venv) to isolate it from the rest of your system. Options include:
|
||||||
|
- [venv](https://docs.python.org/3/library/venv.html): included in Python standard library but has fewer features than other options
|
||||||
|
- [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv): [pyenv](https://github.com/pyenv/pyenv) plugin for managing virtualenvs
|
||||||
|
```
|
||||||
|
pyenv install <python version number>
|
||||||
|
pyenv virtualenv <python version number> <env name>
|
||||||
|
pyenv activate <env name>
|
||||||
|
```
|
||||||
|
- [conda](https://docs.conda.io/en/latest/)
|
||||||
|
|
||||||
|
##### Installing `pyasic`
|
||||||
|
|
||||||
|
`python -m pip install .` or `poetry install`
|
||||||
|
|
||||||
---
|
---
|
||||||
## Getting started
|
## Getting started
|
||||||
---
|
---
|
||||||
@@ -236,6 +253,7 @@ settings.update("default_antminer_password", "my_pwd")
|
|||||||
"factory_get_timeout": 3,
|
"factory_get_timeout": 3,
|
||||||
"get_data_retries": 1,
|
"get_data_retries": 1,
|
||||||
"api_function_timeout": 5,
|
"api_function_timeout": 5,
|
||||||
|
"antminer_mining_mode_as_str": False,
|
||||||
"default_whatsminer_password": "admin",
|
"default_whatsminer_password": "admin",
|
||||||
"default_innosilicon_password": "admin",
|
"default_innosilicon_password": "admin",
|
||||||
"default_antminer_password": "root",
|
"default_antminer_password": "root",
|
||||||
|
|||||||
@@ -85,6 +85,13 @@
|
|||||||
show_root_heading: false
|
show_root_heading: false
|
||||||
heading_level: 4
|
heading_level: 4
|
||||||
|
|
||||||
|
## S19 Hydro
|
||||||
|
::: pyasic.miners.antminer.bmminer.X19.S19.BMMinerS19Hydro
|
||||||
|
handler: python
|
||||||
|
options:
|
||||||
|
show_root_heading: false
|
||||||
|
heading_level: 4
|
||||||
|
|
||||||
## S19 Pro Hydro
|
## S19 Pro Hydro
|
||||||
::: pyasic.miners.antminer.bmminer.X19.S19.BMMinerS19ProHydro
|
::: pyasic.miners.antminer.bmminer.X19.S19.BMMinerS19ProHydro
|
||||||
handler: python
|
handler: python
|
||||||
@@ -92,6 +99,13 @@
|
|||||||
show_root_heading: false
|
show_root_heading: false
|
||||||
heading_level: 4
|
heading_level: 4
|
||||||
|
|
||||||
|
## S19 Pro+ Hydro
|
||||||
|
::: pyasic.miners.antminer.bmminer.X19.S19.BMMinerS19ProPlusHydro
|
||||||
|
handler: python
|
||||||
|
options:
|
||||||
|
show_root_heading: false
|
||||||
|
heading_level: 4
|
||||||
|
|
||||||
## T19
|
## T19
|
||||||
::: pyasic.miners.antminer.bmminer.X19.T19.BMMinerT19
|
::: pyasic.miners.antminer.bmminer.X19.T19.BMMinerT19
|
||||||
handler: python
|
handler: python
|
||||||
@@ -302,3 +316,45 @@
|
|||||||
show_root_heading: false
|
show_root_heading: false
|
||||||
heading_level: 4
|
heading_level: 4
|
||||||
|
|
||||||
|
## S19 Pro (LuxOS)
|
||||||
|
::: pyasic.miners.antminer.luxos.X19.S19.LUXMinerS19Pro
|
||||||
|
handler: python
|
||||||
|
options:
|
||||||
|
show_root_heading: false
|
||||||
|
heading_level: 4
|
||||||
|
|
||||||
|
## S19j Pro (LuxOS)
|
||||||
|
::: pyasic.miners.antminer.luxos.X19.S19.LUXMinerS19jPro
|
||||||
|
handler: python
|
||||||
|
options:
|
||||||
|
show_root_heading: false
|
||||||
|
heading_level: 4
|
||||||
|
|
||||||
|
## S19j Pro+ (LuxOS)
|
||||||
|
::: pyasic.miners.antminer.luxos.X19.S19.LUXMinerS19jProPlus
|
||||||
|
handler: python
|
||||||
|
options:
|
||||||
|
show_root_heading: false
|
||||||
|
heading_level: 4
|
||||||
|
|
||||||
|
## S19k Pro (LuxOS)
|
||||||
|
::: pyasic.miners.antminer.luxos.X19.S19.LUXMinerS19kPro
|
||||||
|
handler: python
|
||||||
|
options:
|
||||||
|
show_root_heading: false
|
||||||
|
heading_level: 4
|
||||||
|
|
||||||
|
## S19 XP (LuxOS)
|
||||||
|
::: pyasic.miners.antminer.luxos.X19.S19.LUXMinerS19XP
|
||||||
|
handler: python
|
||||||
|
options:
|
||||||
|
show_root_heading: false
|
||||||
|
heading_level: 4
|
||||||
|
|
||||||
|
## T19 (LuxOS)
|
||||||
|
::: pyasic.miners.antminer.luxos.X19.T19.LUXMinerT19
|
||||||
|
handler: python
|
||||||
|
options:
|
||||||
|
show_root_heading: false
|
||||||
|
heading_level: 4
|
||||||
|
|
||||||
|
|||||||
@@ -8,3 +8,10 @@
|
|||||||
show_root_heading: false
|
show_root_heading: false
|
||||||
heading_level: 4
|
heading_level: 4
|
||||||
|
|
||||||
|
## S21 (LuxOS)
|
||||||
|
::: pyasic.miners.antminer.luxos.X21.S21.LUXMinerS21
|
||||||
|
handler: python
|
||||||
|
options:
|
||||||
|
show_root_heading: false
|
||||||
|
heading_level: 4
|
||||||
|
|
||||||
|
|||||||
@@ -78,7 +78,9 @@ details {
|
|||||||
<li><a href="../antminer/X19#s19-xp">S19 XP</a></li>
|
<li><a href="../antminer/X19#s19-xp">S19 XP</a></li>
|
||||||
<li><a href="../antminer/X19#s19a">S19a</a></li>
|
<li><a href="../antminer/X19#s19a">S19a</a></li>
|
||||||
<li><a href="../antminer/X19#s19a-pro">S19a Pro</a></li>
|
<li><a href="../antminer/X19#s19a-pro">S19a Pro</a></li>
|
||||||
|
<li><a href="../antminer/X19#s19-hydro">S19 Hydro</a></li>
|
||||||
<li><a href="../antminer/X19#s19-pro-hydro">S19 Pro Hydro</a></li>
|
<li><a href="../antminer/X19#s19-pro-hydro">S19 Pro Hydro</a></li>
|
||||||
|
<li><a href="../antminer/X19#s19-pro_1-hydro">S19 Pro+ Hydro</a></li>
|
||||||
<li><a href="../antminer/X19#t19">T19</a></li>
|
<li><a href="../antminer/X19#t19">T19</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</details>
|
</details>
|
||||||
@@ -544,6 +546,18 @@ details {
|
|||||||
<summary>X19 Series:</summary>
|
<summary>X19 Series:</summary>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="../antminer/X19#s19-luxos">S19 (LuxOS)</a></li>
|
<li><a href="../antminer/X19#s19-luxos">S19 (LuxOS)</a></li>
|
||||||
|
<li><a href="../antminer/X19#s19-pro-luxos">S19 Pro (LuxOS)</a></li>
|
||||||
|
<li><a href="../antminer/X19#s19j-pro-luxos">S19j Pro (LuxOS)</a></li>
|
||||||
|
<li><a href="../antminer/X19#s19j-pro_1-luxos">S19j Pro+ (LuxOS)</a></li>
|
||||||
|
<li><a href="../antminer/X19#s19k-pro-luxos">S19k Pro (LuxOS)</a></li>
|
||||||
|
<li><a href="../antminer/X19#s19-xp-luxos">S19 XP (LuxOS)</a></li>
|
||||||
|
<li><a href="../antminer/X19#t19-luxos">T19 (LuxOS)</a></li>
|
||||||
|
</ul>
|
||||||
|
</details>
|
||||||
|
<details>
|
||||||
|
<summary>X21 Series:</summary>
|
||||||
|
<ul>
|
||||||
|
<li><a href="../antminer/X21#s21-luxos">S21 (LuxOS)</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</details>
|
</details>
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ Settings options:
|
|||||||
- `factory_get_timeout`
|
- `factory_get_timeout`
|
||||||
- `get_data_retries`
|
- `get_data_retries`
|
||||||
- `api_function_timeout`
|
- `api_function_timeout`
|
||||||
|
- `antminer_mining_mode_as_str`
|
||||||
- `default_whatsminer_password`
|
- `default_whatsminer_password`
|
||||||
- `default_innosilicon_password`
|
- `default_innosilicon_password`
|
||||||
- `default_antminer_password`
|
- `default_antminer_password`
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
|
|
||||||
|
from pyasic import settings
|
||||||
from pyasic.config.base import MinerConfigOption, MinerConfigValue
|
from pyasic.config.base import MinerConfigOption, MinerConfigValue
|
||||||
from pyasic.web.braiins_os.proto.braiins.bos.v1 import (
|
from pyasic.web.braiins_os.proto.braiins.bos.v1 import (
|
||||||
HashrateTargetMode,
|
HashrateTargetMode,
|
||||||
@@ -39,7 +40,9 @@ class MiningModeNormal(MinerConfigValue):
|
|||||||
return cls()
|
return cls()
|
||||||
|
|
||||||
def as_am_modern(self) -> dict:
|
def as_am_modern(self) -> dict:
|
||||||
return {"miner-mode": "0"}
|
if settings.get("antminer_mining_mode_as_str", False):
|
||||||
|
return {"miner-mode": "0"}
|
||||||
|
return {"miner-mode": 0}
|
||||||
|
|
||||||
def as_wm(self) -> dict:
|
def as_wm(self) -> dict:
|
||||||
return {"mode": self.mode}
|
return {"mode": self.mode}
|
||||||
@@ -63,7 +66,9 @@ class MiningModeSleep(MinerConfigValue):
|
|||||||
return cls()
|
return cls()
|
||||||
|
|
||||||
def as_am_modern(self) -> dict:
|
def as_am_modern(self) -> dict:
|
||||||
return {"miner-mode": "1"}
|
if settings.get("antminer_mining_mode_as_str", False):
|
||||||
|
return {"miner-mode": "1"}
|
||||||
|
return {"miner-mode": 1}
|
||||||
|
|
||||||
def as_wm(self) -> dict:
|
def as_wm(self) -> dict:
|
||||||
return {"mode": self.mode}
|
return {"mode": self.mode}
|
||||||
@@ -87,7 +92,9 @@ class MiningModeLPM(MinerConfigValue):
|
|||||||
return cls()
|
return cls()
|
||||||
|
|
||||||
def as_am_modern(self) -> dict:
|
def as_am_modern(self) -> dict:
|
||||||
return {"miner-mode": "3"}
|
if settings.get("antminer_mining_mode_as_str", False):
|
||||||
|
return {"miner-mode": "3"}
|
||||||
|
return {"miner-mode": 3}
|
||||||
|
|
||||||
def as_wm(self) -> dict:
|
def as_wm(self) -> dict:
|
||||||
return {"mode": self.mode}
|
return {"mode": self.mode}
|
||||||
@@ -108,7 +115,9 @@ class MiningModeHPM(MinerConfigValue):
|
|||||||
return cls()
|
return cls()
|
||||||
|
|
||||||
def as_am_modern(self) -> dict:
|
def as_am_modern(self) -> dict:
|
||||||
return {"miner-mode": "0"}
|
if settings.get("antminer_mining_mode_as_str", False):
|
||||||
|
return {"miner-mode": "0"}
|
||||||
|
return {"miner-mode": 0}
|
||||||
|
|
||||||
def as_wm(self) -> dict:
|
def as_wm(self) -> dict:
|
||||||
return {"mode": self.mode}
|
return {"mode": self.mode}
|
||||||
@@ -165,7 +174,9 @@ class MiningModePowerTune(MinerConfigValue):
|
|||||||
return cls(**cls_conf)
|
return cls(**cls_conf)
|
||||||
|
|
||||||
def as_am_modern(self) -> dict:
|
def as_am_modern(self) -> dict:
|
||||||
return {"miner-mode": "0"}
|
if settings.get("antminer_mining_mode_as_str", False):
|
||||||
|
return {"miner-mode": "0"}
|
||||||
|
return {"miner-mode": 0}
|
||||||
|
|
||||||
def as_wm(self) -> dict:
|
def as_wm(self) -> dict:
|
||||||
if self.power is not None:
|
if self.power is not None:
|
||||||
@@ -204,7 +215,9 @@ class MiningModeHashrateTune(MinerConfigValue):
|
|||||||
return cls(dict_conf.get("hashrate"))
|
return cls(dict_conf.get("hashrate"))
|
||||||
|
|
||||||
def as_am_modern(self) -> dict:
|
def as_am_modern(self) -> dict:
|
||||||
return {"miner-mode": "0"}
|
if settings.get("antminer_mining_mode_as_str", False):
|
||||||
|
return {"miner-mode": "0"}
|
||||||
|
return {"miner-mode": 0}
|
||||||
|
|
||||||
def as_boser(self) -> dict:
|
def as_boser(self) -> dict:
|
||||||
return {
|
return {
|
||||||
@@ -239,7 +252,9 @@ class ManualBoardSettings(MinerConfigValue):
|
|||||||
return cls(freq=dict_conf["freq"], volt=dict_conf["volt"])
|
return cls(freq=dict_conf["freq"], volt=dict_conf["volt"])
|
||||||
|
|
||||||
def as_am_modern(self) -> dict:
|
def as_am_modern(self) -> dict:
|
||||||
return {"miner-mode": "0"}
|
if settings.get("antminer_mining_mode_as_str", False):
|
||||||
|
return {"miner-mode": "0"}
|
||||||
|
return {"miner-mode": 0}
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@@ -259,7 +274,9 @@ class MiningModeManual(MinerConfigValue):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def as_am_modern(self) -> dict:
|
def as_am_modern(self) -> dict:
|
||||||
return {"miner-mode": "0"}
|
if settings.get("antminer_mining_mode_as_str", False):
|
||||||
|
return {"miner-mode": "0"}
|
||||||
|
return {"miner-mode": 0}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_vnish(cls, web_overclock_settings: dict) -> "MiningModeManual":
|
def from_vnish(cls, web_overclock_settings: dict) -> "MiningModeManual":
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ from pyasic.miners.models import (
|
|||||||
S19XP,
|
S19XP,
|
||||||
S19a,
|
S19a,
|
||||||
S19aPro,
|
S19aPro,
|
||||||
|
S19Hydro,
|
||||||
S19i,
|
S19i,
|
||||||
S19j,
|
S19j,
|
||||||
S19jNoPIC,
|
S19jNoPIC,
|
||||||
@@ -29,6 +30,7 @@ from pyasic.miners.models import (
|
|||||||
S19Pro,
|
S19Pro,
|
||||||
S19ProHydro,
|
S19ProHydro,
|
||||||
S19ProPlus,
|
S19ProPlus,
|
||||||
|
S19ProPlusHydro,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -82,3 +84,11 @@ class BMMinerS19L(AntminerModern, S19L):
|
|||||||
|
|
||||||
class BMMinerS19ProHydro(AntminerModern, S19ProHydro):
|
class BMMinerS19ProHydro(AntminerModern, S19ProHydro):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class BMMinerS19Hydro(AntminerModern, S19Hydro):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class BMMinerS19ProPlusHydro(AntminerModern, S19ProPlusHydro):
|
||||||
|
pass
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ from .S19 import (
|
|||||||
BMMinerS19,
|
BMMinerS19,
|
||||||
BMMinerS19a,
|
BMMinerS19a,
|
||||||
BMMinerS19aPro,
|
BMMinerS19aPro,
|
||||||
|
BMMinerS19Hydro,
|
||||||
BMMinerS19i,
|
BMMinerS19i,
|
||||||
BMMinerS19j,
|
BMMinerS19j,
|
||||||
BMMinerS19jNoPIC,
|
BMMinerS19jNoPIC,
|
||||||
@@ -27,6 +28,7 @@ from .S19 import (
|
|||||||
BMMinerS19Pro,
|
BMMinerS19Pro,
|
||||||
BMMinerS19ProHydro,
|
BMMinerS19ProHydro,
|
||||||
BMMinerS19ProPlus,
|
BMMinerS19ProPlus,
|
||||||
|
BMMinerS19ProPlusHydro,
|
||||||
BMMinerS19XP,
|
BMMinerS19XP,
|
||||||
)
|
)
|
||||||
from .T19 import BMMinerT19
|
from .T19 import BMMinerT19
|
||||||
|
|||||||
@@ -99,7 +99,9 @@ MINER_CLASSES = {
|
|||||||
"ANTMINER S19 XP": BMMinerS19XP,
|
"ANTMINER S19 XP": BMMinerS19XP,
|
||||||
"ANTMINER S19A": BMMinerS19a,
|
"ANTMINER S19A": BMMinerS19a,
|
||||||
"ANTMINER S19A PRO": BMMinerS19aPro,
|
"ANTMINER S19A PRO": BMMinerS19aPro,
|
||||||
|
"ANTMINER S19 HYDRO": BMMinerS19Hydro,
|
||||||
"ANTMINER S19 PRO HYD.": BMMinerS19ProHydro,
|
"ANTMINER S19 PRO HYD.": BMMinerS19ProHydro,
|
||||||
|
"ANTMINER S19 PRO+ HYD.": BMMinerS19ProPlusHydro,
|
||||||
"ANTMINER T19": BMMinerT19,
|
"ANTMINER T19": BMMinerT19,
|
||||||
},
|
},
|
||||||
MinerTypes.WHATSMINER: {
|
MinerTypes.WHATSMINER: {
|
||||||
|
|||||||
@@ -113,8 +113,22 @@ class S19kProNoPIC(AntMinerMake):
|
|||||||
expected_fans = 4
|
expected_fans = 4
|
||||||
|
|
||||||
|
|
||||||
|
class S19Hydro(AntMinerMake):
|
||||||
|
raw_model = "S19 Hydro"
|
||||||
|
expected_chips = 104
|
||||||
|
expected_hashboards = 4
|
||||||
|
expected_fans = 0
|
||||||
|
|
||||||
|
|
||||||
class S19ProHydro(AntMinerMake):
|
class S19ProHydro(AntMinerMake):
|
||||||
raw_model = "S19 Pro Hydro"
|
raw_model = "S19 Pro Hydro"
|
||||||
expected_chips = 180
|
expected_chips = 180
|
||||||
expected_hashboards = 4
|
expected_hashboards = 4
|
||||||
expected_fans = 0
|
expected_fans = 0
|
||||||
|
|
||||||
|
|
||||||
|
class S19ProPlusHydro(AntMinerMake):
|
||||||
|
raw_model = "S19 Pro+ Hydro"
|
||||||
|
expected_chips = 180
|
||||||
|
expected_hashboards = 4
|
||||||
|
expected_fans = 0
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ from .S19 import (
|
|||||||
S19XP,
|
S19XP,
|
||||||
S19a,
|
S19a,
|
||||||
S19aPro,
|
S19aPro,
|
||||||
|
S19Hydro,
|
||||||
S19i,
|
S19i,
|
||||||
S19j,
|
S19j,
|
||||||
S19jNoPIC,
|
S19jNoPIC,
|
||||||
@@ -32,5 +33,6 @@ from .S19 import (
|
|||||||
S19Pro,
|
S19Pro,
|
||||||
S19ProHydro,
|
S19ProHydro,
|
||||||
S19ProPlus,
|
S19ProPlus,
|
||||||
|
S19ProPlusHydro,
|
||||||
)
|
)
|
||||||
from .T19 import T19
|
from .T19 import T19
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ _settings = { # defaults
|
|||||||
"factory_get_timeout": 3,
|
"factory_get_timeout": 3,
|
||||||
"get_data_retries": 1,
|
"get_data_retries": 1,
|
||||||
"api_function_timeout": 5,
|
"api_function_timeout": 5,
|
||||||
|
"antminer_mining_mode_as_str": False,
|
||||||
"default_whatsminer_rpc_password": "admin",
|
"default_whatsminer_rpc_password": "admin",
|
||||||
"default_innosilicon_web_password": "admin",
|
"default_innosilicon_web_password": "admin",
|
||||||
"default_antminer_web_password": "root",
|
"default_antminer_web_password": "root",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "pyasic"
|
name = "pyasic"
|
||||||
version = "0.54.1"
|
version = "0.54.4"
|
||||||
description = "A simplified and standardized interface for Bitcoin ASICs."
|
description = "A simplified and standardized interface for Bitcoin ASICs."
|
||||||
authors = ["UpstreamData <brett@upstreamdata.ca>"]
|
authors = ["UpstreamData <brett@upstreamdata.ca>"]
|
||||||
repository = "https://github.com/UpstreamData/pyasic"
|
repository = "https://github.com/UpstreamData/pyasic"
|
||||||
@@ -9,7 +9,7 @@ readme = "README.md"
|
|||||||
|
|
||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
python = "^3.8"
|
python = "^3.8"
|
||||||
httpx = "^0.26.0"
|
httpx = ">=0.26.0"
|
||||||
asyncssh = "^2.14.2"
|
asyncssh = "^2.14.2"
|
||||||
passlib = "^1.7.4"
|
passlib = "^1.7.4"
|
||||||
pyaml = "^23.12.0"
|
pyaml = "^23.12.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user