openhound-github 0.6.4__tar.gz → 0.6.6__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.
- {openhound_github-0.6.4 → openhound_github-0.6.6}/PKG-INFO +1 -1
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/helpers.py +173 -1
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/resources/organization.py +36 -25
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/source.py +28 -0
- openhound_github-0.6.6/tests/test_repository_rulesets.py +406 -0
- openhound_github-0.6.6/tests/test_source_org_canonicalization.py +138 -0
- openhound_github-0.6.4/tests/test_repository_rulesets.py +0 -241
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/CODE_OF_CONDUCT.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/CONTRIBUTING.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/GOVERNANCE.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/GitHub-COC-Header.png +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/GitHub-CONTRIB-Header.png +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/GitHub-GOV-Header.png +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/GitHub-Header.png +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/GitHub-LIC-Header.png +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/GitHub-SEC-Header.png +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/SECURITY.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/SO-Dark.svg +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/SO-FOSS-Dark.svg +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/SO-FOSS-Light.svg +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/SO-Light.svg +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/workflows/publish.yml +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/workflows/release-on-merge.yml +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.github/workflows/validate-branch.yml +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.gitignore +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.gitmodules +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/.pre-commit-config.yaml +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/LICENSE.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/README.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_AddAssignee.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_AddCollaborator.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_AddLabel.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_AddMember.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_AdminTo.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ApprovesDeploymentTo.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_AssignedTo.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_BypassBranchProtection.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_BypassPullRequestAllowances.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CallsWorkflow.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CanAccess.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CanAssumeIdentity.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CanCreateBranch.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CanCreateEnvironment.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CanCreateRepositoryWithRunnerAccess.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CanDeployToEnvironment.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CanEditEnvironment.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CanEditProtection.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CanPwnRequest.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CanReadSecretScanningAlert.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CanUseRunner.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CanWriteBranch.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CloseDiscussion.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CloseIssue.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ClosePullRequest.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_Contains.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ConvertIssuesToDiscussions.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CreateDiscussionCategory.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CreateRepository.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CreateSoloMergeQueueEntry.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CreateTag.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_CreateTeam.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_DeleteAlertsCodeScanning.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_DeleteDiscussion.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_DeleteDiscussionComment.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_DeleteIssue.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_DeleteTag.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_DependsOn.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_DeploysTo.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_EditCategoryOnDiscussion.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_EditDiscussionCategory.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_EditDiscussionComment.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_EditRepoAnnouncementBanners.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_EditRepoCustomPropertiesValues.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_EditRepoMetadata.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_EditRepoProtections.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_HasBaseRole.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_HasBranch.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_HasEnvironment.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_HasExternalIdentity.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_HasJob.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_HasMember.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_HasPersonalAccessToken.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_HasPersonalAccessTokenRequest.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_HasRole.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_HasRunner.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_HasSamlIdentityProvider.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_HasSecret.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_HasStep.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_HasVariable.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_HasWorkflow.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_InheritedFrom.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_InstalledAs.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_InviteMember.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_IsEligibleFor.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_JumpMergeQueue.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ManageDeployKeys.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ManageDiscussionBadges.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ManageOrganizationWebhooks.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ManageRepoSecurityProducts.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ManageSecurityProducts.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ManageSettingsMergeTypes.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ManageSettingsPages.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ManageSettingsProjects.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ManageSettingsWiki.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ManageTopics.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ManageWebhooks.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_MapsToUser.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_MarkAsDuplicate.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_MatchesEnvironmentPolicy.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_MemberOf.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_OrgBypassCodeScanningDismissalRequests.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_OrgBypassSecretScanningClosureRequests.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_OrgReviewAndManageSecretScanningBypassRequests.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_OrgReviewAndManageSecretScanningClosureRequests.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_Owns.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ProtectedBy.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_PushProtectedBranch.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ReadCodeScanning.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ReadOrganizationActionsUsageMetrics.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ReadOrganizationCustomOrgRole.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ReadOrganizationCustomRepoRole.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ReadRepoContents.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_RemoveAssignee.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_RemoveLabel.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ReopenDiscussion.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ReopenIssue.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ReopenPullRequest.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_RequestPrReview.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ResolveDependabotAlerts.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ResolveSecretScanningAlerts.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_RestrictionsCanPush.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_RunOrgMigration.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_SetInteractionLimits.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_SetIssueType.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_SetMilestone.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_SetSocialPreview.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_SyncedTo.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ToggleDiscussionAnswer.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ToggleDiscussionCommentMinimize.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_TransferRepository.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_UsesSecret.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_UsesVariable.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ValidToken.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ViewDependabotAlerts.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_ViewSecretScanningAlerts.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_WriteCodeScanning.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_WriteOrganizationActionsSecrets.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_WriteOrganizationActionsSettings.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_WriteOrganizationActionsVariables.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_WriteOrganizationCustomOrgRole.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_WriteOrganizationCustomRepoRole.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_WriteOrganizationNetworkConfigurations.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_WriteRepoContents.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/edges/GH_WriteRepoPullRequests.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_App.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_AppInstallation.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_Branch.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_BranchProtectionRule.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_EnterpriseRunner.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_EnterpriseRunnerGroup.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_Environment.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_EnvironmentBranchPolicy.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_EnvironmentSecret.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_EnvironmentVariable.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_ExternalIdentity.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_OrgRole.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_OrgRunner.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_OrgRunnerGroup.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_OrgSecret.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_OrgVariable.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_Organization.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_PersonalAccessToken.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_PersonalAccessTokenRequest.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_RepoRole.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_RepoRunner.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_RepoSecret.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_RepoVariable.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_Repository.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_SamlIdentityProvider.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_SecretScanningAlert.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_Team.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_TeamRole.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_User.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_Workflow.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_WorkflowJob.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/descriptions/nodes/GH_WorkflowStep.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/docs/og-docs.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/privilege_zone_rules/t0-all-repo-admin-role.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/privilege_zone_rules/t0-app-installations-all-repos.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/privilege_zone_rules/t0-apps-all-repos.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/privilege_zone_rules/t0-external-identities-owners.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/privilege_zone_rules/t0-organizations.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/privilege_zone_rules/t0-owner-users.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/privilege_zone_rules/t0-owners-role.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/privilege_zone_rules/t0-pats-all-repos.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/privilege_zone_rules/t0-privilege-escalation-roles.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/privilege_zone_rules/t0-privilege-escalation-users.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/privilege_zone_rules/t0-saml-identity-providers.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/README.md +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/actions-sha-pinning-not-required.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/active-leaked-secrets.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/advanced-security-disabled-new-repos.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/all-actions-allowed.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/app-installations-all-repos.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/branch-protection-admins-not-enforced.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/branch-protection-deletions-allowed.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/branch-protection-force-pushes.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/branch-protection-no-code-owner-reviews.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/branch-protection-no-pr-reviews.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/branch-protection-no-status-checks.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/branch-protection-self-approval.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/branch-protection-stale-reviews.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/bypass-pr-requirements.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/dangerous-branch-perms.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/default-repository-permissions.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/demo-sso-to-cloud-round-trip.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/dependabot-alerts-disabled-new-repos.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/dependabot-updates-disabled-new-repos.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/dependency-graph-disabled-new-repos.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/environments-admin-bypass.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/expired-pats.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/external-identities-without-scim.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/github-to-azure-identity.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/global-repo-perms.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/hybrid-identities.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/members-can-change-repo-visibility.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/members-can-create-pages.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/members-can-create-public-repos.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/members-can-delete-repos.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/members-can-fork-private-repos.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/members-can-invite-outside-collaborators.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/org-owners.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/orgs-without-2fa.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/pats-all-repo-access.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/pending-pat-requests.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/private-repos-forking-allowed.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/privileged-custom-org-roles.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/privileged-hybrid-identities.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/public-repos.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/push-protection-disabled-new-repos.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/push-to-protected-branches.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/repos-secret-scanning-disabled.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/repos-vulnerable-to-workflow-secret-exfil.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/repository-workflows.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/saml-configuration.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/secret-scanning-alerts.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/secret-scanning-disabled-new-repos.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/secrets-reachable-by-user.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/team-membership-admin.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/team-structure.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/unprotected-branches.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/unprotected-default-branch-with-workflow.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/unprotected-default-branches.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/saved_searches/web-commit-signoff-not-required.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/extension/schema.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/justfile +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/pyproject.toml +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/main.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/__init__.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/auth.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/extension.yaml +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/graph.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/graphql.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/kinds/edges.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/kinds/nodes.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/lookup.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/main.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/__init__.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/actions_permission.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/app_installation.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/branch.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/branch_pr_bypass_allowance.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/branch_protection_rule.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/branch_push_allowance.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/enterprise.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/enterprise_admin.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/enterprise_helpers.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/enterprise_managed_user.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/enterprise_member.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/enterprise_organization.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/enterprise_role.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/enterprise_role_team.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/enterprise_role_user.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/enterprise_team.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/enterprise_team_member.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/enterprise_team_organization.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/enterprise_team_role.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/enterprise_user.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/env_secret.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/env_variable.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/environment.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/environment_branch_policy.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/external_identity.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/org.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/org_role.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/org_role_member.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/org_role_team.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/org_secret.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/org_variable.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/personal_access_token.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/personal_access_token_access.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/personal_access_token_request.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/projected_enterprise_team.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/repo_role_assignment.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/repository.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/repository_role.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/repository_secret.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/repository_variable.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/runner.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/saml_assertion_consumer_service.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/saml_helpers.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/saml_issuer.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/saml_provider.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/saml_service_provider.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/scim_user.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/secret_scanning_alert.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/team.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/team_member.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/team_role.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/user.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/workflow.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/workflow_job.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/models/workflow_step.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/resources/__init__.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/resources/enterprise.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/runner_ids.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/transforms.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_app_auth.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_branch_collection_gate.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_branch_protection_traversability.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/actions-permissions.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/actionsecrets.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/app.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/appinstalls.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/branch-policies.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/branch-prot-rules.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/branches.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/custom-roles.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/environments.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/org-pat-request.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/org-pat.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/org-role-teams.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/org-role-users.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/org-roles.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/org.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/pat-repositories.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/repo-collaborators.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/repo-teams.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/repositories.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/scimusers.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/secrets.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/secretscanningalert.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/selected-org-secrets.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/variables.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_data/api/workflows.json +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_enterprise_capabilities.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_enterprise_organization.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_enterprise_resources.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_environment_model.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_environment_resources.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_environment_reviewer_lookup.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_error_resilience.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_github_app_retry.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_github_rest_client.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_github_retry.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_helpers.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_lookup.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_org_scim_resources.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_org_secret_models.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_runner_ids.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_runner_models.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_runner_resources.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_saml_helpers.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_saml_models.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_scim_models.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_variable_models.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/tests/test_workflow_model.py +0 -0
- {openhound_github-0.6.4 → openhound_github-0.6.6}/uv.lock +0 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import time
|
|
3
|
-
from
|
|
3
|
+
from collections.abc import Iterator
|
|
4
|
+
from typing import Any, Optional
|
|
4
5
|
from urllib.parse import urlparse
|
|
5
6
|
|
|
6
7
|
from dlt.common import jsonpath
|
|
7
8
|
from dlt.sources.helpers import requests
|
|
8
9
|
from dlt.sources.helpers.rest_client.auth import AuthConfigBase
|
|
10
|
+
from dlt.sources.helpers.rest_client.client import RESTClient
|
|
9
11
|
from dlt.sources.helpers.rest_client.paginators import (
|
|
10
12
|
JSONResponseCursorPaginator,
|
|
11
13
|
)
|
|
@@ -20,6 +22,22 @@ class GraphQLPaginationError(RuntimeError):
|
|
|
20
22
|
pass
|
|
21
23
|
|
|
22
24
|
|
|
25
|
+
class AdaptiveGraphQLPageError(RuntimeError):
|
|
26
|
+
"""A terminal GraphQL page failure with adaptive pagination context."""
|
|
27
|
+
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
*,
|
|
31
|
+
cursor: str | None,
|
|
32
|
+
page_size: int,
|
|
33
|
+
error: BaseException,
|
|
34
|
+
) -> None:
|
|
35
|
+
super().__init__(str(error))
|
|
36
|
+
self.cursor = cursor
|
|
37
|
+
self.page_size = page_size
|
|
38
|
+
self.error = error
|
|
39
|
+
|
|
40
|
+
|
|
23
41
|
def scim_skip_reason(exception: BaseException) -> str | None:
|
|
24
42
|
"""Return a user-facing reason for expected SCIM API unavailability."""
|
|
25
43
|
if not isinstance(exception, requests.HTTPError) or exception.response is None:
|
|
@@ -56,6 +74,10 @@ class GraphQLCursorPaginator(JSONResponseCursorPaginator):
|
|
|
56
74
|
self.has_next_field = has_next_field
|
|
57
75
|
self.allow_missing_page_info = allow_missing_page_info
|
|
58
76
|
|
|
77
|
+
@property
|
|
78
|
+
def next_cursor(self) -> str | None:
|
|
79
|
+
return self._next_reference
|
|
80
|
+
|
|
59
81
|
def init_request(self, request: "Request") -> None:
|
|
60
82
|
self._next_reference = None
|
|
61
83
|
self._has_next_page = True
|
|
@@ -149,6 +171,156 @@ class GraphQLCursorPaginator(JSONResponseCursorPaginator):
|
|
|
149
171
|
variables[self.cursor_variable] = self._next_reference
|
|
150
172
|
|
|
151
173
|
|
|
174
|
+
def _graphql_gateway_status(exception: BaseException) -> int | None:
|
|
175
|
+
if not isinstance(exception, requests.HTTPError) or exception.response is None:
|
|
176
|
+
return None
|
|
177
|
+
|
|
178
|
+
status_code = exception.response.status_code
|
|
179
|
+
if status_code in (502, 504):
|
|
180
|
+
return status_code
|
|
181
|
+
return None
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def adaptive_graphql_paginate(
|
|
185
|
+
client: RESTClient,
|
|
186
|
+
*,
|
|
187
|
+
query: str,
|
|
188
|
+
variables: dict[str, Any],
|
|
189
|
+
page_info_path: str,
|
|
190
|
+
cursor_variable: str = "after",
|
|
191
|
+
page_size_variable: str = "count",
|
|
192
|
+
page_sizes: tuple[int, ...] = (100, 50, 25),
|
|
193
|
+
allow_missing_page_info: bool = False,
|
|
194
|
+
resource_name: str = "graphql",
|
|
195
|
+
scope_name: str | None = None,
|
|
196
|
+
scope_value: str | None = None,
|
|
197
|
+
log: logging.Logger | None = None,
|
|
198
|
+
) -> Iterator[dict[str, Any]]:
|
|
199
|
+
"""Yield GraphQL pages while adapting connection size after gateway failures.
|
|
200
|
+
|
|
201
|
+
The underlying HTTP session still owns ordinary request retries. This helper
|
|
202
|
+
handles the remaining terminal 502/504 case by retrying the same cursor with
|
|
203
|
+
progressively smaller connection sizes.
|
|
204
|
+
"""
|
|
205
|
+
if not page_sizes or any(page_size <= 0 for page_size in page_sizes):
|
|
206
|
+
raise ValueError("page_sizes must contain positive integers")
|
|
207
|
+
if tuple(sorted(set(page_sizes), reverse=True)) != page_sizes:
|
|
208
|
+
raise ValueError("page_sizes must be unique and in descending order")
|
|
209
|
+
|
|
210
|
+
logger_instance = log or logger
|
|
211
|
+
base_page_size = page_sizes[0]
|
|
212
|
+
cursor = variables.get(cursor_variable)
|
|
213
|
+
if cursor is not None and not isinstance(cursor, str):
|
|
214
|
+
raise ValueError(f"{cursor_variable} must be a string or None")
|
|
215
|
+
|
|
216
|
+
stable_page_size = base_page_size
|
|
217
|
+
probe_base_page_size = False
|
|
218
|
+
|
|
219
|
+
while True:
|
|
220
|
+
if stable_page_size == base_page_size:
|
|
221
|
+
candidate_sizes = page_sizes
|
|
222
|
+
probing_base_page_size = False
|
|
223
|
+
elif probe_base_page_size:
|
|
224
|
+
candidate_sizes = (base_page_size,) + tuple(
|
|
225
|
+
page_size
|
|
226
|
+
for page_size in page_sizes
|
|
227
|
+
if page_size <= stable_page_size
|
|
228
|
+
)
|
|
229
|
+
probing_base_page_size = True
|
|
230
|
+
else:
|
|
231
|
+
candidate_sizes = tuple(
|
|
232
|
+
page_size
|
|
233
|
+
for page_size in page_sizes
|
|
234
|
+
if page_size <= stable_page_size
|
|
235
|
+
)
|
|
236
|
+
probing_base_page_size = False
|
|
237
|
+
|
|
238
|
+
page_data: dict[str, Any] | None = None
|
|
239
|
+
paginator: GraphQLCursorPaginator | None = None
|
|
240
|
+
successful_page_size: int | None = None
|
|
241
|
+
|
|
242
|
+
for index, page_size in enumerate(candidate_sizes):
|
|
243
|
+
request_variables = {
|
|
244
|
+
**variables,
|
|
245
|
+
cursor_variable: cursor,
|
|
246
|
+
page_size_variable: page_size,
|
|
247
|
+
}
|
|
248
|
+
try:
|
|
249
|
+
response = client.post(
|
|
250
|
+
"/graphql",
|
|
251
|
+
json={"query": query, "variables": request_variables},
|
|
252
|
+
)
|
|
253
|
+
response.raise_for_status()
|
|
254
|
+
response_json = response.json()
|
|
255
|
+
paginator = GraphQLCursorPaginator(
|
|
256
|
+
page_info_path=page_info_path,
|
|
257
|
+
cursor_variable=cursor_variable,
|
|
258
|
+
cursor_field="endCursor",
|
|
259
|
+
has_next_field="hasNextPage",
|
|
260
|
+
allow_missing_page_info=allow_missing_page_info,
|
|
261
|
+
)
|
|
262
|
+
paginator.update_state(response)
|
|
263
|
+
page_data = response_json.get("data")
|
|
264
|
+
if not isinstance(page_data, dict):
|
|
265
|
+
raise GraphQLPaginationError(
|
|
266
|
+
"GraphQL response data must be an object"
|
|
267
|
+
)
|
|
268
|
+
successful_page_size = page_size
|
|
269
|
+
break
|
|
270
|
+
except Exception as error:
|
|
271
|
+
status_code = _graphql_gateway_status(error)
|
|
272
|
+
next_page_size = (
|
|
273
|
+
candidate_sizes[index + 1]
|
|
274
|
+
if status_code is not None and index + 1 < len(candidate_sizes)
|
|
275
|
+
else None
|
|
276
|
+
)
|
|
277
|
+
if next_page_size is not None:
|
|
278
|
+
scope = (
|
|
279
|
+
f" {scope_name} '{scope_value}'"
|
|
280
|
+
if scope_name and scope_value
|
|
281
|
+
else ""
|
|
282
|
+
)
|
|
283
|
+
logger_instance.warning(
|
|
284
|
+
"Adaptive GraphQL pagination for resource '%s'%s retrying "
|
|
285
|
+
"cursor %r with page size %d after HTTP %d at page size %d",
|
|
286
|
+
resource_name,
|
|
287
|
+
scope,
|
|
288
|
+
cursor,
|
|
289
|
+
next_page_size,
|
|
290
|
+
status_code,
|
|
291
|
+
page_size,
|
|
292
|
+
)
|
|
293
|
+
continue
|
|
294
|
+
raise AdaptiveGraphQLPageError(
|
|
295
|
+
cursor=cursor,
|
|
296
|
+
page_size=page_size,
|
|
297
|
+
error=error,
|
|
298
|
+
) from error
|
|
299
|
+
|
|
300
|
+
if page_data is None or paginator is None or successful_page_size is None:
|
|
301
|
+
raise GraphQLPaginationError("GraphQL page did not produce data")
|
|
302
|
+
|
|
303
|
+
yield page_data
|
|
304
|
+
|
|
305
|
+
if successful_page_size == base_page_size:
|
|
306
|
+
stable_page_size = base_page_size
|
|
307
|
+
probe_base_page_size = False
|
|
308
|
+
elif stable_page_size == base_page_size:
|
|
309
|
+
stable_page_size = successful_page_size
|
|
310
|
+
probe_base_page_size = True
|
|
311
|
+
elif probing_base_page_size:
|
|
312
|
+
stable_page_size = successful_page_size
|
|
313
|
+
probe_base_page_size = False
|
|
314
|
+
elif successful_page_size < stable_page_size:
|
|
315
|
+
stable_page_size = successful_page_size
|
|
316
|
+
probe_base_page_size = False
|
|
317
|
+
|
|
318
|
+
if not paginator.has_next_page:
|
|
319
|
+
break
|
|
320
|
+
|
|
321
|
+
cursor = paginator.next_cursor
|
|
322
|
+
|
|
323
|
+
|
|
152
324
|
def _response_message(response: requests.Response) -> str:
|
|
153
325
|
try:
|
|
154
326
|
response_data = response.json()
|
{openhound_github-0.6.4 → openhound_github-0.6.6}/src/openhound_github/resources/organization.py
RENAMED
|
@@ -22,7 +22,12 @@ from openhound_github.graphql import (
|
|
|
22
22
|
TEAM_MEMBERS_OVERFLOW_QUERY,
|
|
23
23
|
TEAMS_QUERY,
|
|
24
24
|
)
|
|
25
|
-
from openhound_github.helpers import
|
|
25
|
+
from openhound_github.helpers import (
|
|
26
|
+
AdaptiveGraphQLPageError,
|
|
27
|
+
GraphQLCursorPaginator,
|
|
28
|
+
adaptive_graphql_paginate,
|
|
29
|
+
scim_skip_reason,
|
|
30
|
+
)
|
|
26
31
|
from openhound_github.main import app
|
|
27
32
|
from openhound_github.models import (
|
|
28
33
|
ActionPermission,
|
|
@@ -101,6 +106,7 @@ class SourceContext:
|
|
|
101
106
|
github_deployment_id: str = DEFAULT_GITHUB_DEPLOYMENT_ID
|
|
102
107
|
github_web_origin: str = DEFAULT_GITHUB_WEB_ORIGIN
|
|
103
108
|
cache_lock: Lock = field(default_factory=Lock)
|
|
109
|
+
organizations_cache: dict[str, dict[str, Any]] = field(default_factory=dict)
|
|
104
110
|
app_cache: dict[str, dict[str, Any]] = field(default_factory=dict)
|
|
105
111
|
actions_permissions_cache: dict[str, dict[str, Any]] = field(default_factory=dict)
|
|
106
112
|
runner_permissions_cache: dict[str, dict[str, Any]] = field(default_factory=dict)
|
|
@@ -252,7 +258,13 @@ def organizations(ctx: SourceContext):
|
|
|
252
258
|
org_name = org.org_name
|
|
253
259
|
client = org.client
|
|
254
260
|
try:
|
|
255
|
-
org_data =
|
|
261
|
+
org_data = _cached_org_response(
|
|
262
|
+
ctx,
|
|
263
|
+
ctx.organizations_cache,
|
|
264
|
+
client,
|
|
265
|
+
org_name,
|
|
266
|
+
f"/orgs/{org_name}",
|
|
267
|
+
)
|
|
256
268
|
|
|
257
269
|
actions = _actions_permissions(ctx, client, org_name)
|
|
258
270
|
self_hosted_runners = _runner_permissions(ctx, client, org_name)
|
|
@@ -919,25 +931,17 @@ def repositories_graphql(ctx: SourceContext):
|
|
|
919
931
|
repository_cursor: str | None = None
|
|
920
932
|
emitted_repositories = 0
|
|
921
933
|
try:
|
|
922
|
-
|
|
934
|
+
for page_data in adaptive_graphql_paginate(
|
|
935
|
+
client,
|
|
936
|
+
query=REPO_REFS_QUERY,
|
|
937
|
+
variables={"login": org_name, "after": None},
|
|
923
938
|
page_info_path="data.organization.repositories.pageInfo",
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
data = {
|
|
929
|
-
"query": REPO_REFS_QUERY,
|
|
930
|
-
"variables": {"login": org_name, "count": 100, "after": None},
|
|
931
|
-
}
|
|
932
|
-
|
|
933
|
-
for page_data in client.paginate(
|
|
934
|
-
"/graphql",
|
|
935
|
-
method="POST",
|
|
936
|
-
json=data,
|
|
937
|
-
paginator=paginator,
|
|
938
|
-
data_selector="data",
|
|
939
|
+
resource_name="repositories_graphql",
|
|
940
|
+
scope_name="organization",
|
|
941
|
+
scope_value=org_name,
|
|
942
|
+
log=logger,
|
|
939
943
|
):
|
|
940
|
-
repos_page = page_data[
|
|
944
|
+
repos_page = page_data["organization"]["repositories"]
|
|
941
945
|
for repo in repos_page["nodes"]:
|
|
942
946
|
repo_record = {**repo}
|
|
943
947
|
branch_rulesets = repo_record.pop("branchRulesets", None) or {}
|
|
@@ -952,22 +956,29 @@ def repositories_graphql(ctx: SourceContext):
|
|
|
952
956
|
if isinstance(page_info, dict):
|
|
953
957
|
repository_cursor = page_info.get("endCursor")
|
|
954
958
|
except Exception as e:
|
|
959
|
+
failure = e.error if isinstance(e, AdaptiveGraphQLPageError) else e
|
|
960
|
+
failure_cursor = (
|
|
961
|
+
e.cursor if isinstance(e, AdaptiveGraphQLPageError) else repository_cursor
|
|
962
|
+
)
|
|
963
|
+
page_size = e.page_size if isinstance(e, AdaptiveGraphQLPageError) else None
|
|
955
964
|
logger.error(
|
|
956
965
|
"Error in resource 'repositories_graphql' processing organization '%s' "
|
|
957
|
-
"at repository cursor %r after emitting %d repositories "
|
|
966
|
+
"at repository cursor %r with page size %r after emitting %d repositories "
|
|
958
967
|
"(%s): %s",
|
|
959
968
|
org_name,
|
|
960
|
-
|
|
969
|
+
failure_cursor,
|
|
970
|
+
page_size,
|
|
961
971
|
emitted_repositories,
|
|
962
|
-
type(
|
|
963
|
-
|
|
972
|
+
type(failure).__name__,
|
|
973
|
+
failure,
|
|
964
974
|
extra={
|
|
965
975
|
"resource": "repositories_graphql",
|
|
966
976
|
"phase": "resource_iteration",
|
|
967
977
|
"org_name": org_name,
|
|
968
|
-
"repository_cursor":
|
|
978
|
+
"repository_cursor": failure_cursor,
|
|
979
|
+
"page_size": page_size,
|
|
969
980
|
"emitted_repositories": emitted_repositories,
|
|
970
|
-
"error_type": type(
|
|
981
|
+
"error_type": type(failure).__name__,
|
|
971
982
|
},
|
|
972
983
|
)
|
|
973
984
|
continue
|
|
@@ -53,6 +53,7 @@ class SourceContext:
|
|
|
53
53
|
github_deployment_id: str = DEFAULT_GITHUB_DEPLOYMENT_ID
|
|
54
54
|
github_web_origin: str = DEFAULT_GITHUB_WEB_ORIGIN
|
|
55
55
|
cache_lock: Lock = field(default_factory=Lock)
|
|
56
|
+
organizations_cache: dict[str, dict[str, Any]] = field(default_factory=dict)
|
|
56
57
|
app_cache: dict[str, dict[str, Any]] = field(default_factory=dict)
|
|
57
58
|
actions_permissions_cache: dict[str, dict[str, Any]] = field(default_factory=dict)
|
|
58
59
|
runner_permissions_cache: dict[str, dict[str, Any]] = field(default_factory=dict)
|
|
@@ -63,6 +64,31 @@ class SourceContext:
|
|
|
63
64
|
return [org.org_name for org in self.organizations or []]
|
|
64
65
|
|
|
65
66
|
|
|
67
|
+
def _canonicalize_org_names(ctx: SourceContext) -> None:
|
|
68
|
+
for org in ctx.organizations or []:
|
|
69
|
+
configured_name = org.org_name
|
|
70
|
+
try:
|
|
71
|
+
org_data = org.client.get(f"/orgs/{configured_name}").json()
|
|
72
|
+
except Exception as exc:
|
|
73
|
+
logger.warning(
|
|
74
|
+
"Unable to resolve canonical GitHub login for organization '%s': %s",
|
|
75
|
+
configured_name,
|
|
76
|
+
exc,
|
|
77
|
+
)
|
|
78
|
+
continue
|
|
79
|
+
|
|
80
|
+
canonical_name = org_data.get("login")
|
|
81
|
+
if not isinstance(canonical_name, str) or not canonical_name:
|
|
82
|
+
logger.warning(
|
|
83
|
+
"GitHub organization response for '%s' did not include a canonical login",
|
|
84
|
+
configured_name,
|
|
85
|
+
)
|
|
86
|
+
continue
|
|
87
|
+
|
|
88
|
+
org.org_name = canonical_name
|
|
89
|
+
ctx.organizations_cache[canonical_name] = org_data
|
|
90
|
+
|
|
91
|
+
|
|
66
92
|
@configspec
|
|
67
93
|
class GithubCredentials(CredentialsConfiguration):
|
|
68
94
|
org_name: str | None = None
|
|
@@ -228,6 +254,7 @@ def source(
|
|
|
228
254
|
)
|
|
229
255
|
)
|
|
230
256
|
|
|
257
|
+
_canonicalize_org_names(ctx)
|
|
231
258
|
return organization_resources(ctx)
|
|
232
259
|
|
|
233
260
|
else:
|
|
@@ -255,4 +282,5 @@ def source(
|
|
|
255
282
|
github_web_origin=github_web_origin,
|
|
256
283
|
)
|
|
257
284
|
)
|
|
285
|
+
_canonicalize_org_names(ctx)
|
|
258
286
|
return organization_resources(ctx)
|