ffbb-data-client 2.0.1__tar.gz → 2.1.0__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 (348) hide show
  1. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/.coveragerc +5 -5
  2. ffbb_data_client-2.1.0/.github/dependabot.yml +19 -0
  3. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/.github/scripts/check_wrapper_parity.py +16 -5
  4. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/.github/workflows/check_wrapper_parity.yml +2 -2
  5. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/.github/workflows/ci.yml +7 -1
  6. ffbb_data_client-2.1.0/.github/workflows/codeql.yml +33 -0
  7. ffbb_data_client-2.1.0/.github/workflows/deploy-pages.yml +55 -0
  8. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/.github/workflows/publish.yml +20 -8
  9. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/.github/workflows/release-after-discovery-merge.yml +1 -1
  10. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/.github/workflows/update-ffbb-api-discovery.yml +4 -4
  11. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/.pre-commit-config.yaml +10 -0
  12. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/CHANGELOG.md +30 -0
  13. {ffbb_data_client-2.0.1/src/ffbb_data_client.egg-info → ffbb_data_client-2.1.0}/PKG-INFO +29 -22
  14. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/README.md +25 -18
  15. ffbb_data_client-2.1.0/SECURITY.md +15 -0
  16. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/docs/conf.py +1 -4
  17. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/docs/requirements.txt +2 -2
  18. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/examples/README.md +1 -1
  19. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/setup.cfg +3 -3
  20. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/__init__.py +0 -18
  21. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/clients/api_ffbb_app_client.py +551 -636
  22. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/clients/ffbb_data_client.py +78 -2
  23. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/data/__init__.py +6 -3
  24. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/commune.py +2 -2
  25. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/get_rencontre_response.py +1 -1
  26. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/query_fields_manager.py +1 -1
  27. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/team_ranking.py +1 -0
  28. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/utils/cache_manager.py +10 -28
  29. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/utils/retry_utils.py +6 -3
  30. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0/src/ffbb_data_client.egg-info}/PKG-INFO +29 -22
  31. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client.egg-info/SOURCES.txt +3 -3
  32. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client.egg-info/requires.txt +1 -1
  33. ffbb_data_client-2.1.0/src/ffbb_data_client.egg-info/top_level.txt +1 -0
  34. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/integration/test_502_enhanced_integration.py +2 -2
  35. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/integration/test_506_raw_json_model_conversion.py +37 -9
  36. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/test_201_unit_tests_core.py +57 -15
  37. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/test_207_coverage_clients_extended.py +10 -3
  38. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/test_208_new_methods_coverage.py +40 -10
  39. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/test_210_targeted_clients_helpers_coverage.py +12 -3
  40. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/utils/test_303_cache_manager.py +0 -7
  41. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/utils/test_307_coverage_gaps_utils.py +0 -24
  42. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tox.ini +14 -0
  43. ffbb_data_client-2.0.1/.github/workflows/deploy-pages.yml +0 -73
  44. ffbb_data_client-2.0.1/diagnose-ci-issues.sh +0 -243
  45. ffbb_data_client-2.0.1/scratch.py +0 -21
  46. ffbb_data_client-2.0.1/src/ffbb_api_client_v3/__init__.py +0 -25
  47. ffbb_data_client-2.0.1/src/ffbb_data_client.egg-info/top_level.txt +0 -2
  48. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/.gitignore +0 -0
  49. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/.isort.cfg +0 -0
  50. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/.jules/bolt.md +0 -0
  51. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/.readthedocs.yml +0 -0
  52. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/AUTHORS.rst +0 -0
  53. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/CONTRIBUTING.rst +0 -0
  54. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/LICENSE.txt +0 -0
  55. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/LOCAL_CI_GUIDE.md +0 -0
  56. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/RELEASE_NOTES.md +0 -0
  57. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/benchmark_search_organisme.py +0 -0
  58. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/data/api.ffbb.app.json +0 -0
  59. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/data/api_update_summary.md +0 -0
  60. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/data/collections.json +0 -0
  61. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/data/endpoint_discovery.json +0 -0
  62. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/data/indexes.json +0 -0
  63. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/data/meilisearch-prod.ffbb.app.json +0 -0
  64. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/data/openapi.json +0 -0
  65. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/data/openapi_full.json +0 -0
  66. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/data/type_discovery_corrections.json +0 -0
  67. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/docs/Makefile +0 -0
  68. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/docs/_static/.gitignore +0 -0
  69. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/docs/architecture.rst +0 -0
  70. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/docs/authors.rst +0 -0
  71. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/docs/changelog.rst +0 -0
  72. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/docs/contributing.rst +0 -0
  73. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/docs/examples.rst +0 -0
  74. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/docs/index.rst +0 -0
  75. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/docs/license.rst +0 -0
  76. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/docs/migration.rst +0 -0
  77. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/docs/readme.rst +0 -0
  78. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/docs/test_strategy.md +0 -0
  79. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/docs/testing_conventions.md +0 -0
  80. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/examples/complete_usage_example.py +0 -0
  81. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/examples/quick_start.py +0 -0
  82. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/examples/team_ranking_analysis.py +0 -0
  83. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/pyproject.toml +0 -0
  84. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/pytest.ini +0 -0
  85. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/run-ci-locally.sh +0 -0
  86. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/scripts/discover_endpoints.py +0 -0
  87. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/scripts/discover_types.py +0 -0
  88. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/setup.py +0 -0
  89. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/clients/__init__.py +0 -0
  90. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/clients/meilisearch_client.py +0 -0
  91. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/clients/meilisearch_ffbb_client.py +0 -0
  92. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/config.py +0 -0
  93. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/data/collections.json +0 -0
  94. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/data/endpoint_discovery.json +0 -0
  95. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/data/indexes.json +0 -0
  96. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/data/openapi.json +0 -0
  97. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/data/openapi_full.json +0 -0
  98. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/helpers/__init__.py +0 -0
  99. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/helpers/http_requests_helper.py +0 -0
  100. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/helpers/http_requests_utils.py +0 -0
  101. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/helpers/meilisearch_client_extension.py +0 -0
  102. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/helpers/multi_search_query_helper.py +0 -0
  103. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/__init__.py +0 -0
  104. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/affiche.py +0 -0
  105. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/cartographie.py +0 -0
  106. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/categorie.py +0 -0
  107. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/categorie_type.py +0 -0
  108. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/clock.py +0 -0
  109. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/club_contacts.py +0 -0
  110. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/code.py +0 -0
  111. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competition_fields.py +0 -0
  112. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competition_id.py +0 -0
  113. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competition_id_categorie.py +0 -0
  114. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competition_id_sexe.py +0 -0
  115. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competition_id_type_competition.py +0 -0
  116. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competition_id_type_competition_generique.py +0 -0
  117. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competition_origine.py +0 -0
  118. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competition_origine_categorie.py +0 -0
  119. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competition_origine_type_competition.py +0 -0
  120. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competition_origine_type_competition_generique.py +0 -0
  121. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competition_type.py +0 -0
  122. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competitions_facet_distribution.py +0 -0
  123. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competitions_facet_stats.py +0 -0
  124. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competitions_hit.py +0 -0
  125. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competitions_multi_search_query.py +0 -0
  126. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/competitions_query.py +0 -0
  127. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/configuration_models.py +0 -0
  128. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/contact_info.py +0 -0
  129. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/content_multi_search_query.py +0 -0
  130. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/coordonnees.py +0 -0
  131. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/coordonnees_type.py +0 -0
  132. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/document_flyer.py +0 -0
  133. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/document_flyer_type.py +0 -0
  134. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/engagement_contacts.py +0 -0
  135. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/engagements_facet_distribution.py +0 -0
  136. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/engagements_facet_stats.py +0 -0
  137. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/engagements_hit.py +0 -0
  138. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/engagements_multi_search_query.py +0 -0
  139. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/etat.py +0 -0
  140. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/external_competition_id.py +0 -0
  141. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/external_id.py +0 -0
  142. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/facet_distribution.py +0 -0
  143. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/facet_stats.py +0 -0
  144. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/field_set.py +0 -0
  145. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/folder.py +0 -0
  146. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/formation_session.py +0 -0
  147. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/formations_facet_distribution.py +0 -0
  148. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/formations_facet_stats.py +0 -0
  149. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/formations_hit.py +0 -0
  150. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/formations_multi_search_query.py +0 -0
  151. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/game_stats_model.py +0 -0
  152. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/game_stats_models.py +0 -0
  153. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/generic_search.py +0 -0
  154. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/geo.py +0 -0
  155. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/geo_sort_order.py +0 -0
  156. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/get_commune_response.py +0 -0
  157. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/get_competition_response.py +0 -0
  158. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/get_configuration_response.py +0 -0
  159. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/get_engagement_response.py +0 -0
  160. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/get_entraineur_response.py +0 -0
  161. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/get_formation_response.py +0 -0
  162. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/get_officiel_response.py +0 -0
  163. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/get_organisme_response.py +0 -0
  164. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/get_poule_response.py +0 -0
  165. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/get_pratique_response.py +0 -0
  166. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/get_saisons_response.py +0 -0
  167. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/get_salle_response.py +0 -0
  168. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/get_terrain_response.py +0 -0
  169. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/get_tournoi_response.py +0 -0
  170. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/gradient_color.py +0 -0
  171. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/hit.py +0 -0
  172. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/id_engagement_equipe.py +0 -0
  173. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/id_organisme_equipe.py +0 -0
  174. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/id_organisme_equipe1_logo.py +0 -0
  175. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/id_poule.py +0 -0
  176. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/jour.py +0 -0
  177. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/label.py +0 -0
  178. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/labellisation.py +0 -0
  179. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/live.py +0 -0
  180. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/lives.py +0 -0
  181. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/logo.py +0 -0
  182. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/multi_search_queries.py +0 -0
  183. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/multi_search_query.py +0 -0
  184. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/multi_search_result_competitions.py +0 -0
  185. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/multi_search_result_engagements.py +0 -0
  186. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/multi_search_result_formations.py +0 -0
  187. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/multi_search_result_organismes.py +0 -0
  188. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/multi_search_result_pratiques.py +0 -0
  189. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/multi_search_result_rencontres.py +0 -0
  190. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/multi_search_result_salles.py +0 -0
  191. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/multi_search_result_terrains.py +0 -0
  192. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/multi_search_result_tournois.py +0 -0
  193. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/multi_search_results.py +0 -0
  194. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/multi_search_results_class.py +0 -0
  195. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/nature_sol.py +0 -0
  196. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/niveau.py +0 -0
  197. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/niveau_class.py +0 -0
  198. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/niveau_extractor.py +0 -0
  199. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/niveau_info.py +0 -0
  200. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/niveau_models.py +0 -0
  201. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/niveau_type.py +0 -0
  202. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/objectif.py +0 -0
  203. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/organisateur.py +0 -0
  204. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/organisateur_type.py +0 -0
  205. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/organisme_fields.py +0 -0
  206. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/organisme_id_pere.py +0 -0
  207. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/organismes_facet_distribution.py +0 -0
  208. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/organismes_facet_stats.py +0 -0
  209. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/organismes_hit.py +0 -0
  210. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/organismes_multi_search_query.py +0 -0
  211. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/organismes_query.py +0 -0
  212. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/phase_code.py +0 -0
  213. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/poule.py +0 -0
  214. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/poule_fields.py +0 -0
  215. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/poule_rencontre_item_model.py +0 -0
  216. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/poules_models.py +0 -0
  217. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/poules_query.py +0 -0
  218. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/pratique.py +0 -0
  219. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/pratiques_facet_distribution.py +0 -0
  220. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/pratiques_facet_stats.py +0 -0
  221. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/pratiques_hit.py +0 -0
  222. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/pratiques_hit_type.py +0 -0
  223. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/pratiques_multi_search_query.py +0 -0
  224. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/pratiques_type_class.py +0 -0
  225. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/publication_internet.py +0 -0
  226. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/purple_logo.py +0 -0
  227. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/ranking_engagement.py +0 -0
  228. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/rankings_models.py +0 -0
  229. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/rencontres_engagement.py +0 -0
  230. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/rencontres_facet_distribution.py +0 -0
  231. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/rencontres_facet_stats.py +0 -0
  232. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/rencontres_hit.py +0 -0
  233. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/rencontres_multi_search_query.py +0 -0
  234. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/saison.py +0 -0
  235. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/saison_fields.py +0 -0
  236. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/saisons_models.py +0 -0
  237. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/saisons_query.py +0 -0
  238. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/salle.py +0 -0
  239. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/salles_facet_distribution.py +0 -0
  240. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/salles_facet_stats.py +0 -0
  241. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/salles_hit.py +0 -0
  242. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/salles_multi_search_query.py +0 -0
  243. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/sexe.py +0 -0
  244. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/sexe_class.py +0 -0
  245. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/source.py +0 -0
  246. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/status.py +0 -0
  247. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/team_engagement.py +0 -0
  248. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/terrains_categorie_championnat_3x3_libelle.py +0 -0
  249. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/terrains_facet_distribution.py +0 -0
  250. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/terrains_facet_stats.py +0 -0
  251. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/terrains_hit.py +0 -0
  252. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/terrains_multi_search_query.py +0 -0
  253. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/terrains_name.py +0 -0
  254. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/terrains_sexe_enum.py +0 -0
  255. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/terrains_storage.py +0 -0
  256. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/tournoi_type_class.py +0 -0
  257. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/tournoi_type_enum.py +0 -0
  258. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/tournoi_types_3x3.py +0 -0
  259. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/tournoi_types_3x3_libelle.py +0 -0
  260. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/tournoi_types_3x3_libelle_enum.py +0 -0
  261. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/tournois_facet_distribution.py +0 -0
  262. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/tournois_facet_stats.py +0 -0
  263. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/tournois_hit.py +0 -0
  264. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/tournois_hit_type.py +0 -0
  265. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/tournois_libelle.py +0 -0
  266. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/tournois_multi_search_query.py +0 -0
  267. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/type_association.py +0 -0
  268. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/type_association_libelle.py +0 -0
  269. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/type_class.py +0 -0
  270. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/type_competition.py +0 -0
  271. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/type_competition_generique.py +0 -0
  272. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/type_enum.py +0 -0
  273. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/models/type_league.py +0 -0
  274. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/py.typed +0 -0
  275. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/utils/__init__.py +0 -0
  276. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/utils/converter_utils.py +0 -0
  277. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/utils/input_validation.py +0 -0
  278. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/utils/secure_logging.py +0 -0
  279. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client/utils/token_manager.py +0 -0
  280. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client.egg-info/dependency_links.txt +0 -0
  281. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/src/ffbb_data_client.egg-info/not-zip-safe +0 -0
  282. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/conftest.py +0 -0
  283. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/e2e/__init__.py +0 -0
  284. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/e2e/conftest.py +0 -0
  285. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/integration/__init__.py +0 -0
  286. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/integration/conftest.py +0 -0
  287. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/integration/test_500_user_journey.py +0 -0
  288. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/integration/test_501_user_journey_v3.py +0 -0
  289. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/integration/test_503_secure_logging.py +0 -0
  290. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/integration/test_504_input_validation.py +0 -0
  291. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/integration/test_505_retry_timeout.py +0 -0
  292. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/__init__.py +0 -0
  293. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/__init__.py +0 -0
  294. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/test_200_api_ffbb_app_client.py +0 -0
  295. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/test_202_meilisearch_client.py +0 -0
  296. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/test_203_meilisearch_client_extension.py +0 -0
  297. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/test_204_ffbb_data_client.py +0 -0
  298. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/test_205_meilisearch_ffbb_client.py +0 -0
  299. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/test_206_coverage_gaps_clients.py +0 -0
  300. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/test_209_automatic_token_resolution.py +0 -0
  301. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/test_async_methods.py +0 -0
  302. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/test_meilisearch_async.py +0 -0
  303. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/test_v2_backport_search.py +0 -0
  304. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/clients/test_v3_new_features.py +0 -0
  305. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/conftest.py +0 -0
  306. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/helpers/__init__.py +0 -0
  307. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/helpers/test_400_http_helpers.py +0 -0
  308. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/helpers/test_meilisearch_client_extension_recursive_pagination.py +0 -0
  309. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/__init__.py +0 -0
  310. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_100_competition_id_categorie.py +0 -0
  311. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_101_competition_id_sexe.py +0 -0
  312. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_102_competition_id_type_competition.py +0 -0
  313. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_103_competition_id_type_competition_generique.py +0 -0
  314. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_104_competition_origine_categorie.py +0 -0
  315. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_105_competition_origine_type_competition_generique.py +0 -0
  316. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_106_competition_origine.py +0 -0
  317. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_107_id_engagement_equipe.py +0 -0
  318. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_108_id_organisme_equipe.py +0 -0
  319. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_109_id_organisme_equipe1_logo.py +0 -0
  320. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_110_labellisation.py +0 -0
  321. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_111_niveau_class.py +0 -0
  322. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_112_purple_logo.py +0 -0
  323. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_113_salle.py +0 -0
  324. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_114_tournoi_type_class.py +0 -0
  325. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_115_type_association_libelle.py +0 -0
  326. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_116_type_competition_generique.py +0 -0
  327. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_117_organisateur.py +0 -0
  328. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_118_competition_id.py +0 -0
  329. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_119_terrains_inner_models.py +0 -0
  330. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_120_pratiques_inner_models.py +0 -0
  331. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_121_to_dict_round_trip.py +0 -0
  332. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_122_coverage_gaps.py +0 -0
  333. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_123_missing_coverage.py +0 -0
  334. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_123_v2_backport.py +0 -0
  335. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_124_targeted_coverage_gains.py +0 -0
  336. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/models/test_dx_aliases.py +0 -0
  337. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/utils/__init__.py +0 -0
  338. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/utils/test_300_secure_logging.py +0 -0
  339. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/utils/test_301_input_validation.py +0 -0
  340. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/utils/test_302_retry_utils.py +0 -0
  341. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/utils/test_304_config.py +0 -0
  342. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/utils/test_305_token_manager.py +0 -0
  343. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/tests/unit/utils/test_306_converter_utils.py +0 -0
  344. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/website/assets/logo.webp +0 -0
  345. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/website/css/style.css +0 -0
  346. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/website/index.html +0 -0
  347. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/website/robots.txt +0 -0
  348. {ffbb_data_client-2.0.1 → ffbb_data_client-2.1.0}/website/sitemap.xml +0 -0
@@ -3,7 +3,7 @@
3
3
 
4
4
  [run]
5
5
  branch = True
6
- source = ffbb_api_client_v3
6
+ source = ffbb_data_client
7
7
  parallel = True
8
8
  # CRITICAL for Coveralls: ensures paths are relative to the git root
9
9
  # Without this, Coveralls reports 0% or fails to map files
@@ -21,9 +21,9 @@ omit =
21
21
  # Maps coverage paths from different environments (tox, Docker, etc.)
22
22
  # to the canonical source root. Order matters: first match wins.
23
23
  source =
24
- src/ffbb_api_client_v3
25
- */ffbb_api_client_v3
26
- */src/ffbb_api_client_v3
24
+ src/ffbb_data_client
25
+ */ffbb_data_client
26
+ */src/ffbb_data_client
27
27
 
28
28
  [report]
29
29
  # Minimum coverage threshold — CI will fail below this
@@ -62,7 +62,7 @@ exclude_lines =
62
62
 
63
63
  [html]
64
64
  directory = htmlcov
65
- title = FFBBApiClientV3 Coverage
65
+ title = FFBB Data Client Coverage
66
66
 
67
67
  [xml]
68
68
  # Required by coverallsapp/github-action@v2 Universal Coverage Reporter
@@ -0,0 +1,19 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ open-pull-requests-limit: 5
8
+
9
+ - package-ecosystem: "pip"
10
+ directory: "/"
11
+ schedule:
12
+ interval: "weekly"
13
+ open-pull-requests-limit: 5
14
+
15
+ - package-ecosystem: "pip"
16
+ directory: "/docs"
17
+ schedule:
18
+ interval: "weekly"
19
+ open-pull-requests-limit: 5
@@ -74,11 +74,24 @@ def main() -> int:
74
74
  return 0
75
75
 
76
76
  # Build markdown report
77
+ missing_detail = " ".join(
78
+ [
79
+ "The following methods exist in inner clients but are **not exposed**",
80
+ "in `FFBBDataClient`:",
81
+ ]
82
+ )
83
+ fix_detail = " ".join(
84
+ [
85
+ "Add the missing method(s) to",
86
+ "`src/ffbb_data_client/clients/ffbb_data_client.py`",
87
+ "so they delegate to the appropriate inner client.",
88
+ ]
89
+ )
90
+
77
91
  lines = [
78
92
  "## ⚠️ Wrapper parity check failed",
79
93
  "",
80
- "The following methods exist in inner clients but are **not exposed** "
81
- "in `FFBBDataClient`:",
94
+ missing_detail,
82
95
  "",
83
96
  "| Method | Source client |",
84
97
  "|---|---|",
@@ -94,9 +107,7 @@ def main() -> int:
94
107
  lines += [
95
108
  "",
96
109
  "### How to fix",
97
- "Add the missing method(s) to "
98
- "`src/ffbb_data_client/clients/ffbb_data_client.py` "
99
- "so they delegate to the appropriate inner client.",
110
+ fix_detail,
100
111
  ]
101
112
 
102
113
  report = "\n".join(lines)
@@ -23,10 +23,10 @@ jobs:
23
23
 
24
24
  steps:
25
25
  - name: Checkout
26
- uses: actions/checkout@v6
26
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
27
27
 
28
28
  - name: Set up Python
29
- uses: actions/setup-python@v6
29
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
30
30
  with:
31
31
  python-version: '3.11'
32
32
 
@@ -37,6 +37,10 @@ jobs:
37
37
  with: {python-version: "3.14"}
38
38
  - name: Run static analysis and format checkers
39
39
  run: pipx run pre-commit run --all-files --show-diff-on-failure
40
+ - name: Run type checks
41
+ run: >-
42
+ pipx run --python '${{ steps.setup-python.outputs.python-path }}'
43
+ tox -e type
40
44
  - name: Build package distribution files
41
45
  run: >-
42
46
  pipx run --python '${{ steps.setup-python.outputs.python-path }}'
@@ -74,7 +78,7 @@ jobs:
74
78
  tox -e validate
75
79
  - name: Record the path of wheel distribution
76
80
  id: wheel-distribution
77
- run: echo "path=$(ls dist/*.whl)" >> $GITHUB_OUTPUT
81
+ run: echo "path=$(ls dist/*.whl)" >> "$GITHUB_OUTPUT"
78
82
  - name: Store the distribution files for use in other stages
79
83
  uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
80
84
  with:
@@ -118,6 +122,7 @@ jobs:
118
122
  # `parallel: true` signals that more reports are coming from other jobs.
119
123
  # `flag-name` labels this specific combination for per-flag drill-down on Coveralls.
120
124
  - name: Upload coverage to Coveralls (parallel)
125
+ if: ${{ github.ref_type != 'tag' }}
121
126
  uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6
122
127
  with:
123
128
  file: coverage.lcov
@@ -136,6 +141,7 @@ jobs:
136
141
  if: ${{ always() }}
137
142
  steps:
138
143
  - name: Finalize coverage report on Coveralls
144
+ if: ${{ github.ref_type != 'tag' }}
139
145
  uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6
140
146
  with:
141
147
  github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,33 @@
1
+ name: CodeQL
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ pull_request:
7
+ schedule:
8
+ - cron: '31 2 * * 1'
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ analyze:
15
+ name: Analyze Python
16
+ runs-on: ubuntu-latest
17
+ permissions:
18
+ actions: read
19
+ contents: read
20
+ security-events: write
21
+
22
+ steps:
23
+ - name: Checkout
24
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
25
+
26
+ - name: Initialize CodeQL
27
+ uses: github/codeql-action/init@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4
28
+ with:
29
+ languages: python
30
+ queries: security-extended,security-and-quality
31
+
32
+ - name: Perform CodeQL Analysis
33
+ uses: github/codeql-action/analyze@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4
@@ -0,0 +1,55 @@
1
+ name: Deploy landing page to Pages
2
+
3
+ on:
4
+ push:
5
+ branches: ["master"]
6
+ # Permet de lancer manuellement depuis l'onglet Actions
7
+ workflow_dispatch:
8
+
9
+ # Permissions par défaut minimales
10
+ permissions:
11
+ contents: read
12
+
13
+ # Permet d'annuler les déploiements obsolètes
14
+ concurrency:
15
+ group: "pages"
16
+ cancel-in-progress: true
17
+
18
+ jobs:
19
+ build:
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - name: Checkout
23
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
24
+ with:
25
+ fetch-depth: 0
26
+
27
+ - name: Inject Dynamic Version for SEO
28
+ run: |
29
+ set -euo pipefail
30
+ LATEST_TAG=$(git describe --tags --abbrev=0)
31
+ VERSION=${LATEST_TAG#v}
32
+ echo "Dernière version trouvée : $VERSION. Injection dans le JSON-LD Schema..."
33
+ sed -i "s/\"softwareVersion\": \"[^\"]*\"/\"softwareVersion\": \"$VERSION\"/g" website/index.html
34
+
35
+ - name: Add Pages marker
36
+ run: touch website/.nojekyll
37
+
38
+ - name: Upload Pages artifact
39
+ uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5
40
+ with:
41
+ path: website
42
+
43
+ deploy:
44
+ needs: build
45
+ runs-on: ubuntu-latest
46
+ permissions:
47
+ pages: write
48
+ id-token: write
49
+ environment:
50
+ name: github-pages
51
+ url: ${{ steps.deployment.outputs.page_url }}
52
+ steps:
53
+ - name: Deploy to GitHub Pages
54
+ id: deployment
55
+ uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5
@@ -5,19 +5,26 @@ on:
5
5
  tags:
6
6
  - 'v*'
7
7
 
8
+ permissions:
9
+ contents: read
10
+
8
11
  jobs:
9
12
  build:
10
13
  name: Build distribution
11
14
  runs-on: ubuntu-latest
15
+ permissions:
16
+ attestations: write
17
+ contents: read
18
+ id-token: write
12
19
 
13
20
  steps:
14
21
  - name: Checkout
15
- uses: actions/checkout@v6
22
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
16
23
  with:
17
24
  fetch-depth: 0 # Required for setuptools_scm to resolve version from tags
18
25
 
19
26
  - name: Set up Python
20
- uses: actions/setup-python@v6
27
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
21
28
  with:
22
29
  python-version: '3.11'
23
30
 
@@ -56,11 +63,16 @@ jobs:
56
63
  PY
57
64
 
58
65
  - name: Upload distribution artifacts
59
- uses: actions/upload-artifact@v7
66
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
60
67
  with:
61
68
  name: dist
62
69
  path: dist/
63
70
 
71
+ - name: Generate artifact attestation
72
+ uses: actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26 # v4
73
+ with:
74
+ subject-path: dist/*
75
+
64
76
  publish-pypi:
65
77
  name: Publish to PyPI
66
78
  needs: build
@@ -71,13 +83,13 @@ jobs:
71
83
 
72
84
  steps:
73
85
  - name: Download distribution artifacts
74
- uses: actions/download-artifact@v8
86
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
75
87
  with:
76
88
  name: dist
77
89
  path: dist/
78
90
 
79
91
  - name: Publish to PyPI
80
- uses: pypa/gh-action-pypi-publish@release/v1
92
+ uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1
81
93
 
82
94
  publish-github-release:
83
95
  name: Create GitHub Release
@@ -88,13 +100,13 @@ jobs:
88
100
 
89
101
  steps:
90
102
  - name: Download distribution artifacts
91
- uses: actions/download-artifact@v8
103
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
92
104
  with:
93
105
  name: dist
94
106
  path: dist/
95
107
 
96
108
  - name: Create GitHub Release
97
- uses: softprops/action-gh-release@v3
109
+ uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3
98
110
  with:
99
111
  files: dist/*
100
112
  generate_release_notes: true
@@ -106,7 +118,7 @@ jobs:
106
118
 
107
119
  steps:
108
120
  - name: Dispatch bump event to FFBB-MCP-Server
109
- uses: peter-evans/repository-dispatch@v4
121
+ uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v4
110
122
  with:
111
123
  token: ${{ secrets.MCP_SERVER_PAT }}
112
124
  repository: nickdesi/FFBB-MCP-Server
@@ -51,7 +51,7 @@ jobs:
51
51
 
52
52
  - name: Checkout tested commit
53
53
  if: steps.pr.outputs.release == 'true'
54
- uses: actions/checkout@v6
54
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
55
55
  with:
56
56
  ref: ${{ github.event.workflow_run.head_sha }}
57
57
  fetch-depth: 0
@@ -19,10 +19,10 @@ jobs:
19
19
 
20
20
  steps:
21
21
  - name: Checkout
22
- uses: actions/checkout@v6
22
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
23
23
 
24
24
  - name: Set up Python
25
- uses: actions/setup-python@v6
25
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
26
26
  with:
27
27
  python-version: '3.11'
28
28
 
@@ -44,7 +44,7 @@ jobs:
44
44
 
45
45
  - name: Upload discovery summary
46
46
  if: always()
47
- uses: actions/upload-artifact@v7
47
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
48
48
  with:
49
49
  name: ffbb-api-update-summary
50
50
  path: data/api_update_summary.md
@@ -53,7 +53,7 @@ jobs:
53
53
 
54
54
  - name: Create pull request
55
55
  if: steps.changes.outputs.changed == 'true'
56
- uses: peter-evans/create-pull-request@v8
56
+ uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8
57
57
  with:
58
58
  token: ${{ secrets.GITHUB_TOKEN }}
59
59
  branch: chore/update-ffbb-api-discovery
@@ -61,6 +61,16 @@ repos:
61
61
  hooks:
62
62
  - id: flake8
63
63
 
64
+ # Type-checking on push (mypy + pyright via tox)
65
+ - repo: local
66
+ hooks:
67
+ - id: type-check
68
+ name: type-check (mypy + pyright)
69
+ entry: bash -c 'PATH="$PWD/.venv/bin:$PATH" tox -e type'
70
+ language: system
71
+ pass_filenames: false
72
+ stages: [pre-push]
73
+
64
74
  # Check for misspells in documentation files:
65
75
  # - repo: https://github.com/codespell-project/codespell
66
76
  # rev: v2.2.5
@@ -5,6 +5,36 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.1.0] - 2026-05-17
9
+
10
+ ### Changed
11
+ - **BREAKING (internal)**: Sync methods now delegate to async counterparts via `_run_async()` helper, eliminating ~604 lines of duplication
12
+ - Sync and async share a single source of truth — async methods are canonical
13
+ - `ThreadPoolExecutor` fallback handles nested event loops gracefully
14
+
15
+ ### Added
16
+ - **NEW**: Pre-push hook for type-check (mypy + pyright) — catches type errors before push
17
+ - **NEW**: CodeQL security scanning in CI
18
+ - **NEW**: Dependabot for automated dependency updates (GitHub Actions + pip)
19
+ - **NEW**: `SECURITY.md` security policy
20
+
21
+ ### Fixed
22
+ - SQLite cache concurrency: sync uses `http_cache.db`, async uses `http_cache_async.db` (prevents `database is locked`)
23
+ - CI type check failures with proper generic typing for `_run_async(coro: Awaitable[T]) -> T`
24
+ - `FFBBDataClient` wrapper parity — added 8 missing async method delegations
25
+
26
+ ### Removed
27
+ - Dead `invalidate_pattern()` from `CacheManager` and related tests
28
+ - `ffbb_api_client_v3` shim, dead scripts, and backward-compat alias
29
+
30
+ ### Security
31
+ - CI supply chain hardened with pinned action versions and trusted publishers
32
+
33
+ ## [2.0.2] - 2026-05-17
34
+
35
+ ### Changed
36
+ - README version updated to v2.0.2
37
+
8
38
  ## [1.6.1] - 2026-04-29
9
39
 
10
40
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ffbb-data-client
3
- Version: 2.0.1
3
+ Version: 2.1.0
4
4
  Summary: FFBB Data Client — SDK Python asynchrone pour les Statistiques de Basket France. Type-safe Pydantic models, async/sync, Meilisearch.
5
5
  Home-page: https://github.com/nickdesi/ffbb-data-client
6
6
  Author: nickdesi
@@ -9,9 +9,9 @@ License: Apache-2.0
9
9
  Project-URL: Homepage, https://nickdesi.github.io/ffbb-data-client/
10
10
  Project-URL: Documentation, https://nickdesi.github.io/ffbb-data-client/
11
11
  Project-URL: Source, https://github.com/nickdesi/ffbb-data-client
12
- Project-URL: Changelog, https://github.com/nickdesi/ffbb-data-client/blob/main/CHANGELOG.md
12
+ Project-URL: Changelog, https://github.com/nickdesi/ffbb-data-client/blob/master/CHANGELOG.md
13
13
  Project-URL: Tracker, https://github.com/nickdesi/ffbb-data-client/issues
14
- Project-URL: Release Notes, https://github.com/nickdesi/ffbb-data-client/blob/main/RELEASE_NOTES.md
14
+ Project-URL: Release Notes, https://github.com/nickdesi/ffbb-data-client/blob/master/RELEASE_NOTES.md
15
15
  Keywords: ffbb,basketball,statistiques,france,api,python-sdk,pydantic,asynchrone,meilisearch,basket-france
16
16
  Platform: any
17
17
  Classifier: Development Status :: 4 - Beta
@@ -37,7 +37,7 @@ Requires-Dist: readme_renderer[md]>=44.0
37
37
  Requires-Dist: python-dateutil>=2.9.0.post0
38
38
  Requires-Dist: httpx>=0.28.1
39
39
  Requires-Dist: hishel[async]>=1.2.1
40
- Requires-Dist: pydantic>=2.13.3
40
+ Requires-Dist: pydantic>=2.13.4
41
41
  Provides-Extra: testing
42
42
  Requires-Dist: setuptools>=82.0.1; extra == "testing"
43
43
  Requires-Dist: coverage>=7.13.5; extra == "testing"
@@ -89,16 +89,15 @@ Dynamic: license-file
89
89
 
90
90
  ---
91
91
 
92
- ## 🚀 Version v1.7.0 — 30 avril 2026
92
+ ## 🚀 Version v2.1.0 — Mai 2026
93
93
 
94
94
  Principales évolutions récentes :
95
95
 
96
- - ajout d'entités REST et Meilisearch : rencontres, officiels, entraîneurs, communes et assets ;
97
- - réutilisation des clients `httpx` synchrones et asynchrones ;
98
- - cache Meilisearch optimisé pour limiter les copies coûteuses ;
99
- - retries de transport configurables via `CacheConfig.transport_retries` ;
100
- - mise à jour des schémas OpenAPI, collections et index ;
101
- - stabilisation CI, typage, tests et formatage.
96
+ - **unification sync/async** : les méthodes synchrones délèguent désormais à leurs homologues asynchrones via `_run_async()`, éliminant ~604 lignes de duplication ;
97
+ - **nouvelles entités** : EDF (matches, joueurs, rosters, équipes), Genius Sport (matches, live logs), Rematch Videos ;
98
+ - **cache SQLite concurrency-safe** : fichiers séparés pour sync (`http_cache.db`) et async (`http_cache_async.db`) ;
99
+ - **CI renforcée** : mypy + pyright + CodeQL + Dependabot + hook pre-push ;
100
+ - **nettoyage** : suppression du shim `ffbb_api_client_v3`, scripts morts et code mort (`invalidate_pattern`).
102
101
 
103
102
  Voir aussi : [`CHANGELOG.md`](CHANGELOG.md) et [`RELEASE_NOTES.md`](RELEASE_NOTES.md).
104
103
 
@@ -107,7 +106,7 @@ Voir aussi : [`CHANGELOG.md`](CHANGELOG.md) et [`RELEASE_NOTES.md`](RELEASE_NOTE
107
106
  ## 📦 Installation
108
107
 
109
108
  ```bash
110
- pip install ffbb_data_client
109
+ pip install ffbb-data-client
111
110
  ```
112
111
 
113
112
  Pour contribuer ou exécuter les tests :
@@ -148,11 +147,12 @@ lives = client.get_lives()
148
147
  | Domaine | Capacités |
149
148
  |---|---|
150
149
  | API FFBB | clubs, compétitions, organismes, saisons, poules, classements, rencontres, lives |
150
+ | Entités additionnelles | EDF (matches, joueurs, rosters, équipes), Genius Sport, Rematch Videos |
151
151
  | Recherche | organismes, compétitions, rencontres, salles, terrains, pratiques, tournois, engagements et formations |
152
152
  | REST typé | récupération de ressources individuelles avec modèles Pydantic v2 |
153
- | Async | méthodes `*_async()` pour les appels réseau non bloquants |
154
- | Cache | cache HTTP `hishel`, sessions `httpx` réutilisées, retries configurables |
155
- | Sécurité | masquage des tokens dans les logs |
153
+ | Async | méthodes `*_async()` source de vérité ; sync délègue via `_run_async()` |
154
+ | Cache | cache HTTP `hishel`, sessions `httpx` réutilisées, retries configurables, SQLite séparés sync/async |
155
+ | Sécurité | masquage des tokens dans les logs, CodeQL scanning, Dependabot |
156
156
  | IA / MCP | structure compatible avec des wrappers MCP et agents IA |
157
157
 
158
158
  ---
@@ -272,15 +272,17 @@ Il est donc possible de laisser le client résoudre les tokens automatiquement o
272
272
  ```text
273
273
  src/ffbb_data_client/
274
274
  ├── clients/
275
- │ ├── ffbb_data_client.py # Façade publique
276
- │ ├── api_ffbb_app_client.py # Client REST FFBB
277
- │ └── meilisearch_ffbb_client.py # Client recherche Meilisearch
278
- ├── helpers/ # Requêtes HTTP, multi-search, conversions
279
- ├── models/ # Modèles Pydantic v2
280
- ├── utils/ # cache, tokens, logging sécurisé
281
- └── data/ # schémas et métadonnées embarqués
275
+ │ ├── ffbb_data_client.py # Façade publique (sync → async delegation)
276
+ │ ├── api_ffbb_app_client.py # Client REST FFBB (async source of truth)
277
+ │ └── meilisearch_ffbb_client.py # Client recherche Meilisearch
278
+ ├── helpers/ # Requêtes HTTP, multi-search, conversions
279
+ ├── models/ # Modèles Pydantic v2
280
+ ├── utils/ # cache (sync/async séparés), tokens, logging sécurisé
281
+ └── data/ # schémas et métadonnées embarqués
282
282
  ```
283
283
 
284
+ > **Architecture sync/async** : Depuis v2.1.0, les méthodes asynchrones sont la source de vérité. Les méthodes synchrones délèguent via `_run_async()`, un helper qui gère les event loops imbriqués avec `ThreadPoolExecutor`.
285
+
284
286
  ---
285
287
 
286
288
  ## 🧪 Développement local
@@ -296,8 +298,13 @@ Commandes utiles :
296
298
  pytest tests/unit/
297
299
  pytest tests/integration/
298
300
  pytest tests/ --cov=src
301
+ tox -e type # mypy + pyright
299
302
  ```
300
303
 
304
+ Hooks automatiques :
305
+ - **pre-push** : exécute mypy + pyright avant chaque push
306
+ - **pre-commit** : black, isort, flake8, trailing-whitespace
307
+
301
308
  Documentation complémentaire :
302
309
 
303
310
  - [`LOCAL_CI_GUIDE.md`](LOCAL_CI_GUIDE.md)
@@ -37,16 +37,15 @@
37
37
 
38
38
  ---
39
39
 
40
- ## 🚀 Version v1.7.0 — 30 avril 2026
40
+ ## 🚀 Version v2.1.0 — Mai 2026
41
41
 
42
42
  Principales évolutions récentes :
43
43
 
44
- - ajout d'entités REST et Meilisearch : rencontres, officiels, entraîneurs, communes et assets ;
45
- - réutilisation des clients `httpx` synchrones et asynchrones ;
46
- - cache Meilisearch optimisé pour limiter les copies coûteuses ;
47
- - retries de transport configurables via `CacheConfig.transport_retries` ;
48
- - mise à jour des schémas OpenAPI, collections et index ;
49
- - stabilisation CI, typage, tests et formatage.
44
+ - **unification sync/async** : les méthodes synchrones délèguent désormais à leurs homologues asynchrones via `_run_async()`, éliminant ~604 lignes de duplication ;
45
+ - **nouvelles entités** : EDF (matches, joueurs, rosters, équipes), Genius Sport (matches, live logs), Rematch Videos ;
46
+ - **cache SQLite concurrency-safe** : fichiers séparés pour sync (`http_cache.db`) et async (`http_cache_async.db`) ;
47
+ - **CI renforcée** : mypy + pyright + CodeQL + Dependabot + hook pre-push ;
48
+ - **nettoyage** : suppression du shim `ffbb_api_client_v3`, scripts morts et code mort (`invalidate_pattern`).
50
49
 
51
50
  Voir aussi : [`CHANGELOG.md`](CHANGELOG.md) et [`RELEASE_NOTES.md`](RELEASE_NOTES.md).
52
51
 
@@ -55,7 +54,7 @@ Voir aussi : [`CHANGELOG.md`](CHANGELOG.md) et [`RELEASE_NOTES.md`](RELEASE_NOTE
55
54
  ## 📦 Installation
56
55
 
57
56
  ```bash
58
- pip install ffbb_data_client
57
+ pip install ffbb-data-client
59
58
  ```
60
59
 
61
60
  Pour contribuer ou exécuter les tests :
@@ -96,11 +95,12 @@ lives = client.get_lives()
96
95
  | Domaine | Capacités |
97
96
  |---|---|
98
97
  | API FFBB | clubs, compétitions, organismes, saisons, poules, classements, rencontres, lives |
98
+ | Entités additionnelles | EDF (matches, joueurs, rosters, équipes), Genius Sport, Rematch Videos |
99
99
  | Recherche | organismes, compétitions, rencontres, salles, terrains, pratiques, tournois, engagements et formations |
100
100
  | REST typé | récupération de ressources individuelles avec modèles Pydantic v2 |
101
- | Async | méthodes `*_async()` pour les appels réseau non bloquants |
102
- | Cache | cache HTTP `hishel`, sessions `httpx` réutilisées, retries configurables |
103
- | Sécurité | masquage des tokens dans les logs |
101
+ | Async | méthodes `*_async()` source de vérité ; sync délègue via `_run_async()` |
102
+ | Cache | cache HTTP `hishel`, sessions `httpx` réutilisées, retries configurables, SQLite séparés sync/async |
103
+ | Sécurité | masquage des tokens dans les logs, CodeQL scanning, Dependabot |
104
104
  | IA / MCP | structure compatible avec des wrappers MCP et agents IA |
105
105
 
106
106
  ---
@@ -220,15 +220,17 @@ Il est donc possible de laisser le client résoudre les tokens automatiquement o
220
220
  ```text
221
221
  src/ffbb_data_client/
222
222
  ├── clients/
223
- │ ├── ffbb_data_client.py # Façade publique
224
- │ ├── api_ffbb_app_client.py # Client REST FFBB
225
- │ └── meilisearch_ffbb_client.py # Client recherche Meilisearch
226
- ├── helpers/ # Requêtes HTTP, multi-search, conversions
227
- ├── models/ # Modèles Pydantic v2
228
- ├── utils/ # cache, tokens, logging sécurisé
229
- └── data/ # schémas et métadonnées embarqués
223
+ │ ├── ffbb_data_client.py # Façade publique (sync → async delegation)
224
+ │ ├── api_ffbb_app_client.py # Client REST FFBB (async source of truth)
225
+ │ └── meilisearch_ffbb_client.py # Client recherche Meilisearch
226
+ ├── helpers/ # Requêtes HTTP, multi-search, conversions
227
+ ├── models/ # Modèles Pydantic v2
228
+ ├── utils/ # cache (sync/async séparés), tokens, logging sécurisé
229
+ └── data/ # schémas et métadonnées embarqués
230
230
  ```
231
231
 
232
+ > **Architecture sync/async** : Depuis v2.1.0, les méthodes asynchrones sont la source de vérité. Les méthodes synchrones délèguent via `_run_async()`, un helper qui gère les event loops imbriqués avec `ThreadPoolExecutor`.
233
+
232
234
  ---
233
235
 
234
236
  ## 🧪 Développement local
@@ -244,8 +246,13 @@ Commandes utiles :
244
246
  pytest tests/unit/
245
247
  pytest tests/integration/
246
248
  pytest tests/ --cov=src
249
+ tox -e type # mypy + pyright
247
250
  ```
248
251
 
252
+ Hooks automatiques :
253
+ - **pre-push** : exécute mypy + pyright avant chaque push
254
+ - **pre-commit** : black, isort, flake8, trailing-whitespace
255
+
249
256
  Documentation complémentaire :
250
257
 
251
258
  - [`LOCAL_CI_GUIDE.md`](LOCAL_CI_GUIDE.md)
@@ -0,0 +1,15 @@
1
+ # Security Policy
2
+
3
+ ## Reporting a Vulnerability
4
+
5
+ Please report suspected vulnerabilities privately by email to the maintainer listed in `setup.cfg` or through GitHub Security Advisories when available.
6
+
7
+ Do not disclose security issues publicly until a fix or mitigation has been released.
8
+
9
+ ## Supported Versions
10
+
11
+ Security fixes target the latest released version of `ffbb-data-client` on PyPI and the current `master` branch.
12
+
13
+ ## Sensitive Data
14
+
15
+ Do not include FFBB bearer tokens, Meilisearch tokens, logs containing credentials, or private user data in reports. If such data is required to reproduce the issue, redact it first.
@@ -35,10 +35,7 @@ except ImportError:
35
35
 
36
36
  output_dir = os.path.join(__location__, "api")
37
37
  module_dir = os.path.join(__location__, "../src/ffbb_data_client")
38
- try:
39
- shutil.rmtree(output_dir)
40
- except FileNotFoundError:
41
- pass
38
+ shutil.rmtree(output_dir, ignore_errors=True)
42
39
 
43
40
  try:
44
41
  import sphinx
@@ -1,6 +1,6 @@
1
1
  hishel[async]>=1.2.1
2
2
  httpx>=0.28.1
3
- pydantic>=2.13.3
3
+ pydantic>=2.13.4
4
4
  python-dateutil>=2.9.0.post0
5
5
  python-dotenv>=1.2.2
6
6
  readme_renderer[md]>=44.0
@@ -8,5 +8,5 @@ requests_cache
8
8
  # Requirements file for ReadTheDocs, check .readthedocs.yml.
9
9
  # To build the module reference correctly, make sure every external package
10
10
  # under `install_requires` in `setup.cfg` is also listed here!
11
- sphinx>=3.2.1
11
+ sphinx>=9.1.0
12
12
  # sphinx_rtd_theme