openhound-github 0.5.0__tar.gz → 0.5.2__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.
Files changed (371) hide show
  1. {openhound_github-0.5.0 → openhound_github-0.5.2}/PKG-INFO +7 -1
  2. {openhound_github-0.5.0 → openhound_github-0.5.2}/README.md +6 -0
  3. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/auth.py +28 -12
  4. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/resources/organization.py +11 -3
  5. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/source.py +11 -6
  6. openhound_github-0.5.2/tests/test_app_auth.py +156 -0
  7. openhound_github-0.5.2/tests/test_environment_resources.py +73 -0
  8. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/CODE_OF_CONDUCT.md +0 -0
  9. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/CONTRIBUTING.md +0 -0
  10. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/GOVERNANCE.md +0 -0
  11. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/GitHub-COC-Header.png +0 -0
  12. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/GitHub-CONTRIB-Header.png +0 -0
  13. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/GitHub-GOV-Header.png +0 -0
  14. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/GitHub-Header.png +0 -0
  15. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/GitHub-LIC-Header.png +0 -0
  16. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/GitHub-SEC-Header.png +0 -0
  17. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/SECURITY.md +0 -0
  18. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/SO-Dark.svg +0 -0
  19. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/SO-FOSS-Dark.svg +0 -0
  20. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/SO-FOSS-Light.svg +0 -0
  21. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/SO-Light.svg +0 -0
  22. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/workflows/publish.yml +0 -0
  23. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/workflows/release-on-merge.yml +0 -0
  24. {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/workflows/validate-branch.yml +0 -0
  25. {openhound_github-0.5.0 → openhound_github-0.5.2}/.gitignore +0 -0
  26. {openhound_github-0.5.0 → openhound_github-0.5.2}/.gitmodules +0 -0
  27. {openhound_github-0.5.0 → openhound_github-0.5.2}/.pre-commit-config.yaml +0 -0
  28. {openhound_github-0.5.0 → openhound_github-0.5.2}/LICENSE.md +0 -0
  29. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_AddAssignee.md +0 -0
  30. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_AddCollaborator.md +0 -0
  31. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_AddLabel.md +0 -0
  32. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_AddMember.md +0 -0
  33. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_AdminTo.md +0 -0
  34. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ApprovesDeploymentTo.md +0 -0
  35. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_AssignedTo.md +0 -0
  36. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_BypassBranchProtection.md +0 -0
  37. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_BypassPullRequestAllowances.md +0 -0
  38. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CallsWorkflow.md +0 -0
  39. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanAccess.md +0 -0
  40. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanAssumeIdentity.md +0 -0
  41. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanCreateBranch.md +0 -0
  42. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanCreateEnvironment.md +0 -0
  43. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanCreateRepositoryWithRunnerAccess.md +0 -0
  44. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanDeployToEnvironment.md +0 -0
  45. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanEditEnvironment.md +0 -0
  46. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanEditProtection.md +0 -0
  47. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanPwnRequest.md +0 -0
  48. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanReadSecretScanningAlert.md +0 -0
  49. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanUseRunner.md +0 -0
  50. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanWriteBranch.md +0 -0
  51. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CloseDiscussion.md +0 -0
  52. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CloseIssue.md +0 -0
  53. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ClosePullRequest.md +0 -0
  54. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_Contains.md +0 -0
  55. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ConvertIssuesToDiscussions.md +0 -0
  56. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CreateDiscussionCategory.md +0 -0
  57. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CreateRepository.md +0 -0
  58. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CreateSoloMergeQueueEntry.md +0 -0
  59. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CreateTag.md +0 -0
  60. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CreateTeam.md +0 -0
  61. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DeleteAlertsCodeScanning.md +0 -0
  62. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DeleteDiscussion.md +0 -0
  63. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DeleteDiscussionComment.md +0 -0
  64. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DeleteIssue.md +0 -0
  65. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DeleteTag.md +0 -0
  66. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DependsOn.md +0 -0
  67. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DeploysTo.md +0 -0
  68. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditCategoryOnDiscussion.md +0 -0
  69. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditDiscussionCategory.md +0 -0
  70. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditDiscussionComment.md +0 -0
  71. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditRepoAnnouncementBanners.md +0 -0
  72. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditRepoCustomPropertiesValues.md +0 -0
  73. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditRepoMetadata.md +0 -0
  74. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditRepoProtections.md +0 -0
  75. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_GrantsAccessTo.md +0 -0
  76. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasBaseRole.md +0 -0
  77. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasBranch.md +0 -0
  78. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasEnvironment.md +0 -0
  79. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasExternalIdentity.md +0 -0
  80. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasJob.md +0 -0
  81. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasMember.md +0 -0
  82. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasPersonalAccessToken.md +0 -0
  83. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasPersonalAccessTokenRequest.md +0 -0
  84. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasRole.md +0 -0
  85. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasSamlIdentityProvider.md +0 -0
  86. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasSecret.md +0 -0
  87. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasStep.md +0 -0
  88. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasVariable.md +0 -0
  89. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasWorkflow.md +0 -0
  90. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_InheritedFrom.md +0 -0
  91. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_InstalledAs.md +0 -0
  92. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_InviteMember.md +0 -0
  93. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_JumpMergeQueue.md +0 -0
  94. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageDeployKeys.md +0 -0
  95. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageDiscussionBadges.md +0 -0
  96. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageOrganizationWebhooks.md +0 -0
  97. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageRepoSecurityProducts.md +0 -0
  98. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageSecurityProducts.md +0 -0
  99. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageSettingsMergeTypes.md +0 -0
  100. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageSettingsPages.md +0 -0
  101. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageSettingsProjects.md +0 -0
  102. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageSettingsWiki.md +0 -0
  103. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageTopics.md +0 -0
  104. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageWebhooks.md +0 -0
  105. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_MapsToUser.md +0 -0
  106. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_MarkAsDuplicate.md +0 -0
  107. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_MatchesEnvironmentPolicy.md +0 -0
  108. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_MemberOf.md +0 -0
  109. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_OrgBypassCodeScanningDismissalRequests.md +0 -0
  110. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_OrgBypassSecretScanningClosureRequests.md +0 -0
  111. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_OrgReviewAndManageSecretScanningBypassRequests.md +0 -0
  112. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_OrgReviewAndManageSecretScanningClosureRequests.md +0 -0
  113. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_Owns.md +0 -0
  114. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ProtectedBy.md +0 -0
  115. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_PushProtectedBranch.md +0 -0
  116. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReadCodeScanning.md +0 -0
  117. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReadOrganizationActionsUsageMetrics.md +0 -0
  118. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReadOrganizationCustomOrgRole.md +0 -0
  119. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReadOrganizationCustomRepoRole.md +0 -0
  120. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReadRepoContents.md +0 -0
  121. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_RemoveAssignee.md +0 -0
  122. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_RemoveLabel.md +0 -0
  123. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReopenDiscussion.md +0 -0
  124. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReopenIssue.md +0 -0
  125. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReopenPullRequest.md +0 -0
  126. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_RequestPrReview.md +0 -0
  127. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ResolveDependabotAlerts.md +0 -0
  128. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ResolveSecretScanningAlerts.md +0 -0
  129. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_RestrictionsCanPush.md +0 -0
  130. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_RunOrgMigration.md +0 -0
  131. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_SetInteractionLimits.md +0 -0
  132. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_SetIssueType.md +0 -0
  133. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_SetMilestone.md +0 -0
  134. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_SetSocialPreview.md +0 -0
  135. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_SyncedTo.md +0 -0
  136. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ToggleDiscussionAnswer.md +0 -0
  137. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ToggleDiscussionCommentMinimize.md +0 -0
  138. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_TransferRepository.md +0 -0
  139. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_UsesSecret.md +0 -0
  140. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_UsesVariable.md +0 -0
  141. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ValidToken.md +0 -0
  142. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ViewDependabotAlerts.md +0 -0
  143. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ViewSecretScanningAlerts.md +0 -0
  144. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteCodeScanning.md +0 -0
  145. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteOrganizationActionsSecrets.md +0 -0
  146. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteOrganizationActionsSettings.md +0 -0
  147. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteOrganizationActionsVariables.md +0 -0
  148. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteOrganizationCustomOrgRole.md +0 -0
  149. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteOrganizationCustomRepoRole.md +0 -0
  150. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteOrganizationNetworkConfigurations.md +0 -0
  151. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteRepoContents.md +0 -0
  152. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteRepoPullRequests.md +0 -0
  153. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_App.md +0 -0
  154. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_AppInstallation.md +0 -0
  155. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_Branch.md +0 -0
  156. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_BranchProtectionRule.md +0 -0
  157. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_EnterpriseRunner.md +0 -0
  158. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_EnterpriseRunnerGroup.md +0 -0
  159. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_Environment.md +0 -0
  160. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_EnvironmentBranchPolicy.md +0 -0
  161. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_EnvironmentSecret.md +0 -0
  162. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_EnvironmentVariable.md +0 -0
  163. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_ExternalIdentity.md +0 -0
  164. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_OrgRole.md +0 -0
  165. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_OrgRunner.md +0 -0
  166. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_OrgRunnerGroup.md +0 -0
  167. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_OrgSecret.md +0 -0
  168. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_OrgVariable.md +0 -0
  169. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_Organization.md +0 -0
  170. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_PersonalAccessToken.md +0 -0
  171. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_PersonalAccessTokenRequest.md +0 -0
  172. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_RepoRole.md +0 -0
  173. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_RepoRunner.md +0 -0
  174. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_RepoSecret.md +0 -0
  175. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_RepoVariable.md +0 -0
  176. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_Repository.md +0 -0
  177. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_SamlIdentityProvider.md +0 -0
  178. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_SecretScanningAlert.md +0 -0
  179. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_Team.md +0 -0
  180. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_TeamRole.md +0 -0
  181. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_User.md +0 -0
  182. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_Workflow.md +0 -0
  183. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_WorkflowJob.md +0 -0
  184. {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_WorkflowStep.md +0 -0
  185. {openhound_github-0.5.0 → openhound_github-0.5.2}/docs/og-docs.json +0 -0
  186. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-all-repo-admin-role.json +0 -0
  187. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-app-installations-all-repos.json +0 -0
  188. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-apps-all-repos.json +0 -0
  189. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-external-identities-owners.json +0 -0
  190. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-organizations.json +0 -0
  191. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-owner-users.json +0 -0
  192. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-owners-role.json +0 -0
  193. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-pats-all-repos.json +0 -0
  194. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-privilege-escalation-roles.json +0 -0
  195. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-privilege-escalation-users.json +0 -0
  196. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-saml-identity-providers.json +0 -0
  197. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/README.md +0 -0
  198. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/actions-sha-pinning-not-required.json +0 -0
  199. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/active-leaked-secrets.json +0 -0
  200. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/advanced-security-disabled-new-repos.json +0 -0
  201. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/all-actions-allowed.json +0 -0
  202. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/app-installations-all-repos.json +0 -0
  203. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-admins-not-enforced.json +0 -0
  204. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-deletions-allowed.json +0 -0
  205. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-force-pushes.json +0 -0
  206. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-no-code-owner-reviews.json +0 -0
  207. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-no-pr-reviews.json +0 -0
  208. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-no-status-checks.json +0 -0
  209. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-self-approval.json +0 -0
  210. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-stale-reviews.json +0 -0
  211. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/bypass-pr-requirements.json +0 -0
  212. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/dangerous-branch-perms.json +0 -0
  213. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/default-repository-permissions.json +0 -0
  214. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/demo-sso-to-cloud-round-trip.json +0 -0
  215. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/dependabot-alerts-disabled-new-repos.json +0 -0
  216. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/dependabot-updates-disabled-new-repos.json +0 -0
  217. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/dependency-graph-disabled-new-repos.json +0 -0
  218. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/environments-admin-bypass.json +0 -0
  219. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/expired-pats.json +0 -0
  220. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/external-identities-without-scim.json +0 -0
  221. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/github-to-azure-identity.json +0 -0
  222. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/global-repo-perms.json +0 -0
  223. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/hybrid-identities.json +0 -0
  224. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/members-can-change-repo-visibility.json +0 -0
  225. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/members-can-create-pages.json +0 -0
  226. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/members-can-create-public-repos.json +0 -0
  227. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/members-can-delete-repos.json +0 -0
  228. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/members-can-fork-private-repos.json +0 -0
  229. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/members-can-invite-outside-collaborators.json +0 -0
  230. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/org-owners.json +0 -0
  231. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/orgs-without-2fa.json +0 -0
  232. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/pats-all-repo-access.json +0 -0
  233. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/pending-pat-requests.json +0 -0
  234. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/private-repos-forking-allowed.json +0 -0
  235. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/privileged-custom-org-roles.json +0 -0
  236. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/privileged-hybrid-identities.json +0 -0
  237. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/public-repos.json +0 -0
  238. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/push-protection-disabled-new-repos.json +0 -0
  239. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/push-to-protected-branches.json +0 -0
  240. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/repos-secret-scanning-disabled.json +0 -0
  241. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/repos-vulnerable-to-workflow-secret-exfil.json +0 -0
  242. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/repository-workflows.json +0 -0
  243. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/saml-configuration.json +0 -0
  244. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/secret-scanning-alerts.json +0 -0
  245. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/secret-scanning-disabled-new-repos.json +0 -0
  246. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/secrets-reachable-by-user.json +0 -0
  247. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/team-membership-admin.json +0 -0
  248. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/team-structure.json +0 -0
  249. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/unprotected-branches.json +0 -0
  250. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/unprotected-default-branch-with-workflow.json +0 -0
  251. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/unprotected-default-branches.json +0 -0
  252. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/web-commit-signoff-not-required.json +0 -0
  253. {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/schema.json +0 -0
  254. {openhound_github-0.5.0 → openhound_github-0.5.2}/justfile +0 -0
  255. {openhound_github-0.5.0 → openhound_github-0.5.2}/pyproject.toml +0 -0
  256. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/main.py +0 -0
  257. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/__init__.py +0 -0
  258. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/extension.yaml +0 -0
  259. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/graph.py +0 -0
  260. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/graphql.py +0 -0
  261. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/helpers.py +0 -0
  262. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/kinds/edges.py +0 -0
  263. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/kinds/nodes.py +0 -0
  264. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/lookup.py +0 -0
  265. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/main.py +0 -0
  266. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/__init__.py +0 -0
  267. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/actions_permission.py +0 -0
  268. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/app_installation.py +0 -0
  269. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/branch.py +0 -0
  270. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/branch_pr_bypass_allowance.py +0 -0
  271. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/branch_protection_rule.py +0 -0
  272. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/branch_push_allowance.py +0 -0
  273. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise.py +0 -0
  274. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_admin.py +0 -0
  275. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_helpers.py +0 -0
  276. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_managed_user.py +0 -0
  277. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_member.py +0 -0
  278. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_organization.py +0 -0
  279. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_role.py +0 -0
  280. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_role_team.py +0 -0
  281. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_role_user.py +0 -0
  282. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_team.py +0 -0
  283. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_team_member.py +0 -0
  284. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_team_organization.py +0 -0
  285. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_team_role.py +0 -0
  286. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_user.py +0 -0
  287. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/env_secret.py +0 -0
  288. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/env_variable.py +0 -0
  289. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/environment.py +0 -0
  290. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/environment_branch_policy.py +0 -0
  291. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/external_identity.py +0 -0
  292. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/org.py +0 -0
  293. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/org_role.py +0 -0
  294. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/org_role_member.py +0 -0
  295. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/org_role_team.py +0 -0
  296. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/org_secret.py +0 -0
  297. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/org_variable.py +0 -0
  298. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/personal_access_token.py +0 -0
  299. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/personal_access_token_access.py +0 -0
  300. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/personal_access_token_request.py +0 -0
  301. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/projected_enterprise_team.py +0 -0
  302. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/repo_role_assignment.py +0 -0
  303. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/repository.py +0 -0
  304. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/repository_role.py +0 -0
  305. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/repository_secret.py +0 -0
  306. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/repository_variable.py +0 -0
  307. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/runner.py +0 -0
  308. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/saml_assertion_consumer_service.py +0 -0
  309. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/saml_helpers.py +0 -0
  310. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/saml_issuer.py +0 -0
  311. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/saml_provider.py +0 -0
  312. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/saml_service_provider.py +0 -0
  313. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/scim_user.py +0 -0
  314. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/secret_scanning_alert.py +0 -0
  315. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/team.py +0 -0
  316. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/team_member.py +0 -0
  317. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/team_role.py +0 -0
  318. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/user.py +0 -0
  319. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/workflow.py +0 -0
  320. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/workflow_job.py +0 -0
  321. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/workflow_step.py +0 -0
  322. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/resources/__init__.py +0 -0
  323. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/resources/enterprise.py +0 -0
  324. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/runner_ids.py +0 -0
  325. {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/transforms.py +0 -0
  326. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_branch_collection_gate.py +0 -0
  327. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_branch_protection_traversability.py +0 -0
  328. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/actions-permissions.json +0 -0
  329. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/actionsecrets.json +0 -0
  330. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/app.json +0 -0
  331. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/appinstalls.json +0 -0
  332. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/branch-policies.json +0 -0
  333. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/branch-prot-rules.json +0 -0
  334. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/branches.json +0 -0
  335. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/custom-roles.json +0 -0
  336. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/environments.json +0 -0
  337. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/org-pat-request.json +0 -0
  338. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/org-pat.json +0 -0
  339. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/org-role-teams.json +0 -0
  340. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/org-role-users.json +0 -0
  341. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/org-roles.json +0 -0
  342. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/org.json +0 -0
  343. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/pat-repositories.json +0 -0
  344. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/repo-collaborators.json +0 -0
  345. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/repo-teams.json +0 -0
  346. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/repositories.json +0 -0
  347. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/scimusers.json +0 -0
  348. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/secrets.json +0 -0
  349. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/secretscanningalert.json +0 -0
  350. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/selected-org-secrets.json +0 -0
  351. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/variables.json +0 -0
  352. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/workflows.json +0 -0
  353. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_enterprise_capabilities.py +0 -0
  354. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_enterprise_organization.py +0 -0
  355. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_enterprise_resources.py +0 -0
  356. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_environment_model.py +0 -0
  357. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_error_resilience.py +0 -0
  358. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_external_identity_tenant_matching.py +0 -0
  359. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_github_rest_client.py +0 -0
  360. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_github_retry.py +0 -0
  361. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_org_secret_models.py +0 -0
  362. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_repository_rulesets.py +0 -0
  363. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_runner_ids.py +0 -0
  364. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_runner_models.py +0 -0
  365. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_runner_resources.py +0 -0
  366. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_saml_helpers.py +0 -0
  367. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_saml_models.py +0 -0
  368. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_scim_models.py +0 -0
  369. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_variable_models.py +0 -0
  370. {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_workflow_model.py +0 -0
  371. {openhound_github-0.5.0 → openhound_github-0.5.2}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: openhound-github
3
- Version: 0.5.0
3
+ Version: 0.5.2
4
4
  Summary: Github collector for OpenHound
5
5
  Author-email: "jdreijer@specterops.io" <jdreijer@specterops.io>, Jared Atkinson <jatkinson@specterops.io>
6
6
  License-File: LICENSE.md
@@ -45,6 +45,12 @@ The openhound-github extension collects resources from Github organizations and
45
45
  edges for
46
46
  BloodHound.
47
47
 
48
+ ### GitHub App JWT issuer
49
+
50
+ Enterprise GitHub App credentials accept either `client_id` or `app_id` as the
51
+ JWT issuer. When both are configured, `client_id` is preferred. At least one
52
+ identifier must be supplied together with `key_path` and `enterprise_name`.
53
+
48
54
  ### Enterprise SCIM and hybrid correlations
49
55
 
50
56
  When `SOURCES__GITHUB__COLLECT_ENTERPRISE_SCIM=true`, a token with enterprise SCIM access is used to collect both `/scim/v2/enterprises/{enterprise}/Users` and `/scim/v2/enterprises/{enterprise}/Groups`. The collector emits normalized `SCIM_Organization`, `SCIM_User`, and `SCIM_Group` nodes plus `SCIM_Contains`, `SCIM_MemberOf`, and `SCIM_Provisioned` relationships. Install the BloodHound SCIM extension alongside this extension to register the shared SCIM kinds.
@@ -34,6 +34,12 @@ The openhound-github extension collects resources from Github organizations and
34
34
  edges for
35
35
  BloodHound.
36
36
 
37
+ ### GitHub App JWT issuer
38
+
39
+ Enterprise GitHub App credentials accept either `client_id` or `app_id` as the
40
+ JWT issuer. When both are configured, `client_id` is preferred. At least one
41
+ identifier must be supplied together with `key_path` and `enterprise_name`.
42
+
37
43
  ### Enterprise SCIM and hybrid correlations
38
44
 
39
45
  When `SOURCES__GITHUB__COLLECT_ENTERPRISE_SCIM=true`, a token with enterprise SCIM access is used to collect both `/scim/v2/enterprises/{enterprise}/Users` and `/scim/v2/enterprises/{enterprise}/Groups`. The collector emits normalized `SCIM_Organization`, `SCIM_User`, and `SCIM_Group` nodes plus `SCIM_Contains`, `SCIM_MemberOf`, and `SCIM_Provisioned` relationships. Install the BloodHound SCIM extension alongside this extension to register the shared SCIM kinds.
@@ -27,7 +27,7 @@ class AccountConfig(BaseModel):
27
27
 
28
28
  class InstallationResponse(BaseModel):
29
29
  id: int
30
- client_id: str
30
+ client_id: str | None = None
31
31
  account: AccountConfig
32
32
  target_type: str
33
33
  app_id: int | None = None
@@ -39,15 +39,32 @@ class TokenResponse(BaseModel):
39
39
  expires_at: datetime
40
40
 
41
41
 
42
+ def resolve_github_app_jwt_issuer(
43
+ *, client_id: str | None, app_id: str | int | None
44
+ ) -> str:
45
+ """Select the configured identifier for GitHub App JWT authentication."""
46
+ normalized_client_id = str(client_id).strip() if client_id is not None else ""
47
+ if normalized_client_id:
48
+ return normalized_client_id
49
+
50
+ normalized_app_id = str(app_id).strip() if app_id is not None else ""
51
+ if normalized_app_id:
52
+ return normalized_app_id
53
+
54
+ raise ValueError(
55
+ "GitHub App credentials require either client_id or app_id for the JWT issuer"
56
+ )
57
+
58
+
42
59
  class GithubSession:
43
60
  def __init__(
44
61
  self,
45
- client_id: str,
62
+ jwt_issuer: str,
46
63
  private_key_path: str,
47
64
  api_uri: str = "https://api.github.com/",
48
65
  ):
49
66
  self.api_uri = api_uri
50
- self.client_id = client_id
67
+ self.jwt_issuer = jwt_issuer
51
68
  self.private_key_path = private_key_path
52
69
  self.client = RESTClient(
53
70
  base_url=self.api_uri,
@@ -59,9 +76,11 @@ class GithubSession:
59
76
  now_utc = datetime.now(timezone.utc).timestamp()
60
77
  header = {"alg": "RS256", "typ": "JWT"}
61
78
  claims = {
62
- "iss": self.client_id,
79
+ "iss": self.jwt_issuer,
63
80
  "iat": int(now_utc - 10), # Issued 10 seconds in the past
64
- "exp": int(now_utc + 540), # Expires in 9 minutes (GitHub max is 10, leaving room for clock drift)
81
+ "exp": int(
82
+ now_utc + 540
83
+ ), # Expires in 9 minutes (GitHub max is 10, leaving room for clock drift)
65
84
  }
66
85
 
67
86
  try:
@@ -86,12 +105,12 @@ class GithubInstallation(GithubSession):
86
105
  def __init__(
87
106
  self,
88
107
  installation_id: str,
89
- client_id: str,
108
+ jwt_issuer: str,
90
109
  private_key_path: str,
91
110
  api_uri: str = "https://api.github.com/",
92
111
  ):
93
112
  self.installation_id = installation_id
94
- super().__init__(client_id, private_key_path, api_uri)
113
+ super().__init__(jwt_issuer, private_key_path, api_uri)
95
114
 
96
115
  @property
97
116
  def token(self) -> TokenResponse:
@@ -108,14 +127,11 @@ class GithubInstallation(GithubSession):
108
127
  class GithubApp(GithubSession):
109
128
  def __init__(
110
129
  self,
111
- client_id: str,
130
+ jwt_issuer: str,
112
131
  private_key_path: str,
113
132
  api_uri: str = "https://api.github.com/",
114
133
  ):
115
- self.client_id = client_id
116
- self.private_key_path = private_key_path
117
- self.api_uri = api_uri
118
- super().__init__(client_id, private_key_path, api_uri)
134
+ super().__init__(jwt_issuer, private_key_path, api_uri)
119
135
 
120
136
  @property
121
137
  def installations(self) -> Iterator[InstallationResponse]:
@@ -4,6 +4,7 @@ from dataclasses import dataclass, field
4
4
  from datetime import datetime
5
5
  from threading import Lock
6
6
  from typing import Any, Iterator
7
+ from urllib.parse import quote
7
8
 
8
9
  from dlt.sources.helpers import requests
9
10
  from dlt.sources.helpers.rest_client.client import RESTClient
@@ -131,6 +132,10 @@ def _client_for_org(ctx: SourceContext, org_login: str) -> RESTClient:
131
132
  return ctx.client
132
133
 
133
134
 
135
+ def _encode_path_segment(value: str) -> str:
136
+ return quote(value, safe="")
137
+
138
+
134
139
  def _repository_roles(ctx: SourceContext) -> list[dict[str, Any]]:
135
140
  roles: list[dict[str, Any]] = []
136
141
  for org in ctx.organizations:
@@ -1297,6 +1302,7 @@ def environment_variables(environment: Environment, ctx: SourceContext):
1297
1302
  EnvironmentVariable (EnvironmentVariable): Environment variable record.
1298
1303
  """
1299
1304
  env_name = environment.name
1305
+ encoded_env_name = _encode_path_segment(env_name)
1300
1306
  env_node_id = environment.node_id
1301
1307
 
1302
1308
  full_repo_name = environment.repository_full_name
@@ -1305,7 +1311,7 @@ def environment_variables(environment: Environment, ctx: SourceContext):
1305
1311
 
1306
1312
  client = _client_for_org(ctx, environment.org_login)
1307
1313
  for page in client.paginate(
1308
- f"/repos/{full_repo_name}/environments/{env_name}/variables"
1314
+ f"/repos/{full_repo_name}/environments/{encoded_env_name}/variables"
1309
1315
  ):
1310
1316
  for item in page:
1311
1317
  yield {
@@ -1341,10 +1347,11 @@ def environment_branch_policies(environment: Environment, ctx: SourceContext):
1341
1347
  repo_name = environment.repository_name
1342
1348
  repo_node_id = environment.repository_node_id
1343
1349
  env_name = environment.name
1350
+ encoded_env_name = _encode_path_segment(env_name)
1344
1351
  env_node_id = environment.node_id
1345
1352
  client = _client_for_org(ctx, environment.org_login)
1346
1353
  for page in client.paginate(
1347
- f"/repos/{full_repo_name}/environments/{env_name}/deployment-branch-policies"
1354
+ f"/repos/{full_repo_name}/environments/{encoded_env_name}/deployment-branch-policies"
1348
1355
  ):
1349
1356
  for policy in page:
1350
1357
  yield {
@@ -1377,10 +1384,11 @@ def environment_secrets(environment: Environment, ctx: SourceContext):
1377
1384
  full_repo_name = environment.repository_full_name
1378
1385
 
1379
1386
  env_name = environment.name
1387
+ encoded_env_name = _encode_path_segment(env_name)
1380
1388
  env_node_id = environment.node_id
1381
1389
  client = _client_for_org(ctx, environment.org_login)
1382
1390
  for page in client.paginate(
1383
- f"/repos/{full_repo_name}/environments/{env_name}/secrets"
1391
+ f"/repos/{full_repo_name}/environments/{encoded_env_name}/secrets"
1384
1392
  ):
1385
1393
  for secret in page:
1386
1394
  yield {
@@ -18,6 +18,7 @@ from openhound_github.auth import (
18
18
  GithubApp,
19
19
  GitHubAppInstallationAuth,
20
20
  GithubInstallation,
21
+ resolve_github_app_jwt_issuer,
21
22
  )
22
23
  from openhound_github.helpers import github_retry_policy
23
24
  from openhound_github.main import app
@@ -75,8 +76,8 @@ class GithubCredentials(CredentialsConfiguration):
75
76
 
76
77
  @configspec
77
78
  class GithubEnterpriseAppCredentials(CredentialsConfiguration):
78
- client_id: str = None
79
- app_id: str = None
79
+ client_id: str | None = None
80
+ app_id: str | None = None
80
81
  key_path: str = None
81
82
  enterprise_name: str = None
82
83
  pat_token: str | None = None
@@ -151,6 +152,10 @@ def source(
151
152
  return client(BearerTokenAuth(token=token))
152
153
 
153
154
  if credentials.auth == "enterprise_app":
155
+ jwt_issuer = resolve_github_app_jwt_issuer(
156
+ client_id=credentials.client_id,
157
+ app_id=credentials.app_id,
158
+ )
154
159
  ctx = SourceContext(
155
160
  enterprise_name=credentials.enterprise_name,
156
161
  collect_enterprise_scim=bool(collect_enterprise_scim),
@@ -165,14 +170,14 @@ def source(
165
170
  elif credentials.pat_token:
166
171
  ctx.scim_client = ctx.sso_client
167
172
  github_app_session = GithubApp(
168
- client_id=credentials.client_id,
173
+ jwt_issuer=jwt_issuer,
169
174
  private_key_path=credentials.key_path,
170
175
  )
171
176
  for installation in github_app_session.installations:
172
177
  if installation.target_type == "Organization":
173
178
  org_installation = GithubInstallation(
174
179
  installation_id=installation.id,
175
- client_id=installation.client_id,
180
+ jwt_issuer=jwt_issuer,
176
181
  private_key_path=credentials.key_path,
177
182
  )
178
183
  ctx.organizations.append(
@@ -189,7 +194,7 @@ def source(
189
194
  if installation.target_type == "Enterprise":
190
195
  es_installation = GithubInstallation(
191
196
  installation_id=installation.id,
192
- client_id=installation.client_id,
197
+ jwt_issuer=jwt_issuer,
193
198
  private_key_path=credentials.key_path,
194
199
  )
195
200
  ctx.client = client(
@@ -206,7 +211,7 @@ def source(
206
211
  )
207
212
  org_installation = GithubInstallation(
208
213
  installation_id=credentials.install_id,
209
- client_id=credentials.client_id,
214
+ jwt_issuer=credentials.client_id,
210
215
  private_key_path=credentials.key_path,
211
216
  )
212
217
  ctx.organizations.append(
@@ -0,0 +1,156 @@
1
+ from __future__ import annotations
2
+
3
+ import importlib
4
+ from types import SimpleNamespace
5
+
6
+ import pytest
7
+ from dlt.common.configuration.resolve import resolve_configuration
8
+
9
+ from openhound_github import auth
10
+ from openhound_github.auth import (
11
+ AccountConfig,
12
+ GithubSession,
13
+ InstallationResponse,
14
+ resolve_github_app_jwt_issuer,
15
+ )
16
+ from openhound_github.source import GithubEnterpriseAppCredentials
17
+
18
+
19
+ @pytest.mark.parametrize(
20
+ ("client_id", "app_id", "expected"),
21
+ (
22
+ ("Iv1.client-id", None, "Iv1.client-id"),
23
+ (None, "123456", "123456"),
24
+ ("Iv1.preferred", "123456", "Iv1.preferred"),
25
+ (" Iv1.trimmed ", "123456", "Iv1.trimmed"),
26
+ ),
27
+ )
28
+ def test_resolve_github_app_jwt_issuer_prefers_client_id(
29
+ client_id: str | None,
30
+ app_id: str | None,
31
+ expected: str,
32
+ ) -> None:
33
+ assert resolve_github_app_jwt_issuer(client_id=client_id, app_id=app_id) == expected
34
+
35
+
36
+ def test_resolve_github_app_jwt_issuer_requires_an_identifier() -> None:
37
+ with pytest.raises(
38
+ ValueError,
39
+ match="require either client_id or app_id for the JWT issuer",
40
+ ):
41
+ resolve_github_app_jwt_issuer(client_id=None, app_id=None)
42
+
43
+
44
+ @pytest.mark.parametrize(
45
+ ("client_id", "app_id"),
46
+ (("Iv1.client-id", None), (None, "123456")),
47
+ )
48
+ def test_enterprise_app_configuration_accepts_either_identifier(
49
+ client_id: str | None,
50
+ app_id: str | None,
51
+ ) -> None:
52
+ credentials = resolve_configuration(
53
+ GithubEnterpriseAppCredentials(
54
+ client_id=client_id,
55
+ app_id=app_id,
56
+ key_path="/tmp/github-app.pem",
57
+ enterprise_name="example-enterprise",
58
+ )
59
+ )
60
+
61
+ assert credentials.is_partial() is False
62
+
63
+
64
+ def test_github_session_uses_explicit_jwt_issuer(
65
+ monkeypatch: pytest.MonkeyPatch, tmp_path
66
+ ) -> None:
67
+ key_path = tmp_path / "github-app.pem"
68
+ key_path.write_text("test-private-key", encoding="utf-8")
69
+ captured_claims: dict[str, object] = {}
70
+
71
+ monkeypatch.setattr(auth.RSAKey, "import_key", lambda _: object())
72
+
73
+ def fake_encode(header, claims, key):
74
+ captured_claims.update(claims)
75
+ return "encoded-jwt"
76
+
77
+ monkeypatch.setattr(auth.jwt, "encode", fake_encode)
78
+
79
+ session = GithubSession(
80
+ jwt_issuer="123456",
81
+ private_key_path=str(key_path),
82
+ )
83
+
84
+ assert session.jwt == "encoded-jwt"
85
+ assert captured_claims["iss"] == "123456"
86
+
87
+
88
+ def test_legacy_installation_response_does_not_require_client_id() -> None:
89
+ installation = InstallationResponse(
90
+ id=42,
91
+ account=AccountConfig(id=7, login="example-org"),
92
+ target_type="Organization",
93
+ app_id=123456,
94
+ )
95
+
96
+ assert installation.client_id is None
97
+ assert installation.app_id == 123456
98
+
99
+
100
+ def test_enterprise_source_reuses_selected_issuer_for_installation_tokens(
101
+ monkeypatch: pytest.MonkeyPatch,
102
+ ) -> None:
103
+ source_module = importlib.import_module("openhound_github.source")
104
+ captured_issuers: list[str] = []
105
+
106
+ class FakeGithubApp:
107
+ def __init__(self, jwt_issuer: str, private_key_path: str) -> None:
108
+ captured_issuers.append(jwt_issuer)
109
+ self.installations = (
110
+ SimpleNamespace(
111
+ id=11,
112
+ target_type="Organization",
113
+ account=SimpleNamespace(login="example-org"),
114
+ ),
115
+ SimpleNamespace(
116
+ id=12,
117
+ target_type="Enterprise",
118
+ account=SimpleNamespace(slug="example-enterprise"),
119
+ ),
120
+ )
121
+
122
+ class FakeGithubInstallation:
123
+ def __init__(
124
+ self,
125
+ installation_id: int,
126
+ jwt_issuer: str,
127
+ private_key_path: str,
128
+ ) -> None:
129
+ captured_issuers.append(jwt_issuer)
130
+
131
+ class FakeRESTClient:
132
+ def __init__(self, **kwargs) -> None:
133
+ pass
134
+
135
+ monkeypatch.setattr(source_module, "GithubApp", FakeGithubApp)
136
+ monkeypatch.setattr(source_module, "GithubInstallation", FakeGithubInstallation)
137
+ monkeypatch.setattr(
138
+ source_module, "GitHubAppInstallationAuth", lambda **_: object()
139
+ )
140
+ monkeypatch.setattr(source_module, "RESTClient", FakeRESTClient)
141
+ monkeypatch.setattr(source_module, "enterprise_resources", lambda _: ())
142
+ monkeypatch.setattr(source_module, "organization_resources", lambda _: ())
143
+
144
+ resources = source_module.source.__wrapped__(
145
+ credentials=GithubEnterpriseAppCredentials(
146
+ app_id="123456",
147
+ key_path="/tmp/github-app.pem",
148
+ enterprise_name="example-enterprise",
149
+ ),
150
+ host="https://api.github.com",
151
+ collect_enterprise_scim=False,
152
+ emit_legacy_scim_correlations=False,
153
+ )
154
+
155
+ assert resources == ()
156
+ assert captured_issuers == ["123456", "123456", "123456"]
@@ -0,0 +1,73 @@
1
+ from types import SimpleNamespace
2
+
3
+ import pytest
4
+
5
+ from openhound_github.resources.organization import (
6
+ OrgContext,
7
+ SourceContext,
8
+ environment_branch_policies,
9
+ environment_secrets,
10
+ environment_variables,
11
+ )
12
+
13
+
14
+ class _FakeClient:
15
+ def __init__(self):
16
+ self.paginate_calls: list[tuple[str, dict]] = []
17
+
18
+ def paginate(self, path: str, **kwargs):
19
+ self.paginate_calls.append((path, kwargs))
20
+ return iter([])
21
+
22
+
23
+ def _ctx(client: _FakeClient) -> SourceContext:
24
+ return SourceContext(
25
+ client=client,
26
+ organizations=[OrgContext(client=client, org_name="acme")],
27
+ )
28
+
29
+
30
+ def _environment(name: str) -> SimpleNamespace:
31
+ return SimpleNamespace(
32
+ name=name,
33
+ node_id="ENV_1",
34
+ org_login="acme",
35
+ repository_name="repo",
36
+ repository_full_name="acme/repo",
37
+ repository_node_id="REPO_1",
38
+ has_custom_branch_policies=True,
39
+ required_reviewers=False,
40
+ prevent_self_review=False,
41
+ )
42
+
43
+
44
+ @pytest.mark.parametrize(
45
+ ("transformer", "suffix"),
46
+ [
47
+ (environment_variables, "variables"),
48
+ (environment_secrets, "secrets"),
49
+ (environment_branch_policies, "deployment-branch-policies"),
50
+ ],
51
+ )
52
+ @pytest.mark.parametrize(
53
+ ("environment_name", "encoded_name"),
54
+ [
55
+ ("feature/test", "feature%2Ftest"),
56
+ ("QA Environment", "QA%20Environment"),
57
+ (
58
+ "PCF_PROD_Deployment / deploy-PROD",
59
+ "PCF_PROD_Deployment%20%2F%20deploy-PROD",
60
+ ),
61
+ ],
62
+ )
63
+ def test_environment_child_resources_encode_environment_names_in_paths(
64
+ transformer, suffix: str, environment_name: str, encoded_name: str
65
+ ) -> None:
66
+ client = _FakeClient()
67
+
68
+ rows = list(transformer.__wrapped__(_environment(environment_name), _ctx(client)))
69
+
70
+ assert rows == []
71
+ assert client.paginate_calls == [
72
+ (f"/repos/acme/repo/environments/{encoded_name}/{suffix}", {})
73
+ ]