From 887c245f79b3b9736286be8f61ac50f62a88f7b2 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Tue, 18 Feb 2025 20:13:17 -0500 Subject: [PATCH 1/2] Project: don't depend on the brand name Ref https://github.com/readthedocs/readthedocs.org/pull/11983/files/8e6caa3e6157a0230c0989784e8a421cacd7f7bd#r1953455261 --- readthedocs/builds/utils.py | 4 ++-- readthedocs/projects/models.py | 17 +++++++++++++---- readthedocs/rtd_tests/tests/test_project.py | 12 ++++++++---- readthedocs/vcs_support/backends/git.py | 7 ++----- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/readthedocs/builds/utils.py b/readthedocs/builds/utils.py index 2977ac14ece..30507e32526 100644 --- a/readthedocs/builds/utils.py +++ b/readthedocs/builds/utils.py @@ -90,10 +90,10 @@ def external_version_name(build_or_version): project = build_or_version.project - if project.git_provider_name == GITHUB_BRAND: + if project.is_github_project: return GITHUB_EXTERNAL_VERSION_NAME - if project.git_provider_name == GITLAB_BRAND: + if project.is_gitlab_project: return GITLAB_EXTERNAL_VERSION_NAME # TODO: Add External Version Name for Bitbucket. diff --git a/readthedocs/projects/models.py b/readthedocs/projects/models.py index 1fcfba1e2f9..ec1c1c14d49 100644 --- a/readthedocs/projects/models.py +++ b/readthedocs/projects/models.py @@ -1055,10 +1055,19 @@ def get_git_service_class(self, fallback_to_clone_url=False): return service_cls @property - def git_provider_name(self): - """Get the provider name for project. e.g: GitHub, GitLab, Bitbucket.""" - service_class = self.get_git_service_class(fallback_to_clone_url=True) - return service_class.allauth_provider.name if service_class else None + def is_github_project(self): + from readthedocs.oauth.services import GitHubService + return self.get_git_service_class(fallback_to_clone_url=True) == GitHubService + + @property + def is_gitlab_project(self): + from readthedocs.oauth.services import GitLabService + return self.get_git_service_class(fallback_to_clone_url=True) == GitLabService + + @property + def is_bitbucket_project(self): + from readthedocs.oauth.services import BitbucketService + return self.get_git_service_class(fallback_to_clone_url=True) == BitbucketService def find(self, filename, version): """ diff --git a/readthedocs/rtd_tests/tests/test_project.py b/readthedocs/rtd_tests/tests/test_project.py index befa60bccb1..55cc1a1445d 100644 --- a/readthedocs/rtd_tests/tests/test_project.py +++ b/readthedocs/rtd_tests/tests/test_project.py @@ -231,10 +231,12 @@ def test_get_latest_build_excludes_external_versions(self): # Test that External Version is not considered for get_latest_build. self.assertEqual(self.pip.get_latest_build(), None) - def test_git_provider_name_github(self): + def test_git_provider_github(self): self.pip.repo = "https://github.com/pypa/pip" self.pip.save() - self.assertEqual(self.pip.git_provider_name, GITHUB_BRAND) + assert self.pip.is_github_project + assert not self.pip.is_gitlab_project + assert not self.pip.is_bitbucket_project def test_git_service_class_github(self): self.pip.repo = "https://github.com/pypa/pip" @@ -244,10 +246,12 @@ def test_git_service_class_github(self): self.pip.get_git_service_class(fallback_to_clone_url=True), GitHubService ) - def test_git_provider_name_gitlab(self): + def test_git_provider_gitlab(self): self.pip.repo = "https://gitlab.com/pypa/pip" self.pip.save() - self.assertEqual(self.pip.git_provider_name, GITLAB_BRAND) + assert self.pip.is_gitlab_project + assert not self.pip.is_github_project + assert not self.pip.is_bitbucket_project def test_git_service_class_gitlab(self): self.pip.repo = "https://gitlab.com/pypa/pip" diff --git a/readthedocs/vcs_support/backends/git.py b/readthedocs/vcs_support/backends/git.py index 70407a27bfd..7c70039a8fd 100644 --- a/readthedocs/vcs_support/backends/git.py +++ b/readthedocs/vcs_support/backends/git.py @@ -147,13 +147,10 @@ def get_remote_fetch_refspec(self): return f"refs/tags/{tag_name}:refs/tags/{tag_name}" if self.version_type == EXTERNAL: - # TODO: We should be able to resolve this without looking up in oauth registry - git_provider_name = self.project.git_provider_name - # Remote reference for Git providers where pull request builds are supported - if git_provider_name == GITHUB_BRAND: + if self.project.is_github_project: return GITHUB_PR_PULL_PATTERN.format(id=self.verbose_name) - if self.project.git_provider_name == GITLAB_BRAND: + if self.project.is_gitlab_project: return GITLAB_MR_PULL_PATTERN.format(id=self.verbose_name) log.warning( From ce56f4201078b340c6a6e0d962078df24f536128 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Tue, 18 Feb 2025 20:18:47 -0500 Subject: [PATCH 2/2] Format --- readthedocs/builds/utils.py | 2 -- readthedocs/projects/models.py | 7 ++++++- readthedocs/rtd_tests/tests/test_project.py | 2 -- readthedocs/vcs_support/backends/git.py | 2 -- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/readthedocs/builds/utils.py b/readthedocs/builds/utils.py index 30507e32526..bb24ed2c18f 100644 --- a/readthedocs/builds/utils.py +++ b/readthedocs/builds/utils.py @@ -12,10 +12,8 @@ ) from readthedocs.projects.constants import ( BITBUCKET_REGEXS, - GITHUB_BRAND, GITHUB_PULL_REQUEST_URL, GITHUB_REGEXS, - GITLAB_BRAND, GITLAB_MERGE_REQUEST_URL, GITLAB_REGEXS, ) diff --git a/readthedocs/projects/models.py b/readthedocs/projects/models.py index ec1c1c14d49..1a521b7a7c7 100644 --- a/readthedocs/projects/models.py +++ b/readthedocs/projects/models.py @@ -1057,17 +1057,22 @@ def get_git_service_class(self, fallback_to_clone_url=False): @property def is_github_project(self): from readthedocs.oauth.services import GitHubService + return self.get_git_service_class(fallback_to_clone_url=True) == GitHubService @property def is_gitlab_project(self): from readthedocs.oauth.services import GitLabService + return self.get_git_service_class(fallback_to_clone_url=True) == GitLabService @property def is_bitbucket_project(self): from readthedocs.oauth.services import BitbucketService - return self.get_git_service_class(fallback_to_clone_url=True) == BitbucketService + + return ( + self.get_git_service_class(fallback_to_clone_url=True) == BitbucketService + ) def find(self, filename, version): """ diff --git a/readthedocs/rtd_tests/tests/test_project.py b/readthedocs/rtd_tests/tests/test_project.py index 55cc1a1445d..a04b14c8b94 100644 --- a/readthedocs/rtd_tests/tests/test_project.py +++ b/readthedocs/rtd_tests/tests/test_project.py @@ -22,8 +22,6 @@ from readthedocs.builds.models import Build, Version from readthedocs.oauth.services import GitHubService, GitLabService from readthedocs.projects.constants import ( - GITHUB_BRAND, - GITLAB_BRAND, MEDIA_TYPE_EPUB, MEDIA_TYPE_HTML, MEDIA_TYPE_HTMLZIP, diff --git a/readthedocs/vcs_support/backends/git.py b/readthedocs/vcs_support/backends/git.py index 7c70039a8fd..dfc66da5d83 100644 --- a/readthedocs/vcs_support/backends/git.py +++ b/readthedocs/vcs_support/backends/git.py @@ -15,9 +15,7 @@ ) from readthedocs.config import ALL from readthedocs.projects.constants import ( - GITHUB_BRAND, GITHUB_PR_PULL_PATTERN, - GITLAB_BRAND, GITLAB_MR_PULL_PATTERN, ) from readthedocs.projects.exceptions import RepositoryError