diff --git a/integrations/gitlab/CHANGELOG.md b/integrations/gitlab/CHANGELOG.md index eca6961506..6e8a5e98a8 100644 --- a/integrations/gitlab/CHANGELOG.md +++ b/integrations/gitlab/CHANGELOG.md @@ -7,6 +7,14 @@ this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm +0.2.21 (2025-01-16) +=================== + +### Bug Fixes + +- Fixed UserWarning log caused by not setting the `get_all` parameter for `project.label.list` request + + 0.2.20 (2025-01-16) =================== diff --git a/integrations/gitlab/gitlab_integration/core/async_fetcher.py b/integrations/gitlab/gitlab_integration/core/async_fetcher.py index 586f58058d..d0527b40d0 100644 --- a/integrations/gitlab/gitlab_integration/core/async_fetcher.py +++ b/integrations/gitlab/gitlab_integration/core/async_fetcher.py @@ -15,6 +15,7 @@ User, GroupMember, ProjectFile, + ProjectLabel, ) from loguru import logger @@ -44,7 +45,6 @@ async def fetch_single( ], *args, ) -> Union[ - RESTObject, RESTObject, ProjectPipelineJob, ProjectPipeline, @@ -52,6 +52,7 @@ async def fetch_single( Project, Group, ProjectFile, + ProjectLabel, ]: with ThreadPoolExecutor() as executor: return await get_event_loop().run_in_executor(executor, fetch_func, *args) @@ -92,6 +93,7 @@ async def fetch_batch( List[RESTObject], List[Dict[str, Any]], GitlabList, + List[ProjectLabel], ] ]: def fetch_page( diff --git a/integrations/gitlab/gitlab_integration/gitlab_service.py b/integrations/gitlab/gitlab_integration/gitlab_service.py index 0e21033806..5847353177 100644 --- a/integrations/gitlab/gitlab_integration/gitlab_service.py +++ b/integrations/gitlab/gitlab_integration/gitlab_service.py @@ -20,6 +20,7 @@ ProjectFile, ProjectPipeline, ProjectPipelineJob, + ProjectLabel, Hook, ) from gitlab_integration.core.async_fetcher import AsyncFetcher @@ -550,9 +551,15 @@ async def get_all_projects(self) -> typing.AsyncIterator[List[Project]]: @classmethod async def async_project_labels_wrapper(cls, project: Project) -> dict[str, Any]: try: - labels = await anyio.to_thread.run_sync(project.labels.list) - serialized_labels = [label.attributes for label in labels] - return {"__labels": serialized_labels} + all_labels = [ + label.attributes + async for labels_batch in AsyncFetcher.fetch_batch( + fetch_func=project.labels.list + ) + for label in typing.cast(List[ProjectLabel], labels_batch) + ] + + return {"__labels": all_labels} except Exception as e: logger.warning( f"Failed to get labels for project={project.path_with_namespace}. error={e}" diff --git a/integrations/gitlab/pyproject.toml b/integrations/gitlab/pyproject.toml index 477a9ccc35..69f25387fc 100644 --- a/integrations/gitlab/pyproject.toml +++ b/integrations/gitlab/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "gitlab" -version = "0.2.20" +version = "0.2.21" description = "Gitlab integration for Port using Port-Ocean Framework" authors = ["Yair Siman-Tov "]