mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-07-02 03:40:38 +08:00
63 lines
2.5 KiB
Python
63 lines
2.5 KiB
Python
from pr_agent.config_loader import get_settings
|
|
from pr_agent.git_providers.bitbucket_provider import BitbucketProvider
|
|
from pr_agent.git_providers.bitbucket_server_provider import BitbucketServerProvider
|
|
from pr_agent.git_providers.codecommit_provider import CodeCommitProvider
|
|
from pr_agent.git_providers.git_provider import GitProvider
|
|
from pr_agent.git_providers.github_provider import GithubProvider
|
|
from pr_agent.git_providers.gitlab_provider import GitLabProvider
|
|
from pr_agent.git_providers.local_git_provider import LocalGitProvider
|
|
from pr_agent.git_providers.azuredevops_provider import AzureDevopsProvider
|
|
from pr_agent.git_providers.gerrit_provider import GerritProvider
|
|
from starlette_context import context
|
|
|
|
_GIT_PROVIDERS = {
|
|
'github': GithubProvider,
|
|
'gitlab': GitLabProvider,
|
|
'bitbucket': BitbucketProvider,
|
|
'bitbucket_server': BitbucketServerProvider,
|
|
'azure': AzureDevopsProvider,
|
|
'codecommit': CodeCommitProvider,
|
|
'local': LocalGitProvider,
|
|
'gerrit': GerritProvider,
|
|
}
|
|
|
|
|
|
def get_git_provider():
|
|
try:
|
|
provider_id = get_settings().config.git_provider
|
|
except AttributeError as e:
|
|
raise ValueError("git_provider is a required attribute in the configuration file") from e
|
|
if provider_id not in _GIT_PROVIDERS:
|
|
raise ValueError(f"Unknown git provider: {provider_id}")
|
|
return _GIT_PROVIDERS[provider_id]
|
|
|
|
|
|
def get_git_provider_with_context(pr_url) -> GitProvider:
|
|
"""
|
|
Get a GitProvider instance for the given PR URL. If the GitProvider instance is already in the context, return it.
|
|
"""
|
|
|
|
is_context_env = None
|
|
try:
|
|
is_context_env = context.get("settings", None)
|
|
except Exception:
|
|
pass # we are not in a context environment (CLI)
|
|
|
|
# check if context["git_provider"]["pr_url"] exists
|
|
if is_context_env and context.get("git_provider", {}).get("pr_url", {}):
|
|
git_provider = context["git_provider"]["pr_url"]
|
|
# possibly check if the git_provider is still valid, or if some reset is needed
|
|
# ...
|
|
return git_provider
|
|
else:
|
|
try:
|
|
provider_id = get_settings().config.git_provider
|
|
if provider_id not in _GIT_PROVIDERS:
|
|
raise ValueError(f"Unknown git provider: {provider_id}")
|
|
git_provider = _GIT_PROVIDERS[provider_id](pr_url)
|
|
if is_context_env:
|
|
context["git_provider"] = {pr_url: git_provider}
|
|
return git_provider
|
|
except Exception as e:
|
|
raise ValueError(f"Failed to get git provider for {pr_url}") from e
|