Skip to content

Commit 1f4054b

Browse files
feature: add mypy type checking for better type consistency
1 parent cd52d3a commit 1f4054b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+2806
-2196
lines changed

.pre-commit-config.yaml

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,24 @@ repos:
2222
name: check-yaml for other YAML files
2323
exclude: ^mkdocs\.yml$
2424
- id: check-added-large-files
25-
- repo: https://github.com/psf/black
26-
rev: 25.9.0
25+
- repo: https://github.com/astral-sh/ruff-pre-commit
26+
rev: v0.13.2
2727
hooks:
28-
- id: black
29-
- repo: https://github.com/pycqa/isort
30-
rev: 6.0.1
28+
- id: ruff-check
29+
args: [--fix]
30+
- id: ruff-format
31+
- repo: https://github.com/pre-commit/mirrors-mypy
32+
rev: v1.18.2
3133
hooks:
32-
- id: isort
33-
name: isort (python)
34-
34+
- id: mypy
35+
additional_dependencies:
36+
[
37+
betterproto==2.0.0b7,
38+
httpx==0.28.1,
39+
types-aiofiles==24.1.0.20250822,
40+
types-passlib==1.7.7.20250602,
41+
pydantic==2.11.9,
42+
]
3543
- repo: local
3644
hooks:
3745
- id: unittest

docs/generate_miners.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import asyncio
21
import importlib
32
import os
43
import warnings
54
from pathlib import Path
5+
from typing import Any
66

77
from pyasic.miners.factory import MINER_CLASSES, MinerTypes
88

@@ -128,7 +128,7 @@ def create_url_str(mtype: str):
128128
</ul>
129129
</details>"""
130130

131-
m_data = {}
131+
m_data: dict[str, dict[str, list[type[Any]]]] = {}
132132
done = []
133133

134134
for m in MINER_CLASSES:

poetry.lock

Lines changed: 57 additions & 72 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyasic/config/__init__.py

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,41 @@
1414
# limitations under the License. -
1515
# ------------------------------------------------------------------------------
1616

17+
from typing import Any
18+
1719
from pydantic import BaseModel, Field
1820

19-
from pyasic.config.fans import FanMode, FanModeConfig, FanModeNormal
20-
from pyasic.config.mining import MiningMode, MiningModeConfig
21+
from pyasic.config.fans import (
22+
FanModeConfig,
23+
FanModeImmersion,
24+
FanModeManual,
25+
FanModeNormal,
26+
)
27+
from pyasic.config.mining import (
28+
MiningModeConfig,
29+
MiningModeHashrateTune,
30+
MiningModeHPM,
31+
MiningModeLPM,
32+
MiningModeManual,
33+
MiningModeNormal,
34+
MiningModePowerTune,
35+
MiningModePreset,
36+
MiningModeSleep,
37+
)
38+
39+
# Type aliases for config field types
40+
FanModeType = FanModeNormal | FanModeManual | FanModeImmersion | FanModeConfig
41+
MiningModeType = (
42+
MiningModeNormal
43+
| MiningModeHPM
44+
| MiningModeLPM
45+
| MiningModeSleep
46+
| MiningModeManual
47+
| MiningModePowerTune
48+
| MiningModeHashrateTune
49+
| MiningModePreset
50+
| MiningModeConfig
51+
)
2152
from pyasic.config.mining.scaling import ScalingConfig
2253
from pyasic.config.pools import PoolConfig
2354
from pyasic.config.temperature import TemperatureConfig
@@ -32,11 +63,11 @@ class Config:
3263
arbitrary_types_allowed = True
3364

3465
pools: PoolConfig = Field(default_factory=PoolConfig.default)
35-
fan_mode: FanMode = Field(default_factory=FanModeConfig.default)
66+
fan_mode: FanModeType = Field(default_factory=FanModeConfig.default)
3667
temperature: TemperatureConfig = Field(default_factory=TemperatureConfig.default)
37-
mining_mode: MiningMode = Field(default_factory=MiningModeConfig.default)
68+
mining_mode: MiningModeType = Field(default_factory=MiningModeConfig.default)
3869

39-
def __getitem__(self, item):
70+
def __getitem__(self, item: str) -> Any:
4071
try:
4172
return getattr(self, item)
4273
except AttributeError:
@@ -88,8 +119,8 @@ def as_wm(self, user_suffix: str | None = None) -> dict:
88119
def as_btminer_v3(self, user_suffix: str | None = None) -> dict:
89120
"""Generates the configuration in the format suitable for Whatsminers running BTMiner V3."""
90121
return {
91-
"set.miner.pools": self.pools.as_btminer_v3()
92-
** self.mining_mode.as_btminer_v3()
122+
"set.miner.pools": self.pools.as_btminer_v3(),
123+
**self.mining_mode.as_btminer_v3(),
93124
}
94125

95126
def as_am_old(self, user_suffix: str | None = None) -> dict:
@@ -260,7 +291,7 @@ def from_goldshell_list(cls, web_conf: list) -> "MinerConfig":
260291
return cls(pools=PoolConfig.from_goldshell(web_conf))
261292

262293
@classmethod
263-
def from_goldshell_byte(cls, web_conf: dict) -> "MinerConfig":
294+
def from_goldshell_byte(cls, web_conf: list) -> "MinerConfig":
264295
"""Constructs a MinerConfig object from web configuration for Goldshell Byte miners."""
265296
return cls(pools=PoolConfig.from_goldshell_byte(web_conf))
266297

0 commit comments

Comments
 (0)