Gitlab
        zenml.integrations.gitlab
  
      special
  
    Initialization of the GitLab ZenML integration.
        
GitLabIntegration            (Integration)
        
    Definition of GitLab integration for ZenML.
Source code in zenml/integrations/gitlab/__init__.py
          class GitLabIntegration(Integration):
    """Definition of GitLab integration for ZenML."""
    NAME = GITLAB
    REQUIREMENTS: List[str] = ["python-gitlab"]
        code_repositories
  
      special
  
    Initialization of the ZenML GitLab code repository.
        gitlab_code_repository
    GitLab code repository.
        
GitLabCodeRepository            (BaseCodeRepository)
        
    GitLab code repository.
Source code in zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py
          class GitLabCodeRepository(BaseCodeRepository):
    """GitLab code repository."""
    @property
    def config(self) -> GitLabCodeRepositoryConfig:
        """Returns the `GitLabCodeRepositoryConfig` config.
        Returns:
            The configuration.
        """
        return GitLabCodeRepositoryConfig(**self._config)
    @property
    def gitlab_project(self) -> Project:
        """The GitLab project object from the GitLab API.
        Returns:
            The GitLab project object.
        """
        return self._gitlab_session.projects.get(
            f"{self.config.group}/{self.config.project}"
        )
    def login(self) -> None:
        """Logs in to GitLab.
        Raises:
            RuntimeError: If the login fails.
        """
        try:
            self._gitlab_session = Gitlab(
                self.config.url, private_token=self.config.token
            )
            self._gitlab_session.auth()
            user = self._gitlab_session.user or None
            if user:
                logger.debug(f"Logged in as {user.username}")
        except Exception as e:
            raise RuntimeError(f"An error occurred while logging in: {str(e)}")
    def download_files(
        self, commit: str, directory: str, repo_sub_directory: Optional[str]
    ) -> None:
        """Downloads files from a commit to a local directory.
        Args:
            commit: The commit to download.
            directory: The directory to download to.
            repo_sub_directory: The sub directory to download from.
        """
        contents = self.gitlab_project.repository_tree(
            ref=commit,
            path=repo_sub_directory or "",
        )
        for content in contents:
            logger.debug(f"Processing {content['path']}")
            if content["type"] == "tree":
                path = os.path.join(directory, content["name"])
                os.makedirs(path, exist_ok=True)
                self.download_files(
                    commit=commit,
                    directory=path,
                    repo_sub_directory=content["path"],
                )
            else:
                try:
                    path = content["path"]
                    file_content = self.gitlab_project.files.get(
                        file_path=path, ref=commit
                    ).decode()
                    path = os.path.join(directory, content["name"])
                    with open(path, "wb") as file:
                        file.write(file_content)
                except Exception as e:
                    logger.error("Error processing %s: %s", content["path"], e)
    def get_local_context(self, path: str) -> Optional[LocalRepositoryContext]:
        """Gets the local repository context.
        Args:
            path: The path to the local repository.
        Returns:
            The local repository context.
        """
        return LocalGitRepositoryContext.at(
            path=path,
            code_repository_id=self.id,
            remote_url_validation_callback=self.check_remote_url,
        )
    def check_remote_url(self, url: str) -> bool:
        """Checks whether the remote url matches the code repository.
        Args:
            url: The remote url.
        Returns:
            Whether the remote url is correct.
        """
        https_url = f"https://{self.config.host}/{self.config.group}/{self.config.project}.git"
        if url == https_url:
            return True
        ssh_regex = re.compile(
            f".*{self.config.host}:{self.config.group}/{self.config.project}.git"
        )
        if ssh_regex.fullmatch(url):
            return True
        return False
config: GitLabCodeRepositoryConfig
  
      property
      readonly
  
    Returns the GitLabCodeRepositoryConfig config.
Returns:
| Type | Description | 
|---|---|
| GitLabCodeRepositoryConfig | The configuration. | 
gitlab_project: gitlab.v4.objects.Project
  
      property
      readonly
  
    The GitLab project object from the GitLab API.
Returns:
| Type | Description | 
|---|---|
| gitlab.v4.objects.Project | The GitLab project object. | 
check_remote_url(self, url)
    Checks whether the remote url matches the code repository.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| url | str | The remote url. | required | 
Returns:
| Type | Description | 
|---|---|
| bool | Whether the remote url is correct. | 
Source code in zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py
          def check_remote_url(self, url: str) -> bool:
    """Checks whether the remote url matches the code repository.
    Args:
        url: The remote url.
    Returns:
        Whether the remote url is correct.
    """
    https_url = f"https://{self.config.host}/{self.config.group}/{self.config.project}.git"
    if url == https_url:
        return True
    ssh_regex = re.compile(
        f".*{self.config.host}:{self.config.group}/{self.config.project}.git"
    )
    if ssh_regex.fullmatch(url):
        return True
    return False
download_files(self, commit, directory, repo_sub_directory)
    Downloads files from a commit to a local directory.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| commit | str | The commit to download. | required | 
| directory | str | The directory to download to. | required | 
| repo_sub_directory | Optional[str] | The sub directory to download from. | required | 
Source code in zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py
          def download_files(
    self, commit: str, directory: str, repo_sub_directory: Optional[str]
) -> None:
    """Downloads files from a commit to a local directory.
    Args:
        commit: The commit to download.
        directory: The directory to download to.
        repo_sub_directory: The sub directory to download from.
    """
    contents = self.gitlab_project.repository_tree(
        ref=commit,
        path=repo_sub_directory or "",
    )
    for content in contents:
        logger.debug(f"Processing {content['path']}")
        if content["type"] == "tree":
            path = os.path.join(directory, content["name"])
            os.makedirs(path, exist_ok=True)
            self.download_files(
                commit=commit,
                directory=path,
                repo_sub_directory=content["path"],
            )
        else:
            try:
                path = content["path"]
                file_content = self.gitlab_project.files.get(
                    file_path=path, ref=commit
                ).decode()
                path = os.path.join(directory, content["name"])
                with open(path, "wb") as file:
                    file.write(file_content)
            except Exception as e:
                logger.error("Error processing %s: %s", content["path"], e)
get_local_context(self, path)
    Gets the local repository context.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| path | str | The path to the local repository. | required | 
Returns:
| Type | Description | 
|---|---|
| Optional[zenml.code_repositories.local_repository_context.LocalRepositoryContext] | The local repository context. | 
Source code in zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py
          def get_local_context(self, path: str) -> Optional[LocalRepositoryContext]:
    """Gets the local repository context.
    Args:
        path: The path to the local repository.
    Returns:
        The local repository context.
    """
    return LocalGitRepositoryContext.at(
        path=path,
        code_repository_id=self.id,
        remote_url_validation_callback=self.check_remote_url,
    )
login(self)
    Logs in to GitLab.
Exceptions:
| Type | Description | 
|---|---|
| RuntimeError | If the login fails. | 
Source code in zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py
          def login(self) -> None:
    """Logs in to GitLab.
    Raises:
        RuntimeError: If the login fails.
    """
    try:
        self._gitlab_session = Gitlab(
            self.config.url, private_token=self.config.token
        )
        self._gitlab_session.auth()
        user = self._gitlab_session.user or None
        if user:
            logger.debug(f"Logged in as {user.username}")
    except Exception as e:
        raise RuntimeError(f"An error occurred while logging in: {str(e)}")
        
GitLabCodeRepositoryConfig            (BaseCodeRepositoryConfig)
        
    Config for GitLab code repositories.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| url | The full URL of the GitLab project. | required | |
| group | The group of the project. | required | |
| project | The name of the GitLab project. | required | |
| host | The host of GitLab in case it is self-hosted instance. | required | |
| token | The token to access the repository. | required | 
Source code in zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py
          class GitLabCodeRepositoryConfig(BaseCodeRepositoryConfig):
    """Config for GitLab code repositories.
    Args:
        url: The full URL of the GitLab project.
        group: The group of the project.
        project: The name of the GitLab project.
        host: The host of GitLab in case it is self-hosted instance.
        token: The token to access the repository.
    """
    url: Optional[str]
    group: str
    project: str
    host: Optional[str] = "gitlab.com"
    token: str = SecretField()