from .config import ConfigUnit from typing import Optional class ServicesListConfig(ConfigUnit): NAME = 'services_list' @classmethod def schema(cls) -> Optional[dict]: return { 'type': 'list', 'empty': False, 'schema': { 'type': 'string' } } class LinuxBoardsConfig(ConfigUnit): NAME = 'linux_boards' @classmethod def schema(cls) -> Optional[dict]: return { 'type': 'dict', 'schema': { # 'mdns': {'type': 'string', 'required': True}, 'board': {'type': 'string', 'required': True}, 'location': {'type': 'string', 'required': True}, 'mac': cls._addr_schema(mac=True, required=False), # FIXME mac should be required field 'network': { 'type': 'list', 'required': True, 'empty': False, 'allowed': ['wifi', 'ethernet'] }, 'ram': {'type': 'integer', 'required': False}, # FIXME same as below 'online': {'type': 'boolean', 'required': False}, # FIXME made required=False temporarily, should be always required I guess # optional 'services': { 'type': 'list', 'empty': False, 'allowed': ServicesListConfig().get() }, 'ext_hdd': { 'type': 'list', 'schema': { 'type': 'dict', 'schema': { 'mountpoint': {'type': 'string', 'required': True}, 'size': {'type': 'integer', 'required': True} } }, }, 'misc': { 'type': 'dict', 'schema': { 'case': {'type': 'string', 'allowed': ['metal', 'plastic']} } }, } } def get_board_disks(self, name: str) -> list[dict]: return self[name]['ext_hdd'] def get_board_disks_count(self, name: str) -> int: return len(self[name]['ext_hdd'])