Skip to content

Lots

albert.collections.lots.LotCollection

LotCollection(*, session: AlbertSession)

Bases: BaseCollection

LotCollection is a collection class for managing Lot entities in the Albert platform.

Parameters:

Name Type Description Default
session AlbertSession

An Albert session instance.

required

Methods:

Name Description
create
get_by_id

Get a lot by its ID.

get_by_ids

Get a list of lots by their IDs.

delete

Delete a lot by its ID.

get_all

Get all Lot entities with optional filters.

update

Update a lot.

Attributes:

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

    Parameters
    ----------
    session : AlbertSession
        An Albert session instance.
    """
    super().__init__(session=session)
    self.base_path = f"/api/{LotCollection._api_version}/lots"

base_path

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

create

create(*, lots: list[Lot]) -> list[Lot]
Source code in src/albert/collections/lots.py
def create(self, *, lots: list[Lot]) -> list[Lot]:
    # TODO: Once thi endpoint is fixed, go back to passing the whole list at once
    payload = [lot.model_dump(by_alias=True, exclude_none=True, mode="json") for lot in lots]
    all_lots = []
    for lot in payload:
        response = self.session.post(self.base_path, json=[lot])
        all_lots.append(Lot(**response.json()[0]))
    # response = self.session.post(self.base_path, json=payload)
    # return [Lot(**lot) for lot in response.json().get("CreatedLots", [])]
    return all_lots

get_by_id

get_by_id(*, id: LotId) -> Lot

Get a lot by its ID.

Parameters:

Name Type Description Default
id str

The ID of the lot to get.

required

Returns:

Type Description
Lot

The lot with the provided ID.

Source code in src/albert/collections/lots.py
@validate_call
def get_by_id(self, *, id: LotId) -> Lot:
    """Get a lot by its ID.

    Parameters
    ----------
    id : str
        The ID of the lot to get.

    Returns
    -------
    Lot
        The lot with the provided ID.
    """
    url = f"{self.base_path}/{id}"
    response = self.session.get(url)
    return Lot(**response.json())

get_by_ids

get_by_ids(*, ids: list[LotId]) -> list[Lot]

Get a list of lots by their IDs.

Parameters:

Name Type Description Default
ids list[str]

A list of lot IDs to get.

required

Returns:

Type Description
list[Lot]

A list of lots with the provided IDs.

Source code in src/albert/collections/lots.py
@validate_call
def get_by_ids(self, *, ids: list[LotId]) -> list[Lot]:
    """Get a list of lots by their IDs.

    Parameters
    ----------
    ids : list[str]
        A list of lot IDs to get.

    Returns
    -------
    list[Lot]
        A list of lots with the provided IDs.
    """
    url = f"{self.base_path}/ids"
    response = self.session.get(url, params={"id": ids})
    return [Lot(**lot) for lot in response.json()["Items"]]

delete

delete(*, id: LotId) -> None

Delete a lot by its ID.

Parameters:

Name Type Description Default
id str

The ID of the lot to delete.

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

    Parameters
    ----------
    id : str
        The ID of the lot to delete.
    """
    url = f"{self.base_path}?id={id}"
    self.session.delete(url)

get_all

get_all(
    *,
    parent_id: InventoryId | None = None,
    inventory_id: InventoryId | None = None,
    barcode_id: str | None = None,
    parent_id_category: str | None = None,
    inventory_on_hand: str | None = None,
    location_id: str | None = None,
    exact_match: bool = False,
    begins_with: bool = False,
    start_key: str | None = None,
    max_items: int | None = None,
) -> Iterator[Lot]

Get all Lot entities with optional filters.

Parameters:

Name Type Description Default
parent_id str

Fetch lots for the given parentId (inventory).

None
inventory_id str

Fetch lots for the given inventoryId.

None
barcode_id str

Fetch lots for the given barcodeId.

None
parent_id_category str

Filter by parentIdCategory (e.g., RawMaterials, Consumables).

None
inventory_on_hand str

Filter by inventoryOnHand (lteZero, gtZero, eqZero).

None
location_id str

Filter by locationId.

None
exact_match bool

Whether to match barcodeId exactly. Default is False.

False
begins_with bool

Whether to match barcodeId as prefix. Default is False.

False
start_key str

The pagination key to continue listing from.

None
max_items int

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

None

Returns:

Type Description
Iterator[Lot]

An iterator of Lot entities matching the filters.

Source code in src/albert/collections/lots.py
@validate_call
def get_all(
    self,
    *,
    parent_id: InventoryId | None = None,
    inventory_id: InventoryId | None = None,
    barcode_id: str | None = None,
    parent_id_category: str | None = None,
    inventory_on_hand: str | None = None,
    location_id: str | None = None,
    exact_match: bool = False,
    begins_with: bool = False,
    start_key: str | None = None,
    max_items: int | None = None,
) -> Iterator[Lot]:
    """
    Get all Lot entities with optional filters.

    Parameters
    ----------
    parent_id : str, optional
        Fetch lots for the given parentId (inventory).
    inventory_id : str, optional
        Fetch lots for the given inventoryId.
    barcode_id : str, optional
        Fetch lots for the given barcodeId.
    parent_id_category : str, optional
        Filter by parentIdCategory (e.g., RawMaterials, Consumables).
    inventory_on_hand : str, optional
        Filter by inventoryOnHand (lteZero, gtZero, eqZero).
    location_id : str, optional
        Filter by locationId.
    exact_match : bool, optional
        Whether to match barcodeId exactly. Default is False.
    begins_with : bool, optional
        Whether to match barcodeId as prefix. Default is False.
    start_key : str, optional
        The pagination key to continue listing from.
    max_items : int, optional
        Maximum number of items to return in total. If None, fetches all available items.

    Returns
    -------
    Iterator[Lot]
        An iterator of Lot entities matching the filters.
    """
    params = {
        "parentId": parent_id,
        "inventoryId": inventory_id,
        "barcodeId": barcode_id,
        "parentIdCategory": parent_id_category,
        "inventoryOnHand": inventory_on_hand,
        "locationId": location_id,
        "startKey": start_key,
        "exactMatch": exact_match,
        "beginsWith": begins_with,
    }

    return AlbertPaginator(
        mode=PaginationMode.KEY,
        path=self.base_path,
        session=self.session,
        params=params,
        max_items=max_items,
        deserialize=lambda items: [Lot(**item) for item in items],
    )

update

update(*, lot: Lot) -> Lot

Update a lot.

Parameters:

Name Type Description Default
lot Lot

The updated lot object.

required

Returns:

Type Description
Lot

The updated Lot entity as returned by the server.

Source code in src/albert/collections/lots.py
def update(self, *, lot: Lot) -> Lot:
    """Update a lot.

    Parameters
    ----------
    lot : Lot
        The updated lot object.

    Returns
    -------
    Lot
        The updated Lot entity as returned by the server.
    """
    existing_lot = self.get_by_id(id=lot.id)
    patch_data = self._generate_patch_payload(existing=existing_lot, updated=lot)
    url = f"{self.base_path}/{lot.id}"

    self.session.patch(url, json=patch_data.model_dump(mode="json", by_alias=True))

    return self.get_by_id(id=lot.id)