Module mbed_targets.board
Representation of an Mbed-Enabled Development Board and related utilities.
Expand source code
#
# Copyright (C) 2020 Arm Mbed. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
"""Representation of an Mbed-Enabled Development Board and related utilities."""
from dataclasses import dataclass
from typing import Tuple
@dataclass(frozen=True, order=True)
class Board:
"""Representation of an Mbed-Enabled Development Board.
Attributes:
board_type: Type of board in format that allows cross-referencing with target definitions.
board_name: Human readable name.
product_code: Uniquely identifies a board for the online compiler.
target_type: A confusing term that is not related to 'target' in other parts of the code.
Identifies if a board in the online database is a `module` or a `platform` (modules are more
complex and often have supplementary sensors, displays etc. A platform is a normal development board).
slug: Used with target_type to identify a board's page on the mbed website.
build_variant: Available build variants for the board.
Can be used in conjunction with board_type for referencing targets.
mbed_os_support: The versions of Mbed OS supported.
mbed_enabled: Whether Mbed OS is supported or not.
"""
board_type: str
board_name: str
product_code: str
target_type: str
slug: str
build_variant: Tuple[str, ...]
mbed_os_support: Tuple[str, ...]
mbed_enabled: Tuple[str, ...]
@classmethod
def from_online_board_entry(cls, board_entry: dict) -> "Board":
"""Create a new instance of Board from an online database entry.
Args:
board_entry: A single entity retrieved from the board database API.
"""
board_attrs = board_entry.get("attributes", {})
board_features = board_attrs.get("features", {})
return cls(
# Online database has inconsistently cased board types.
# Since this field is used to match against `targets.json`, we need to ensure consistency is maintained.
board_type=board_attrs.get("board_type", "").upper(),
board_name=board_attrs.get("name", ""),
mbed_os_support=tuple(board_features.get("mbed_os_support", [])),
mbed_enabled=tuple(board_features.get("mbed_enabled", [])),
product_code=board_attrs.get("product_code", ""),
target_type=board_attrs.get("target_type", ""),
slug=board_attrs.get("slug", ""),
# TODO: Remove this hard-coded example after demoing.
# NOTE: Currently we hard-code the build variant for a single board type.
# This is simply so we can demo the tools to PE. This must be removed and replaced with a proper mechanism
# for determining the build variant for all platforms. We probably need to add this information to the
# boards database.
build_variant=tuple(),
)
@classmethod
def from_offline_board_entry(cls, board_entry: dict) -> "Board":
"""Construct an Board with data from the offline database snapshot."""
return cls(
board_type=board_entry.get("board_type", ""),
board_name=board_entry.get("board_name", ""),
product_code=board_entry.get("product_code", ""),
target_type=board_entry.get("target_type", ""),
slug=board_entry.get("slug", ""),
mbed_os_support=tuple(board_entry.get("mbed_os_support", [])),
mbed_enabled=tuple(board_entry.get("mbed_enabled", [])),
build_variant=tuple(board_entry.get("build_variant", [])),
)
Classes
class Board (board_type: str, board_name: str, product_code: str, target_type: str, slug: str, build_variant: Tuple[str, ...], mbed_os_support: Tuple[str, ...], mbed_enabled: Tuple[str, ...])
-
Representation of an Mbed-Enabled Development Board.
Attributes
board_type
- Type of board in format that allows cross-referencing with target definitions.
board_name
- Human readable name.
product_code
- Uniquely identifies a board for the online compiler.
target_type
- A confusing term that is not related to 'target' in other parts of the code.
- Identifies if a board in the online database is a
module
or aplatform
(modules are more - complex and often have supplementary sensors, displays etc. A platform is a normal development board).
slug
- Used with target_type to identify a board's page on the mbed website.
build_variant
- Available build variants for the board.
- Can be used in conjunction with board_type for referencing targets.
mbed_os_support
- The versions of Mbed OS supported.
mbed_enabled
- Whether Mbed OS is supported or not.
Expand source code
class Board: """Representation of an Mbed-Enabled Development Board. Attributes: board_type: Type of board in format that allows cross-referencing with target definitions. board_name: Human readable name. product_code: Uniquely identifies a board for the online compiler. target_type: A confusing term that is not related to 'target' in other parts of the code. Identifies if a board in the online database is a `module` or a `platform` (modules are more complex and often have supplementary sensors, displays etc. A platform is a normal development board). slug: Used with target_type to identify a board's page on the mbed website. build_variant: Available build variants for the board. Can be used in conjunction with board_type for referencing targets. mbed_os_support: The versions of Mbed OS supported. mbed_enabled: Whether Mbed OS is supported or not. """ board_type: str board_name: str product_code: str target_type: str slug: str build_variant: Tuple[str, ...] mbed_os_support: Tuple[str, ...] mbed_enabled: Tuple[str, ...] @classmethod def from_online_board_entry(cls, board_entry: dict) -> "Board": """Create a new instance of Board from an online database entry. Args: board_entry: A single entity retrieved from the board database API. """ board_attrs = board_entry.get("attributes", {}) board_features = board_attrs.get("features", {}) return cls( # Online database has inconsistently cased board types. # Since this field is used to match against `targets.json`, we need to ensure consistency is maintained. board_type=board_attrs.get("board_type", "").upper(), board_name=board_attrs.get("name", ""), mbed_os_support=tuple(board_features.get("mbed_os_support", [])), mbed_enabled=tuple(board_features.get("mbed_enabled", [])), product_code=board_attrs.get("product_code", ""), target_type=board_attrs.get("target_type", ""), slug=board_attrs.get("slug", ""), # TODO: Remove this hard-coded example after demoing. # NOTE: Currently we hard-code the build variant for a single board type. # This is simply so we can demo the tools to PE. This must be removed and replaced with a proper mechanism # for determining the build variant for all platforms. We probably need to add this information to the # boards database. build_variant=tuple(), ) @classmethod def from_offline_board_entry(cls, board_entry: dict) -> "Board": """Construct an Board with data from the offline database snapshot.""" return cls( board_type=board_entry.get("board_type", ""), board_name=board_entry.get("board_name", ""), product_code=board_entry.get("product_code", ""), target_type=board_entry.get("target_type", ""), slug=board_entry.get("slug", ""), mbed_os_support=tuple(board_entry.get("mbed_os_support", [])), mbed_enabled=tuple(board_entry.get("mbed_enabled", [])), build_variant=tuple(board_entry.get("build_variant", [])), )
Static methods
def from_offline_board_entry(board_entry: dict) ‑> Board
-
Construct an Board with data from the offline database snapshot.
Expand source code
@classmethod def from_offline_board_entry(cls, board_entry: dict) -> "Board": """Construct an Board with data from the offline database snapshot.""" return cls( board_type=board_entry.get("board_type", ""), board_name=board_entry.get("board_name", ""), product_code=board_entry.get("product_code", ""), target_type=board_entry.get("target_type", ""), slug=board_entry.get("slug", ""), mbed_os_support=tuple(board_entry.get("mbed_os_support", [])), mbed_enabled=tuple(board_entry.get("mbed_enabled", [])), build_variant=tuple(board_entry.get("build_variant", [])), )
def from_online_board_entry(board_entry: dict) ‑> Board
-
Create a new instance of Board from an online database entry.
Args
board_entry
- A single entity retrieved from the board database API.
Expand source code
@classmethod def from_online_board_entry(cls, board_entry: dict) -> "Board": """Create a new instance of Board from an online database entry. Args: board_entry: A single entity retrieved from the board database API. """ board_attrs = board_entry.get("attributes", {}) board_features = board_attrs.get("features", {}) return cls( # Online database has inconsistently cased board types. # Since this field is used to match against `targets.json`, we need to ensure consistency is maintained. board_type=board_attrs.get("board_type", "").upper(), board_name=board_attrs.get("name", ""), mbed_os_support=tuple(board_features.get("mbed_os_support", [])), mbed_enabled=tuple(board_features.get("mbed_enabled", [])), product_code=board_attrs.get("product_code", ""), target_type=board_attrs.get("target_type", ""), slug=board_attrs.get("slug", ""), # TODO: Remove this hard-coded example after demoing. # NOTE: Currently we hard-code the build variant for a single board type. # This is simply so we can demo the tools to PE. This must be removed and replaced with a proper mechanism # for determining the build variant for all platforms. We probably need to add this information to the # boards database. build_variant=tuple(), )