ffbb-data-client 2.3.2__tar.gz → 2.3.4__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 (393) hide show
  1. ffbb_data_client-2.3.4/.gitattributes +2 -0
  2. ffbb_data_client-2.3.4/.github/FUNDING.yml +1 -0
  3. ffbb_data_client-2.3.4/.github/scripts/ai-pr-reviewer.cjs +278 -0
  4. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.github/workflows/ai-pr-reviewer.yml +13 -15
  5. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.github/workflows/check_wrapper_parity.yml +1 -1
  6. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.github/workflows/ci.yml +14 -10
  7. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.github/workflows/codeql.yml +3 -3
  8. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.github/workflows/deploy-pages.yml +1 -1
  9. ffbb_data_client-2.3.4/.github/workflows/keep-ffbb-api-discovery-alive.yml +39 -0
  10. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.github/workflows/publish.yml +4 -4
  11. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.github/workflows/release-after-discovery-merge.yml +9 -1
  12. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.github/workflows/update-ffbb-api-discovery.yml +2 -2
  13. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.gitignore +3 -0
  14. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.pre-commit-config.yaml +1 -1
  15. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/CHANGELOG.md +64 -0
  16. ffbb_data_client-2.3.4/DESIGN.md +171 -0
  17. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/PKG-INFO +14 -17
  18. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/README.md +13 -16
  19. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/RELEASE_NOTES.md +74 -2
  20. ffbb_data_client-2.3.4/SECURITY.md +53 -0
  21. ffbb_data_client-2.3.4/data/api_update_summary.md +35 -0
  22. {ffbb_data_client-2.3.2/src/ffbb_data_client → ffbb_data_client-2.3.4}/data/collections.json +2 -24
  23. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/data/endpoint_discovery.json +49 -43
  24. {ffbb_data_client-2.3.2/src/ffbb_data_client → ffbb_data_client-2.3.4}/data/indexes.json +13 -10
  25. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/data/openapi.json +10 -761
  26. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/data/openapi_full.json +1747 -2506
  27. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/pyproject.toml +1 -1
  28. ffbb_data_client-2.3.4/scripts/benchmark_concurrent_pagination.py +266 -0
  29. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/scripts/discover_endpoints.py +40 -2
  30. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/setup.cfg +3 -0
  31. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/__init__.py +3 -0
  32. ffbb_data_client-2.3.4/src/ffbb_data_client/clients/_helpers.py +92 -0
  33. ffbb_data_client-2.3.4/src/ffbb_data_client/clients/_mixins/competition.py +217 -0
  34. ffbb_data_client-2.3.4/src/ffbb_data_client/clients/_mixins/external.py +382 -0
  35. ffbb_data_client-2.3.4/src/ffbb_data_client/clients/_mixins/getters.py +611 -0
  36. ffbb_data_client-2.3.4/src/ffbb_data_client/clients/_mixins/list_methods.py +348 -0
  37. ffbb_data_client-2.3.4/src/ffbb_data_client/clients/_mixins/organisme.py +174 -0
  38. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/clients/_rest_facade.py +43 -43
  39. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/clients/_search_facade.py +98 -1
  40. ffbb_data_client-2.3.4/src/ffbb_data_client/clients/api_ffbb_app_client.py +126 -0
  41. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/clients/ffbb_data_client.py +2 -1
  42. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/clients/meilisearch_client.py +3 -4
  43. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/data/__init__.py +0 -1
  44. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4/src/ffbb_data_client}/data/collections.json +2 -24
  45. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/data/endpoint_discovery.json +49 -43
  46. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4/src/ffbb_data_client}/data/indexes.json +13 -10
  47. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/data/openapi.json +10 -761
  48. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/helpers/http_requests_utils.py +11 -30
  49. ffbb_data_client-2.3.4/src/ffbb_data_client/helpers/meilisearch_client_extension.py +230 -0
  50. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/document_flyer.py +24 -46
  51. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/formations_hit.py +41 -80
  52. ffbb_data_client-2.3.4/src/ffbb_data_client/models/game_stats_models.py +14 -0
  53. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/get_organisme_response.py +2 -1
  54. ffbb_data_client-2.3.4/src/ffbb_data_client/models/niveau_models.py +27 -0
  55. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/organisateur.py +26 -50
  56. ffbb_data_client-2.3.4/src/ffbb_data_client/models/poules_models.py +15 -0
  57. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/pratiques_hit.py +36 -67
  58. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/pratiques_hit_type.py +5 -1
  59. ffbb_data_client-2.3.4/src/ffbb_data_client/models/rankings_models.py +15 -0
  60. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/saison_fields.py +0 -1
  61. ffbb_data_client-2.3.4/src/ffbb_data_client/models/saisons_models.py +15 -0
  62. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/terrains_hit.py +16 -30
  63. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/tournois_hit.py +3 -3
  64. ffbb_data_client-2.3.4/src/ffbb_data_client/models/tournois_hit_type.py +9 -0
  65. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/utils/cache_manager.py +0 -1
  66. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/utils/converter_utils.py +6 -0
  67. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/utils/secure_logging.py +15 -12
  68. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client.egg-info/PKG-INFO +14 -17
  69. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client.egg-info/SOURCES.txt +18 -3
  70. ffbb_data_client-2.3.4/src/ffbb_data_client.egg-info/scm_file_list.json +373 -0
  71. ffbb_data_client-2.3.4/src/ffbb_data_client.egg-info/scm_version.json +8 -0
  72. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/integration/test_503_secure_logging.py +4 -6
  73. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/integration/test_506_raw_json_model_conversion.py +1 -1
  74. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_201_unit_tests_core.py +30 -39
  75. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_207_coverage_clients_extended.py +12 -12
  76. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_208_new_methods_coverage.py +21 -21
  77. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_210_targeted_clients_helpers_coverage.py +7 -6
  78. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_async_methods.py +1 -1
  79. ffbb_data_client-2.3.4/tests/unit/clients/test_search_many.py +94 -0
  80. ffbb_data_client-2.3.4/tests/unit/helpers/test_meilisearch_pagination_concurrent.py +81 -0
  81. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_122_coverage_gaps.py +2 -2
  82. ffbb_data_client-2.3.4/tests/unit/test_310_discover_endpoints.py +372 -0
  83. ffbb_data_client-2.3.4/tests/unit/utils/__init__.py +0 -0
  84. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/utils/test_300_secure_logging.py +23 -8
  85. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/utils/test_307_coverage_gaps_utils.py +6 -1
  86. ffbb_data_client-2.3.4/website/css/style.css +1124 -0
  87. ffbb_data_client-2.3.4/website/index.html +623 -0
  88. ffbb_data_client-2.3.2/.github/scripts/ai-pr-reviewer.js +0 -273
  89. ffbb_data_client-2.3.2/.github/scripts/resolve-bolt-conflict.js +0 -121
  90. ffbb_data_client-2.3.2/SECURITY.md +0 -15
  91. ffbb_data_client-2.3.2/data/api_update_summary.md +0 -28
  92. ffbb_data_client-2.3.2/src/ffbb_data_client/clients/api_ffbb_app_client.py +0 -2408
  93. ffbb_data_client-2.3.2/src/ffbb_data_client/data/openapi_full.json +0 -38304
  94. ffbb_data_client-2.3.2/src/ffbb_data_client/helpers/meilisearch_client_extension.py +0 -167
  95. ffbb_data_client-2.3.2/src/ffbb_data_client/models/game_stats_models.py +0 -5
  96. ffbb_data_client-2.3.2/src/ffbb_data_client/models/niveau_models.py +0 -14
  97. ffbb_data_client-2.3.2/src/ffbb_data_client/models/poules_models.py +0 -6
  98. ffbb_data_client-2.3.2/src/ffbb_data_client/models/rankings_models.py +0 -6
  99. ffbb_data_client-2.3.2/src/ffbb_data_client/models/saisons_models.py +0 -6
  100. ffbb_data_client-2.3.2/src/ffbb_data_client/models/tournois_hit_type.py +0 -5
  101. ffbb_data_client-2.3.2/website/css/style.css +0 -490
  102. ffbb_data_client-2.3.2/website/index.html +0 -256
  103. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.agents/rules/antigravity-rtk-rules.md +0 -0
  104. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.coveragerc +0 -0
  105. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  106. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  107. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  108. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.github/dependabot.yml +0 -0
  109. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.github/scripts/check_wrapper_parity.py +0 -0
  110. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.isort.cfg +0 -0
  111. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.jules/bolt.md +0 -0
  112. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/.readthedocs.yml +0 -0
  113. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/AGENTS.md +0 -0
  114. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/AUTHORS.rst +0 -0
  115. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/CODE_OF_CONDUCT.md +0 -0
  116. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/CONTRIBUTING.rst +0 -0
  117. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/LICENSE.txt +0 -0
  118. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/LOCAL_CI_GUIDE.md +0 -0
  119. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/data/api.ffbb.app.json +0 -0
  120. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/data/meilisearch-prod.ffbb.app.json +0 -0
  121. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/data/type_discovery_corrections.json +0 -0
  122. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/docs/Makefile +0 -0
  123. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/docs/_static/.gitignore +0 -0
  124. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/docs/architecture.rst +0 -0
  125. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/docs/authors.rst +0 -0
  126. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/docs/changelog.rst +0 -0
  127. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/docs/conf.py +0 -0
  128. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/docs/contributing.rst +0 -0
  129. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/docs/examples.rst +0 -0
  130. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/docs/index.rst +0 -0
  131. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/docs/license.rst +0 -0
  132. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/docs/migration.rst +0 -0
  133. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/docs/readme.rst +0 -0
  134. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/docs/requirements.txt +0 -0
  135. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/docs/test_strategy.md +0 -0
  136. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/docs/testing_conventions.md +0 -0
  137. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/examples/README.md +0 -0
  138. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/examples/complete_usage_example.py +0 -0
  139. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/examples/quick_start.py +0 -0
  140. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/examples/team_ranking_analysis.py +0 -0
  141. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/graphify-cross-repo.json +0 -0
  142. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/pytest.ini +0 -0
  143. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/run-ci-locally.sh +0 -0
  144. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/scripts/benchmark_search_organisme.py +0 -0
  145. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/scripts/discover_types.py +0 -0
  146. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/setup.py +0 -0
  147. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/clients/__init__.py +0 -0
  148. {ffbb_data_client-2.3.2/tests/e2e → ffbb_data_client-2.3.4/src/ffbb_data_client/clients/_mixins}/__init__.py +0 -0
  149. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/clients/meilisearch_ffbb_client.py +0 -0
  150. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/config.py +0 -0
  151. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/helpers/__init__.py +0 -0
  152. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/helpers/http_requests_helper.py +0 -0
  153. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/helpers/multi_search_query_helper.py +0 -0
  154. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/__init__.py +0 -0
  155. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/affiche.py +0 -0
  156. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/cartographie.py +0 -0
  157. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/categorie.py +0 -0
  158. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/categorie_type.py +0 -0
  159. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/clock.py +0 -0
  160. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/club_contacts.py +0 -0
  161. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/code.py +0 -0
  162. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/commune.py +0 -0
  163. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competition_fields.py +0 -0
  164. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competition_id.py +0 -0
  165. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competition_id_categorie.py +0 -0
  166. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competition_id_sexe.py +0 -0
  167. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competition_id_type_competition.py +0 -0
  168. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competition_id_type_competition_generique.py +0 -0
  169. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competition_origine.py +0 -0
  170. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competition_origine_categorie.py +0 -0
  171. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competition_origine_type_competition.py +0 -0
  172. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competition_origine_type_competition_generique.py +0 -0
  173. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competition_type.py +0 -0
  174. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competitions_facet_distribution.py +0 -0
  175. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competitions_facet_stats.py +0 -0
  176. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competitions_hit.py +0 -0
  177. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competitions_multi_search_query.py +0 -0
  178. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/competitions_query.py +0 -0
  179. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/configuration_models.py +0 -0
  180. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/contact_info.py +0 -0
  181. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/content_multi_search_query.py +0 -0
  182. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/coordonnees.py +0 -0
  183. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/coordonnees_type.py +0 -0
  184. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/document_flyer_type.py +0 -0
  185. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/engagement_contacts.py +0 -0
  186. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/engagements_facet_distribution.py +0 -0
  187. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/engagements_facet_stats.py +0 -0
  188. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/engagements_hit.py +0 -0
  189. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/engagements_multi_search_query.py +0 -0
  190. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/etat.py +0 -0
  191. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/external_competition_id.py +0 -0
  192. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/external_id.py +0 -0
  193. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/facet_distribution.py +0 -0
  194. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/facet_stats.py +0 -0
  195. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/field_set.py +0 -0
  196. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/folder.py +0 -0
  197. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/formation_session.py +0 -0
  198. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/formations_facet_distribution.py +0 -0
  199. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/formations_facet_stats.py +0 -0
  200. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/formations_multi_search_query.py +0 -0
  201. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/game_stats_model.py +0 -0
  202. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/generic_search.py +0 -0
  203. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/geo.py +0 -0
  204. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/geo_sort_order.py +0 -0
  205. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/get_commune_response.py +0 -0
  206. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/get_competition_response.py +0 -0
  207. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/get_configuration_response.py +0 -0
  208. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/get_engagement_response.py +0 -0
  209. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/get_entraineur_response.py +0 -0
  210. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/get_formation_response.py +0 -0
  211. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/get_officiel_response.py +0 -0
  212. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/get_poule_response.py +0 -0
  213. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/get_pratique_response.py +0 -0
  214. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/get_rencontre_response.py +0 -0
  215. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/get_saisons_response.py +0 -0
  216. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/get_salle_response.py +0 -0
  217. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/get_terrain_response.py +0 -0
  218. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/get_tournoi_response.py +0 -0
  219. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/gradient_color.py +0 -0
  220. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/hit.py +0 -0
  221. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/id_engagement_equipe.py +0 -0
  222. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/id_organisme_equipe.py +0 -0
  223. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/id_organisme_equipe1_logo.py +0 -0
  224. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/id_poule.py +0 -0
  225. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/jour.py +0 -0
  226. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/label.py +0 -0
  227. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/labellisation.py +0 -0
  228. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/live.py +0 -0
  229. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/lives.py +0 -0
  230. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/logo.py +0 -0
  231. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/multi_search_queries.py +0 -0
  232. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/multi_search_query.py +0 -0
  233. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/multi_search_result_competitions.py +0 -0
  234. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/multi_search_result_engagements.py +0 -0
  235. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/multi_search_result_formations.py +0 -0
  236. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/multi_search_result_organismes.py +0 -0
  237. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/multi_search_result_pratiques.py +0 -0
  238. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/multi_search_result_rencontres.py +0 -0
  239. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/multi_search_result_salles.py +0 -0
  240. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/multi_search_result_terrains.py +0 -0
  241. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/multi_search_result_tournois.py +0 -0
  242. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/multi_search_results.py +0 -0
  243. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/multi_search_results_class.py +0 -0
  244. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/nature_sol.py +0 -0
  245. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/niveau.py +0 -0
  246. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/niveau_class.py +0 -0
  247. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/niveau_extractor.py +0 -0
  248. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/niveau_info.py +0 -0
  249. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/niveau_type.py +0 -0
  250. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/objectif.py +0 -0
  251. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/organisateur_type.py +0 -0
  252. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/organisme_fields.py +0 -0
  253. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/organisme_id_pere.py +0 -0
  254. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/organismes_facet_distribution.py +0 -0
  255. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/organismes_facet_stats.py +0 -0
  256. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/organismes_hit.py +0 -0
  257. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/organismes_multi_search_query.py +0 -0
  258. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/organismes_query.py +0 -0
  259. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/phase_code.py +0 -0
  260. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/poule.py +0 -0
  261. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/poule_fields.py +0 -0
  262. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/poule_rencontre_item_model.py +0 -0
  263. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/poules_query.py +0 -0
  264. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/pratique.py +0 -0
  265. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/pratiques_facet_distribution.py +0 -0
  266. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/pratiques_facet_stats.py +0 -0
  267. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/pratiques_multi_search_query.py +0 -0
  268. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/pratiques_type_class.py +0 -0
  269. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/publication_internet.py +0 -0
  270. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/purple_logo.py +0 -0
  271. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/query_fields_manager.py +0 -0
  272. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/ranking_engagement.py +0 -0
  273. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/rencontres_engagement.py +0 -0
  274. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/rencontres_facet_distribution.py +0 -0
  275. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/rencontres_facet_stats.py +0 -0
  276. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/rencontres_hit.py +0 -0
  277. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/rencontres_multi_search_query.py +0 -0
  278. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/saison.py +0 -0
  279. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/saisons_query.py +0 -0
  280. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/salle.py +0 -0
  281. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/salles_facet_distribution.py +0 -0
  282. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/salles_facet_stats.py +0 -0
  283. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/salles_hit.py +0 -0
  284. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/salles_multi_search_query.py +0 -0
  285. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/sexe.py +0 -0
  286. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/sexe_class.py +0 -0
  287. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/source.py +0 -0
  288. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/status.py +0 -0
  289. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/team_engagement.py +0 -0
  290. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/team_ranking.py +0 -0
  291. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/terrains_categorie_championnat_3x3_libelle.py +0 -0
  292. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/terrains_facet_distribution.py +0 -0
  293. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/terrains_facet_stats.py +0 -0
  294. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/terrains_multi_search_query.py +0 -0
  295. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/terrains_name.py +0 -0
  296. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/terrains_sexe_enum.py +0 -0
  297. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/terrains_storage.py +0 -0
  298. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/tournoi_type_class.py +0 -0
  299. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/tournoi_type_enum.py +0 -0
  300. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/tournoi_types_3x3.py +0 -0
  301. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/tournoi_types_3x3_libelle.py +0 -0
  302. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/tournoi_types_3x3_libelle_enum.py +0 -0
  303. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/tournois_facet_distribution.py +0 -0
  304. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/tournois_facet_stats.py +0 -0
  305. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/tournois_libelle.py +0 -0
  306. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/tournois_multi_search_query.py +0 -0
  307. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/type_association.py +0 -0
  308. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/type_association_libelle.py +0 -0
  309. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/type_class.py +0 -0
  310. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/type_competition.py +0 -0
  311. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/type_competition_generique.py +0 -0
  312. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/type_enum.py +0 -0
  313. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/models/type_league.py +0 -0
  314. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/py.typed +0 -0
  315. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/utils/__init__.py +0 -0
  316. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/utils/concurrency_utils.py +0 -0
  317. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/utils/input_validation.py +0 -0
  318. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/utils/retry_utils.py +0 -0
  319. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client/utils/token_manager.py +0 -0
  320. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client.egg-info/dependency_links.txt +0 -0
  321. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client.egg-info/not-zip-safe +0 -0
  322. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client.egg-info/requires.txt +0 -0
  323. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/src/ffbb_data_client.egg-info/top_level.txt +0 -0
  324. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/conftest.py +0 -0
  325. {ffbb_data_client-2.3.2/tests/integration → ffbb_data_client-2.3.4/tests/e2e}/__init__.py +0 -0
  326. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/e2e/conftest.py +0 -0
  327. {ffbb_data_client-2.3.2/tests/unit → ffbb_data_client-2.3.4/tests/integration}/__init__.py +0 -0
  328. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/integration/conftest.py +0 -0
  329. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/integration/test_500_user_journey.py +0 -0
  330. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/integration/test_501_user_journey_v3.py +0 -0
  331. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/integration/test_502_enhanced_integration.py +0 -0
  332. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/integration/test_504_input_validation.py +0 -0
  333. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/integration/test_505_retry_timeout.py +0 -0
  334. {ffbb_data_client-2.3.2/tests/unit/clients → ffbb_data_client-2.3.4/tests/unit}/__init__.py +0 -0
  335. {ffbb_data_client-2.3.2/tests/unit/helpers → ffbb_data_client-2.3.4/tests/unit/clients}/__init__.py +0 -0
  336. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_200_api_ffbb_app_client.py +0 -0
  337. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_202_meilisearch_client.py +0 -0
  338. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_203_meilisearch_client_extension.py +0 -0
  339. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_204_ffbb_data_client.py +0 -0
  340. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_205_meilisearch_ffbb_client.py +0 -0
  341. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_206_coverage_gaps_clients.py +0 -0
  342. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_209_automatic_token_resolution.py +0 -0
  343. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_meilisearch_async.py +0 -0
  344. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_v2_backport_search.py +0 -0
  345. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_v3_new_features.py +0 -0
  346. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/clients/test_warm_cache.py +0 -0
  347. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/conftest.py +0 -0
  348. {ffbb_data_client-2.3.2/tests/unit/models → ffbb_data_client-2.3.4/tests/unit/helpers}/__init__.py +0 -0
  349. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/helpers/test_400_http_helpers.py +0 -0
  350. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/helpers/test_meilisearch_client_extension_recursive_pagination.py +0 -0
  351. {ffbb_data_client-2.3.2/tests/unit/utils → ffbb_data_client-2.3.4/tests/unit/models}/__init__.py +0 -0
  352. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_100_competition_id_categorie.py +0 -0
  353. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_101_competition_id_sexe.py +0 -0
  354. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_102_competition_id_type_competition.py +0 -0
  355. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_103_competition_id_type_competition_generique.py +0 -0
  356. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_104_competition_origine_categorie.py +0 -0
  357. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_105_competition_origine_type_competition_generique.py +0 -0
  358. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_106_competition_origine.py +0 -0
  359. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_107_id_engagement_equipe.py +0 -0
  360. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_108_id_organisme_equipe.py +0 -0
  361. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_109_id_organisme_equipe1_logo.py +0 -0
  362. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_110_labellisation.py +0 -0
  363. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_111_niveau_class.py +0 -0
  364. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_112_purple_logo.py +0 -0
  365. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_113_salle.py +0 -0
  366. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_114_tournoi_type_class.py +0 -0
  367. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_115_type_association_libelle.py +0 -0
  368. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_116_type_competition_generique.py +0 -0
  369. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_117_organisateur.py +0 -0
  370. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_118_competition_id.py +0 -0
  371. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_119_terrains_inner_models.py +0 -0
  372. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_120_pratiques_inner_models.py +0 -0
  373. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_121_to_dict_round_trip.py +0 -0
  374. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_123_missing_coverage.py +0 -0
  375. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_123_v2_backport.py +0 -0
  376. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_124_targeted_coverage_gains.py +0 -0
  377. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/models/test_dx_aliases.py +0 -0
  378. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/utils/test_301_input_validation.py +0 -0
  379. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/utils/test_302_retry_utils.py +0 -0
  380. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/utils/test_303_cache_manager.py +0 -0
  381. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/utils/test_304_config.py +0 -0
  382. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/utils/test_305_token_manager.py +0 -0
  383. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/utils/test_306_converter_utils.py +0 -0
  384. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/utils/test_308_converter_utils_extended.py +0 -0
  385. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tests/unit/utils/test_309_concurrency_utils.py +0 -0
  386. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tools/add_cross_repo_edges.py +0 -0
  387. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tools/graphify-cross-repo.sh +0 -0
  388. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tools/graphify_cross_repo.py +0 -0
  389. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tools/update_agents_md.py +0 -0
  390. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/tox.ini +0 -0
  391. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/website/assets/logo.webp +0 -0
  392. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/website/robots.txt +0 -0
  393. {ffbb_data_client-2.3.2 → ffbb_data_client-2.3.4}/website/sitemap.xml +0 -0
@@ -0,0 +1,2 @@
1
+ # Force union merge driver for Jules learning log to prevent merge conflicts
2
+ .jules/bolt.md merge=union
@@ -0,0 +1 @@
1
+ github: [nickdesi]
@@ -0,0 +1,278 @@
1
+ const https = require('https');
2
+
3
+ // Configuration from environment variables
4
+ const GITHUB_TOKEN = process.env.GITHUB_TOKEN;
5
+ const GEMINI_API_KEY = process.env.GEMINI_API_KEY;
6
+ const GITHUB_REPOSITORY = process.env.GITHUB_REPOSITORY;
7
+ const PR_NUMBER = process.env.GITHUB_PR_NUMBER;
8
+ const GEMINI_MODEL = process.env.GEMINI_MODEL || 'gemini-2.5-flash';
9
+
10
+ if (!GITHUB_TOKEN || !GEMINI_API_KEY || !GITHUB_REPOSITORY || !PR_NUMBER) {
11
+ console.error("Missing env vars: GITHUB_TOKEN, GEMINI_API_KEY, GITHUB_REPOSITORY, GITHUB_PR_NUMBER");
12
+ process.exit(1);
13
+ }
14
+
15
+ const SUPPORTED_EXTENSIONS = [
16
+ '.js', '.ts', '.jsx', '.tsx', '.py', '.sh', '.yml', '.yaml',
17
+ '.json', '.css', '.html', '.go', '.rs', '.c', '.cpp', '.h',
18
+ '.conf', '.ini', '.md', '.toml'
19
+ ];
20
+
21
+ const IGNORED_FILES = [
22
+ 'package-lock.json', 'pnpm-lock.yaml', 'yarn.lock', 'composer.lock',
23
+ 'AGENTS.md', 'task.md', 'implementation_plan.md', 'walkthrough.md'
24
+ ];
25
+
26
+ const MAX_RETRIES = 3;
27
+ const BASE_DELAY_MS = 1000;
28
+
29
+ // HTTPS request helper with retry and exponential backoff
30
+ function makeRequest(options, postData = null, retries = MAX_RETRIES) {
31
+ return new Promise((resolve, reject) => {
32
+ const req = https.request(options, (res) => {
33
+ let data = '';
34
+ res.on('data', (chunk) => { data += chunk; });
35
+ res.on('end', () => {
36
+ if (res.statusCode >= 200 && res.statusCode < 300) {
37
+ resolve({ data, headers: res.headers });
38
+ } else if (res.statusCode === 429 && retries > 0) {
39
+ const delay = BASE_DELAY_MS * Math.pow(2, MAX_RETRIES - retries);
40
+ console.warn(`Rate limited. Retrying in ${delay}ms...`);
41
+ setTimeout(() => {
42
+ makeRequest(options, postData, retries - 1).then(resolve).catch(reject);
43
+ }, delay);
44
+ } else if (res.statusCode >= 500 && retries > 0) {
45
+ const delay = BASE_DELAY_MS * Math.pow(2, MAX_RETRIES - retries);
46
+ console.warn(`Server error ${res.statusCode}. Retrying in ${delay}ms...`);
47
+ setTimeout(() => {
48
+ makeRequest(options, postData, retries - 1).then(resolve).catch(reject);
49
+ }, delay);
50
+ } else {
51
+ reject(new Error(`Status ${res.statusCode}: ${data}`));
52
+ }
53
+ });
54
+ });
55
+ req.on('error', (err) => {
56
+ if (retries > 0) {
57
+ const delay = BASE_DELAY_MS * Math.pow(2, MAX_RETRIES - retries);
58
+ setTimeout(() => {
59
+ makeRequest(options, postData, retries - 1).then(resolve).catch(reject);
60
+ }, delay);
61
+ } else {
62
+ reject(err);
63
+ }
64
+ });
65
+ if (postData) {
66
+ req.write(typeof postData === 'string' ? postData : JSON.stringify(postData));
67
+ }
68
+ req.end();
69
+ });
70
+ }
71
+
72
+ // Fetch all pages of PR files (handles pagination)
73
+ async function fetchAllPRFiles() {
74
+ const allFiles = [];
75
+ let page = 1;
76
+
77
+ while (true) {
78
+ const options = {
79
+ hostname: 'api.github.com',
80
+ path: `/repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/files?per_page=100&page=${page}`,
81
+ method: 'GET',
82
+ headers: {
83
+ 'Authorization': `Bearer ${GITHUB_TOKEN}`,
84
+ 'Accept': 'application/vnd.github.v3+json',
85
+ 'User-Agent': 'AI-PR-Reviewer-Action'
86
+ }
87
+ };
88
+
89
+ const { data } = await makeRequest(options);
90
+ const files = JSON.parse(data);
91
+
92
+ if (files.length === 0) break;
93
+ allFiles.push(...files);
94
+
95
+ if (files.length < 100) break;
96
+ page++;
97
+ }
98
+
99
+ return allFiles;
100
+ }
101
+
102
+ // Extract added line numbers from a unified diff patch
103
+ function getAddedLines(patch) {
104
+ if (!patch) return [];
105
+ const lines = patch.split('\n');
106
+ const addedLines = [];
107
+ let currentNewLineNum = 0;
108
+
109
+ for (const line of lines) {
110
+ const chunkHeader = line.match(/^@@ -\d+(?:,\d+)? \+(\d+)(?:,\d+)? @@/);
111
+ if (chunkHeader) {
112
+ currentNewLineNum = parseInt(chunkHeader[1], 10);
113
+ continue;
114
+ }
115
+
116
+ if (line.startsWith('+') && !line.startsWith('+++')) {
117
+ addedLines.push(currentNewLineNum);
118
+ currentNewLineNum++;
119
+ } else if (line.startsWith('-')) {
120
+ // Deleted line — skip
121
+ } else {
122
+ currentNewLineNum++;
123
+ }
124
+ }
125
+ return addedLines;
126
+ }
127
+
128
+ async function run() {
129
+ try {
130
+ console.log(`AI review for PR #${PR_NUMBER} on ${GITHUB_REPOSITORY} (model: ${GEMINI_MODEL})`);
131
+
132
+ // 1. Get PR details for head SHA
133
+ const prDetailsOptions = {
134
+ hostname: 'api.github.com',
135
+ path: `/repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}`,
136
+ method: 'GET',
137
+ headers: {
138
+ 'Authorization': `Bearer ${GITHUB_TOKEN}`,
139
+ 'Accept': 'application/vnd.github.v3+json',
140
+ 'User-Agent': 'AI-PR-Reviewer-Action'
141
+ }
142
+ };
143
+ const { data: prDetailsRaw } = await makeRequest(prDetailsOptions);
144
+ const prDetails = JSON.parse(prDetailsRaw);
145
+ const commitSha = prDetails.head.sha;
146
+ console.log(`Head SHA: ${commitSha}`);
147
+
148
+ // 2. Fetch all modified files (paginated)
149
+ const files = await fetchAllPRFiles();
150
+
151
+ const filesToAnalyze = files.filter(file => {
152
+ if (IGNORED_FILES.some(ignored => file.filename.endsWith(ignored))) return false;
153
+ return SUPPORTED_EXTENSIONS.some(ext => file.filename.endsWith(ext)) && !!file.patch;
154
+ });
155
+
156
+ if (filesToAnalyze.length === 0) {
157
+ console.log("No analyzable code files found.");
158
+ return;
159
+ }
160
+
161
+ console.log(`${filesToAnalyze.length} files retained for analysis.`);
162
+
163
+ // 3. Prepare diff data for Gemini
164
+ const fileDiffData = filesToAnalyze.map(file => ({
165
+ filename: file.filename,
166
+ patch: file.patch,
167
+ validLinesForComments: getAddedLines(file.patch)
168
+ }));
169
+
170
+ // 4. Call Gemini API
171
+ const systemInstruction = `Tu es un expert en revue de code (ingénieur logiciel principal). Analyse les modifications d'une Pull Request et génère une revue technique constructive et précise.
172
+
173
+ Consignes :
174
+ 1. Génère des commentaires ciblés uniquement si nécessaire (bugs, failles de sécurité, optimisations majeures, mauvaise gestion d'erreurs, lisibilité).
175
+ 2. Chaque commentaire DOIT avoir un numéro de ligne ('line') présent dans 'validLinesForComments' du fichier correspondant. Ne commente jamais sur une ligne hors de cette liste.
176
+ 3. Rédige en français, de manière claire et technique. Propose du code de correction en bloc markdown si pertinent.
177
+ 4. Verdict global dans le champ 'verdict' :
178
+ - 'APPROVE' : Code excellent, prêt à fusionner (aucun commentaire requis).
179
+ - 'COMMENT' : Suggestions mineures, non bloquantes.
180
+ - 'REQUEST_CHANGES' : Bugs sérieux, failles de sécurité, ou problèmes de performance bloquants.
181
+ 5. Réponds en JSON strictement conforme à ce schéma :
182
+ {
183
+ "verdict": "APPROVE" | "COMMENT" | "REQUEST_CHANGES",
184
+ "summary": "Résumé global de la revue.",
185
+ "comments": [
186
+ {
187
+ "path": "chemin/du/fichier.js",
188
+ "line": 42,
189
+ "body": "Explication du problème ou suggestion."
190
+ }
191
+ ]
192
+ }`;
193
+
194
+ const promptUser = `Fichiers modifiés et diffs pour la PR #${PR_NUMBER} :
195
+ ${JSON.stringify(fileDiffData, null, 2)}`;
196
+
197
+ const geminiPayload = {
198
+ contents: [{ parts: [{ text: promptUser }] }],
199
+ systemInstruction: { parts: [{ text: systemInstruction }] },
200
+ generationConfig: { responseMimeType: "application/json" }
201
+ };
202
+
203
+ const geminiUrl = new URL(
204
+ `https://generativelanguage.googleapis.com/v1beta/models/${GEMINI_MODEL}:generateContent?key=${GEMINI_API_KEY}`
205
+ );
206
+
207
+ const geminiOptions = {
208
+ hostname: geminiUrl.hostname,
209
+ path: geminiUrl.pathname + geminiUrl.search,
210
+ method: 'POST',
211
+ headers: { 'Content-Type': 'application/json' }
212
+ };
213
+
214
+ console.log(`Sending to Gemini (${GEMINI_MODEL})...`);
215
+ const { data: geminiResponseRaw } = await makeRequest(geminiOptions, geminiPayload);
216
+ const geminiResponse = JSON.parse(geminiResponseRaw);
217
+
218
+ const responseText = geminiResponse.candidates[0].content.parts[0].text;
219
+ const reviewResult = JSON.parse(responseText);
220
+
221
+ console.log(`Verdict: ${reviewResult.verdict}`);
222
+ console.log(`Summary: ${reviewResult.summary}`);
223
+ console.log(`Comments: ${reviewResult.comments ? reviewResult.comments.length : 0}`);
224
+
225
+ // Filter comments to valid diff lines only
226
+ const validComments = [];
227
+ if (reviewResult.comments && Array.isArray(reviewResult.comments)) {
228
+ for (const comment of reviewResult.comments) {
229
+ const fileData = fileDiffData.find(f => f.filename === comment.path);
230
+ if (fileData && fileData.validLinesForComments.includes(Number(comment.line))) {
231
+ validComments.push({
232
+ path: comment.path,
233
+ line: Number(comment.line),
234
+ side: 'RIGHT',
235
+ body: comment.body
236
+ });
237
+ } else {
238
+ console.warn(`Skipped invalid comment: ${comment.path}:${comment.line} (not in diff)`);
239
+ }
240
+ }
241
+ }
242
+
243
+ // 5. Submit review to GitHub
244
+ const reviewPayload = {
245
+ commit_id: commitSha,
246
+ body: `### 🤖 Revue automatique par l'IA (${GEMINI_MODEL})
247
+
248
+ **Verdict :** ${reviewResult.verdict === 'APPROVE' ? '✅ Approuvé' : reviewResult.verdict === 'REQUEST_CHANGES' ? '❌ Changements demandés' : '💬 Commentaires'}
249
+
250
+ ${reviewResult.summary}
251
+
252
+ _Revue générée automatiquement._`,
253
+ event: reviewResult.verdict,
254
+ comments: validComments
255
+ };
256
+
257
+ const submitReviewOptions = {
258
+ hostname: 'api.github.com',
259
+ path: `/repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/reviews`,
260
+ method: 'POST',
261
+ headers: {
262
+ 'Authorization': `Bearer ${GITHUB_TOKEN}`,
263
+ 'Accept': 'application/vnd.github.v3+json',
264
+ 'User-Agent': 'AI-PR-Reviewer-Action',
265
+ 'Content-Type': 'application/json'
266
+ }
267
+ };
268
+
269
+ await makeRequest(submitReviewOptions, reviewPayload);
270
+ console.log("Review published successfully.");
271
+
272
+ } catch (error) {
273
+ console.error("AI review failed:", error);
274
+ process.exit(1);
275
+ }
276
+ }
277
+
278
+ run();
@@ -3,12 +3,19 @@ name: AI Pull Request Reviewer
3
3
  on:
4
4
  pull_request:
5
5
  types: [opened, synchronize]
6
+ paths-ignore:
7
+ - '**.md'
6
8
  workflow_dispatch:
7
9
  inputs:
8
10
  pr_number:
9
- description: 'Numéro de la Pull Request à analyser'
11
+ description: 'PR number to review'
10
12
  required: true
11
13
  type: string
14
+ gemini_model:
15
+ description: 'Gemini model to use'
16
+ required: false
17
+ default: 'gemini-2.5-flash'
18
+ type: string
12
19
 
13
20
  permissions:
14
21
  pull-requests: write
@@ -19,35 +26,26 @@ env:
19
26
 
20
27
  jobs:
21
28
  review:
22
- # Optionnel: pour limiter la revue aux PR créées par un utilisateur spécifique (ex: Jules)
23
- # Remplacer 'jules-username' par l'identifiant GitHub de Jules
24
- # if: github.event.pull_request.user.login == 'jules-username'
25
-
26
29
  runs-on: ubuntu-latest
27
30
 
28
31
  env:
29
32
  GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
33
+ GEMINI_MODEL: ${{ inputs.gemini_model || 'gemini-2.5-flash' }}
30
34
 
31
35
  steps:
32
36
  - name: Checkout Repository
33
- uses: actions/checkout@v6
37
+ uses: actions/checkout@v7
34
38
  with:
35
- fetch-depth: 0 # Nécessaire pour avoir l'historique et faire le merge
39
+ fetch-depth: 0
36
40
 
37
41
  - name: Setup Node.js
38
42
  uses: actions/setup-node@v6
39
43
  with:
40
- node-version: 18
41
-
42
- - name: Resolve bolt.md Merge Conflicts
43
- env:
44
- BASE_BRANCH: ${{ github.event.pull_request.base.ref }}
45
- HEAD_BRANCH: ${{ github.event.pull_request.head.ref }}
46
- run: node .github/scripts/resolve-bolt-conflict.js
44
+ node-version: 24
47
45
 
48
46
  - name: Run AI Reviewer
49
47
  if: env.GEMINI_API_KEY != ''
50
48
  env:
51
49
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
52
50
  GITHUB_PR_NUMBER: ${{ inputs.pr_number || github.event.pull_request.number }}
53
- run: node .github/scripts/ai-pr-reviewer.js
51
+ run: node .github/scripts/ai-pr-reviewer.cjs
@@ -27,7 +27,7 @@ jobs:
27
27
 
28
28
  steps:
29
29
  - name: Checkout
30
- uses: actions/checkout@v6
30
+ uses: actions/checkout@v7
31
31
 
32
32
  - name: Set up Python
33
33
  uses: actions/setup-python@v6
@@ -31,13 +31,13 @@ jobs:
31
31
  lint:
32
32
  runs-on: ubuntu-latest
33
33
  steps:
34
- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
34
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
35
35
  - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
36
36
  with:
37
37
  python-version: "3.14"
38
38
  cache: 'pip'
39
39
  - name: Cache pre-commit
40
- uses: actions/cache@v5
40
+ uses: actions/cache@v6
41
41
  with:
42
42
  path: ~/.cache/pre-commit
43
43
  key: ${{ runner.os }}-pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}
@@ -49,7 +49,7 @@ jobs:
49
49
  type-check:
50
50
  runs-on: ubuntu-latest
51
51
  steps:
52
- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
52
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
53
53
  - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
54
54
  id: setup-python
55
55
  with:
@@ -66,7 +66,7 @@ jobs:
66
66
  outputs:
67
67
  wheel-distribution: ${{ steps.wheel-distribution.outputs.path }}
68
68
  steps:
69
- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
69
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
70
70
  with: {fetch-depth: 0} # deep clone for setuptools-scm
71
71
  - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
72
72
  id: setup-python
@@ -93,7 +93,6 @@ jobs:
93
93
  'ffbb_data_client/data/endpoint_discovery.json',
94
94
  'ffbb_data_client/data/indexes.json',
95
95
  'ffbb_data_client/data/openapi.json',
96
- 'ffbb_data_client/data/openapi_full.json',
97
96
  }
98
97
  with zipfile.ZipFile(wheels[0]) as wheel:
99
98
  names = set(wheel.namelist())
@@ -133,14 +132,14 @@ jobs:
133
132
  - ubuntu-latest
134
133
  runs-on: ${{ matrix.platform }}
135
134
  steps:
136
- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
135
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
137
136
  - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
138
137
  id: setup-python
139
138
  with:
140
139
  python-version: ${{ matrix.python }}
141
140
  cache: 'pip'
142
141
  - name: Cache tox environments
143
- uses: actions/cache@v5
142
+ uses: actions/cache@v6
144
143
  with:
145
144
  path: .tox
146
145
  key: ${{ runner.os }}-tox-${{ matrix.python }}-${{ hashFiles('setup.cfg', 'tox.ini', 'pyproject.toml') }}
@@ -153,9 +152,14 @@ jobs:
153
152
  env:
154
153
  API_FFBB_APP_BEARER_TOKEN: ${{ secrets.API_FFBB_APP_BEARER_TOKEN }}
155
154
  MEILISEARCH_BEARER_TOKEN: ${{ secrets.MEILISEARCH_BEARER_TOKEN }}
156
- run: >-
157
- pipx run --python '${{ steps.setup-python.outputs.python-path }}'
158
- tox --installpkg '${{ needs.build.outputs.wheel-distribution }}'
155
+ MATRIX_PYTHON: ${{ matrix.python }}
156
+ run: |
157
+ toxenv="py${MATRIX_PYTHON//./}"
158
+ pipx run --python '${{ steps.setup-python.outputs.python-path }}' \
159
+ tox -e "$toxenv" --installpkg '${{ needs.build.outputs.wheel-distribution }}'
160
+ # Only run the tox environment matching this matrix runner's Python.
161
+ # Without `-e`, tox executes the full envlist (py310..py314) on a
162
+ # single-version runner and fails on the missing interpreters.
159
163
 
160
164
  # ── Coveralls: upload partial report (parallel mode) ─────────────────
161
165
  # coverallsapp/github-action@v2 uses the Universal Coverage Reporter
@@ -23,13 +23,13 @@ jobs:
23
23
 
24
24
  steps:
25
25
  - name: Checkout
26
- uses: actions/checkout@v6
26
+ uses: actions/checkout@v7
27
27
 
28
28
  - name: Initialize CodeQL
29
- uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4
29
+ uses: github/codeql-action/init@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4
30
30
  with:
31
31
  languages: python
32
32
  queries: security-extended,security-and-quality
33
33
 
34
34
  - name: Perform CodeQL Analysis
35
- uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4
35
+ uses: github/codeql-action/analyze@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4
@@ -23,7 +23,7 @@ jobs:
23
23
  runs-on: ubuntu-latest
24
24
  steps:
25
25
  - name: Checkout
26
- uses: actions/checkout@v6
26
+ uses: actions/checkout@v7
27
27
  with:
28
28
  fetch-depth: 0
29
29
 
@@ -0,0 +1,39 @@
1
+ name: Keep FFBB API Discovery Alive
2
+
3
+ on:
4
+ schedule:
5
+ # Safety net: GitHub may silently stop firing the main schedule.
6
+ # Check every 6h that the discovery workflow ran in the last 22h and
7
+ # trigger it manually if not, guaranteeing at least one run per day.
8
+ - cron: '0 */6 * * *'
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ actions: write
13
+
14
+ jobs:
15
+ ensure-daily-run:
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - name: Check last discovery run
19
+ id: check
20
+ env:
21
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
22
+ run: |
23
+ last_ts=$(gh api repos/${{ github.repository }}/actions/workflows/268964669/runs \
24
+ --jq '.workflow_runs[0].created_at' | tr -d '"' || echo "1970-01-01T00:00:00Z")
25
+ echo "last_run=$last_ts"
26
+ cutoff=$(date -u -d '-22 hours' +%Y-%m-%dT%H:%M:%SZ)
27
+ echo "cutoff=$cutoff"
28
+ if [[ "$last_ts" < "$cutoff" ]]; then
29
+ echo "STALE: last run $last_ts is older than 22h, triggering discovery now"
30
+ gh workflow run 268964669 --repo ${{ github.repository }} --ref master
31
+ echo "triggered=true" >> "$GITHUB_OUTPUT"
32
+ else
33
+ echo "OK: discovery ran at $last_ts, no action needed"
34
+ echo "triggered=false" >> "$GITHUB_OUTPUT"
35
+ fi
36
+
37
+ - name: Report outcome
38
+ run: |
39
+ echo "triggered=${{ steps.check.outputs.triggered }}"
@@ -4,6 +4,7 @@ on:
4
4
  push:
5
5
  tags:
6
6
  - 'v*'
7
+ workflow_dispatch:
7
8
 
8
9
  permissions:
9
10
  contents: read
@@ -22,7 +23,7 @@ jobs:
22
23
 
23
24
  steps:
24
25
  - name: Checkout
25
- uses: actions/checkout@v6
26
+ uses: actions/checkout@v7
26
27
  with:
27
28
  fetch-depth: 0 # Required for setuptools_scm to resolve version from tags
28
29
 
@@ -54,7 +55,6 @@ jobs:
54
55
  'ffbb_data_client/data/endpoint_discovery.json',
55
56
  'ffbb_data_client/data/indexes.json',
56
57
  'ffbb_data_client/data/openapi.json',
57
- 'ffbb_data_client/data/openapi_full.json',
58
58
  }
59
59
  with zipfile.ZipFile(wheels[0]) as wheel:
60
60
  names = set(wheel.namelist())
@@ -73,7 +73,7 @@ jobs:
73
73
  path: dist/
74
74
 
75
75
  - name: Generate artifact attestation
76
- uses: actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26 # v4
76
+ uses: actions/attest@a1948c3f048ba23858d222213b7c278aabede763 # v4
77
77
  with:
78
78
  subject-path: dist/*
79
79
 
@@ -110,7 +110,7 @@ jobs:
110
110
  path: dist/
111
111
 
112
112
  - name: Create GitHub Release
113
- uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3
113
+ uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3
114
114
  with:
115
115
  files: dist/*
116
116
  generate_release_notes: true
@@ -9,6 +9,7 @@ on:
9
9
  permissions:
10
10
  contents: write
11
11
  pull-requests: read
12
+ actions: write
12
13
 
13
14
  concurrency:
14
15
  group: release-after-discovery-${{ github.event.workflow_run.head_sha }}
@@ -55,7 +56,7 @@ jobs:
55
56
 
56
57
  - name: Checkout tested commit
57
58
  if: steps.pr.outputs.release == 'true'
58
- uses: actions/checkout@v6
59
+ uses: actions/checkout@v7
59
60
  with:
60
61
  ref: ${{ github.event.workflow_run.head_sha }}
61
62
  fetch-depth: 0
@@ -89,3 +90,10 @@ jobs:
89
90
  git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
90
91
  git tag -a "$NEXT_TAG" -m "Release $NEXT_TAG after FFBB API discovery PR #$PR_NUMBER"
91
92
  git push origin "$NEXT_TAG"
93
+
94
+ - name: Dispatch publish workflow
95
+ if: steps.pr.outputs.release == 'true'
96
+ env:
97
+ NEXT_TAG: ${{ steps.version.outputs.tag }}
98
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
99
+ run: gh workflow run publish.yml --ref "$NEXT_TAG"
@@ -23,7 +23,7 @@ jobs:
23
23
 
24
24
  steps:
25
25
  - name: Checkout
26
- uses: actions/checkout@v6
26
+ uses: actions/checkout@v7
27
27
 
28
28
  - name: Set up Python
29
29
  uses: actions/setup-python@v6
@@ -81,4 +81,4 @@ jobs:
81
81
  src/ffbb_data_client/data/endpoint_discovery.json
82
82
  src/ffbb_data_client/data/indexes.json
83
83
  src/ffbb_data_client/data/openapi.json
84
- src/ffbb_data_client/data/openapi_full.json
84
+ README.md
@@ -62,3 +62,6 @@ data/type_discovery_raw.json
62
62
  prof/
63
63
  .agent/
64
64
  graphify-out/
65
+
66
+ # Local Agent Customizations
67
+ .agents/
@@ -9,7 +9,7 @@ repos:
9
9
  hooks:
10
10
  - id: trailing-whitespace
11
11
  - id: check-added-large-files
12
- exclude: ^src/ffbb_data_client/data/(openapi|openapi_full)\.json$
12
+ exclude: ^src/ffbb_data_client/data/openapi\.json$
13
13
  - id: check-ast
14
14
  - id: check-json
15
15
  - id: check-merge-conflict