airbyte-source-github 2.1.9.dev202602042146__tar.gz → 2.1.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/PKG-INFO +1 -1
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/pyproject.toml +1 -1
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/errors_handlers.py +0 -20
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/streams.py +0 -61
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/README.md +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/__init__.py +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/backoff_strategies.py +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/config_migrations.py +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/constants.py +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/github_schema.py +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/graphql.py +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/run.py +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/assignees.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/branches.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/collaborators.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/comments.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/commit_comment_reactions.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/commit_comments.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/commits.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/contributor_activity.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/deployments.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/events.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/issue_comment_reactions.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/issue_events.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/issue_labels.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/issue_milestones.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/issue_reactions.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/issue_timeline_events.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/issues.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/organizations.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/project_cards.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/project_columns.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/projects.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/projects_v2.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/pull_request_comment_reactions.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/pull_request_commits.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/pull_request_stats.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/pull_requests.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/releases.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/repositories.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/review_comments.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/reviews.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/shared/events/comment.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/shared/events/commented.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/shared/events/committed.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/shared/events/cross_referenced.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/shared/events/reviewed.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/shared/reaction.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/shared/reactions.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/shared/user.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/shared/user_graphql.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/stargazers.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/tags.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/team_members.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/team_memberships.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/teams.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/users.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/workflow_jobs.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/workflow_runs.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/schemas/workflows.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/source.py +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/spec.json +0 -0
- {airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/utils.py +0 -0
|
@@ -3,7 +3,7 @@ requires = [ "poetry-core>=1.0.0",]
|
|
|
3
3
|
build-backend = "poetry.core.masonry.api"
|
|
4
4
|
|
|
5
5
|
[tool.poetry]
|
|
6
|
-
version = "2.1.
|
|
6
|
+
version = "2.1.10"
|
|
7
7
|
name = "airbyte-source-github"
|
|
8
8
|
description = "Source implementation for GitHub."
|
|
9
9
|
authors = [ "Airbyte <contact@airbyte.io>",]
|
|
@@ -103,26 +103,6 @@ class GithubStreamABCErrorHandler(HttpStatusErrorHandler):
|
|
|
103
103
|
error_message=log_message,
|
|
104
104
|
)
|
|
105
105
|
|
|
106
|
-
# Handle GitHub API 10,000 result limit error
|
|
107
|
-
# https://docs.github.com/en/rest/releases/releases#list-releases
|
|
108
|
-
if response_or_exception.status_code == 422:
|
|
109
|
-
try:
|
|
110
|
-
response_json = response_or_exception.json()
|
|
111
|
-
error_message = response_json.get("message", "")
|
|
112
|
-
if "10000" in error_message:
|
|
113
|
-
return ErrorResolution(
|
|
114
|
-
response_action=ResponseAction.FAIL,
|
|
115
|
-
failure_type=FailureType.system_error,
|
|
116
|
-
error_message=(
|
|
117
|
-
f"GitHub API limit reached: {error_message}. "
|
|
118
|
-
"This repository has more releases than GitHub's API limit of 10,000 results. "
|
|
119
|
-
"The connector has synced the maximum available releases. "
|
|
120
|
-
"Consider disabling the 'releases' stream if this causes sync failures."
|
|
121
|
-
),
|
|
122
|
-
)
|
|
123
|
-
except Exception:
|
|
124
|
-
pass # Fall through to default handling if JSON parsing fails
|
|
125
|
-
|
|
126
106
|
return super().interpret_response(response_or_exception)
|
|
127
107
|
|
|
128
108
|
|
|
@@ -509,67 +509,6 @@ class Releases(SemiIncrementalMixin, GithubStream):
|
|
|
509
509
|
|
|
510
510
|
cursor_field = "created_at"
|
|
511
511
|
|
|
512
|
-
# GitHub API limits pagination to 10,000 results maximum
|
|
513
|
-
# With 100 results per page (default), this means max 100 pages
|
|
514
|
-
# https://docs.github.com/en/rest/releases/releases#list-releases
|
|
515
|
-
MAX_PAGE_NUMBER = 100
|
|
516
|
-
|
|
517
|
-
def __init__(self, **kwargs):
|
|
518
|
-
super().__init__(**kwargs)
|
|
519
|
-
self._pagination_limit_reached = False
|
|
520
|
-
|
|
521
|
-
def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]:
|
|
522
|
-
"""
|
|
523
|
-
Override to stop pagination at page 100 (10,000 results) to avoid GitHub API 422 error.
|
|
524
|
-
GitHub's REST API has a hard limit of 10,000 results for list endpoints.
|
|
525
|
-
"""
|
|
526
|
-
token = super().next_page_token(response)
|
|
527
|
-
if token:
|
|
528
|
-
page = int(token.get("page", 0))
|
|
529
|
-
if page > self.MAX_PAGE_NUMBER:
|
|
530
|
-
self._pagination_limit_reached = True
|
|
531
|
-
self.logger.warning(
|
|
532
|
-
f"Stopping pagination at page {self.MAX_PAGE_NUMBER} due to GitHub API limit of 10,000 results. "
|
|
533
|
-
"Some releases may not be synced."
|
|
534
|
-
)
|
|
535
|
-
return None
|
|
536
|
-
return token
|
|
537
|
-
|
|
538
|
-
def read_records(
|
|
539
|
-
self,
|
|
540
|
-
sync_mode: SyncMode,
|
|
541
|
-
cursor_field: List[str] = None,
|
|
542
|
-
stream_slice: Mapping[str, Any] = None,
|
|
543
|
-
stream_state: Mapping[str, Any] = None,
|
|
544
|
-
) -> Iterable[Mapping[str, Any]]:
|
|
545
|
-
"""
|
|
546
|
-
Override to fail the sync after loading records when pagination limit is reached.
|
|
547
|
-
This ensures users are explicitly notified that not all releases were synced due to GitHub API limitations,
|
|
548
|
-
while still loading the first 10,000 releases to the destination.
|
|
549
|
-
"""
|
|
550
|
-
# Reset the flag for each slice
|
|
551
|
-
self._pagination_limit_reached = False
|
|
552
|
-
|
|
553
|
-
# Yield all records from parent
|
|
554
|
-
yield from super().read_records(
|
|
555
|
-
sync_mode=sync_mode, cursor_field=cursor_field, stream_slice=stream_slice, stream_state=stream_state
|
|
556
|
-
)
|
|
557
|
-
|
|
558
|
-
# After all records are yielded, fail the sync if we hit the pagination limit
|
|
559
|
-
# This ensures the 10,000 records are loaded but the user is explicitly notified
|
|
560
|
-
if self._pagination_limit_reached:
|
|
561
|
-
repository = stream_slice.get("repository", "unknown") if stream_slice else "unknown"
|
|
562
|
-
raise AirbyteTracedException(
|
|
563
|
-
message=(
|
|
564
|
-
f"GitHub API pagination limit reached for repository '{repository}'. "
|
|
565
|
-
f"Only the first 10,000 releases (sorted by creation date, newest first) were synced to the destination. "
|
|
566
|
-
f"This repository has more releases than GitHub's API limit allows. "
|
|
567
|
-
f"See: https://docs.github.com/en/rest/releases/releases#list-releases"
|
|
568
|
-
),
|
|
569
|
-
internal_message=f"GitHub API 10,000 result limit reached for repository '{repository}'",
|
|
570
|
-
failure_type=FailureType.system_error,
|
|
571
|
-
)
|
|
572
|
-
|
|
573
512
|
def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any]) -> MutableMapping[str, Any]:
|
|
574
513
|
record = super().transform(record=record, stream_slice=stream_slice)
|
|
575
514
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/run.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/source.py
RENAMED
|
File without changes
|
{airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/spec.json
RENAMED
|
File without changes
|
{airbyte_source_github-2.1.9.dev202602042146 → airbyte_source_github-2.1.10}/source_github/utils.py
RENAMED
|
File without changes
|