# ------------------------------------------------------------------------------ # Copyright 2022 Upstream Data Inc - # - # Licensed under the Apache License, Version 2.0 (the "License"); - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - # ------------------------------------------------------------------------------ from dataclasses import dataclass, field, make_dataclass from enum import Enum from typing import List, Union class DataOptions(Enum): MAC = "mac" API_VERSION = "api_ver" FW_VERSION = "fw_ver" HOSTNAME = "hostname" HASHRATE = "hashrate" EXPECTED_HASHRATE = "expected_hashrate" HASHBOARDS = "hashboards" ENVIRONMENT_TEMP = "env_temp" WATTAGE = "wattage" WATTAGE_LIMIT = "wattage_limit" FANS = "fans" FAN_PSU = "fan_psu" ERRORS = "errors" FAULT_LIGHT = "fault_light" IS_MINING = "is_mining" UPTIME = "uptime" CONFIG = "config" def __str__(self): return self.value def default_command(self): if str(self.value) == "config": return "get_config" elif str(self.value) == "is_mining": return "_is_mining" else: return f"_get_{str(self.value)}" @dataclass class RPCAPICommand: name: str cmd: str @dataclass class WebAPICommand: name: str cmd: str @dataclass class DataFunction: cmd: str kwargs: List[Union[RPCAPICommand, WebAPICommand]] = field(default_factory=list) def __call__(self, *args, **kwargs): return self DataLocations = make_dataclass( "DataLocations", [ ( enum_value.value, DataFunction, field(default_factory=DataFunction(enum_value.default_command())), ) for enum_value in DataOptions ], )