Module mbed_targets.boards
Interface to the Board Database.
Expand source code
#
# Copyright (C) 2020 Arm Mbed. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
"""Interface to the Board Database."""
import json
from dataclasses import asdict
from collections.abc import Set
from typing import Iterator, Iterable, Any, Callable
from mbed_targets._internal import board_database
from mbed_targets.exceptions import UnknownBoard
from mbed_targets.board import Board
class Boards(Set):
"""Interface to the Board Database.
Boards is initialised with an Iterable[Board]. The classmethods
can be used to construct Boards with data from either the online or offline database.
"""
@classmethod
def from_offline_database(cls) -> "Boards":
"""Initialise with the offline board database.
Raises:
BoardDatabaseError: Could not retrieve data from the board database.
"""
return cls(Board.from_offline_board_entry(b) for b in board_database.get_offline_board_data())
@classmethod
def from_online_database(cls) -> "Boards":
"""Initialise with the online board database.
Raises:
BoardDatabaseError: Could not retrieve data from the board database.
"""
return cls(Board.from_online_board_entry(b) for b in board_database.get_online_board_data())
def __init__(self, boards_data: Iterable["Board"]) -> None:
"""Initialise with a list of boards.
Args:
boards_data: iterable of board data from a board database source.
"""
self._boards_data = tuple(boards_data)
def __iter__(self) -> Iterator["Board"]:
"""Yield an Board on each iteration."""
for board in self._boards_data:
yield board
def __len__(self) -> int:
"""Return the number of boards."""
return len(self._boards_data)
def __contains__(self, board: object) -> Any:
"""Check if a board is in the collection of boards.
Args:
board: An instance of Board.
"""
if not isinstance(board, Board):
return False
return any(x == board for x in self)
def get_board(self, matching: Callable) -> Board:
"""Returns first Board for which `matching` returns True.
Args:
matching: A function which will be called for each board in database
Raises:
UnknownBoard: the given product code was not found in the board database.
"""
try:
return next(board for board in self if matching(board))
except StopIteration:
raise UnknownBoard()
def json_dump(self) -> str:
"""Return the contents of the board database as a json string."""
return json.dumps([asdict(b) for b in self], indent=4)
Classes
class Boards (boards_data: Iterable[ForwardRef('Board')])
-
Interface to the Board Database.
Boards is initialised with an Iterable[Board]. The classmethods can be used to construct Boards with data from either the online or offline database.
Initialise with a list of boards.
Args
boards_data
- iterable of board data from a board database source.
Expand source code
class Boards(Set): """Interface to the Board Database. Boards is initialised with an Iterable[Board]. The classmethods can be used to construct Boards with data from either the online or offline database. """ @classmethod def from_offline_database(cls) -> "Boards": """Initialise with the offline board database. Raises: BoardDatabaseError: Could not retrieve data from the board database. """ return cls(Board.from_offline_board_entry(b) for b in board_database.get_offline_board_data()) @classmethod def from_online_database(cls) -> "Boards": """Initialise with the online board database. Raises: BoardDatabaseError: Could not retrieve data from the board database. """ return cls(Board.from_online_board_entry(b) for b in board_database.get_online_board_data()) def __init__(self, boards_data: Iterable["Board"]) -> None: """Initialise with a list of boards. Args: boards_data: iterable of board data from a board database source. """ self._boards_data = tuple(boards_data) def __iter__(self) -> Iterator["Board"]: """Yield an Board on each iteration.""" for board in self._boards_data: yield board def __len__(self) -> int: """Return the number of boards.""" return len(self._boards_data) def __contains__(self, board: object) -> Any: """Check if a board is in the collection of boards. Args: board: An instance of Board. """ if not isinstance(board, Board): return False return any(x == board for x in self) def get_board(self, matching: Callable) -> Board: """Returns first Board for which `matching` returns True. Args: matching: A function which will be called for each board in database Raises: UnknownBoard: the given product code was not found in the board database. """ try: return next(board for board in self if matching(board)) except StopIteration: raise UnknownBoard() def json_dump(self) -> str: """Return the contents of the board database as a json string.""" return json.dumps([asdict(b) for b in self], indent=4)
Ancestors
- collections.abc.Set
- collections.abc.Collection
- collections.abc.Sized
- collections.abc.Iterable
- collections.abc.Container
Static methods
def from_offline_database() ‑> Boards
-
Initialise with the offline board database.
Raises
BoardDatabaseError
- Could not retrieve data from the board database.
Expand source code
@classmethod def from_offline_database(cls) -> "Boards": """Initialise with the offline board database. Raises: BoardDatabaseError: Could not retrieve data from the board database. """ return cls(Board.from_offline_board_entry(b) for b in board_database.get_offline_board_data())
def from_online_database() ‑> Boards
-
Initialise with the online board database.
Raises
BoardDatabaseError
- Could not retrieve data from the board database.
Expand source code
@classmethod def from_online_database(cls) -> "Boards": """Initialise with the online board database. Raises: BoardDatabaseError: Could not retrieve data from the board database. """ return cls(Board.from_online_board_entry(b) for b in board_database.get_online_board_data())
Methods
def get_board(self, matching: Callable) ‑> Board
-
Returns first Board for which
matching
returns True.Args
matching
- A function which will be called for each board in database
Raises
UnknownBoard
- the given product code was not found in the board database.
Expand source code
def get_board(self, matching: Callable) -> Board: """Returns first Board for which `matching` returns True. Args: matching: A function which will be called for each board in database Raises: UnknownBoard: the given product code was not found in the board database. """ try: return next(board for board in self if matching(board)) except StopIteration: raise UnknownBoard()
def json_dump(self) ‑> str
-
Return the contents of the board database as a json string.
Expand source code
def json_dump(self) -> str: """Return the contents of the board database as a json string.""" return json.dumps([asdict(b) for b in self], indent=4)