Salta para o conteúdo

Referência para hub_sdk/modules/projects.py

Nota

Este ficheiro está disponível em https://github.com/ultralytics/hub-sdk/blob/main/hub_sdk/modules/projects .py. Se detectares um problema, por favor ajuda a corrigi-lo contribuindo com um Pull Request 🛠️. Obrigado 🙏!



hub_sdk.modules.projects.Projects

Bases: CRUDClient

Uma classe que representa um cliente para interagir com os projectos através de operações CRUD. Esta classe estende a classe CRUDClient e fornece métodos específicos para trabalhar com projectos.

Atributos:

Nome Tipo Descrição
hub_client ProjectUpload

Uma instância de ProjectUpload utilizada para interagir com carregamentos de modelos.

id (str, None)

O identificador único do projeto, se disponível.

data dict

Um dicionário para armazenar os dados do projeto.

Nota

O atributo "id" é definido durante a inicialização e pode ser utilizado para identificar um projeto de forma exclusiva. O atributo "data" é utilizado para armazenar os dados do projeto obtidos a partir da API.

Código fonte em 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)

Inicializa um objeto Projects para interagir com os dados do projeto através de operações CRUD.

Parâmetros:

Nome Tipo Descrição Predefinição
project_id str

ID do projeto para recuperar dados.

None
headers dict

Um dicionário de cabeçalhos HTTP a incluir nos pedidos de API.

None
Código fonte em 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)

Cria um novo projeto com os dados fornecidos e define o ID do projeto para a instância atual.

Parâmetros:

Nome Tipo Descrição Predefinição
project_data dict

Um dicionário que contém os dados para a criação do projeto.

necessário

Devolve:

Tipo Descrição
None

O método não devolve um valor.

Código fonte em 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)

Elimina o recurso do projeto representado por esta instância.

Parâmetros:

Nome Tipo Descrição Predefinição
hard bool

Se for Verdadeiro, executa uma eliminação definitiva (permanente).

False
Nota

O parâmetro "hard" determina se deve efetuar um apagamento suave (predefinição) ou um apagamento rígido. Numa eliminação suave, o projeto pode ser marcado como eliminado mas mantido no sistema. Num apagamento rígido, o projeto é permanentemente removido do sistema.

Devolve:

Tipo Descrição
Optional[Response]

Objeto de resposta do pedido de eliminação, ou None se a eliminação falhar.

Código fonte em 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()

Recupera dados para a instância do projeto atual.

Se tiver sido definido um ID de projeto válido, envia um pedido para obter os dados do projeto e armazena-os na instância. Se nenhum ID de projeto tiver sido definido, registra uma mensagem de erro.

Devolve:

Tipo Descrição
None

O método não devolve um valor.

Código fonte em 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)

Actualiza o recurso do projeto representado por esta instância.

Parâmetros:

Nome Tipo Descrição Predefinição
data dict

Os dados actualizados para o recurso do projeto.

necessário

Devolve:

Tipo Descrição
Optional[Response]

Objeto de resposta do pedido de atualização, ou None se a atualização falhar.

Código fonte em 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)

Carrega um ficheiro de imagem para o hub associado a este cliente.

Parâmetros:

Nome Tipo Descrição Predefinição
file str

O caminho do ficheiro ou URL da imagem a ser carregada.

necessário

Devolve:

Tipo Descrição
Optional[Response]

Objeto de resposta do pedido de carregamento da imagem, ou None se o carregamento falhar.

Código fonte em 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

Bases: PaginatedList

Código fonte em 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)

Inicializa uma instância de ProjectList.

Parâmetros:

Nome Tipo Descrição Predefinição
page_size int

O número de itens a pedir por página.

None
public bool

Se os elementos devem ser acessíveis ao público.

None
headers dict

Cabeçalhos a incluir nos pedidos de API.

None
Código fonte em 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)