RepoAuditor 0.2.78__tar.gz → 0.2.79__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 (168) hide show
  1. {repoauditor-0.2.78 → repoauditor-0.2.79}/PKG-INFO +1 -1
  2. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/CommandLineProcessor.py +35 -16
  3. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/EntryPoint.py +2 -2
  4. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/CommunityStandards/Impl/ExistsRequirementImpl.py +2 -2
  5. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/AllowDeletions.py +1 -1
  6. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/AllowMainlineForcePushes.py +1 -1
  7. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/DismissStalePullRequestApprovals.py +1 -1
  8. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/DoNotAllowBypassSettings.py +1 -1
  9. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/EnsureStatusChecks.py +3 -3
  10. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireApprovalMostRecentPush.py +1 -1
  11. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireCodeOwnerReview.py +1 -1
  12. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireConversationResolution.py +1 -1
  13. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireLinearHistory.py +1 -1
  14. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequirePullRequests.py +1 -1
  15. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireSignedCommits.py +1 -1
  16. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireStatusChecksToPass.py +1 -1
  17. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireUpToDateBranches.py +1 -1
  18. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/DefaultBranchRequirements/Protected.py +3 -3
  19. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/Impl/EnableRequirementImpl.py +3 -2
  20. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/Impl/ValueRequirementImpl.py +2 -2
  21. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequirePullRequests.py +1 -1
  22. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireSignedCommits.py +1 -1
  23. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireStatusChecks.py +1 -1
  24. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/AutoMerge.py +1 -1
  25. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/DeleteHeadBranches.py +1 -1
  26. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/DependabotSecurityUpdates.py +1 -1
  27. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Description.py +2 -2
  28. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/MergeCommit.py +1 -1
  29. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Private.py +3 -3
  30. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/RebaseMergeCommit.py +1 -1
  31. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SecretScanning.py +1 -1
  32. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SecretScanningPushProtection.py +1 -1
  33. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SquashCommitMerge.py +1 -1
  34. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SuggestUpdatingPullRequestBranches.py +1 -1
  35. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportDiscussions.py +1 -1
  36. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportIssues.py +1 -1
  37. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportProjects.py +1 -1
  38. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportWikis.py +1 -1
  39. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/TemplateRepository.py +1 -1
  40. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/WebCommitSignoff.py +1 -1
  41. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Requirement.py +1 -1
  42. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/__init__.py +1 -1
  43. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/CommandLineProcessor_UnitTest.py +1 -1
  44. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubEnterprise_EndToEndTest.py +30 -30
  45. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/EnsureStatusChecks_UnitTest.py +8 -8
  46. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireApprovalMostRecentPush_UnitTest.py +1 -1
  47. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireCodeOwnerReview_UnitTest.py +2 -2
  48. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireUpToDateBranches_UnitTest.py +2 -2
  49. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/DefaultBranchQueryRequirements/Protected_UnitTest.py +3 -3
  50. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/EnableRulesetRequirementImpl_UnitTest.py +10 -10
  51. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/RulesetRequirements_UnitTest.py +11 -11
  52. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/StandardQueryRequirements/DependabotSecurityUpdates_UnitTest.py +7 -2
  53. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/StandardQueryRequirements/Description_UnitTest.py +2 -2
  54. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/StandardQueryRequirements/Private_UnitTest.py +6 -6
  55. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/StandardQueryRequirements/SecretScanningPushProtection_UnitTest.py +2 -2
  56. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/StandardQueryRequirements/SecretScanning_UnitTest.py +2 -2
  57. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/StandardQueryRequirements/SquashMergeCommitMessage_UnitTest.py +9 -8
  58. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/ValueRequrementImpl_UnitTest.py +2 -2
  59. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHub_EndToEndTest.py +33 -33
  60. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Requirement_UnitTest.py +2 -1
  61. {repoauditor-0.2.78 → repoauditor-0.2.79}/.copier-answers.yml +0 -0
  62. {repoauditor-0.2.78 → repoauditor-0.2.79}/.github/CODEOWNERS +0 -0
  63. {repoauditor-0.2.78 → repoauditor-0.2.79}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  64. {repoauditor-0.2.78 → repoauditor-0.2.79}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  65. {repoauditor-0.2.78 → repoauditor-0.2.79}/.github/ISSUE_TEMPLATE/custom.md +0 -0
  66. {repoauditor-0.2.78 → repoauditor-0.2.79}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  67. {repoauditor-0.2.78 → repoauditor-0.2.79}/.github/actions/release_impl/action.yml +0 -0
  68. {repoauditor-0.2.78 → repoauditor-0.2.79}/.github/pull_request_template.md +0 -0
  69. {repoauditor-0.2.78 → repoauditor-0.2.79}/.github/release_sources.yaml +0 -0
  70. {repoauditor-0.2.78 → repoauditor-0.2.79}/.github/workflows/CICD.yml +0 -0
  71. {repoauditor-0.2.78 → repoauditor-0.2.79}/.github/workflows/CICD_impl.yml +0 -0
  72. {repoauditor-0.2.78 → repoauditor-0.2.79}/.github/workflows/EndToEnd.yml +0 -0
  73. {repoauditor-0.2.78 → repoauditor-0.2.79}/.github/workflows/codeql.yml +0 -0
  74. {repoauditor-0.2.78 → repoauditor-0.2.79}/.gitignore +0 -0
  75. {repoauditor-0.2.78 → repoauditor-0.2.79}/.pre-commit-config.yaml +0 -0
  76. {repoauditor-0.2.78 → repoauditor-0.2.79}/.python-version +0 -0
  77. {repoauditor-0.2.78 → repoauditor-0.2.79}/CODE_OF_CONDUCT.md +0 -0
  78. {repoauditor-0.2.78 → repoauditor-0.2.79}/CONTRIBUTING.md +0 -0
  79. {repoauditor-0.2.78 → repoauditor-0.2.79}/DEVELOPMENT.md +0 -0
  80. {repoauditor-0.2.78 → repoauditor-0.2.79}/GOVERNANCE.md +0 -0
  81. {repoauditor-0.2.78 → repoauditor-0.2.79}/LICENSE +0 -0
  82. {repoauditor-0.2.78 → repoauditor-0.2.79}/MAINTAINERS.md +0 -0
  83. {repoauditor-0.2.78 → repoauditor-0.2.79}/README.md +0 -0
  84. {repoauditor-0.2.78 → repoauditor-0.2.79}/SECURITY.md +0 -0
  85. {repoauditor-0.2.78 → repoauditor-0.2.79}/default_config.yaml +0 -0
  86. {repoauditor-0.2.78 → repoauditor-0.2.79}/minisign_key.pub +0 -0
  87. {repoauditor-0.2.78 → repoauditor-0.2.79}/pyproject.toml +0 -0
  88. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/AutoGitSemVer.yaml +0 -0
  89. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Display.py +0 -0
  90. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/ExecuteModules.py +0 -0
  91. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Impl/ParallelSequentialProcessor.py +0 -0
  92. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Impl/__init__.py +0 -0
  93. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Module.py +0 -0
  94. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugin.py +0 -0
  95. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/CommunityStandards/CommunityStandardsQuery.py +0 -0
  96. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/CommunityStandards/Impl/__init__.py +0 -0
  97. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/CommunityStandards/Module.py +0 -0
  98. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/CodeOfConduct.py +0 -0
  99. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/CodeOwners.py +0 -0
  100. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/Contributing.py +0 -0
  101. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/IssueTemplates.py +0 -0
  102. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/LicenseFile.py +0 -0
  103. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/PullRequestTemplates.py +0 -0
  104. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/ReadMe.py +0 -0
  105. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/SecurityPolicy.py +0 -0
  106. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/__init__.py +0 -0
  107. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/CommunityStandards/__init__.py +0 -0
  108. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/CommunityStandardsPlugin.py +0 -0
  109. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionQuery.py +0 -0
  110. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/ClassicEnableRequirementImpl.py +0 -0
  111. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/ClassicValueRequirementImpl.py +0 -0
  112. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/__init__.py +0 -0
  113. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireApprovals.py +0 -0
  114. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/__init__.py +0 -0
  115. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/DefaultBranchQuery.py +0 -0
  116. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/DefaultBranchRequirements/__init__.py +0 -0
  117. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/Impl/Common.py +0 -0
  118. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/Impl/EnableRulesetRequirementImpl.py +0 -0
  119. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/Impl/__init__.py +0 -0
  120. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/Module.py +0 -0
  121. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/RulesetQuery.py +0 -0
  122. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/__init__.py +0 -0
  123. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardQuery.py +0 -0
  124. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/DefaultBranch.py +0 -0
  125. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Impl/StandardEnableRequirementImpl.py +0 -0
  126. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Impl/StandardValueRequirementImpl.py +0 -0
  127. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Impl/__init__.py +0 -0
  128. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/License.py +0 -0
  129. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/MergeCommitMessage.py +0 -0
  130. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SquashMergeCommitMessage.py +0 -0
  131. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/__init__.py +0 -0
  132. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHub/__init__.py +0 -0
  133. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHubBase/Module.py +0 -0
  134. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHubBase/__init__.py +0 -0
  135. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/GitHubPlugin.py +0 -0
  136. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Plugins/__init__.py +0 -0
  137. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/Query.py +0 -0
  138. {repoauditor-0.2.78 → repoauditor-0.2.79}/src/RepoAuditor/py.typed +0 -0
  139. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/EntryPoint_UnitTest.py +0 -0
  140. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/ExecuteModules_UnitTest.py +0 -0
  141. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Module_UnitTest.py +0 -0
  142. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugin_UnitTest.py +0 -0
  143. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/CommunityStandards/CommunityStandardsQuery_UnitTest.py +0 -0
  144. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/CommunityStandards/ExistsRequirementImpl_UnitTest.py +0 -0
  145. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/CommunityStandards/GitHubCommunityStandards_UnitTest.py +0 -0
  146. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/CommunityStandards_EndToEndTest.py +0 -0
  147. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/ClassicBranchProtectionQuery_UnitTest.py +0 -0
  148. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/DismissStalePullRequestApprovals_UnitTest.py +0 -0
  149. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireApprovals_UnitTest.py +0 -0
  150. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/ClassicValueRequirementImpl_UnitTest.py +0 -0
  151. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/DefaultBranchQuery_UnitTest.py +0 -0
  152. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/GitHubModule_UnitTest.py +0 -0
  153. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/GitHubSession_UnitTest.py +0 -0
  154. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/RulsesetQuery_UnitTest.py +0 -0
  155. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/StandardQueryRequirements/License_UnitTest.py +0 -0
  156. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/StandardQueryRequirements/MergeCommitMessage_UnitTest.py +0 -0
  157. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/StandardQuery_UnitTest.py +0 -0
  158. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/GitHubModule/fixtures.py +0 -0
  159. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/__snapshots__/CommunityStandards_EndToEndTest.ambr +0 -0
  160. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/__snapshots__/GitHubEnterprise_EndToEndTest.ambr +0 -0
  161. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/__snapshots__/GitHub_EndToEndTest.ambr +0 -0
  162. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/conftest.py +0 -0
  163. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Plugins/utilities.py +0 -0
  164. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/Query_UnitTest.py +0 -0
  165. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/__init__.py +0 -0
  166. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/__snapshots__/ExecuteModules_UnitTest.ambr +0 -0
  167. {repoauditor-0.2.78 → repoauditor-0.2.79}/tests/conftest.py +0 -0
  168. {repoauditor-0.2.78 → repoauditor-0.2.79}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: RepoAuditor
3
- Version: 0.2.78
3
+ Version: 0.2.79
4
4
  Summary: Add your description here
5
5
  Project-URL: Homepage, https://github.com/gt-sse-center/RepoAuditor
6
6
  Project-URL: Documentation, https://github.com/gt-sse-center/RepoAuditor
@@ -144,31 +144,50 @@ class CommandLineProcessor:
144
144
  # Requirement-level args
145
145
  for query in module.queries:
146
146
  for requirement in query.requirements:
147
- for key, value in requirement.GetDynamicArgDefinitions().items():
148
- dynamic_arg_definitions[
149
- f"{module.name}{argument_separator}{requirement.name}{argument_separator}{key}"
150
- ] = value
147
+ for key, value in requirement.GetDynamicArgDefinitions(argument_separator).items():
148
+ dynamic_arg_definitions[f"{module.name}{argument_separator}{key}"] = value
151
149
 
152
150
  # Now we process the definitions to get the dynamic arguments
153
151
  dynamic_args: dict[str, dict[str, Any]] = {}
154
152
 
155
- num_acceptable_dynamic_args_parts = 2
156
-
157
153
  for key, value in get_dynamic_args_func(dynamic_arg_definitions).items():
158
- parts = key.split(argument_separator)
159
- assert len(parts) >= num_acceptable_dynamic_args_parts
154
+ import re
160
155
 
161
- if parts[0] not in module_map:
162
- msg = f"'{parts[0]}' is not a recognized module name."
156
+ pattern = rf"(?P<module>[A-Za-z]+){argument_separator}(?P<has_no>no{argument_separator})?(?P<requirement_or_arg>[A-Za-z0-9]+)(?P<value>{argument_separator}[\S]+)?"
157
+ groups = re.match(
158
+ pattern,
159
+ key,
160
+ ).groupdict()
161
+
162
+ # Assert that module and requirement/arg are specified
163
+ assert groups["module"]
164
+ assert groups["requirement_or_arg"]
165
+
166
+ module_name = groups["module"]
167
+ requirement_or_arg = groups["requirement_or_arg"]
168
+ has_no = groups["has_no"]
169
+
170
+ if module_name not in module_map:
171
+ msg = f"'{module_name}' is not a recognized module name."
163
172
  raise ValueError(msg)
164
173
 
165
- if len(parts) == num_acceptable_dynamic_args_parts:
166
- dynamic_args.setdefault(parts[0], {})[parts[1]] = value
174
+ # The following if-elif block works as follows:
175
+ # First we check if `requirement_or_arg` is all lower case. If it is, then it is a module arg, else it is a requirement.
176
+ # If the flag has a requirement, we first check for a value (e.g. GitHub-License-value), in which case, we assign the value.
177
+ # Else, we check if the flag has a `no` in it, in which case it is a boolean flag with `no`, else (finally) a `yes`.
178
+ if requirement_or_arg.islower():
179
+ dynamic_args.setdefault(module_name, {})[requirement_or_arg] = value
167
180
  else:
168
- dynamic_args.setdefault(parts[0], {}).setdefault(None, {}).setdefault( # type: ignore[call-overload]
169
- parts[1],
170
- {},
171
- )[argument_separator.join(parts[2:])] = value
181
+ if groups["value"]:
182
+ value_key = groups["value"][1:]
183
+ elif has_no:
184
+ value_key = "no"
185
+ else:
186
+ value_key = "yes"
187
+
188
+ dynamic_args.setdefault(module_name, {}).setdefault(None, {}).setdefault(
189
+ requirement_or_arg, {}
190
+ )[value_key] = value
172
191
 
173
192
  return dynamic_args
174
193
 
@@ -125,10 +125,10 @@ def _HelpEpilog() -> str:
125
125
 
126
126
  for query in module.queries:
127
127
  for requirement in query.requirements:
128
- for key, value in requirement.GetDynamicArgDefinitions().items():
128
+ for key, value in requirement.GetDynamicArgDefinitions(ARGUMENT_SEPARATOR).items():
129
129
  requirement_arguments.append(
130
130
  TypeInfoToString(
131
- f"--{module.name}{ARGUMENT_SEPARATOR}{requirement.name}{ARGUMENT_SEPARATOR}{key}",
131
+ f"--{module.name}{ARGUMENT_SEPARATOR}{key}",
132
132
  value,
133
133
  ),
134
134
  )
@@ -61,10 +61,10 @@ class ExistsRequirementImpl(Requirement):
61
61
 
62
62
  # ----------------------------------------------------------------------
63
63
  @override
64
- def GetDynamicArgDefinitions(self) -> dict[str, TypeDefinitionItemType]:
64
+ def GetDynamicArgDefinitions(self, argument_separator: str) -> dict[str, TypeDefinitionItemType]:
65
65
  """Get the definitions for the arguments to this requirement."""
66
66
  return {
67
- self.dynamic_arg_name: (
67
+ f"{self.name}{argument_separator}{self.dynamic_arg_name}": (
68
68
  bool,
69
69
  typer.Option(
70
70
  False,
@@ -22,7 +22,7 @@ class AllowDeletions(ClassicEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "AllowDeletions",
24
24
  False,
25
- "enabled",
25
+ "yes",
26
26
  "Rules applied to everyone including administrators",
27
27
  "Allow deletions",
28
28
  lambda data: data["branch_protection_data"]["allow_deletions"]["enabled"],
@@ -22,7 +22,7 @@ class AllowMainlineForcePushes(ClassicEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "AllowMainlineForcePushes",
24
24
  False,
25
- "enabled",
25
+ "yes",
26
26
  "Rules applied to everyone including administrators",
27
27
  "Allow force pushes",
28
28
  lambda data: data["branch_protection_data"]["allow_force_pushes"]["enabled"],
@@ -23,7 +23,7 @@ class DismissStalePullRequestApprovals(ClassicEnableRequirementImpl):
23
23
  super().__init__(
24
24
  "DismissStalePullRequestApprovals",
25
25
  True,
26
- "disabled",
26
+ "no",
27
27
  "Protect matching branches",
28
28
  "Require a pull request before merging -> Dismiss stale pull request approvals when new commits are pushed",
29
29
  _GetValue,
@@ -22,7 +22,7 @@ class DoNotAllowBypassSettings(ClassicEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "DoNotAllowBypassSettings",
24
24
  True,
25
- "disabled",
25
+ "no",
26
26
  "Protect matching branches",
27
27
  "Do not allow bypassing the above settings",
28
28
  lambda data: data["branch_protection_data"]["enforce_admins"]["enabled"],
@@ -54,10 +54,10 @@ class EnsureStatusChecks(Requirement):
54
54
 
55
55
  # ----------------------------------------------------------------------
56
56
  @override
57
- def GetDynamicArgDefinitions(self) -> dict[str, TypeDefinitionItemType]:
57
+ def GetDynamicArgDefinitions(self, argument_separator: str) -> dict[str, TypeDefinitionItemType]:
58
58
  """Get the definitions for the arguments to this requirement."""
59
59
  return {
60
- "disabled": (
60
+ f"no{argument_separator}{self.name}": (
61
61
  bool,
62
62
  typer.Option(
63
63
  default=False,
@@ -73,7 +73,7 @@ class EnsureStatusChecks(Requirement):
73
73
  query_data: dict[str, Any],
74
74
  requirement_args: dict[str, Any],
75
75
  ) -> Requirement.EvaluateImplResult:
76
- if requirement_args["disabled"]:
76
+ if requirement_args["no"]:
77
77
  return Requirement.EvaluateImplResult(
78
78
  EvaluateResult.DoesNotApply,
79
79
  "The status check requirement has been explicitly disabled.",
@@ -23,7 +23,7 @@ class RequireApprovalMostRecentPush(ClassicEnableRequirementImpl):
23
23
  super().__init__(
24
24
  "RequireApprovalMostRecentPush",
25
25
  True,
26
- "disabled",
26
+ "no",
27
27
  "Protect matching branches",
28
28
  "Require a pull request before merging -> Require approval of the most recent reviewable push",
29
29
  _GetValue,
@@ -23,7 +23,7 @@ class RequireCodeOwnerReview(ClassicEnableRequirementImpl):
23
23
  super().__init__(
24
24
  "RequireCodeOwnerReview",
25
25
  False,
26
- "enabled",
26
+ "yes",
27
27
  "Protect matching branches",
28
28
  "Require a pull request before merging -> Require review from Code Owners",
29
29
  _GetValue,
@@ -22,7 +22,7 @@ class RequireConversationResolution(ClassicEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "RequireConversationResolution",
24
24
  True,
25
- "disabled",
25
+ "no",
26
26
  "Protect matching branches",
27
27
  "Require conversation resolution before merging",
28
28
  lambda data: data["branch_protection_data"]["required_conversation_resolution"]["enabled"],
@@ -22,7 +22,7 @@ class RequireLinearHistory(ClassicEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "RequireLinearHistory",
24
24
  False,
25
- "enabled",
25
+ "yes",
26
26
  "Protect matching branches",
27
27
  "Require linear history",
28
28
  lambda data: data["branch_protection_data"]["required_linear_history"]["enabled"],
@@ -22,7 +22,7 @@ class RequirePullRequests(ClassicEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "RequirePullRequests",
24
24
  True,
25
- "disabled",
25
+ "no",
26
26
  "Protect matching branches",
27
27
  "Require a pull request before merging",
28
28
  lambda data: "required_pull_request_reviews" in data["branch_protection_data"],
@@ -22,7 +22,7 @@ class RequireSignedCommits(ClassicEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "RequireSignedCommits",
24
24
  True,
25
- "disabled",
25
+ "no",
26
26
  "Protect matching branches",
27
27
  "Require signed commits",
28
28
  lambda data: data["branch_protection_data"]["required_signatures"]["enabled"],
@@ -22,7 +22,7 @@ class RequireStatusChecksToPass(ClassicEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "RequireStatusChecksToPass",
24
24
  True,
25
- "disabled",
25
+ "no",
26
26
  "Protect matching branches",
27
27
  "Require status checks to pass before merging",
28
28
  lambda data: "required_status_checks" in data["branch_protection_data"],
@@ -23,7 +23,7 @@ class RequireUpToDateBranches(ClassicEnableRequirementImpl):
23
23
  super().__init__(
24
24
  "RequireUpToDateBranches",
25
25
  True,
26
- "disabled",
26
+ "no",
27
27
  "Protect matching branches",
28
28
  "Require status checks to pass before merging -> Require branches to be up to date before merging",
29
29
  _GetValue,
@@ -53,10 +53,10 @@ class Protected(Requirement):
53
53
 
54
54
  # ----------------------------------------------------------------------
55
55
  @override
56
- def GetDynamicArgDefinitions(self) -> dict[str, TypeDefinitionItemType]:
56
+ def GetDynamicArgDefinitions(self, argument_separator: str) -> dict[str, TypeDefinitionItemType]:
57
57
  """Get the definitions for the arguments to this requirement."""
58
58
  return {
59
- "disabled": (
59
+ f"no{argument_separator}{self.name}": (
60
60
  bool,
61
61
  typer.Option(
62
62
  default=False,
@@ -78,7 +78,7 @@ class Protected(Requirement):
78
78
  if is_protected is None:
79
79
  return CreateIncompleteDataResult()
80
80
 
81
- if requirement_args["disabled"]:
81
+ if requirement_args["no"]:
82
82
  expected_value = False
83
83
  provide_rationale = False
84
84
  else:
@@ -60,10 +60,11 @@ class EnableRequirementImpl(Requirement):
60
60
 
61
61
  # ----------------------------------------------------------------------
62
62
  @override
63
- def GetDynamicArgDefinitions(self) -> dict[str, TypeDefinitionItemType]:
63
+ def GetDynamicArgDefinitions(self, argument_separator: str) -> dict[str, TypeDefinitionItemType]:
64
64
  """Get the definitions for the arguments to this requirement."""
65
+ arg = f"no{argument_separator}{self.name}" if self.dynamic_arg_name == "no" else f"{self.name}"
65
66
  return {
66
- self.dynamic_arg_name: (
67
+ arg: (
67
68
  bool,
68
69
  typer.Option(
69
70
  False,
@@ -65,10 +65,10 @@ class ValueRequirementImpl(Requirement):
65
65
 
66
66
  # ----------------------------------------------------------------------
67
67
  @override
68
- def GetDynamicArgDefinitions(self) -> dict[str, TypeDefinitionItemType]:
68
+ def GetDynamicArgDefinitions(self, argument_separator: str) -> dict[str, TypeDefinitionItemType]:
69
69
  """Get the definitions for the arguments to this requirement."""
70
70
  return {
71
- "value": (
71
+ f"{self.name}{argument_separator}value": (
72
72
  str,
73
73
  typer.Option(
74
74
  self.default_value,
@@ -16,7 +16,7 @@ class RequirePullRequests(EnableRulesetRequirementImpl):
16
16
  super().__init__(
17
17
  name="RequirePullRequestsRule",
18
18
  enabled_by_default=True,
19
- dynamic_arg_name="disabled",
19
+ dynamic_arg_name="no",
20
20
  github_ruleset_type="pull_request",
21
21
  github_ruleset_value="Require a pull request before merging",
22
22
  get_configuration_value_func=lambda rule: rule.get("type", "") == "pull_request",
@@ -16,7 +16,7 @@ class RequireSignedCommits(EnableRulesetRequirementImpl):
16
16
  super().__init__(
17
17
  name="RequireSignedCommitsRule",
18
18
  enabled_by_default=True,
19
- dynamic_arg_name="disabled",
19
+ dynamic_arg_name="no",
20
20
  github_ruleset_type="required_signatures",
21
21
  github_ruleset_value="Require signed commits",
22
22
  get_configuration_value_func=lambda rule: rule.get("type", "") == "required_signatures",
@@ -16,7 +16,7 @@ class RequireStatusChecks(EnableRulesetRequirementImpl):
16
16
  super().__init__(
17
17
  name="RequireStatusChecksRule",
18
18
  enabled_by_default=True,
19
- dynamic_arg_name="disabled",
19
+ dynamic_arg_name="no",
20
20
  github_ruleset_type="required_status_checks",
21
21
  github_ruleset_value="Require status checks to pass",
22
22
  get_configuration_value_func=lambda rule: rule.get("type", "") == "required_status_checks",
@@ -22,7 +22,7 @@ class AutoMerge(StandardEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "AutoMerge",
24
24
  True,
25
- "disabled",
25
+ "no",
26
26
  "settings",
27
27
  "Pull Requests",
28
28
  "Allow auto-merge",
@@ -22,7 +22,7 @@ class DeleteHeadBranches(StandardEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "DeleteHeadBranches",
24
24
  True,
25
- "disabled",
25
+ "no",
26
26
  "settings",
27
27
  "Pull Requests",
28
28
  "Automatically delete head branches",
@@ -23,7 +23,7 @@ class DependabotSecurityUpdates(StandardEnableRequirementImpl):
23
23
  super().__init__(
24
24
  "DependabotSecurityUpdates",
25
25
  True,
26
- "disabled",
26
+ "no",
27
27
  "settings/security_analysis",
28
28
  "Dependabot",
29
29
  "Dependabot security updates",
@@ -51,10 +51,10 @@ class Description(Requirement):
51
51
 
52
52
  # ----------------------------------------------------------------------
53
53
  @override
54
- def GetDynamicArgDefinitions(self) -> dict[str, TypeDefinitionItemType]:
54
+ def GetDynamicArgDefinitions(self, argument_separator: str) -> dict[str, TypeDefinitionItemType]:
55
55
  """Get the definitions for the arguments to this requirement."""
56
56
  return {
57
- "allow-empty": (
57
+ f"{self.name}{argument_separator}allow-empty": (
58
58
  bool,
59
59
  typer.Option(
60
60
  default=False,
@@ -22,7 +22,7 @@ class MergeCommit(StandardEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "MergeCommit",
24
24
  True,
25
- "disabled",
25
+ "no",
26
26
  "settings",
27
27
  "Pull Requests",
28
28
  "Allow merge commits",
@@ -52,10 +52,10 @@ class Private(Requirement):
52
52
 
53
53
  # ----------------------------------------------------------------------
54
54
  @override
55
- def GetDynamicArgDefinitions(self) -> dict[str, TypeDefinitionItemType]:
55
+ def GetDynamicArgDefinitions(self, _: str) -> dict[str, TypeDefinitionItemType]:
56
56
  """Get the definitions for the arguments to this requirement."""
57
57
  return {
58
- "enabled": (
58
+ f"{self.name}": (
59
59
  bool,
60
60
  typer.Option(
61
61
  default=False,
@@ -71,7 +71,7 @@ class Private(Requirement):
71
71
  query_data: dict[str, Any],
72
72
  requirement_args: dict[str, Any],
73
73
  ) -> Requirement.EvaluateImplResult:
74
- expect_private = requirement_args.get("enabled", False)
74
+ expect_private = requirement_args.get("yes", False)
75
75
  query_data["__expected_visibility"] = "private" if expect_private else "public"
76
76
 
77
77
  result = query_data["standard"].get("private", None)
@@ -22,7 +22,7 @@ class RebaseMergeCommit(StandardEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "RebaseMergeCommit",
24
24
  False,
25
- "enabled",
25
+ "yes",
26
26
  "settings",
27
27
  "Pull Requests",
28
28
  "Allow rebase merging",
@@ -23,7 +23,7 @@ class SecretScanning(StandardEnableRequirementImpl):
23
23
  super().__init__(
24
24
  "SecretScanning",
25
25
  True,
26
- "disabled",
26
+ "no",
27
27
  "settings/security_analysis",
28
28
  "Secret Protection",
29
29
  "Secret protection",
@@ -23,7 +23,7 @@ class SecretScanningPushProtection(StandardEnableRequirementImpl):
23
23
  super().__init__(
24
24
  "SecretScanningPushProtection",
25
25
  True,
26
- "disabled",
26
+ "no",
27
27
  "settings/security_analysis",
28
28
  "Secret Protection",
29
29
  "Push protection",
@@ -22,7 +22,7 @@ class SquashCommitMerge(StandardEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "SquashCommitMerge",
24
24
  False,
25
- "enabled",
25
+ "yes",
26
26
  "settings",
27
27
  "Pull Requests",
28
28
  "Allow squash merging",
@@ -22,7 +22,7 @@ class SuggestUpdatingPullRequestBranches(StandardEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "SuggestUpdatingPullRequestBranches",
24
24
  False,
25
- "enabled",
25
+ "yes",
26
26
  "settings",
27
27
  "Pull Requests",
28
28
  "Always suggest updating pull request branches",
@@ -22,7 +22,7 @@ class SupportDiscussions(StandardEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "SupportDiscussions",
24
24
  False,
25
- "enabled",
25
+ "yes",
26
26
  "settings",
27
27
  "Features",
28
28
  "Discussions",
@@ -22,7 +22,7 @@ class SupportIssues(StandardEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "SupportIssues",
24
24
  True,
25
- "disabled",
25
+ "no",
26
26
  "settings",
27
27
  "Features",
28
28
  "Issues",
@@ -22,7 +22,7 @@ class SupportProjects(StandardEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "SupportProjects",
24
24
  True,
25
- "disabled",
25
+ "no",
26
26
  "settings",
27
27
  "Features",
28
28
  "Projects",
@@ -22,7 +22,7 @@ class SupportWikis(StandardEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "SupportWikis",
24
24
  True,
25
- "disabled",
25
+ "no",
26
26
  "settings",
27
27
  "Features",
28
28
  "Wikis",
@@ -22,7 +22,7 @@ class TemplateRepository(StandardEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "TemplateRepository",
24
24
  False,
25
- "enabled",
25
+ "yes",
26
26
  "settings",
27
27
  "General",
28
28
  "Template repository",
@@ -22,7 +22,7 @@ class WebCommitSignoff(StandardEnableRequirementImpl):
22
22
  super().__init__(
23
23
  "WebCommitSignoff",
24
24
  True,
25
- "disabled",
25
+ "no",
26
26
  "settings",
27
27
  "General",
28
28
  "Require contributors to sign off on web-based commits",
@@ -100,7 +100,7 @@ class Requirement(ABC):
100
100
 
101
101
  # ----------------------------------------------------------------------
102
102
  @extension
103
- def GetDynamicArgDefinitions(self) -> dict[str, TypeDefinitionItemType]:
103
+ def GetDynamicArgDefinitions(self, argument_separator: str) -> dict[str, TypeDefinitionItemType]: # noqa: ARG002
104
104
  """Return information about dynamic arguments that the requirement can consume (often from the command line)."""
105
105
 
106
106
  # No dynamic arguments by default
@@ -2,4 +2,4 @@ APP_NAME = "RepoAuditor"
2
2
 
3
3
  # Note that the default value below will be used until the value
4
4
  # here is explicitly updated by the Continuous Integration system.
5
- __version__ = "0.2.78"
5
+ __version__ = "0.2.79"
@@ -105,7 +105,7 @@ class MyRequirement(Requirement):
105
105
 
106
106
  # ----------------------------------------------------------------------
107
107
  @override
108
- def GetDynamicArgDefinitions(self) -> dict[str, TypeDefinitionItemType]:
108
+ def GetDynamicArgDefinitions(self, _) -> dict[str, TypeDefinitionItemType]:
109
109
  if not self._has_dynamic_args:
110
110
  return {}
111
111