Source code for chipscopy.api.ibert.link.group

# Copyright (C) 2021-2022, Xilinx, Inc.
# Copyright (C) 2022-2023, Advanced Micro Devices, 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
from typing import TYPE_CHECKING, Any, Dict, List, Union

from chipscopy.api.containers import QueryList

if TYPE_CHECKING:  # pragma: no cover
    from chipscopy.api.ibert.link import Link


[docs]@dataclass class LinkGroup: """ Container class for holding links. **Please do not** create an instance of this class directly. Please use the factory method :py:func:`~chipscopy.api.ibert.create_link_group` instead. """ name: str """Name of the link group""" description: str """Description of this link group""" _links: Dict[str, "Link"] filter_by: Dict[str, Any] = field(default_factory=dict) def __post_init__(self): self.filter_by = {"name": self.name} def __repr__(self) -> str: return f"{self.name} - {[link for link in self._links]}" @property def links(self) -> QueryList["Link"]: return QueryList(self._links.values())
[docs] def invalidate(self): for link in self._links.values(): link.link_group = None self.name = "" self.description = "" self._links.clear()
[docs] def add(self, links: Union["Link", List["Link"], QueryList["Link"]]): """ Add link(s) to the link group Args: links: Link(s) to add """ if not isinstance(links, list) and not isinstance(links, QueryList): links = [links] for link in links: link.link_group = self self._links[link.name] = link
[docs] def remove(self, links: Union["Link", List["Link"], QueryList["Link"]] = None): """ Remove link(s) from the link group Args: links: **(Optional)** Link(s) to remove .. note:: If no link(s) is(are) provided, all links in the link group, will be removed """ if links is None: links = [link for link in self._links] if not isinstance(links, list) and not isinstance(links, QueryList): links = [links] for link in links: link.link_group = None del self._links[link.name]