Перейти к содержимому

Ссылка для hub_sdk/modules/projects.py

Примечание

Этот файл доступен по адресу https://github.com/ultralytics/hub-sdk/blob/main/hub_sdk/modules/projects .py. Если ты заметил проблему, пожалуйста, помоги исправить ее, создав Pull Request 🛠️. Спасибо 🙏!



hub_sdk.modules.projects.Projects

Базы: CRUDClient

Класс, представляющий клиента для взаимодействия с проектами посредством CRUD-операций. Этот класс расширяет CRUDClient и предоставляет специфические методы для работы с Проектами.

Атрибуты:

Имя Тип Описание
hub_client ProjectUpload

Экземпляр ProjectUpload, используемый для взаимодействия с загрузкой моделей.

id (str, None)

Уникальный идентификатор проекта, если таковой имеется.

data dict

Словарь для хранения данных о проекте.

Примечание

Атрибут 'id' устанавливается при инициализации и может использоваться для уникальной идентификации проекта. Атрибут 'data' используется для хранения данных о проекте, получаемых из API.

Исходный код в hub_sdk/modules/projects.py
class Projects(CRUDClient):
    """
    A class representing a client for interacting with Projects through CRUD operations. This class extends the
    CRUDClient class and provides specific methods for working with Projects.

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

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

    def __init__(self, project_id: Optional[str] = None, headers: Optional[Dict[str, Any]] = None):
        """
        Initialize a Projects object for interacting with project data via CRUD operations.

        Args:
            project_id (str, optional): Project ID for retrieving data.
            headers (dict, optional): A dictionary of HTTP headers to be included in API requests.
        """
        super().__init__("projects", "project", headers)
        self.hub_client = ProjectUpload(headers)
        self.id = project_id
        self.data = {}
        if project_id:
            self.get_data()

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

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

        Returns:
            (None): The method does not return a value.
        """
        if not self.id:
            self.logger.error("No project id has been set. Update the project id or create a project.")
            return

        try:
            response = super().read(self.id)

            if response is None:
                self.logger.error(f"Received no response from the server for project ID: {self.id}")
                return

            # Check if the response has a .json() method (it should if it's a response object)
            if not hasattr(response, "json"):
                self.logger.error(f"Invalid response object received for project ID: {self.id}")
                return

            resp_data = response.json()
            if resp_data is None:
                self.logger.error(f"No data received in the response for project ID: {self.id}")
                return

            self.data = resp_data.get("data", {})
            self.logger.debug(f"Project data retrieved for id ID: {self.id}")

        except Exception as e:
            self.logger.error(f"An error occurred while retrieving data for project ID: {self.id}, {e}")

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

        Args:
            project_data (dict): A dictionary containing the data for creating the project.

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

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

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

        Note:
            The 'hard' parameter determines whether to perform a soft delete (default) or a hard delete.
            In a soft delete, the project might be marked as deleted but retained in the system.
            In a hard delete, the project 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 project resource represented by this instance.

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

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

    def upload_image(self, file: str) -> Optional[Response]:
        """
        Uploads an image file to the hub associated with this client.

        Args:
            file (str): The file path or URL of the image to be uploaded.

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

__init__(project_id=None, headers=None)

Инициализируй объект Projects для взаимодействия с данными проекта с помощью CRUD-операций.

Параметры:

Имя Тип Описание По умолчанию
project_id str

Идентификатор проекта для получения данных.

None
headers dict

Словарь HTTP-заголовков, которые должны быть включены в запросы к API.

None
Исходный код в hub_sdk/modules/projects.py
def __init__(self, project_id: Optional[str] = None, headers: Optional[Dict[str, Any]] = None):
    """
    Initialize a Projects object for interacting with project data via CRUD operations.

    Args:
        project_id (str, optional): Project ID for retrieving data.
        headers (dict, optional): A dictionary of HTTP headers to be included in API requests.
    """
    super().__init__("projects", "project", headers)
    self.hub_client = ProjectUpload(headers)
    self.id = project_id
    self.data = {}
    if project_id:
        self.get_data()

create_project(project_data)

Создает новый проект с предоставленными данными и устанавливает идентификатор проекта для текущего экземпляра.

Параметры:

Имя Тип Описание По умолчанию
project_data dict

Словарь, содержащий данные для создания проекта.

требуется

Возвращается:

Тип Описание
None

Метод не возвращает значение.

Исходный код в hub_sdk/modules/projects.py
def create_project(self, project_data: dict) -> None:
    """
    Creates a new project with the provided data and sets the project ID for the current instance.

    Args:
        project_data (dict): A dictionary containing the data for creating the project.

    Returns:
        (None): The method does not return a value.
    """
    resp = super().create(project_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/projects.py
def delete(self, hard: Optional[bool] = False) -> Optional[Response]:
    """
    Delete the project resource represented by this instance.

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

    Note:
        The 'hard' parameter determines whether to perform a soft delete (default) or a hard delete.
        In a soft delete, the project might be marked as deleted but retained in the system.
        In a hard delete, the project 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 проекта не был задан, то он выдает сообщение об ошибке.

Возвращается:

Тип Описание
None

Метод не возвращает значение.

Исходный код в hub_sdk/modules/projects.py
def get_data(self) -> None:
    """
    Retrieves data for the current project instance.

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

    Returns:
        (None): The method does not return a value.
    """
    if not self.id:
        self.logger.error("No project id has been set. Update the project id or create a project.")
        return

    try:
        response = super().read(self.id)

        if response is None:
            self.logger.error(f"Received no response from the server for project ID: {self.id}")
            return

        # Check if the response has a .json() method (it should if it's a response object)
        if not hasattr(response, "json"):
            self.logger.error(f"Invalid response object received for project ID: {self.id}")
            return

        resp_data = response.json()
        if resp_data is None:
            self.logger.error(f"No data received in the response for project ID: {self.id}")
            return

        self.data = resp_data.get("data", {})
        self.logger.debug(f"Project data retrieved for id ID: {self.id}")

    except Exception as e:
        self.logger.error(f"An error occurred while retrieving data for project ID: {self.id}, {e}")

update(data)

Обнови ресурс проекта, представленный этим экземпляром.

Параметры:

Имя Тип Описание По умолчанию
data dict

Обновленные данные для ресурса проекта.

требуется

Возвращается:

Тип Описание
Optional[Response]

Объект ответа на запрос обновления или None, если обновление не удалось.

Исходный код в hub_sdk/modules/projects.py
def update(self, data: dict) -> Optional[Response]:
    """
    Update the project resource represented by this instance.

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

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

upload_image(file)

Загружает файл изображения на хаб, связанный с этим клиентом.

Параметры:

Имя Тип Описание По умолчанию
file str

Путь к файлу или URL-адрес загружаемого изображения.

требуется

Возвращается:

Тип Описание
Optional[Response]

Объект ответа на запрос о загрузке изображения или None, если загрузка не удалась.

Исходный код в hub_sdk/modules/projects.py
def upload_image(self, file: str) -> Optional[Response]:
    """
    Uploads an image file to the hub associated with this client.

    Args:
        file (str): The file path or URL of the image to be uploaded.

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



hub_sdk.modules.projects.ProjectList

Базы: PaginatedList

Исходный код в hub_sdk/modules/projects.py
class ProjectList(PaginatedList):
    def __init__(self, page_size: int = None, public: bool = None, headers: dict = None):
        """
        Initialize a ProjectList 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 = "projects"
        super().__init__(base_endpoint, "project", page_size, public, headers)

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

Инициализируй экземпляр ProjectList.

Параметры:

Имя Тип Описание По умолчанию
page_size int

Количество элементов, которые нужно запросить на одной странице.

None
public bool

Должны ли предметы быть общедоступными.

None
headers dict

Заголовки, которые нужно включать в запросы к API.

None
Исходный код в hub_sdk/modules/projects.py
def __init__(self, page_size: int = None, public: bool = None, headers: dict = None):
    """
    Initialize a ProjectList 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 = "projects"
    super().__init__(base_endpoint, "project", page_size, public, headers)