This commit is contained in:
pablonyx 2025-03-05 11:00:30 -08:00
parent 21cb629033
commit 3fda6bb6d9
3 changed files with 100 additions and 14 deletions

View File

@ -0,0 +1,86 @@
"""Update GitHub connector repo_name to repo_names
Revision ID: 3934b1bc7b62
Revises: b7c2b63c4a03
Create Date: 2025-03-05 10:50:30.516962
"""
from alembic import op
import sqlalchemy as sa
import json
# revision identifiers, used by Alembic.
revision = "3934b1bc7b62"
down_revision = "b7c2b63c4a03"
branch_labels = None
depends_on = None
def upgrade() -> None:
# Get all GitHub connectors
conn = op.get_bind()
# First get all GitHub connectors
github_connectors = conn.execute(
sa.text(
"""
SELECT id, connector_specific_config
FROM connector
WHERE source = 'GITHUB'
"""
)
).fetchall()
# Update each connector's config
for connector_id, config in github_connectors:
if not config or "repo_name" not in config:
continue
# Create new config with repositories instead of repo_name
new_config = dict(config)
new_config["repositories"] = new_config.pop("repo_name")
# Update the connector with the new config
conn.execute(
sa.text(
"""
UPDATE connector
SET connector_specific_config = :new_config
WHERE id = :connector_id
"""
),
{"connector_id": connector_id, "new_config": json.dumps(new_config)},
)
def downgrade():
# Get all GitHub connectors
conn = op.get_bind()
github_connectors = conn.execute(
sa.text(
"""
SELECT id, connector_specific_config
FROM connector
WHERE source = 'GITHUB'
"""
)
).fetchall()
# Revert each GitHub connector to use repo_name instead of repositories
for connector_id, config in github_connectors:
if config and "repositories" in config:
# Create new config with repo_name instead of repositories
new_config = dict(config)
new_config["repo_name"] = new_config.pop("repositories")
# Update the connector with the new config
conn.execute(
sa.text(
"""
UPDATE connector
SET connector_specific_config = :new_config
WHERE id = :connector_id
"""
),
{"new_config": json.dumps(new_config), "connector_id": connector_id},
)

View File

@ -124,14 +124,14 @@ class GithubConnector(LoadConnector, PollConnector):
def __init__(
self,
repo_owner: str,
repo_name: str | None = None,
repositories: str | None = None,
batch_size: int = INDEX_BATCH_SIZE,
state_filter: str = "all",
include_prs: bool = True,
include_issues: bool = False,
) -> None:
self.repo_owner = repo_owner
self.repo_name = repo_name
self.repositories = repositories
self.batch_size = batch_size
self.state_filter = state_filter
self.include_prs = include_prs
@ -157,7 +157,7 @@ class GithubConnector(LoadConnector, PollConnector):
)
try:
return github_client.get_repo(f"{self.repo_owner}/{self.repo_name}")
return github_client.get_repo(f"{self.repo_owner}/{self.repositories}")
except RateLimitExceededException:
_sleep_after_rate_limit_exception(github_client)
return self._get_github_repo(github_client, attempt_num + 1)
@ -174,7 +174,7 @@ class GithubConnector(LoadConnector, PollConnector):
try:
repos = []
# Split repo_name by comma and strip whitespace
repo_names = [name.strip() for name in self.repo_name.split(",")]
repo_names = [name.strip() for name in self.repositories.split(",")]
for repo_name in repo_names:
if repo_name: # Skip empty strings
@ -219,8 +219,8 @@ class GithubConnector(LoadConnector, PollConnector):
raise ConnectorMissingCredentialError("GitHub")
repos = []
if self.repo_name:
if "," in self.repo_name:
if self.repositories:
if "," in self.repositories:
# Multiple repositories specified
repos = self._get_github_repos(self.github_client)
else:
@ -303,10 +303,10 @@ class GithubConnector(LoadConnector, PollConnector):
)
try:
if self.repo_name:
if "," in self.repo_name:
if self.repositories:
if "," in self.repositories:
# Multiple repositories specified
repo_names = [name.strip() for name in self.repo_name.split(",")]
repo_names = [name.strip() for name in self.repositories.split(",")]
if not repo_names:
raise ConnectorValidationError(
"Invalid connector settings: No valid repository names provided."
@ -342,7 +342,7 @@ class GithubConnector(LoadConnector, PollConnector):
else:
# Single repository (backward compatibility)
test_repo = self.github_client.get_repo(
f"{self.repo_owner}/{self.repo_name}"
f"{self.repo_owner}/{self.repositories}"
)
test_repo.get_contents("")
else:
@ -370,14 +370,14 @@ class GithubConnector(LoadConnector, PollConnector):
"Your GitHub token does not have sufficient permissions for this repository (HTTP 403)."
)
elif e.status == 404:
if self.repo_name:
if "," in self.repo_name:
if self.repositories:
if "," in self.repositories:
raise ConnectorValidationError(
f"None of the specified GitHub repositories could be found for owner: {self.repo_owner}"
)
else:
raise ConnectorValidationError(
f"GitHub repository not found with name: {self.repo_owner}/{self.repo_name}"
f"GitHub repository not found with name: {self.repo_owner}/{self.repositories}"
)
else:
raise ConnectorValidationError(

View File

@ -1360,7 +1360,7 @@ export interface WebConfig {
export interface GithubConfig {
repo_owner: string;
repo_name: string; // Can be a comma-separated list of repository names
repositories: string; // Comma-separated list of repository names
include_prs: boolean;
include_issues: boolean;
}