From f2abe9fd9e72cc3aa88f39635875967127a974be Mon Sep 17 00:00:00 2001 From: UpstreamData Date: Fri, 23 Jun 2023 14:38:38 -0600 Subject: [PATCH] feature: add is_mining to all miner types. --- pyasic/miners/backends/bfgminer.py | 3 + pyasic/miners/backends/bfgminer_goldshell.py | 5 +- pyasic/miners/backends/bmminer.py | 3 + pyasic/miners/backends/bosminer_old.py | 3 + pyasic/miners/backends/cgminer.py | 3 + pyasic/miners/backends/cgminer_avalon.py | 3 + pyasic/miners/backends/vnish.py | 3 + tests/miners_tests/__init__.py | 166 ++----------------- 8 files changed, 37 insertions(+), 152 deletions(-) diff --git a/pyasic/miners/backends/bfgminer.py b/pyasic/miners/backends/bfgminer.py index cd605f7c..24f07d81 100644 --- a/pyasic/miners/backends/bfgminer.py +++ b/pyasic/miners/backends/bfgminer.py @@ -318,3 +318,6 @@ class BFGMiner(BaseMiner): return round(ideal_rate, 2) except (KeyError, IndexError): pass + + async def is_mining(self, *args, **kwargs) -> Optional[bool]: + return None diff --git a/pyasic/miners/backends/bfgminer_goldshell.py b/pyasic/miners/backends/bfgminer_goldshell.py index 179d200b..13ca08f7 100644 --- a/pyasic/miners/backends/bfgminer_goldshell.py +++ b/pyasic/miners/backends/bfgminer_goldshell.py @@ -13,7 +13,7 @@ # See the License for the specific language governing permissions and - # limitations under the License. - # ------------------------------------------------------------------------------ -from typing import List +from typing import List, Optional from pyasic.config import MinerConfig from pyasic.data import HashBoard @@ -157,3 +157,6 @@ class BFGMinerGoldshell(BFGMiner): print(self, api_devdetails) return hashboards + + async def is_mining(self, *args, **kwargs) -> Optional[bool]: + return None diff --git a/pyasic/miners/backends/bmminer.py b/pyasic/miners/backends/bmminer.py index ce47e544..e4f86fa4 100644 --- a/pyasic/miners/backends/bmminer.py +++ b/pyasic/miners/backends/bmminer.py @@ -352,3 +352,6 @@ class BMMiner(BaseMiner): return round(ideal_rate, 2) except (KeyError, IndexError): pass + + async def is_mining(self, *args, **kwargs) -> Optional[bool]: + return None diff --git a/pyasic/miners/backends/bosminer_old.py b/pyasic/miners/backends/bosminer_old.py index c3bbd25d..af2eba84 100644 --- a/pyasic/miners/backends/bosminer_old.py +++ b/pyasic/miners/backends/bosminer_old.py @@ -150,3 +150,6 @@ class BOSMinerOld(BOSMiner): async def get_data(self, allow_warning: bool = False, **kwargs) -> MinerData: return MinerData(ip=str(self.ip)) + + async def is_mining(self, *args, **kwargs) -> Optional[bool]: + return None diff --git a/pyasic/miners/backends/cgminer.py b/pyasic/miners/backends/cgminer.py index 96b7f2b8..7a787e5d 100644 --- a/pyasic/miners/backends/cgminer.py +++ b/pyasic/miners/backends/cgminer.py @@ -375,3 +375,6 @@ class CGMiner(BaseMiner): return round(ideal_rate, 2) except (KeyError, IndexError): pass + + async def is_mining(self, *args, **kwargs) -> Optional[bool]: + return None diff --git a/pyasic/miners/backends/cgminer_avalon.py b/pyasic/miners/backends/cgminer_avalon.py index c1234fd9..890804f0 100644 --- a/pyasic/miners/backends/cgminer_avalon.py +++ b/pyasic/miners/backends/cgminer_avalon.py @@ -371,3 +371,6 @@ class CGMinerAvalon(CGMiner): except LookupError: pass return False + + async def is_mining(self, *args, **kwargs) -> Optional[bool]: + return None diff --git a/pyasic/miners/backends/vnish.py b/pyasic/miners/backends/vnish.py index 72dc756a..315f8394 100644 --- a/pyasic/miners/backends/vnish.py +++ b/pyasic/miners/backends/vnish.py @@ -169,3 +169,6 @@ class VNish(BMMiner): return fw_ver except KeyError: pass + + async def is_mining(self, *args, **kwargs) -> Optional[bool]: + return None diff --git a/tests/miners_tests/__init__.py b/tests/miners_tests/__init__.py index 4d6234a7..1250704b 100644 --- a/tests/miners_tests/__init__.py +++ b/tests/miners_tests/__init__.py @@ -23,157 +23,21 @@ from pyasic.miners.backends import CGMiner # noqa from pyasic.miners.base import BaseMiner from pyasic.miners.miner_factory import MINER_CLASSES, MinerFactory -# class MinersTest(unittest.TestCase): -# def test_miner_model_creation(self): -# warnings.filterwarnings("ignore") -# for miner_model in MINER_CLASSES.keys(): -# for miner_api in MINER_CLASSES[miner_model].keys(): -# with self.subTest( -# msg=f"Creation of miner using model={miner_model}, api={miner_api}", -# miner_model=miner_model, -# miner_api=miner_api, -# ): -# miner = MINER_CLASSES[miner_model][miner_api]("127.0.0.1") -# self.assertTrue( -# isinstance(miner, MINER_CLASSES[miner_model][miner_api]) -# ) -# -# def test_miner_backend_backup_creation(self): -# warnings.filterwarnings("ignore") -# -# backends = [ -# list( -# inspect.getmembers( -# sys.modules[f"pyasic.miners.backends"], inspect.isclass -# ) -# ) -# ] -# backends = [item for sublist in backends for item in sublist] -# for backend in backends: -# miner_class = backend[1] -# with self.subTest(miner_class=miner_class): -# miner = miner_class("127.0.0.1") -# self.assertTrue(isinstance(miner, miner_class)) -# -# def test_miner_type_creation_failure(self): -# warnings.filterwarnings("ignore") -# -# backends = [ -# list( -# inspect.getmembers( -# sys.modules[f"pyasic.miners.{algo}._types"], inspect.isclass -# ) -# ) -# for algo in ["btc", "zec", "ltc"] -# ] -# backends = [item for sublist in backends for item in sublist] -# for backend in backends: -# miner_class = backend[1] -# with self.subTest(miner_class=miner_class): -# with self.assertRaises(TypeError): -# miner_class("127.0.0.1") -# with self.assertRaises(TypeError): -# BaseMiner("127.0.0.1") -# -# def test_miner_comparisons(self): -# miner_1 = CGMiner("1.1.1.1") -# miner_2 = CGMiner("2.2.2.2") -# miner_3 = CGMiner("1.1.1.1") -# self.assertEqual(miner_1, miner_3) -# self.assertGreater(miner_2, miner_1) -# self.assertLess(miner_3, miner_2) -# -# -# class MinerFactoryTest(unittest.TestCase): -# def test_miner_factory_creation(self): -# warnings.filterwarnings("ignore") -# -# self.assertDictEqual(MinerFactory().miners, {}) -# miner_factory = MinerFactory() -# self.assertIs(MinerFactory(), miner_factory) -# -# def test_get_miner_generator(self): -# async def _coro(): -# gen = MinerFactory().get_miner_generator([]) -# miners = [] -# async for miner in gen: -# miners.append(miner) -# return miners -# -# _miners = asyncio.run(_coro()) -# self.assertListEqual(_miners, []) -# -# def test_miner_selection(self): -# warnings.filterwarnings("ignore") -# -# for miner_model in MINER_CLASSES.keys(): -# with self.subTest(): -# miner = MinerFactory()._select_miner_from_classes( -# "127.0.0.1", miner_model, None, None -# ) -# self.assertIsInstance(miner, BaseMiner) -# for api in ["BOSMiner+", "BOSMiner", "CGMiner", "BTMiner", "BMMiner"]: -# with self.subTest(): -# miner = MinerFactory()._select_miner_from_classes( -# "127.0.0.1", None, api, None -# ) -# self.assertIsInstance(miner, BaseMiner) -# -# with self.subTest(): -# miner = MinerFactory()._select_miner_from_classes( -# "127.0.0.1", "ANTMINER S17+", "Fake API", None -# ) -# self.assertIsInstance(miner, BaseMiner) -# -# with self.subTest(): -# miner = MinerFactory()._select_miner_from_classes( -# "127.0.0.1", "M30S", "BTMiner", "G20" -# ) -# self.assertIsInstance(miner, BaseMiner) -# -# def test_validate_command(self): -# bad_test_data_returns = [ -# {}, -# { -# "cmd": [ -# { -# "STATUS": [ -# {"STATUS": "E", "Msg": "Command failed for some reason."} -# ] -# } -# ] -# }, -# {"STATUS": "E", "Msg": "Command failed for some reason."}, -# { -# "STATUS": [{"STATUS": "E", "Msg": "Command failed for some reason."}], -# "id": 1, -# }, -# ] -# for data in bad_test_data_returns: -# with self.subTest(): -# -# async def _coro(miner_ret): -# _data = await MinerFactory()._validate_command(miner_ret) -# return _data -# -# ret = asyncio.run(_coro(data)) -# self.assertFalse(ret[0]) -# -# good_test_data_returns = [ -# { -# "STATUS": [{"STATUS": "S", "Msg": "Yay! Command succeeded."}], -# "id": 1, -# }, -# ] -# for data in good_test_data_returns: -# with self.subTest(): -# -# async def _coro(miner_ret): -# _data = await MinerFactory()._validate_command(miner_ret) -# return _data -# -# ret = asyncio.run(_coro(data)) -# self.assertTrue(ret[0]) + +class MinersTest(unittest.TestCase): + def test_miner_model_creation(self): + warnings.filterwarnings("ignore") + for miner_model in MINER_CLASSES.keys(): + for miner_api in MINER_CLASSES[miner_model].keys(): + with self.subTest( + msg=f"Creation of miner using model={miner_model}, api={miner_api}", + miner_model=miner_model, + miner_api=miner_api, + ): + miner = MINER_CLASSES[miner_model][miner_api]("127.0.0.1") + self.assertTrue( + isinstance(miner, MINER_CLASSES[miner_model][miner_api]) + ) if __name__ == "__main__":