Skip to content

Parameter Groups

albert.collections.parameter_groups.ParameterGroupCollection

ParameterGroupCollection(*, session: AlbertSession)

Bases: BaseCollection

ParameterGroupCollection is a collection class for managing ParameterGroup entities in the Albert platform.

Parameters:

Name Type Description Default
session AlbertSession

The Albert session to use for making requests.

required

Methods:

Name Description
get_by_id

Get a parameter group by its ID.

get_by_ids
search

Search for Parameter Groups matching the given criteria.

get_all

Search and hydrate all Parameter Groups matching the given criteria.

delete

Delete a parameter group by its ID.

create

Create a new parameter group.

get_by_name

Get a parameter group by its name.

update

Update a parameter group.

Attributes:

Name Type Description
base_path
Source code in src/albert/collections/parameter_groups.py
def __init__(self, *, session: AlbertSession):
    """A collection for interacting with Albert parameter groups.

    Parameters
    ----------
    session : AlbertSession
        The Albert session to use for making requests.
    """
    super().__init__(session=session)
    self.base_path = f"/api/{ParameterGroupCollection._api_version}/parametergroups"

base_path

base_path = f'/api/{_api_version}/parametergroups'

get_by_id

get_by_id(*, id: ParameterGroupId) -> ParameterGroup

Get a parameter group by its ID.

Parameters:

Name Type Description Default
id str

The ID of the parameter group to retrieve.

required

Returns:

Type Description
ParameterGroup

The parameter group with the given ID.

Source code in src/albert/collections/parameter_groups.py
@validate_call
def get_by_id(self, *, id: ParameterGroupId) -> ParameterGroup:
    """Get a parameter group by its ID.

    Parameters
    ----------
    id : str
        The ID of the parameter group to retrieve.

    Returns
    -------
    ParameterGroup
        The parameter group with the given ID.
    """
    path = f"{self.base_path}/{id}"
    response = self.session.get(path)
    return ParameterGroup(**response.json())

get_by_ids

get_by_ids(
    *, ids: list[ParameterGroupId]
) -> list[ParameterGroup]
Source code in src/albert/collections/parameter_groups.py
@validate_call
def get_by_ids(self, *, ids: list[ParameterGroupId]) -> list[ParameterGroup]:
    url = f"{self.base_path}/ids"
    batches = [ids[i : i + 100] for i in range(0, len(ids), 100)]
    return [
        ParameterGroup(**item)
        for batch in batches
        for item in self.session.get(url, params={"id": batch}).json()["Items"]
    ]

search

search(
    *,
    text: str | None = None,
    types: PGType | list[PGType] | None = None,
    order_by: OrderBy = DESCENDING,
    offset: int | None = None,
    max_items: int | None = None,
) -> Iterator[ParameterGroupSearchItem]

Search for Parameter Groups matching the given criteria.

Parameters:

Name Type Description Default
text str

Text to search for.

None
types PGType or list of PGType

Filter by Parameter Group types.

None
order_by OrderBy

Order of results. Default is DESCENDING.

DESCENDING
offset int

Offset to begin results from.

None
max_items int

Maximum number of items to return in total. If None, fetches all available items.

None

Yields:

Type Description
Iterator[ParameterGroupSearchItem]

Iterator of ParameterGroupSearchItem entities, which are partial representations of Parameter Groups.

Source code in src/albert/collections/parameter_groups.py
def search(
    self,
    *,
    text: str | None = None,
    types: PGType | list[PGType] | None = None,
    order_by: OrderBy = OrderBy.DESCENDING,
    offset: int | None = None,
    max_items: int | None = None,
) -> Iterator[ParameterGroupSearchItem]:
    """
    Search for Parameter Groups matching the given criteria.

    Parameters
    ----------
    text : str, optional
        Text to search for.
    types : PGType or list of PGType, optional
        Filter by Parameter Group types.
    order_by : OrderBy, optional
        Order of results. Default is DESCENDING.
    offset : int, optional
        Offset to begin results from.
    max_items : int, optional
        Maximum number of items to return in total. If None, fetches all available items.

    Yields
    ------
    Iterator[ParameterGroupSearchItem]
        Iterator of ParameterGroupSearchItem entities, which are partial representations of Parameter Groups.
    """
    params = {
        "offset": offset,
        "order": order_by.value,
        "text": text,
        "types": [types] if isinstance(types, PGType) else types,
    }

    return AlbertPaginator(
        mode=PaginationMode.OFFSET,
        path=f"{self.base_path}/search",
        session=self.session,
        params=params,
        max_items=max_items,
        deserialize=lambda items: [
            ParameterGroupSearchItem(**item)._bind_collection(self) for item in items
        ],
    )

get_all

get_all(
    *,
    text: str | None = None,
    types: PGType | list[PGType] | None = None,
    order_by: OrderBy = DESCENDING,
    offset: int | None = None,
    max_items: int | None = None,
) -> Iterator[ParameterGroup]

Search and hydrate all Parameter Groups matching the given criteria.

Parameters:

Name Type Description Default
text str

Text to search for.

None
types PGType or list of PGType

Filter by Parameter Group types.

None
order_by OrderBy

Order of results. Default is DESCENDING.

DESCENDING
offset int

Offset to begin results from.

None
max_items int

Maximum number of items to return in total. If None, fetches all available items.

None

Yields:

Type Description
Iterator[ParameterGroup]

Iterator over Parameter Group entities.

Source code in src/albert/collections/parameter_groups.py
def get_all(
    self,
    *,
    text: str | None = None,
    types: PGType | list[PGType] | None = None,
    order_by: OrderBy = OrderBy.DESCENDING,
    offset: int | None = None,
    max_items: int | None = None,
) -> Iterator[ParameterGroup]:
    """
    Search and hydrate all Parameter Groups matching the given criteria.

    Parameters
    ----------
    text : str, optional
        Text to search for.
    types : PGType or list of PGType, optional
        Filter by Parameter Group types.
    order_by : OrderBy, optional
        Order of results. Default is DESCENDING.
    offset : int, optional
        Offset to begin results from.
    max_items : int, optional
        Maximum number of items to return in total. If None, fetches all available items.

    Yields
    ------
    Iterator[ParameterGroup]
        Iterator over Parameter Group entities.
    """
    for item in self.search(
        text=text,
        types=types,
        order_by=order_by,
        offset=offset,
        max_items=max_items,
    ):
        try:
            yield self.get_by_id(id=item.id)
        except AlbertHTTPError as e:  # pragma: no cover
            logger.warning(f"Error fetching parameter group {item.id}: {e}")

delete

delete(*, id: ParameterGroupId) -> None

Delete a parameter group by its ID.

Parameters:

Name Type Description Default
id str

The ID of the parameter group to delete

required
Source code in src/albert/collections/parameter_groups.py
@validate_call
def delete(self, *, id: ParameterGroupId) -> None:
    """Delete a parameter group by its ID.

    Parameters
    ----------
    id : str
        The ID of the parameter group to delete
    """
    path = f"{self.base_path}/{id}"
    self.session.delete(path)

create

create(
    *, parameter_group: ParameterGroup
) -> ParameterGroup

Create a new parameter group.

Parameters:

Name Type Description Default
parameter_group ParameterGroup

The parameter group to create.

required

Returns:

Type Description
ParameterGroup

The created parameter group.

Source code in src/albert/collections/parameter_groups.py
def create(self, *, parameter_group: ParameterGroup) -> ParameterGroup:
    """Create a new parameter group.

    Parameters
    ----------
    parameter_group : ParameterGroup
        The parameter group to create.

    Returns
    -------
    ParameterGroup
        The created parameter group.
    """

    response = self.session.post(
        self.base_path,
        json=parameter_group.model_dump(by_alias=True, exclude_none=True, mode="json"),
    )
    return ParameterGroup(**response.json())

get_by_name

get_by_name(*, name: str) -> ParameterGroup | None

Get a parameter group by its name.

Parameters:

Name Type Description Default
name str

The name of the parameter group to retrieve.

required

Returns:

Type Description
ParameterGroup | None

The parameter group with the given name, or None if not found.

Source code in src/albert/collections/parameter_groups.py
def get_by_name(self, *, name: str) -> ParameterGroup | None:
    """Get a parameter group by its name.

    Parameters
    ----------
    name : str
        The name of the parameter group to retrieve.

    Returns
    -------
    ParameterGroup | None
        The parameter group with the given name, or None if not found.
    """
    matches = self.search(text=name)
    for m in matches:
        if m.name.lower() == name.lower():
            return m.hydrate()
    return None

update

update(
    *, parameter_group: ParameterGroup
) -> ParameterGroup

Update a parameter group.

Parameters:

Name Type Description Default
parameter_group ParameterGroup

The updated ParameterGroup. The ParameterGroup must have an ID.

required

Returns:

Type Description
ParameterGroup

The updated ParameterGroup as returned by the server.

Source code in src/albert/collections/parameter_groups.py
def update(self, *, parameter_group: ParameterGroup) -> ParameterGroup:
    """Update a parameter group.

    Parameters
    ----------
    parameter_group : ParameterGroup
        The updated ParameterGroup. The ParameterGroup must have an ID.

    Returns
    -------
    ParameterGroup
        The updated ParameterGroup as returned by the server.
    """
    existing = self.get_by_id(id=parameter_group.id)
    path = f"{self.base_path}/{existing.id}"

    base_payload = self._generate_patch_payload(
        existing=existing, updated=parameter_group, generate_metadata_diff=True
    )

    general_patches, new_parameter_values, enum_patches = generate_parameter_group_patches(
        initial_patches=base_payload,
        updated_parameter_group=parameter_group,
        existing_parameter_group=existing,
    )

    # add new parameters
    new_param_url = f"{self.base_path}/{parameter_group.id}/parameters"
    if len(new_parameter_values) > 0:
        self.session.put(
            url=new_param_url,
            json={
                "Parameters": [
                    x.model_dump(mode="json", by_alias=True, exclude_none=True)
                    for x in new_parameter_values
                ],
            },
        )
    new_param_sequences = [x.sequence for x in new_parameter_values]
    # handle enum updates
    for sequence, ep in enum_patches.items():
        if sequence in new_param_sequences:
            # we don't need to handle enum updates for new parameters
            continue
        if len(ep) > 0:
            enum_url = f"{self.base_path}/{parameter_group.id}/parameters/{sequence}/enums"
            self.session.put(
                url=enum_url,
                json=ep,
            )
    if len(general_patches.data) > 0:
        # patch the general patches
        self.session.patch(
            url=path,
            json=general_patches.model_dump(mode="json", by_alias=True, exclude_none=True),
        )

    return self.get_by_id(id=parameter_group.id)