From a751efe7d5fe31d51d55e733a338e4cb07b268dd Mon Sep 17 00:00:00 2001 From: ytemiloluwa Date: Thu, 27 Jun 2024 09:54:57 +0100 Subject: [PATCH 1/4] dataclass: PoolUrl --- pyasic/data/pools.py | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/pyasic/data/pools.py b/pyasic/data/pools.py index 4ff4e158..7fc915b5 100644 --- a/pyasic/data/pools.py +++ b/pyasic/data/pools.py @@ -1,4 +1,24 @@ from dataclasses import dataclass, field +from enum import Enum +from typing import Optional + + +class Scheme (Enum): + STRATUM_V1 = "stratum+tcp" + STRATUM_V2 = "stratum2+tcp" + +@dataclass +class PoolUrl: + scheme: Scheme + host: str + port: int + pubKey: Optional[str] = None + + def __str__(self) -> str: + if self.scheme == Scheme.STRATUM_V2 and self.pubKey: + return f"{self.scheme.value}://{self.host}:{self.port}/{self.pubKey}" + else: + return f"{self.scheme.value}://{self.host}:{self.port}" @dataclass @@ -19,15 +39,15 @@ class PoolMetrics: pool_stale_percent: Percentage of stale shares by the pool. """ - accepted: int = None - rejected: int = None - get_failures: int = None - remote_failures: int = None - active: bool = None - alive: bool = None - url: str = None - index: int = None - user: str = None + accepted: int + rejected: int + get_failures: int + remote_failures: int + active: bool + alive: bool + url: PoolUrl + index: int + user: str pool_rejected_percent: float = field(init=False) pool_stale_percent: float = field(init=False) From 8e4a547c773fb640fc59299b2cf2838c92d2bbe3 Mon Sep 17 00:00:00 2001 From: ytemiloluwa Date: Thu, 27 Jun 2024 18:07:42 +0100 Subject: [PATCH 2/4] dataclass: PoolUrl --- pyasic/data/pools.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pyasic/data/pools.py b/pyasic/data/pools.py index 7fc915b5..4d6abfc2 100644 --- a/pyasic/data/pools.py +++ b/pyasic/data/pools.py @@ -12,7 +12,7 @@ class PoolUrl: scheme: Scheme host: str port: int - pubKey: Optional[str] = None + pubkey: Optional[str] = None def __str__(self) -> str: if self.scheme == Scheme.STRATUM_V2 and self.pubKey: @@ -39,17 +39,17 @@ class PoolMetrics: pool_stale_percent: Percentage of stale shares by the pool. """ - accepted: int - rejected: int - get_failures: int - remote_failures: int - active: bool - alive: bool - url: PoolUrl - index: int - user: str pool_rejected_percent: float = field(init=False) pool_stale_percent: float = field(init=False) + url: PoolUrl + accepted: int = None + rejected: int = None + get_failures: int = None + remote_failures: int = None + active: bool = None + alive: bool = None + index: int = None + user: str = None @property def pool_rejected_percent(self) -> float: # noqa - Skip PyCharm inspection From 65cfb57605b88993530da65df36bbbdb76677aef Mon Sep 17 00:00:00 2001 From: ytemiloluwa Date: Thu, 27 Jun 2024 18:17:55 +0100 Subject: [PATCH 3/4] PEP8: case fix --- pyasic/data/pools.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyasic/data/pools.py b/pyasic/data/pools.py index 4d6abfc2..eac1a3ef 100644 --- a/pyasic/data/pools.py +++ b/pyasic/data/pools.py @@ -15,8 +15,8 @@ class PoolUrl: pubkey: Optional[str] = None def __str__(self) -> str: - if self.scheme == Scheme.STRATUM_V2 and self.pubKey: - return f"{self.scheme.value}://{self.host}:{self.port}/{self.pubKey}" + if self.scheme == Scheme.STRATUM_V2 and self.pubkey: + return f"{self.scheme.value}://{self.host}:{self.port}/{self.pubkey}" else: return f"{self.scheme.value}://{self.host}:{self.port}" From 9b431b020f02644c25258b7ab8d355499fc43272 Mon Sep 17 00:00:00 2001 From: ytemiloluwa Date: Sun, 30 Jun 2024 18:20:41 +0100 Subject: [PATCH 4/4] method: from_str --- pyasic/data/pools.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pyasic/data/pools.py b/pyasic/data/pools.py index eac1a3ef..c81b9670 100644 --- a/pyasic/data/pools.py +++ b/pyasic/data/pools.py @@ -1,12 +1,14 @@ from dataclasses import dataclass, field from enum import Enum from typing import Optional +from urllib.parse import urlparse class Scheme (Enum): STRATUM_V1 = "stratum+tcp" STRATUM_V2 = "stratum2+tcp" + @dataclass class PoolUrl: scheme: Scheme @@ -20,6 +22,15 @@ class PoolUrl: else: return f"{self.scheme.value}://{self.host}:{self.port}" + @classmethod + def from_str(cls, url: str) -> 'PoolUrl': + parsed_url = urlparse(url) + scheme = Scheme(parsed_url.scheme) + host = parsed_url.hostname + port = parsed_url.port + pubkey = parsed_url.path.lstrip('/') if scheme == Scheme.STRATUM_V2 else None + return cls(scheme=scheme, host=host, port=port, pubkey=pubkey) + @dataclass class PoolMetrics: