ffbb-data-client 2.4.17__tar.gz → 2.4.19__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 (396) hide show
  1. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/PKG-INFO +1 -1
  2. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/__init__.py +10 -0
  3. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/clients/_mixins/list_methods.py +80 -0
  4. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/clients/_rest_facade.py +236 -0
  5. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/niveau_extractor.py +17 -12
  6. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client.egg-info/PKG-INFO +1 -1
  7. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client.egg-info/SOURCES.txt +1 -0
  8. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client.egg-info/scm_file_list.json +1 -0
  9. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client.egg-info/scm_version.json +2 -2
  10. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_api_optimizations.py +7 -7
  11. ffbb_data_client-2.4.19/tests/unit/clients/test_v4_aiter_and_contacts.py +155 -0
  12. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.agents/rules/antigravity-rtk-rules.md +0 -0
  13. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.coveragerc +0 -0
  14. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.gitattributes +0 -0
  15. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/FUNDING.yml +0 -0
  16. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  17. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  18. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  19. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/dependabot.yml +0 -0
  20. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/scripts/ai-pr-reviewer.cjs +0 -0
  21. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/scripts/check_wrapper_parity.py +0 -0
  22. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/workflows/ai-pr-reviewer.yml +0 -0
  23. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/workflows/check_wrapper_parity.yml +0 -0
  24. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/workflows/ci.yml +0 -0
  25. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/workflows/codeql.yml +0 -0
  26. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/workflows/deploy-pages.yml +0 -0
  27. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/workflows/keep-ffbb-api-discovery-alive.yml +0 -0
  28. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/workflows/publish.yml +0 -0
  29. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/workflows/release-after-discovery-merge.yml +0 -0
  30. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.github/workflows/update-ffbb-api-discovery.yml +0 -0
  31. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.gitignore +0 -0
  32. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.isort.cfg +0 -0
  33. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.jules/bolt.md +0 -0
  34. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.omc/skills/codeql-security-hardening-expertise.md +0 -0
  35. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.omc/skills/pypi-immutable-release-workflow.md +0 -0
  36. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.omc/skills/terminal-output-hygiene-expertise.md +0 -0
  37. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.pre-commit-config.yaml +0 -0
  38. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/.readthedocs.yml +0 -0
  39. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/AGENTS.md +0 -0
  40. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/AUTHORS.rst +0 -0
  41. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/CHANGELOG.md +0 -0
  42. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/CODE_OF_CONDUCT.md +0 -0
  43. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/CONTRIBUTING.rst +0 -0
  44. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/DESIGN.md +0 -0
  45. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/Dockerfile +0 -0
  46. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/LICENSE.txt +0 -0
  47. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/LOCAL_CI_GUIDE.md +0 -0
  48. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/README.md +0 -0
  49. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/RELEASE_NOTES.md +0 -0
  50. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/SECURITY.md +0 -0
  51. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/data/api.ffbb.app.json +0 -0
  52. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/data/api_update_summary.md +0 -0
  53. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/data/collections.json +0 -0
  54. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/data/endpoint_discovery.json +0 -0
  55. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/data/field_dictionary.json +0 -0
  56. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/data/indexes.json +0 -0
  57. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/data/meilisearch-prod.ffbb.app.json +0 -0
  58. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/data/openapi.json +0 -0
  59. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/data/openapi_full.json +0 -0
  60. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/data/type_discovery_corrections.json +0 -0
  61. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/Makefile +0 -0
  62. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/_static/.gitignore +0 -0
  63. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/architecture.rst +0 -0
  64. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/authors.rst +0 -0
  65. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/changelog.rst +0 -0
  66. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/conf.py +0 -0
  67. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/contributing.rst +0 -0
  68. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/data_dictionary.rst +0 -0
  69. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/examples.rst +0 -0
  70. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/index.rst +0 -0
  71. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/license.rst +0 -0
  72. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/migration.rst +0 -0
  73. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/readme.rst +0 -0
  74. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/requirements.txt +0 -0
  75. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/test_strategy.md +0 -0
  76. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/docs/testing_conventions.md +0 -0
  77. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/examples/README.md +0 -0
  78. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/examples/complete_usage_example.py +0 -0
  79. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/examples/quick_start.py +0 -0
  80. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/examples/team_ranking_analysis.py +0 -0
  81. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/pyproject.toml +0 -0
  82. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/pytest.ini +0 -0
  83. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/run-ci-locally.sh +0 -0
  84. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/scripts/benchmark_concurrent_pagination.py +0 -0
  85. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/scripts/benchmark_search_organisme.py +0 -0
  86. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/scripts/discover_endpoints.py +0 -0
  87. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/scripts/discover_types.py +0 -0
  88. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/setup.cfg +0 -0
  89. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/setup.py +0 -0
  90. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/api.py +0 -0
  91. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/clients/__init__.py +0 -0
  92. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/clients/_helpers.py +0 -0
  93. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/clients/_mixins/__init__.py +0 -0
  94. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/clients/_mixins/competition.py +0 -0
  95. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/clients/_mixins/external.py +0 -0
  96. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/clients/_mixins/getters.py +0 -0
  97. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/clients/_mixins/organisme.py +0 -0
  98. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/clients/_search_facade.py +0 -0
  99. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/clients/api_ffbb_app_client.py +0 -0
  100. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/clients/ffbb_data_client.py +0 -0
  101. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/clients/meilisearch_client.py +0 -0
  102. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/clients/meilisearch_ffbb_client.py +0 -0
  103. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/config.py +0 -0
  104. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/data/__init__.py +0 -0
  105. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/data/collections.json +0 -0
  106. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/data/endpoint_discovery.json +0 -0
  107. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/data/field_dictionary.json +0 -0
  108. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/data/indexes.json +0 -0
  109. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/data/openapi.json +0 -0
  110. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/exceptions.py +0 -0
  111. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/helpers/__init__.py +0 -0
  112. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/helpers/http_requests_helper.py +0 -0
  113. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/helpers/http_requests_utils.py +0 -0
  114. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/helpers/meilisearch_client_extension.py +0 -0
  115. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/helpers/multi_search_query_helper.py +0 -0
  116. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/helpers/normalization.py +0 -0
  117. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/__init__.py +0 -0
  118. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/affiche.py +0 -0
  119. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/cartographie.py +0 -0
  120. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/categorie.py +0 -0
  121. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/categorie_type.py +0 -0
  122. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/clock.py +0 -0
  123. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/club_contacts.py +0 -0
  124. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/code.py +0 -0
  125. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/commune.py +0 -0
  126. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competition_fields.py +0 -0
  127. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competition_id.py +0 -0
  128. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competition_id_categorie.py +0 -0
  129. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competition_id_sexe.py +0 -0
  130. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competition_id_type_competition.py +0 -0
  131. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competition_id_type_competition_generique.py +0 -0
  132. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competition_origine.py +0 -0
  133. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competition_origine_categorie.py +0 -0
  134. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competition_origine_type_competition.py +0 -0
  135. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competition_origine_type_competition_generique.py +0 -0
  136. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competition_type.py +0 -0
  137. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competitions_facet_distribution.py +0 -0
  138. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competitions_facet_stats.py +0 -0
  139. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competitions_hit.py +0 -0
  140. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competitions_multi_search_query.py +0 -0
  141. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/competitions_query.py +0 -0
  142. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/configuration_models.py +0 -0
  143. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/contact_info.py +0 -0
  144. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/content_multi_search_query.py +0 -0
  145. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/coordonnees.py +0 -0
  146. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/coordonnees_type.py +0 -0
  147. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/document_flyer.py +0 -0
  148. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/document_flyer_type.py +0 -0
  149. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/engagement_contacts.py +0 -0
  150. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/engagements_facet_distribution.py +0 -0
  151. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/engagements_facet_stats.py +0 -0
  152. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/engagements_hit.py +0 -0
  153. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/engagements_multi_search_query.py +0 -0
  154. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/etat.py +0 -0
  155. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/external_competition_id.py +0 -0
  156. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/external_id.py +0 -0
  157. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/facet_distribution.py +0 -0
  158. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/facet_stats.py +0 -0
  159. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/field_set.py +0 -0
  160. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/folder.py +0 -0
  161. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/formation_session.py +0 -0
  162. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/formations_facet_distribution.py +0 -0
  163. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/formations_facet_stats.py +0 -0
  164. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/formations_hit.py +0 -0
  165. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/formations_multi_search_query.py +0 -0
  166. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/game_stats_model.py +0 -0
  167. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/game_stats_models.py +0 -0
  168. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/generic_search.py +0 -0
  169. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/geo.py +0 -0
  170. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/geo_sort_order.py +0 -0
  171. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/get_commune_response.py +0 -0
  172. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/get_competition_response.py +0 -0
  173. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/get_configuration_response.py +0 -0
  174. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/get_engagement_response.py +0 -0
  175. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/get_entraineur_response.py +0 -0
  176. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/get_formation_response.py +0 -0
  177. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/get_officiel_response.py +0 -0
  178. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/get_organisme_response.py +0 -0
  179. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/get_poule_response.py +0 -0
  180. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/get_pratique_response.py +0 -0
  181. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/get_rencontre_response.py +0 -0
  182. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/get_saisons_response.py +0 -0
  183. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/get_salle_response.py +0 -0
  184. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/get_terrain_response.py +0 -0
  185. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/get_tournoi_response.py +0 -0
  186. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/gradient_color.py +0 -0
  187. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/hit.py +0 -0
  188. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/id_engagement_equipe.py +0 -0
  189. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/id_organisme_equipe.py +0 -0
  190. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/id_organisme_equipe1_logo.py +0 -0
  191. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/id_poule.py +0 -0
  192. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/jour.py +0 -0
  193. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/label.py +0 -0
  194. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/labellisation.py +0 -0
  195. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/live.py +0 -0
  196. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/lives.py +0 -0
  197. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/logo.py +0 -0
  198. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/multi_search_queries.py +0 -0
  199. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/multi_search_query.py +0 -0
  200. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/multi_search_result_competitions.py +0 -0
  201. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/multi_search_result_engagements.py +0 -0
  202. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/multi_search_result_formations.py +0 -0
  203. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/multi_search_result_organismes.py +0 -0
  204. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/multi_search_result_pratiques.py +0 -0
  205. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/multi_search_result_rencontres.py +0 -0
  206. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/multi_search_result_salles.py +0 -0
  207. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/multi_search_result_terrains.py +0 -0
  208. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/multi_search_result_tournois.py +0 -0
  209. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/multi_search_results.py +0 -0
  210. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/multi_search_results_class.py +0 -0
  211. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/nature_sol.py +0 -0
  212. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/niveau.py +0 -0
  213. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/niveau_class.py +0 -0
  214. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/niveau_info.py +0 -0
  215. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/niveau_models.py +0 -0
  216. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/niveau_type.py +0 -0
  217. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/objectif.py +0 -0
  218. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/organisateur.py +0 -0
  219. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/organisateur_type.py +0 -0
  220. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/organisme_fields.py +0 -0
  221. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/organisme_id_pere.py +0 -0
  222. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/organismes_facet_distribution.py +0 -0
  223. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/organismes_facet_stats.py +0 -0
  224. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/organismes_hit.py +0 -0
  225. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/organismes_multi_search_query.py +0 -0
  226. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/organismes_query.py +0 -0
  227. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/phase_code.py +0 -0
  228. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/poule.py +0 -0
  229. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/poule_fields.py +0 -0
  230. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/poule_rencontre_item_model.py +0 -0
  231. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/poules_models.py +0 -0
  232. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/poules_query.py +0 -0
  233. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/pratique.py +0 -0
  234. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/pratiques_facet_distribution.py +0 -0
  235. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/pratiques_facet_stats.py +0 -0
  236. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/pratiques_hit.py +0 -0
  237. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/pratiques_hit_type.py +0 -0
  238. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/pratiques_multi_search_query.py +0 -0
  239. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/pratiques_type_class.py +0 -0
  240. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/publication_internet.py +0 -0
  241. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/purple_logo.py +0 -0
  242. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/query_fields_manager.py +0 -0
  243. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/ranking_engagement.py +0 -0
  244. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/rankings_models.py +0 -0
  245. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/rencontres_engagement.py +0 -0
  246. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/rencontres_facet_distribution.py +0 -0
  247. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/rencontres_facet_stats.py +0 -0
  248. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/rencontres_hit.py +0 -0
  249. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/rencontres_multi_search_query.py +0 -0
  250. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/saison.py +0 -0
  251. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/saison_fields.py +0 -0
  252. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/saisons_models.py +0 -0
  253. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/saisons_query.py +0 -0
  254. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/salle.py +0 -0
  255. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/salles_facet_distribution.py +0 -0
  256. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/salles_facet_stats.py +0 -0
  257. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/salles_hit.py +0 -0
  258. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/salles_multi_search_query.py +0 -0
  259. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/sexe.py +0 -0
  260. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/sexe_class.py +0 -0
  261. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/source.py +0 -0
  262. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/status.py +0 -0
  263. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/team_engagement.py +0 -0
  264. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/team_ranking.py +0 -0
  265. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/terrains_categorie_championnat_3x3_libelle.py +0 -0
  266. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/terrains_facet_distribution.py +0 -0
  267. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/terrains_facet_stats.py +0 -0
  268. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/terrains_hit.py +0 -0
  269. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/terrains_multi_search_query.py +0 -0
  270. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/terrains_name.py +0 -0
  271. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/terrains_sexe_enum.py +0 -0
  272. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/terrains_storage.py +0 -0
  273. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/tournoi_type_class.py +0 -0
  274. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/tournoi_type_enum.py +0 -0
  275. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/tournoi_types_3x3.py +0 -0
  276. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/tournoi_types_3x3_libelle.py +0 -0
  277. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/tournoi_types_3x3_libelle_enum.py +0 -0
  278. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/tournois_facet_distribution.py +0 -0
  279. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/tournois_facet_stats.py +0 -0
  280. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/tournois_hit.py +0 -0
  281. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/tournois_hit_type.py +0 -0
  282. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/tournois_libelle.py +0 -0
  283. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/tournois_multi_search_query.py +0 -0
  284. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/type_association.py +0 -0
  285. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/type_association_libelle.py +0 -0
  286. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/type_class.py +0 -0
  287. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/type_competition.py +0 -0
  288. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/type_competition_generique.py +0 -0
  289. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/type_enum.py +0 -0
  290. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/models/type_league.py +0 -0
  291. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/py.typed +0 -0
  292. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/utils/__init__.py +0 -0
  293. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/utils/cache_manager.py +0 -0
  294. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/utils/concurrency_utils.py +0 -0
  295. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/utils/converter_utils.py +0 -0
  296. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/utils/input_validation.py +0 -0
  297. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/utils/retry_utils.py +0 -0
  298. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/utils/secure_logging.py +0 -0
  299. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client/utils/token_manager.py +0 -0
  300. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client.egg-info/dependency_links.txt +0 -0
  301. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client.egg-info/not-zip-safe +0 -0
  302. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client.egg-info/requires.txt +0 -0
  303. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/src/ffbb_data_client.egg-info/top_level.txt +0 -0
  304. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/conftest.py +0 -0
  305. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/e2e/__init__.py +0 -0
  306. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/e2e/conftest.py +0 -0
  307. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/integration/__init__.py +0 -0
  308. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/integration/conftest.py +0 -0
  309. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/integration/test_500_user_journey.py +0 -0
  310. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/integration/test_501_user_journey_v3.py +0 -0
  311. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/integration/test_502_enhanced_integration.py +0 -0
  312. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/integration/test_503_secure_logging.py +0 -0
  313. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/integration/test_504_input_validation.py +0 -0
  314. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/integration/test_505_retry_timeout.py +0 -0
  315. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/integration/test_506_raw_json_model_conversion.py +0 -0
  316. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/__init__.py +0 -0
  317. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/__init__.py +0 -0
  318. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_200_api_ffbb_app_client.py +0 -0
  319. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_201_unit_tests_core.py +0 -0
  320. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_202_meilisearch_client.py +0 -0
  321. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_203_meilisearch_client_extension.py +0 -0
  322. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_204_ffbb_data_client.py +0 -0
  323. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_205_meilisearch_ffbb_client.py +0 -0
  324. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_206_coverage_gaps_clients.py +0 -0
  325. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_207_coverage_clients_extended.py +0 -0
  326. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_208_new_methods_coverage.py +0 -0
  327. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_209_automatic_token_resolution.py +0 -0
  328. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_210_targeted_clients_helpers_coverage.py +0 -0
  329. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_async_methods.py +0 -0
  330. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_meilisearch_async.py +0 -0
  331. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_search_many.py +0 -0
  332. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_v2_backport_search.py +0 -0
  333. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_v3_new_features.py +0 -0
  334. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/clients/test_warm_cache.py +0 -0
  335. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/conftest.py +0 -0
  336. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/helpers/__init__.py +0 -0
  337. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/helpers/test_400_http_helpers.py +0 -0
  338. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/helpers/test_meilisearch_client_extension_recursive_pagination.py +0 -0
  339. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/helpers/test_meilisearch_pagination_concurrent.py +0 -0
  340. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/helpers/test_normalization.py +0 -0
  341. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/__init__.py +0 -0
  342. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_100_competition_id_categorie.py +0 -0
  343. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_101_competition_id_sexe.py +0 -0
  344. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_102_competition_id_type_competition.py +0 -0
  345. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_103_competition_id_type_competition_generique.py +0 -0
  346. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_104_competition_origine_categorie.py +0 -0
  347. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_105_competition_origine_type_competition_generique.py +0 -0
  348. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_106_competition_origine.py +0 -0
  349. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_107_id_engagement_equipe.py +0 -0
  350. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_108_id_organisme_equipe.py +0 -0
  351. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_109_id_organisme_equipe1_logo.py +0 -0
  352. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_110_labellisation.py +0 -0
  353. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_111_niveau_class.py +0 -0
  354. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_112_purple_logo.py +0 -0
  355. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_113_salle.py +0 -0
  356. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_114_tournoi_type_class.py +0 -0
  357. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_115_type_association_libelle.py +0 -0
  358. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_116_type_competition_generique.py +0 -0
  359. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_117_organisateur.py +0 -0
  360. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_118_competition_id.py +0 -0
  361. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_119_terrains_inner_models.py +0 -0
  362. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_120_pratiques_inner_models.py +0 -0
  363. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_121_to_dict_round_trip.py +0 -0
  364. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_122_coverage_gaps.py +0 -0
  365. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_123_missing_coverage.py +0 -0
  366. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_123_v2_backport.py +0 -0
  367. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_124_targeted_coverage_gains.py +0 -0
  368. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/models/test_dx_aliases.py +0 -0
  369. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/test_310_discover_endpoints.py +0 -0
  370. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/test_311_normalize_team_name.py +0 -0
  371. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/utils/__init__.py +0 -0
  372. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/utils/test_300_secure_logging.py +0 -0
  373. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/utils/test_301_input_validation.py +0 -0
  374. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/utils/test_302_retry_utils.py +0 -0
  375. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/utils/test_303_cache_manager.py +0 -0
  376. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/utils/test_304_config.py +0 -0
  377. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/utils/test_305_token_manager.py +0 -0
  378. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/utils/test_306_converter_utils.py +0 -0
  379. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/utils/test_307_coverage_gaps_utils.py +0 -0
  380. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/utils/test_308_converter_utils_extended.py +0 -0
  381. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tests/unit/utils/test_309_concurrency_utils.py +0 -0
  382. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tools/update_agents_md.py +0 -0
  383. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/tox.ini +0 -0
  384. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/website/assets/apple-touch-icon.png +0 -0
  385. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/website/assets/favicon-192x192.png +0 -0
  386. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/website/assets/favicon-48x48.png +0 -0
  387. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/website/assets/favicon-96x96.png +0 -0
  388. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/website/assets/favicon.ico +0 -0
  389. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/website/assets/logo.webp +0 -0
  390. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/website/css/style.css +0 -0
  391. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/website/favicon.ico +0 -0
  392. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/website/index.html +0 -0
  393. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/website/llms-full.txt +0 -0
  394. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/website/llms.txt +0 -0
  395. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/website/robots.txt +0 -0
  396. {ffbb_data_client-2.4.17 → ffbb_data_client-2.4.19}/website/sitemap.xml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ffbb-data-client
3
- Version: 2.4.17
3
+ Version: 2.4.19
4
4
  Summary: API FFBB — SDK Python moderne & asynchrone pour les donnees officielles de la Federation Francaise de BasketBall (clubs, classements, calendriers, lives, Meilisearch). Alternative moderne a ffbb-api-client.
5
5
  Home-page: https://github.com/nickdesi/ffbb-data-client
6
6
  Author: nickdesi
@@ -22,6 +22,7 @@ from .exceptions import (
22
22
  )
23
23
  from .helpers.meilisearch_client_extension import MeilisearchClientExtension
24
24
  from .helpers.multi_search_query_helper import generate_queries
25
+ from .models.categorie_type import CategorieType
25
26
  from .models.club_contacts import ClubContacts
26
27
  from .models.competitions_facet_distribution import CompetitionsFacetDistribution
27
28
  from .models.competitions_facet_stats import CompetitionsFacetStats
@@ -55,6 +56,9 @@ from .models.multi_search_result_rencontres import RencontresMultiSearchResult
55
56
  from .models.multi_search_result_salles import SallesMultiSearchResult
56
57
  from .models.multi_search_result_terrains import TerrainsMultiSearchResult
57
58
  from .models.multi_search_result_tournois import TournoisMultiSearchResult
59
+ from .models.niveau_extractor import NiveauExtractor, get_niveau_from_idcompetition
60
+ from .models.niveau_info import NiveauInfo
61
+ from .models.niveau_type import NiveauType
58
62
  from .models.organismes_facet_distribution import OrganismesFacetDistribution
59
63
  from .models.organismes_facet_stats import OrganismesFacetStats
60
64
  from .models.organismes_hit import OrganismesHit
@@ -169,6 +173,12 @@ __all__ = [
169
173
  "FFBBTokens",
170
174
  "TokenManager",
171
175
  "gather_with_concurrency",
176
+ # Extraction & Helpers
177
+ "NiveauExtractor",
178
+ "NiveauInfo",
179
+ "NiveauType",
180
+ "CategorieType",
181
+ "get_niveau_from_idcompetition",
172
182
  ]
173
183
 
174
184
  from importlib.metadata import PackageNotFoundError, version
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import asyncio
4
+ from collections.abc import AsyncIterator
4
5
  from typing import Any
5
6
 
6
7
  import httpx
@@ -219,6 +220,18 @@ class ListAllMixin:
219
220
  list_all_pratiques: Any
220
221
  list_all_pratiques_async: Any
221
222
 
223
+ # Method stubs for dynamically generated aiter_all generators
224
+ aiter_all_rencontres: Any
225
+ aiter_all_salles: Any
226
+ aiter_all_terrains: Any
227
+ aiter_all_tournois: Any
228
+ aiter_all_engagements: Any
229
+ aiter_all_formations: Any
230
+ aiter_all_entraineurs: Any
231
+ aiter_all_communes: Any
232
+ aiter_all_officiels: Any
233
+ aiter_all_pratiques: Any
234
+
222
235
  async def _list_all_directus_items_async(
223
236
  self,
224
237
  endpoint: str,
@@ -266,6 +279,43 @@ class ListAllMixin:
266
279
  break
267
280
  return results[:max_items]
268
281
 
282
+ async def _aiter_all_directus_items(
283
+ self,
284
+ endpoint: str,
285
+ model_cls: type,
286
+ filter_criteria: str | None = None,
287
+ sort: list[str] | None = None,
288
+ search: str | None = None,
289
+ page_size: int = 100,
290
+ max_items: int = 10000,
291
+ cached_session: httpx.AsyncClient | None = None,
292
+ ) -> AsyncIterator[Any]:
293
+ """Streaming async generator: yields items one by one across paginated Directus requests."""
294
+ offset = 0
295
+ yielded = 0
296
+ while yielded < max_items:
297
+ current_limit = min(page_size, max_items - yielded)
298
+ batch = await self._list_directus_items_async(
299
+ endpoint,
300
+ limit=current_limit,
301
+ filter_criteria=filter_criteria,
302
+ sort=sort,
303
+ offset=offset,
304
+ search=search,
305
+ cached_session=self.async_cached_session,
306
+ )
307
+ if not batch:
308
+ break
309
+ for r in batch:
310
+ if r:
311
+ yield model_cls.from_dict(r) # type: ignore[attr-defined]
312
+ yielded += 1
313
+ if yielded >= max_items:
314
+ return
315
+ if len(batch) < current_limit:
316
+ break
317
+ offset += len(batch)
318
+
269
319
  def _list_all(
270
320
  self,
271
321
  endpoint: str,
@@ -341,8 +391,38 @@ def _make_list_all_method(endpoint: str, model_cls: Any, name: str) -> tuple[Any
341
391
  return list_all_method, list_all_method_async
342
392
 
343
393
 
394
+ def _make_aiter_all_method(endpoint: str, model_cls: Any, name: str) -> Any:
395
+ """Factory: creates async aiter_all_X generator on ListAllMixin."""
396
+
397
+ def aiter_all_method(
398
+ self: Any,
399
+ filter_criteria: str | None = None,
400
+ sort: list[str] | None = None,
401
+ search: str | None = None,
402
+ page_size: int = 100,
403
+ max_items: int = 10000,
404
+ cached_session: httpx.AsyncClient | None = None,
405
+ ) -> AsyncIterator[Any]:
406
+ return self._aiter_all_directus_items( # type: ignore[no-any-return]
407
+ endpoint,
408
+ model_cls,
409
+ filter_criteria=filter_criteria,
410
+ sort=sort,
411
+ search=search,
412
+ page_size=page_size,
413
+ max_items=max_items,
414
+ cached_session=cached_session,
415
+ )
416
+
417
+ aiter_all_method.__name__ = name
418
+ aiter_all_method.__qualname__ = f"ListAllMixin.{name}"
419
+ return aiter_all_method
420
+
421
+
344
422
  for _name, _cls in _LIST_ENDPOINTS.items():
345
423
  _endpoint = _ENDPOINT_MODULES[_name]
346
424
  _sync, _async = _make_list_all_method(_endpoint, _cls, f"list_all_{_name}")
347
425
  setattr(ListAllMixin, f"list_all_{_name}", _sync)
348
426
  setattr(ListAllMixin, f"list_all_{_name}_async", _async)
427
+ _aiter = _make_aiter_all_method(_endpoint, _cls, f"aiter_all_{_name}")
428
+ setattr(ListAllMixin, f"aiter_all_{_name}", _aiter)
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import asyncio
4
4
  import json
5
+ from collections.abc import AsyncIterator
5
6
  from typing import Any
6
7
 
7
8
  import httpx
@@ -208,6 +209,27 @@ class _RestFacade:
208
209
  organisme=organisme, club_contact=club_contact, membres=membres
209
210
  )
210
211
 
212
+ async def get_club_contacts_async(
213
+ self,
214
+ organisme_id: int,
215
+ cached_session: httpx.AsyncClient | None = None,
216
+ ) -> ClubContacts | None:
217
+ """Async version: return club contact information (club-level + membres) for an organisme.
218
+
219
+ This method delegates to `get_organisme_async()` and uses the extractor helpers
220
+ to produce a compact `ClubContacts` object.
221
+ """
222
+ organisme = await self.get_organisme_async(
223
+ organisme_id, cached_session=cached_session
224
+ )
225
+ if not organisme:
226
+ return None
227
+ club_contact = extract_club_info(organisme)
228
+ membres = extract_membres_contacts(organisme)
229
+ return ClubContacts(
230
+ organisme=organisme, club_contact=club_contact, membres=membres
231
+ )
232
+
211
233
  def get_poule(
212
234
  self,
213
235
  poule_id: int,
@@ -1666,6 +1688,220 @@ class _RestFacade:
1666
1688
  cached_session=cached_session,
1667
1689
  )
1668
1690
 
1691
+ # ------------------------------------------------------------------
1692
+ # Streaming async generators (aiter_all_*)
1693
+ # ------------------------------------------------------------------
1694
+
1695
+ def aiter_all_rencontres(
1696
+ self,
1697
+ filter_criteria: str | None = None,
1698
+ sort: list[str] | None = None,
1699
+ search: str | None = None,
1700
+ page_size: int = 100,
1701
+ max_items: int = 10000,
1702
+ cached_session: httpx.AsyncClient | None = None,
1703
+ ) -> AsyncIterator[GetRencontreResponse]:
1704
+ """Streaming async generator for rencontres."""
1705
+ return self._api.aiter_all_rencontres( # type: ignore[no-any-return]
1706
+ filter_criteria=validate_filter_criteria(
1707
+ filter_criteria, "filter_criteria"
1708
+ ),
1709
+ sort=validate_string_list(sort, "sort"),
1710
+ search=validate_search_query(search, "search"),
1711
+ page_size=page_size,
1712
+ max_items=max_items,
1713
+ cached_session=cached_session,
1714
+ )
1715
+
1716
+ def aiter_all_salles(
1717
+ self,
1718
+ filter_criteria: str | None = None,
1719
+ sort: list[str] | None = None,
1720
+ search: str | None = None,
1721
+ page_size: int = 100,
1722
+ max_items: int = 10000,
1723
+ cached_session: httpx.AsyncClient | None = None,
1724
+ ) -> AsyncIterator[GetSalleResponse]:
1725
+ """Streaming async generator for salles."""
1726
+ return self._api.aiter_all_salles( # type: ignore[no-any-return]
1727
+ filter_criteria=validate_filter_criteria(
1728
+ filter_criteria, "filter_criteria"
1729
+ ),
1730
+ sort=validate_string_list(sort, "sort"),
1731
+ search=validate_search_query(search, "search"),
1732
+ page_size=page_size,
1733
+ max_items=max_items,
1734
+ cached_session=cached_session,
1735
+ )
1736
+
1737
+ def aiter_all_terrains(
1738
+ self,
1739
+ filter_criteria: str | None = None,
1740
+ sort: list[str] | None = None,
1741
+ search: str | None = None,
1742
+ page_size: int = 100,
1743
+ max_items: int = 10000,
1744
+ cached_session: httpx.AsyncClient | None = None,
1745
+ ) -> AsyncIterator[GetTerrainResponse]:
1746
+ """Streaming async generator for terrains."""
1747
+ return self._api.aiter_all_terrains( # type: ignore[no-any-return]
1748
+ filter_criteria=validate_filter_criteria(
1749
+ filter_criteria, "filter_criteria"
1750
+ ),
1751
+ sort=validate_string_list(sort, "sort"),
1752
+ search=validate_search_query(search, "search"),
1753
+ page_size=page_size,
1754
+ max_items=max_items,
1755
+ cached_session=cached_session,
1756
+ )
1757
+
1758
+ def aiter_all_tournois(
1759
+ self,
1760
+ filter_criteria: str | None = None,
1761
+ sort: list[str] | None = None,
1762
+ search: str | None = None,
1763
+ page_size: int = 100,
1764
+ max_items: int = 10000,
1765
+ cached_session: httpx.AsyncClient | None = None,
1766
+ ) -> AsyncIterator[GetTournoiResponse]:
1767
+ """Streaming async generator for tournois."""
1768
+ return self._api.aiter_all_tournois( # type: ignore[no-any-return]
1769
+ filter_criteria=validate_filter_criteria(
1770
+ filter_criteria, "filter_criteria"
1771
+ ),
1772
+ sort=validate_string_list(sort, "sort"),
1773
+ search=validate_search_query(search, "search"),
1774
+ page_size=page_size,
1775
+ max_items=max_items,
1776
+ cached_session=cached_session,
1777
+ )
1778
+
1779
+ def aiter_all_engagements(
1780
+ self,
1781
+ filter_criteria: str | None = None,
1782
+ sort: list[str] | None = None,
1783
+ search: str | None = None,
1784
+ page_size: int = 100,
1785
+ max_items: int = 10000,
1786
+ cached_session: httpx.AsyncClient | None = None,
1787
+ ) -> AsyncIterator[GetEngagementResponse]:
1788
+ """Streaming async generator for engagements."""
1789
+ return self._api.aiter_all_engagements( # type: ignore[no-any-return]
1790
+ filter_criteria=validate_filter_criteria(
1791
+ filter_criteria, "filter_criteria"
1792
+ ),
1793
+ sort=validate_string_list(sort, "sort"),
1794
+ search=validate_search_query(search, "search"),
1795
+ page_size=page_size,
1796
+ max_items=max_items,
1797
+ cached_session=cached_session,
1798
+ )
1799
+
1800
+ def aiter_all_formations(
1801
+ self,
1802
+ filter_criteria: str | None = None,
1803
+ sort: list[str] | None = None,
1804
+ search: str | None = None,
1805
+ page_size: int = 100,
1806
+ max_items: int = 10000,
1807
+ cached_session: httpx.AsyncClient | None = None,
1808
+ ) -> AsyncIterator[GetFormationResponse]:
1809
+ """Streaming async generator for formations."""
1810
+ return self._api.aiter_all_formations( # type: ignore[no-any-return]
1811
+ filter_criteria=validate_filter_criteria(
1812
+ filter_criteria, "filter_criteria"
1813
+ ),
1814
+ sort=validate_string_list(sort, "sort"),
1815
+ search=validate_search_query(search, "search"),
1816
+ page_size=page_size,
1817
+ max_items=max_items,
1818
+ cached_session=cached_session,
1819
+ )
1820
+
1821
+ def aiter_all_entraineurs(
1822
+ self,
1823
+ filter_criteria: str | None = None,
1824
+ sort: list[str] | None = None,
1825
+ search: str | None = None,
1826
+ page_size: int = 100,
1827
+ max_items: int = 10000,
1828
+ cached_session: httpx.AsyncClient | None = None,
1829
+ ) -> AsyncIterator[GetEntraineurResponse]:
1830
+ """Streaming async generator for entraineurs."""
1831
+ return self._api.aiter_all_entraineurs( # type: ignore[no-any-return]
1832
+ filter_criteria=validate_filter_criteria(
1833
+ filter_criteria, "filter_criteria"
1834
+ ),
1835
+ sort=validate_string_list(sort, "sort"),
1836
+ search=validate_search_query(search, "search"),
1837
+ page_size=page_size,
1838
+ max_items=max_items,
1839
+ cached_session=cached_session,
1840
+ )
1841
+
1842
+ def aiter_all_communes(
1843
+ self,
1844
+ filter_criteria: str | None = None,
1845
+ sort: list[str] | None = None,
1846
+ search: str | None = None,
1847
+ page_size: int = 100,
1848
+ max_items: int = 10000,
1849
+ cached_session: httpx.AsyncClient | None = None,
1850
+ ) -> AsyncIterator[GetCommuneResponse]:
1851
+ """Streaming async generator for communes."""
1852
+ return self._api.aiter_all_communes( # type: ignore[no-any-return]
1853
+ filter_criteria=validate_filter_criteria(
1854
+ filter_criteria, "filter_criteria"
1855
+ ),
1856
+ sort=validate_string_list(sort, "sort"),
1857
+ search=validate_search_query(search, "search"),
1858
+ page_size=page_size,
1859
+ max_items=max_items,
1860
+ cached_session=cached_session,
1861
+ )
1862
+
1863
+ def aiter_all_officiels(
1864
+ self,
1865
+ filter_criteria: str | None = None,
1866
+ sort: list[str] | None = None,
1867
+ search: str | None = None,
1868
+ page_size: int = 100,
1869
+ max_items: int = 10000,
1870
+ cached_session: httpx.AsyncClient | None = None,
1871
+ ) -> AsyncIterator[GetOfficielResponse]:
1872
+ """Streaming async generator for officiels."""
1873
+ return self._api.aiter_all_officiels( # type: ignore[no-any-return]
1874
+ filter_criteria=validate_filter_criteria(
1875
+ filter_criteria, "filter_criteria"
1876
+ ),
1877
+ sort=validate_string_list(sort, "sort"),
1878
+ search=validate_search_query(search, "search"),
1879
+ page_size=page_size,
1880
+ max_items=max_items,
1881
+ cached_session=cached_session,
1882
+ )
1883
+
1884
+ def aiter_all_pratiques(
1885
+ self,
1886
+ filter_criteria: str | None = None,
1887
+ sort: list[str] | None = None,
1888
+ search: str | None = None,
1889
+ page_size: int = 100,
1890
+ max_items: int = 10000,
1891
+ cached_session: httpx.AsyncClient | None = None,
1892
+ ) -> AsyncIterator[GetPratiqueResponse]:
1893
+ """Streaming async generator for pratiques."""
1894
+ return self._api.aiter_all_pratiques( # type: ignore[no-any-return]
1895
+ filter_criteria=validate_filter_criteria(
1896
+ filter_criteria, "filter_criteria"
1897
+ ),
1898
+ sort=validate_string_list(sort, "sort"),
1899
+ search=validate_search_query(search, "search"),
1900
+ page_size=page_size,
1901
+ max_items=max_items,
1902
+ cached_session=cached_session,
1903
+ )
1904
+
1669
1905
  # ------------------------------------------------------------------
1670
1906
  # Batch helpers
1671
1907
  # ------------------------------------------------------------------
@@ -31,31 +31,39 @@ class NiveauExtractor:
31
31
  NiveauType.REGIONAL: [
32
32
  re.compile(r"\bREGIONAL\b"),
33
33
  re.compile(r"\bRÉGIONAL\b"),
34
+ re.compile(r"\bREGIONALE\b"),
35
+ re.compile(r"\bRÉGIONALE\b"),
34
36
  re.compile(r"\bR1\b"),
35
37
  re.compile(r"\bR2\b"),
36
38
  re.compile(r"\bR3\b"),
37
- re.compile(r"\bREGIONALE\b"),
38
- re.compile(r"^RÉGIONALE\b"), # Format simple: "Régionale masculine seniors"
39
+ re.compile(r"\bPRE\s*REGIONAL\b"),
40
+ re.compile(r"\bPRÉ\s*RÉGIONAL\b"),
39
41
  ],
40
42
  NiveauType.DEPARTEMENTAL: [
41
43
  re.compile(r"\bDEPARTEMENTAL\b"),
42
44
  re.compile(r"\bDÉPARTEMENTAL\b"),
45
+ re.compile(r"\bDEPARTEMENTALE\b"),
46
+ re.compile(r"\bDÉPARTEMENTALE\b"),
43
47
  re.compile(r"\bD1\b"),
44
48
  re.compile(r"\bD2\b"),
45
49
  re.compile(r"\bD3\b"),
46
- re.compile(r"\bDEPARTEMENTALE\b"),
47
- re.compile(
48
- r"^DÉPARTEMENTALE\b"
49
- ), # Format simple: "Départementale masculine seniors"
50
+ re.compile(r"\bD4\b"),
51
+ re.compile(r"\bD5\b"),
50
52
  ],
51
53
  }
52
54
 
53
55
  # Patterns pour extraire les numéros de division
54
56
  DIVISION_PATTERNS = [
55
- re.compile(r"\b[DR](\d+)\b"), # R1, R2, D1, D2, etc.
56
- re.compile(r"\bREGIONAL\s+(\d+)\b"), # REGIONAL 1, REGIONAL 2
57
- re.compile(r"\bDEPARTEMENTAL\s+(\d+)\b"), # DEPARTEMENTAL 1, DEPARTEMENTAL 2
57
+ re.compile(r"\b[DR](\d+)\b"), # R1, R2, D1, D2, N1, etc.
58
+ re.compile(
59
+ r"\bR[ÉE]GIONALE?\s+(\d+)\b"
60
+ ), # REGIONAL 1, REGIONALE 2, RÉGIONALE 2
61
+ re.compile(
62
+ r"\bD[ÉE]PARTEMENTALE?\s+(\d+)\b"
63
+ ), # DEPARTEMENTAL 1, DEPARTEMENTALE 2
64
+ re.compile(r"\bNATIONALE?\s+(\d+)\b"), # NATIONAL 1, NATIONALE 2
58
65
  re.compile(r"-\s*DIVISION\s+(\d+)\b"), # - Division 3, - DIVISION 1
66
+ re.compile(r"\bDIV(?:ISION)?\s*(\d+)\b"), # DIV 1, DIVISION 2
59
67
  ]
60
68
 
61
69
  # Patterns pour les catégories
@@ -182,14 +190,12 @@ class NiveauExtractor:
182
190
  Returns:
183
191
  Objet Niveau ou None
184
192
  """
185
- # Essayer d'abord avec le nom de la compétition
186
193
  nom = competition_data.get("nom", "")
187
194
  niveau = cls.extract_niveau(nom)
188
195
 
189
196
  if niveau:
190
197
  return niveau
191
198
 
192
- # Essayer avec le code de la compétition
193
199
  code = competition_data.get("code", "")
194
200
  if code:
195
201
  niveau = cls.extract_niveau(code)
@@ -197,7 +203,6 @@ class NiveauExtractor:
197
203
  return niveau
198
204
 
199
205
 
200
- # Fonctions utilitaires pour l'analyse
201
206
  def get_niveau_from_idcompetition(idcompetition) -> NiveauInfo | None:
202
207
  """
203
208
  Extrait le niveau depuis un objet IdCompetitionModel.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ffbb-data-client
3
- Version: 2.4.17
3
+ Version: 2.4.19
4
4
  Summary: API FFBB — SDK Python moderne & asynchrone pour les donnees officielles de la Federation Francaise de BasketBall (clubs, classements, calendriers, lives, Meilisearch). Alternative moderne a ffbb-api-client.
5
5
  Home-page: https://github.com/nickdesi/ffbb-data-client
6
6
  Author: nickdesi
@@ -333,6 +333,7 @@ tests/unit/clients/test_meilisearch_async.py
333
333
  tests/unit/clients/test_search_many.py
334
334
  tests/unit/clients/test_v2_backport_search.py
335
335
  tests/unit/clients/test_v3_new_features.py
336
+ tests/unit/clients/test_v4_aiter_and_contacts.py
336
337
  tests/unit/clients/test_warm_cache.py
337
338
  tests/unit/helpers/__init__.py
338
339
  tests/unit/helpers/test_400_http_helpers.py
@@ -323,6 +323,7 @@
323
323
  "tests/unit/clients/test_search_many.py",
324
324
  "tests/unit/clients/test_v2_backport_search.py",
325
325
  "tests/unit/clients/test_v3_new_features.py",
326
+ "tests/unit/clients/test_v4_aiter_and_contacts.py",
326
327
  "tests/unit/clients/test_warm_cache.py",
327
328
  "tests/unit/conftest.py",
328
329
  "tests/unit/helpers/__init__.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "2.4.17",
2
+ "tag": "2.4.19",
3
3
  "distance": 0,
4
- "node": "ged3eff199bc01a22bce05689b3490d1bb0b4a885",
4
+ "node": "gded69bdac06884ca1e991c807d50637b9849d498",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-16"
@@ -1,17 +1,14 @@
1
1
  import time
2
2
  from datetime import datetime
3
3
 
4
+ import httpx
4
5
  import pytest
5
6
 
6
7
  from ffbb_data_client.models.get_poule_response import GetPouleResponse
7
8
  from ffbb_data_client.models.team_ranking import TeamRanking
8
9
 
9
- pytest.importorskip("starlette")
10
10
  pytest.importorskip("fastapi")
11
11
 
12
- # isort: split
13
- from starlette.testclient import TestClient # noqa: E402
14
-
15
12
  from ffbb_data_client.api import ( # noqa: E402
16
13
  LRUCache,
17
14
  _salle_cache,
@@ -77,9 +74,12 @@ def test_get_poule_response_classement_alias():
77
74
  assert poule.classement[0].organisme_nom == "SCBA"
78
75
 
79
76
 
80
- def test_health_endpoint_utc_timestamp():
81
- with TestClient(app) as client:
82
- res = client.get("/health")
77
+ @pytest.mark.asyncio
78
+ async def test_health_endpoint_utc_timestamp():
79
+ async with httpx.AsyncClient(
80
+ transport=httpx.ASGITransport(app=app), base_url="http://test"
81
+ ) as client:
82
+ res = await client.get("/health")
83
83
  assert res.status_code == 200
84
84
  data = res.json()
85
85
  assert data["status"] == "healthy"