コンテンツへスキップ

参考 hub_sdk/modules/datasets.py

備考

このファイルはhttps://github.com/ultralytics/hub-sdk/blob/main/ hub_sdk/modules/datasets .py にあります。もし問題を発見したら、Pull Request🛠️ を投稿して修正にご協力ください。ありがとうございました!



hub_sdk.modules.datasets.Datasets

ベース: CRUDClient

CRUD操作によってデータセットとやりとりするクライアントを表すクラスです。このクラスは クラスを継承し、 Datasets を操作するための固有のメソッドを提供します。

属性:

名称 タイプ 説明
hub_client DatasetUpload

モデルのアップロードに使用される DatasetUpload のインスタンス。

id (str, None)

もしあれば,データセットの一意な識別子.

data dict

データセットのデータを格納する辞書。

備考

id' 属性は初期化時に設定され、データセットを一意に識別するために使われる。 data' 属性は、APIから取得したデータセットのデータを保存するために使われる。

ソースコード hub_sdk/modules/datasets.py
class Datasets(CRUDClient):
    """
    A class representing a client for interacting with Datasets through CRUD operations. This class extends the
    CRUDClient class and provides specific methods for working with Datasets.

    Attributes:
        hub_client (DatasetUpload): An instance of DatasetUpload used for interacting with model uploads.
        id (str, None): The unique identifier of the dataset, if available.
        data (dict): A dictionary to store dataset data.

    Note:
        The 'id' attribute is set during initialization and can be used to uniquely identify a dataset.
        The 'data' attribute is used to store dataset data fetched from the API.
    """

    def __init__(self, dataset_id: Optional[str] = None, headers: Optional[Dict[str, Any]] = None):
        """
        Initialize a Datasets client.

        Args:
            dataset_id (str): Unique id of the dataset.
            headers (dict, optional): Headers to include in HTTP requests.
        """
        super().__init__("datasets", "dataset", headers)
        self.hub_client = DatasetUpload(headers)
        self.id = dataset_id
        self.data = {}
        if dataset_id:
            self.get_data()

    def get_data(self) -> None:
        """
        Retrieves data for the current dataset instance.

        If a valid dataset ID has been set, it sends a request to fetch the dataset data and stores it in the instance.
        If no dataset ID has been set, it logs an error message.

        Returns:
            (None): The method does not return a value.
        """
        if self.id:
            resp = super().read(self.id).json()
            self.data = resp.get("data", {})
            self.logger.debug("Dataset id is %s", self.id)
        else:
            self.logger.error("No dataset id has been set. Update the dataset id or create a dataset.")

    def create_dataset(self, dataset_data: dict) -> None:
        """
        Creates a new dataset with the provided data and sets the dataset ID for the current instance.

        Args:
            dataset_data (dict): A dictionary containing the data for creating the dataset.

        Returns:
            (None): The method does not return a value.
        """
        resp = super().create(dataset_data).json()
        self.id = resp.get("data", {}).get("id")
        self.get_data()

    def delete(self, hard: bool = False) -> Optional[Response]:
        """
        Delete the dataset resource represented by this instance.

        Args:
            hard (bool, optional): If True, perform a hard delete.

        Note:
            The 'hard' parameter determines whether to perform a soft delete (default) or a hard delete.
            In a soft delete, the dataset might be marked as deleted but retained in the system.
            In a hard delete, the dataset is permanently removed from the system.

        Returns:
            (Optional[Response]): Response object from the delete request, or None if delete fails.
        """
        return super().delete(self.id, hard)

    def update(self, data: dict) -> Optional[Response]:
        """
        Update the dataset resource represented by this instance.

        Args:
            data (dict): The updated data for the dataset resource.

        Returns:
            (Optional[Response]): Response object from the update request, or None if update fails.
        """
        return super().update(self.id, data)

    def upload_dataset(self, file: str = None) -> Optional[Response]:
        """
        Uploads a dataset file to the hub.

        Args:
            file (str, optional): The path to the dataset file to upload.

        Returns:
            (Optional[Response]): Response object from the upload request, or None if upload fails.
        """
        return self.hub_client.upload_dataset(self.id, file)

    def get_download_link(self, type: str) -> Optional[str]:
        """
        Get dataset download link.

        Args:
            type (str):

        Returns:
            (Optional[str]): Return download link or None if the link is not available.
        """
        try:
            payload = {"collection": "datasets", "docId": self.id, "object": type}
            endpoint = f"{HUB_FUNCTIONS_ROOT}/v1/storage"
            response = self.post(endpoint, json=payload)
            json = response.json()
            return json.get("data", {}).get("url")
        except Exception as e:
            self.logger.error(f"Failed to download file file for {self.name}: %s", e)
            raise e

__init__(dataset_id=None, headers=None)

Datasets クライアントを初期化します。

パラメーター

名称 タイプ 説明 デフォルト
dataset_id str

データセットのユニークID。

None
headers dict

HTTP リクエストに含めるヘッダ。

None
ソースコード hub_sdk/modules/datasets.py
def __init__(self, dataset_id: Optional[str] = None, headers: Optional[Dict[str, Any]] = None):
    """
    Initialize a Datasets client.

    Args:
        dataset_id (str): Unique id of the dataset.
        headers (dict, optional): Headers to include in HTTP requests.
    """
    super().__init__("datasets", "dataset", headers)
    self.hub_client = DatasetUpload(headers)
    self.id = dataset_id
    self.data = {}
    if dataset_id:
        self.get_data()

create_dataset(dataset_data)

提供されたデータで新しいデータセットを作成し、現在のインスタンスのデータセットIDを設定する。

パラメーター

名称 タイプ 説明 デフォルト
dataset_data dict

データセットを作成するためのデータを含む辞書。

必須

リターンズ

タイプ 説明
None

メソッドは値を返さない。

ソースコード hub_sdk/modules/datasets.py
def create_dataset(self, dataset_data: dict) -> None:
    """
    Creates a new dataset with the provided data and sets the dataset ID for the current instance.

    Args:
        dataset_data (dict): A dictionary containing the data for creating the dataset.

    Returns:
        (None): The method does not return a value.
    """
    resp = super().create(dataset_data).json()
    self.id = resp.get("data", {}).get("id")
    self.get_data()

delete(hard=False)

このインスタンスが表すデータセットリソースを削除します。

パラメーター

名称 タイプ 説明 デフォルト
hard bool

Trueの場合、ハード削除を行う。

False
備考

hard」パラメータは、ソフト削除(デフォルト)かハード削除かを決定する。 ソフト削除の場合、データセットは削除されたものとしてマークされるが、 システムには保持される。 ハード削除では、データセットはシステムから永久に削除される。

リターンズ

タイプ 説明
Optional[Response]

削除に失敗した場合は None。

ソースコード hub_sdk/modules/datasets.py
def delete(self, hard: bool = False) -> Optional[Response]:
    """
    Delete the dataset resource represented by this instance.

    Args:
        hard (bool, optional): If True, perform a hard delete.

    Note:
        The 'hard' parameter determines whether to perform a soft delete (default) or a hard delete.
        In a soft delete, the dataset might be marked as deleted but retained in the system.
        In a hard delete, the dataset is permanently removed from the system.

    Returns:
        (Optional[Response]): Response object from the delete request, or None if delete fails.
    """
    return super().delete(self.id, hard)

get_data()

現在のデータセットインスタンスのデータを取得する。

有効なデータセットIDが設定されていれば,そのデータセットデータを取得するリクエストを送り,インスタンスに格納する. データセットIDが設定されていない場合は,エラーメッセージを記録する.

リターンズ

タイプ 説明
None

メソッドは値を返さない。

ソースコード hub_sdk/modules/datasets.py
def get_data(self) -> None:
    """
    Retrieves data for the current dataset instance.

    If a valid dataset ID has been set, it sends a request to fetch the dataset data and stores it in the instance.
    If no dataset ID has been set, it logs an error message.

    Returns:
        (None): The method does not return a value.
    """
    if self.id:
        resp = super().read(self.id).json()
        self.data = resp.get("data", {})
        self.logger.debug("Dataset id is %s", self.id)
    else:
        self.logger.error("No dataset id has been set. Update the dataset id or create a dataset.")

データセットのダウンロードリンクを取得する。

パラメーター

名称 タイプ 説明 デフォルト
type str
必須

リターンズ

タイプ 説明
Optional[str]

ダウンロードリンクを返すか、リンクが利用できない場合は None を返す。

ソースコード hub_sdk/modules/datasets.py
def get_download_link(self, type: str) -> Optional[str]:
    """
    Get dataset download link.

    Args:
        type (str):

    Returns:
        (Optional[str]): Return download link or None if the link is not available.
    """
    try:
        payload = {"collection": "datasets", "docId": self.id, "object": type}
        endpoint = f"{HUB_FUNCTIONS_ROOT}/v1/storage"
        response = self.post(endpoint, json=payload)
        json = response.json()
        return json.get("data", {}).get("url")
    except Exception as e:
        self.logger.error(f"Failed to download file file for {self.name}: %s", e)
        raise e

update(data)

このインスタンスが表すデータセットリソースを更新する。

パラメーター

名称 タイプ 説明 デフォルト
data dict

データセットリソースの更新データ。

必須

リターンズ

タイプ 説明
Optional[Response]

更新リクエストのレスポンスオブジェクト。更新に失敗した場合は None。

ソースコード hub_sdk/modules/datasets.py
def update(self, data: dict) -> Optional[Response]:
    """
    Update the dataset resource represented by this instance.

    Args:
        data (dict): The updated data for the dataset resource.

    Returns:
        (Optional[Response]): Response object from the update request, or None if update fails.
    """
    return super().update(self.id, data)

upload_dataset(file=None)

データセットファイルをhub にアップロードする。

パラメーター

名称 タイプ 説明 デフォルト
file str

アップロードするデータセットファイルのパス。

None

リターンズ

タイプ 説明
Optional[Response]

アップロードに失敗した場合は None。

ソースコード hub_sdk/modules/datasets.py
def upload_dataset(self, file: str = None) -> Optional[Response]:
    """
    Uploads a dataset file to the hub.

    Args:
        file (str, optional): The path to the dataset file to upload.

    Returns:
        (Optional[Response]): Response object from the upload request, or None if upload fails.
    """
    return self.hub_client.upload_dataset(self.id, file)



hub_sdk.modules.datasets.DatasetList

ベース: PaginatedList

ソースコード hub_sdk/modules/datasets.py
class DatasetList(PaginatedList):
    def __init__(self, page_size=None, public=None, headers=None):
        """
        Initialize a Dataset instance.

        Args:
            page_size (int, optional): The number of items to request per page.
            public (bool, optional): Whether the items should be publicly accessible.
            headers (dict, optional): Headers to be included in API requests.
        """
        base_endpoint = "datasets"
        if public:
            base_endpoint = f"public/{base_endpoint}"
        super().__init__(base_endpoint, "dataset", page_size, headers)

__init__(page_size=None, public=None, headers=None)

Dataset インスタンスを初期化します。

パラメーター

名称 タイプ 説明 デフォルト
page_size int

ページあたりのリクエスト項目数。

None
public bool

一般公開すべきかどうか。

None
headers dict

API リクエストに含めるヘッダー。

None
ソースコード hub_sdk/modules/datasets.py
def __init__(self, page_size=None, public=None, headers=None):
    """
    Initialize a Dataset instance.

    Args:
        page_size (int, optional): The number of items to request per page.
        public (bool, optional): Whether the items should be publicly accessible.
        headers (dict, optional): Headers to be included in API requests.
    """
    base_endpoint = "datasets"
    if public:
        base_endpoint = f"public/{base_endpoint}"
    super().__init__(base_endpoint, "dataset", page_size, headers)