ffbb-data-client 2.2.0__tar.gz → 2.3.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.
- ffbb_data_client-2.3.0/.agents/rules/antigravity-rtk-rules.md +32 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.github/workflows/update-ffbb-api-discovery.yml +1 -1
- ffbb_data_client-2.3.0/AGENTS.md +260 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/CHANGELOG.md +13 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/CONTRIBUTING.rst +0 -25
- {ffbb_data_client-2.2.0/src/ffbb_data_client.egg-info → ffbb_data_client-2.3.0}/PKG-INFO +23 -1
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/README.md +22 -0
- ffbb_data_client-2.3.0/data/api_update_summary.md +30 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/data/collections.json +20 -11
- {ffbb_data_client-2.2.0/src/ffbb_data_client → ffbb_data_client-2.3.0}/data/endpoint_discovery.json +64 -22
- {ffbb_data_client-2.2.0/src/ffbb_data_client → ffbb_data_client-2.3.0}/data/indexes.json +8 -7
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/data/openapi.json +564 -1
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/data/openapi_full.json +689 -15
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/docs/conf.py +1 -4
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/examples/team_ranking_analysis.py +2 -3
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/scripts/benchmark_search_organisme.py +1 -1
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/scripts/discover_endpoints.py +194 -13
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/clients/ffbb_data_client.py +6 -10
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/data/collections.json +20 -11
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0/src/ffbb_data_client}/data/endpoint_discovery.json +64 -22
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0/src/ffbb_data_client}/data/indexes.json +8 -7
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/data/openapi.json +564 -1
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/data/openapi_full.json +689 -15
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/get_competition_response.py +0 -1
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/get_organisme_response.py +0 -2
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0/src/ffbb_data_client.egg-info}/PKG-INFO +23 -1
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client.egg-info/SOURCES.txt +4 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/integration/test_504_input_validation.py +26 -19
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/integration/test_505_retry_timeout.py +3 -2
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/test_201_unit_tests_core.py +8 -6
- ffbb_data_client-2.3.0/tests/unit/utils/test_308_converter_utils_extended.py +239 -0
- ffbb_data_client-2.3.0/tools/update_agents_md.py +219 -0
- ffbb_data_client-2.2.0/data/api_update_summary.md +0 -24
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.coveragerc +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.github/dependabot.yml +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.github/scripts/check_wrapper_parity.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.github/workflows/check_wrapper_parity.yml +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.github/workflows/ci.yml +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.github/workflows/codeql.yml +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.github/workflows/deploy-pages.yml +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.github/workflows/publish.yml +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.github/workflows/release-after-discovery-merge.yml +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.gitignore +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.isort.cfg +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.jules/bolt.md +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.pre-commit-config.yaml +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.readthedocs.yml +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/AUTHORS.rst +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/LICENSE.txt +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/LOCAL_CI_GUIDE.md +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/RELEASE_NOTES.md +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/SECURITY.md +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/data/api.ffbb.app.json +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/data/meilisearch-prod.ffbb.app.json +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/data/type_discovery_corrections.json +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/docs/Makefile +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/docs/_static/.gitignore +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/docs/architecture.rst +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/docs/authors.rst +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/docs/changelog.rst +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/docs/contributing.rst +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/docs/examples.rst +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/docs/index.rst +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/docs/license.rst +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/docs/migration.rst +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/docs/readme.rst +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/docs/requirements.txt +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/docs/test_strategy.md +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/docs/testing_conventions.md +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/examples/README.md +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/examples/complete_usage_example.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/examples/quick_start.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/pyproject.toml +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/pytest.ini +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/run-ci-locally.sh +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/scripts/discover_types.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/setup.cfg +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/setup.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/__init__.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/clients/__init__.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/clients/_rest_facade.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/clients/_search_facade.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/clients/api_ffbb_app_client.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/clients/meilisearch_client.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/clients/meilisearch_ffbb_client.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/config.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/data/__init__.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/helpers/__init__.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/helpers/http_requests_helper.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/helpers/http_requests_utils.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/helpers/meilisearch_client_extension.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/helpers/multi_search_query_helper.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/__init__.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/affiche.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/cartographie.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/categorie.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/categorie_type.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/clock.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/club_contacts.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/code.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/commune.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competition_fields.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competition_id.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competition_id_categorie.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competition_id_sexe.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competition_id_type_competition.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competition_id_type_competition_generique.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competition_origine.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competition_origine_categorie.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competition_origine_type_competition.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competition_origine_type_competition_generique.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competition_type.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competitions_facet_distribution.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competitions_facet_stats.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competitions_hit.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competitions_multi_search_query.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/competitions_query.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/configuration_models.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/contact_info.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/content_multi_search_query.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/coordonnees.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/coordonnees_type.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/document_flyer.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/document_flyer_type.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/engagement_contacts.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/engagements_facet_distribution.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/engagements_facet_stats.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/engagements_hit.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/engagements_multi_search_query.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/etat.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/external_competition_id.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/external_id.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/facet_distribution.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/facet_stats.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/field_set.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/folder.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/formation_session.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/formations_facet_distribution.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/formations_facet_stats.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/formations_hit.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/formations_multi_search_query.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/game_stats_model.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/game_stats_models.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/generic_search.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/geo.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/geo_sort_order.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/get_commune_response.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/get_configuration_response.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/get_engagement_response.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/get_entraineur_response.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/get_formation_response.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/get_officiel_response.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/get_poule_response.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/get_pratique_response.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/get_rencontre_response.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/get_saisons_response.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/get_salle_response.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/get_terrain_response.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/get_tournoi_response.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/gradient_color.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/hit.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/id_engagement_equipe.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/id_organisme_equipe.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/id_organisme_equipe1_logo.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/id_poule.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/jour.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/label.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/labellisation.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/live.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/lives.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/logo.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/multi_search_queries.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/multi_search_query.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/multi_search_result_competitions.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/multi_search_result_engagements.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/multi_search_result_formations.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/multi_search_result_organismes.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/multi_search_result_pratiques.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/multi_search_result_rencontres.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/multi_search_result_salles.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/multi_search_result_terrains.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/multi_search_result_tournois.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/multi_search_results.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/multi_search_results_class.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/nature_sol.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/niveau.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/niveau_class.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/niveau_extractor.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/niveau_info.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/niveau_models.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/niveau_type.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/objectif.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/organisateur.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/organisateur_type.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/organisme_fields.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/organisme_id_pere.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/organismes_facet_distribution.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/organismes_facet_stats.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/organismes_hit.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/organismes_multi_search_query.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/organismes_query.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/phase_code.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/poule.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/poule_fields.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/poule_rencontre_item_model.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/poules_models.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/poules_query.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/pratique.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/pratiques_facet_distribution.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/pratiques_facet_stats.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/pratiques_hit.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/pratiques_hit_type.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/pratiques_multi_search_query.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/pratiques_type_class.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/publication_internet.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/purple_logo.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/query_fields_manager.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/ranking_engagement.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/rankings_models.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/rencontres_engagement.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/rencontres_facet_distribution.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/rencontres_facet_stats.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/rencontres_hit.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/rencontres_multi_search_query.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/saison.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/saison_fields.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/saisons_models.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/saisons_query.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/salle.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/salles_facet_distribution.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/salles_facet_stats.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/salles_hit.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/salles_multi_search_query.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/sexe.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/sexe_class.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/source.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/status.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/team_engagement.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/team_ranking.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/terrains_categorie_championnat_3x3_libelle.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/terrains_facet_distribution.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/terrains_facet_stats.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/terrains_hit.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/terrains_multi_search_query.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/terrains_name.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/terrains_sexe_enum.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/terrains_storage.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/tournoi_type_class.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/tournoi_type_enum.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/tournoi_types_3x3.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/tournoi_types_3x3_libelle.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/tournoi_types_3x3_libelle_enum.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/tournois_facet_distribution.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/tournois_facet_stats.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/tournois_hit.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/tournois_hit_type.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/tournois_libelle.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/tournois_multi_search_query.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/type_association.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/type_association_libelle.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/type_class.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/type_competition.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/type_competition_generique.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/type_enum.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/models/type_league.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/py.typed +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/utils/__init__.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/utils/cache_manager.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/utils/converter_utils.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/utils/input_validation.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/utils/retry_utils.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/utils/secure_logging.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client/utils/token_manager.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client.egg-info/dependency_links.txt +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client.egg-info/not-zip-safe +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client.egg-info/requires.txt +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/src/ffbb_data_client.egg-info/top_level.txt +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/conftest.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/e2e/__init__.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/e2e/conftest.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/integration/__init__.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/integration/conftest.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/integration/test_500_user_journey.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/integration/test_501_user_journey_v3.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/integration/test_502_enhanced_integration.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/integration/test_503_secure_logging.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/integration/test_506_raw_json_model_conversion.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/__init__.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/__init__.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/test_200_api_ffbb_app_client.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/test_202_meilisearch_client.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/test_203_meilisearch_client_extension.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/test_204_ffbb_data_client.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/test_205_meilisearch_ffbb_client.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/test_206_coverage_gaps_clients.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/test_207_coverage_clients_extended.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/test_208_new_methods_coverage.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/test_209_automatic_token_resolution.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/test_210_targeted_clients_helpers_coverage.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/test_async_methods.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/test_meilisearch_async.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/test_v2_backport_search.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/clients/test_v3_new_features.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/conftest.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/helpers/__init__.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/helpers/test_400_http_helpers.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/helpers/test_meilisearch_client_extension_recursive_pagination.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/__init__.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_100_competition_id_categorie.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_101_competition_id_sexe.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_102_competition_id_type_competition.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_103_competition_id_type_competition_generique.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_104_competition_origine_categorie.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_105_competition_origine_type_competition_generique.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_106_competition_origine.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_107_id_engagement_equipe.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_108_id_organisme_equipe.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_109_id_organisme_equipe1_logo.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_110_labellisation.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_111_niveau_class.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_112_purple_logo.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_113_salle.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_114_tournoi_type_class.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_115_type_association_libelle.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_116_type_competition_generique.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_117_organisateur.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_118_competition_id.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_119_terrains_inner_models.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_120_pratiques_inner_models.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_121_to_dict_round_trip.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_122_coverage_gaps.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_123_missing_coverage.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_123_v2_backport.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_124_targeted_coverage_gains.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/models/test_dx_aliases.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/utils/__init__.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/utils/test_300_secure_logging.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/utils/test_301_input_validation.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/utils/test_302_retry_utils.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/utils/test_303_cache_manager.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/utils/test_304_config.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/utils/test_305_token_manager.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/utils/test_306_converter_utils.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tests/unit/utils/test_307_coverage_gaps_utils.py +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/tox.ini +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/website/assets/logo.webp +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/website/css/style.css +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/website/index.html +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/website/robots.txt +0 -0
- {ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/website/sitemap.xml +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# RTK - Rust Token Killer (Google Antigravity)
|
|
2
|
+
|
|
3
|
+
**Usage**: Token-optimized CLI proxy for shell commands.
|
|
4
|
+
|
|
5
|
+
## Rule
|
|
6
|
+
|
|
7
|
+
Always prefix shell commands with `rtk` to minimize token consumption.
|
|
8
|
+
|
|
9
|
+
Examples:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
rtk git status
|
|
13
|
+
rtk cargo test
|
|
14
|
+
rtk ls src/
|
|
15
|
+
rtk grep "pattern" src/
|
|
16
|
+
rtk find "*.rs" .
|
|
17
|
+
rtk docker ps
|
|
18
|
+
rtk gh pr list
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Meta Commands
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
rtk gain # Show token savings
|
|
25
|
+
rtk gain --history # Command history with savings
|
|
26
|
+
rtk discover # Find missed RTK opportunities
|
|
27
|
+
rtk proxy <cmd> # Run raw (no filtering, for debugging)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Why
|
|
31
|
+
|
|
32
|
+
RTK filters and compresses command output before it reaches the LLM context, saving 60-90% tokens on common operations. Always use `rtk <cmd>` instead of raw commands.
|
{ffbb_data_client-2.2.0 → ffbb_data_client-2.3.0}/.github/workflows/update-ffbb-api-discovery.yml
RENAMED
|
@@ -35,7 +35,7 @@ jobs:
|
|
|
35
35
|
- name: Detect structural discovery changes
|
|
36
36
|
id: changes
|
|
37
37
|
run: |
|
|
38
|
-
if grep -Eq '^- (Added|Removed): \[' data/api_update_summary.md; then
|
|
38
|
+
if grep -Eq '^- (Added|Removed): \[' data/api_update_summary.md || grep -q 'drift' data/api_update_summary.md; then
|
|
39
39
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
40
40
|
else
|
|
41
41
|
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
# FFBB Data Client SDK
|
|
2
|
+
|
|
3
|
+
> ⚠️ **Fichier auto-généré** par `tools/update_agents_md.py` — ne pas modifier manuellement.
|
|
4
|
+
> Dernière mise à jour : ffbb-data-client | SDK total : ~18767 lignes de code
|
|
5
|
+
> (clients: 6259, models: 9878, utils: 1840, helpers: 790)
|
|
6
|
+
|
|
7
|
+
## Langue
|
|
8
|
+
Tous les documents de travail (walkthrough.md, implementation_plan.md) DOIVENT être en français.
|
|
9
|
+
|
|
10
|
+
## Persona
|
|
11
|
+
Expert en basketball français et intégration technique.
|
|
12
|
+
Accès au SDK Python de bas niveau `ffbb-data-client` connecté à l'API et au Meilisearch officiel de la FFBB.
|
|
13
|
+
|
|
14
|
+
## Méthodes REST du Client (Exemples importants)
|
|
15
|
+
Le SDK expose les méthodes directes de récupération de données suivantes via `FFBBDataClient` :
|
|
16
|
+
- `get_organisme_for_search` : Version allégée de get_organisme() pour les contextes de recherche
|
|
17
|
+
- `get_organisme_for_search_async` : Version async allégée de get_organisme() pour les contextes de recherche
|
|
18
|
+
- `get_configuration` : Retrieves the API configuration including bearer tokens
|
|
19
|
+
- `get_configuration_async` : Retrieves the API configuration including bearer tokens asynchronously
|
|
20
|
+
- `get_competition` : Retrieves detailed information about a competition
|
|
21
|
+
- `get_competition_async` : Retrieves detailed information about a competition asynchronously
|
|
22
|
+
- `list_competitions` : Lists competitions with optional field selection
|
|
23
|
+
- `list_competitions_async` : Lists competitions asynchronously
|
|
24
|
+
- `get_lives` : Retrieves a list of live events
|
|
25
|
+
- `get_lives_async` : Retrieves a list of live events asynchronously
|
|
26
|
+
- `get_organisme` : Retrieves detailed information about an organisme
|
|
27
|
+
- `get_organisme_async` : Retrieves detailed information about an organisme asynchronously
|
|
28
|
+
- `get_club_contacts` : Return club contact information (club-level + membres) for an organisme
|
|
29
|
+
- `get_poule` : Retrieves detailed information about a poule
|
|
30
|
+
- `get_poule_async` : Retrieves detailed information about a poule asynchronously
|
|
31
|
+
- `get_saisons` : Retrieves list of seasons with comprehensive input validation
|
|
32
|
+
- `get_saisons_async` : Retrieves list of seasons asynchronously with input validation
|
|
33
|
+
- `get_classement` : Retrieves ONLY the ranking (classement) for a specific poule
|
|
34
|
+
- `get_classement_async` : Retrieves ONLY the ranking (classement) for a specific poule asynchronously
|
|
35
|
+
- `get_equipes` : Retrieves ONLY the team commitments (engagements) for a specific club
|
|
36
|
+
- `get_equipes_async` : Retrieves ONLY the team commitments (engagements) for a specific club asynchronously
|
|
37
|
+
- `get_rencontre` : Retrieves detailed information about a rencontre
|
|
38
|
+
- `get_rencontre_async` : Asynchronously retrieves detailed information about a rencontre
|
|
39
|
+
- `get_engagement` : Retrieves detailed information about an engagement
|
|
40
|
+
- `get_engagement_async` : Asynchronously retrieves detailed information about an engagement
|
|
41
|
+
- `get_engagement_contacts` : Return compact contact information for an engagement
|
|
42
|
+
- `get_formation` : Retrieves detailed information about a formation
|
|
43
|
+
- `get_formation_async` : Asynchronously retrieves detailed information about a formation
|
|
44
|
+
- `get_entraineur` : Retrieves detailed information about an entraineur
|
|
45
|
+
- `get_entraineur_async` : Asynchronously retrieves detailed information about an entraineur
|
|
46
|
+
- `get_commune` : Retrieves detailed information about a commune
|
|
47
|
+
- `get_commune_async` : Asynchronously retrieves detailed information about a commune
|
|
48
|
+
- `get_officiel` : Retrieves detailed information about an officiel
|
|
49
|
+
- `get_officiel_async` : Asynchronously retrieves detailed information about an officiel
|
|
50
|
+
- `get_salle` : Retrieves detailed information about a salle
|
|
51
|
+
- `get_salle_async` : Asynchronously retrieves detailed information about a salle
|
|
52
|
+
- `get_terrain` : Retrieves detailed information about a terrain
|
|
53
|
+
- `get_terrain_async` : Asynchronously retrieves detailed information about a terrain
|
|
54
|
+
- `get_tournoi` : Retrieves detailed information about a tournoi
|
|
55
|
+
- `get_tournoi_async` : Asynchronously retrieves detailed information about a tournoi
|
|
56
|
+
- `get_pratique` : Retrieves detailed information about a pratique
|
|
57
|
+
- `get_pratique_async` : Asynchronously retrieves detailed information about a pratique
|
|
58
|
+
- `get_openapi_spec` : Retrieves the current Directus OpenAPI specification
|
|
59
|
+
- `get_openapi_spec_async` : Asynchronously retrieves the current Directus OpenAPI specification
|
|
60
|
+
- `get_session` : Retrieves detailed information about a formation session
|
|
61
|
+
- `get_session_async` : Asynchronously retrieves detailed information about a formation session
|
|
62
|
+
- `list_sessions` : Lists formation sessions
|
|
63
|
+
- `list_sessions_async` : Asynchronously lists formation sessions
|
|
64
|
+
- `get_genius_sport_match` : Retrieves detailed Genius Sports match statistics
|
|
65
|
+
- `get_genius_sport_match_async` : Asynchronously retrieves detailed Genius Sports match statistics
|
|
66
|
+
- `list_genius_sport_matches` : Lists Genius Sports match statistics
|
|
67
|
+
- `list_genius_sport_matches_async` : Asynchronously lists Genius Sports match statistics
|
|
68
|
+
- `list_genius_sports_live_logs` : Lists Genius Sports live logs
|
|
69
|
+
- `list_genius_sports_live_logs_async` : Asynchronously lists Genius Sports live logs
|
|
70
|
+
- `get_rematch_video` : Retrieves a Rematch video linked to FFBB data
|
|
71
|
+
- `get_rematch_video_async` : Asynchronously retrieves a Rematch video linked to FFBB data
|
|
72
|
+
- `list_rematch_videos` : Lists Rematch videos linked to FFBB data
|
|
73
|
+
- `list_rematch_videos_async` : Asynchronously lists Rematch videos linked to FFBB data
|
|
74
|
+
- `get_edf_match` : Retrieves an Equipe de France match
|
|
75
|
+
- `get_edf_match_async` : Asynchronously retrieves an Equipe de France match
|
|
76
|
+
- `list_edf_matches` : Lists Equipe de France matches
|
|
77
|
+
- `list_edf_matches_async` : Asynchronously lists Equipe de France matches
|
|
78
|
+
- `get_edf_player` : Retrieves an Equipe de France player
|
|
79
|
+
- `get_edf_player_async` : Asynchronously retrieves an Equipe de France player
|
|
80
|
+
- `list_edf_players` : Lists Equipe de France players
|
|
81
|
+
- `list_edf_players_async` : Asynchronously lists Equipe de France players
|
|
82
|
+
- `list_edf_teams` : Lists Equipe de France teams
|
|
83
|
+
- `list_edf_teams_async` : Asynchronously lists Equipe de France teams
|
|
84
|
+
- `list_edf_rosters` : Lists Equipe de France rosters
|
|
85
|
+
- `list_edf_rosters_async` : Asynchronously lists Equipe de France rosters
|
|
86
|
+
- `list_rencontres` :
|
|
87
|
+
- `list_rencontres_async` :
|
|
88
|
+
- `list_salles` :
|
|
89
|
+
- `list_salles_async` :
|
|
90
|
+
- `list_terrains` :
|
|
91
|
+
- `list_terrains_async` :
|
|
92
|
+
- `list_tournois` :
|
|
93
|
+
- `list_tournois_async` :
|
|
94
|
+
- `list_engagements` :
|
|
95
|
+
- `list_engagements_async` :
|
|
96
|
+
- `list_formations` :
|
|
97
|
+
- `list_formations_async` :
|
|
98
|
+
- `list_entraineurs` :
|
|
99
|
+
- `list_entraineurs_async` :
|
|
100
|
+
- `list_communes` :
|
|
101
|
+
- `list_communes_async` :
|
|
102
|
+
- `list_officiels` :
|
|
103
|
+
- `list_officiels_async` :
|
|
104
|
+
- `list_pratiques` :
|
|
105
|
+
- `list_pratiques_async` :
|
|
106
|
+
- `list_all_rencontres` :
|
|
107
|
+
- `list_all_rencontres_async` :
|
|
108
|
+
- `list_all_salles` :
|
|
109
|
+
- `list_all_salles_async` :
|
|
110
|
+
- `list_all_terrains` :
|
|
111
|
+
- `list_all_terrains_async` :
|
|
112
|
+
- `list_all_tournois` :
|
|
113
|
+
- `list_all_tournois_async` :
|
|
114
|
+
- `list_all_engagements` :
|
|
115
|
+
- `list_all_engagements_async` :
|
|
116
|
+
- `list_all_formations` :
|
|
117
|
+
- `list_all_formations_async` :
|
|
118
|
+
- `list_all_entraineurs` :
|
|
119
|
+
- `list_all_entraineurs_async` :
|
|
120
|
+
- `list_all_communes` :
|
|
121
|
+
- `list_all_communes_async` :
|
|
122
|
+
- `list_all_officiels` :
|
|
123
|
+
- `list_all_officiels_async` :
|
|
124
|
+
- `list_all_pratiques` :
|
|
125
|
+
- `list_all_pratiques_async` :
|
|
126
|
+
- `list_engagements_by_ids` :
|
|
127
|
+
- `list_engagements_by_poule` :
|
|
128
|
+
- `list_engagements_by_poules` :
|
|
129
|
+
- `list_rencontres_by_poule` :
|
|
130
|
+
- `list_rencontres_by_poules` :
|
|
131
|
+
- `list_entraineurs_by_ids` :
|
|
132
|
+
|
|
133
|
+
## Méthodes de Recherche Meilisearch (Exemples importants)
|
|
134
|
+
Le SDK expose également des méthodes de recherche optimisées avec facettes, géolocalisation et filtres via Meilisearch :
|
|
135
|
+
- `multi_search` : Perform multi-search across all resource types with input validation
|
|
136
|
+
- `multi_search_async` : Performs a smart multi-search asynchronously
|
|
137
|
+
- `search_competitions` :
|
|
138
|
+
- `search_multiple_competitions` :
|
|
139
|
+
- `search_competitions_async` : Search for competitions asynchronously
|
|
140
|
+
- `search_multiple_competitions_async` : Search for multiple competitions asynchronously
|
|
141
|
+
- `search_organismes` :
|
|
142
|
+
- `search_organismes_by_geo` :
|
|
143
|
+
- `search_organismes_by_city` :
|
|
144
|
+
- `search_multiple_organismes` :
|
|
145
|
+
- `search_organismes_async` : Search for organismes asynchronously
|
|
146
|
+
- `search_multiple_organismes_async` : Search for multiple organismes asynchronously
|
|
147
|
+
- `search_pratiques` :
|
|
148
|
+
- `search_multiple_pratiques` :
|
|
149
|
+
- `search_pratiques_async` : Search for pratiques asynchronously
|
|
150
|
+
- `search_multiple_pratiques_async` : Search for multiple pratiques asynchronously
|
|
151
|
+
- `search_rencontres` :
|
|
152
|
+
- `search_multiple_rencontres` :
|
|
153
|
+
- `search_rencontres_async` : Search for rencontres asynchronously
|
|
154
|
+
- `search_multiple_rencontres_async` : Search for multiple rencontres asynchronously
|
|
155
|
+
- `search_salles` :
|
|
156
|
+
- `search_salles_by_geo` :
|
|
157
|
+
- `search_multiple_salles` :
|
|
158
|
+
- `search_salles_async` : Search for salles asynchronously
|
|
159
|
+
- `search_multiple_salles_async` : Search for multiple salles asynchronously
|
|
160
|
+
- `search_terrains` :
|
|
161
|
+
- `search_multiple_terrains` :
|
|
162
|
+
- `search_terrains_async` : Search for terrains asynchronously
|
|
163
|
+
- `search_multiple_terrains_async` : Search for multiple terrains asynchronously
|
|
164
|
+
- `search_tournois` :
|
|
165
|
+
- `search_multiple_tournois` :
|
|
166
|
+
- `search_tournois_async` : Search for tournois asynchronously
|
|
167
|
+
- `search_multiple_tournois_async` : Search for multiple tournois asynchronously
|
|
168
|
+
- `search_engagements` :
|
|
169
|
+
- `search_engagements_by_geo` :
|
|
170
|
+
- `search_engagements_filtered` :
|
|
171
|
+
- `search_multiple_engagements` :
|
|
172
|
+
- `search_engagements_async` : Search for engagements asynchronously
|
|
173
|
+
- `search_multiple_engagements_async` : Search for multiple engagements asynchronously
|
|
174
|
+
- `search_formations` :
|
|
175
|
+
- `search_multiple_formations` :
|
|
176
|
+
- `search_formations_async` : Search for formations asynchronously
|
|
177
|
+
- `search_multiple_formations_async` : Search for multiple formations asynchronously
|
|
178
|
+
- `search_news` :
|
|
179
|
+
- `search_multiple_news` :
|
|
180
|
+
- `search_youtube_videos` :
|
|
181
|
+
- `search_multiple_youtube_videos` :
|
|
182
|
+
- `search_rss` :
|
|
183
|
+
- `search_multiple_rss` :
|
|
184
|
+
- `search_galeries` :
|
|
185
|
+
- `search_multiple_galeries` :
|
|
186
|
+
|
|
187
|
+
## Variables d'environnement
|
|
188
|
+
Le SDK résout automatiquement les jetons de sécurité via les variables d'environnement suivantes
|
|
189
|
+
ou interroge l'API publique en cache en cas d'absence :
|
|
190
|
+
|
|
191
|
+
| Variable | Défaut | Usage |
|
|
192
|
+
|----------|--------|-------|
|
|
193
|
+
| `API_FFBB_APP_BEARER_TOKEN` | — | Jeton Bearer de sécurité pour requêter directement l'API FFBB (api.ffbb.app) |
|
|
194
|
+
| `MEILISEARCH_BEARER_TOKEN` | — | Jeton Bearer de sécurité pour interroger le moteur Meilisearch (meilisearch-prod.ffbb.app) |
|
|
195
|
+
|
|
196
|
+
## Règles de comportement des agents
|
|
197
|
+
- **RTK OBLIGATOIRE** : Utilisez TOUJOURS le préfixe `rtk` pour toutes les commandes terminal
|
|
198
|
+
exécutées sur la machine de l'utilisateur (ex: `rtk pytest`, `rtk tox`, etc.).
|
|
199
|
+
- **Tox & Pytest** : Privilégiez l'exécution des tests via `pytest` local ou `tox` pour valider
|
|
200
|
+
les évolutions du SDK sur les différentes versions de Python prises en charge.
|
|
201
|
+
- **Modèles typés** : Respectez scrupuleusement la déclaration des types Pydantic de `ffbb_data_client.models`.
|
|
202
|
+
Tout nouveau modèle ou modification de champ doit correspondre aux spécifications de l'API FFBB.
|
|
203
|
+
- **Réponses en français** : Communiquez et expliquez toujours vos changements ou vos analyses en langue française.
|
|
204
|
+
|
|
205
|
+
## Karpathy Guidelines (Règles de développement)
|
|
206
|
+
Ces directives inspirées d'Andrej Karpathy visent à éliminer les erreurs de codage courantes en privilégiant la simplicité et la rigueur :
|
|
207
|
+
|
|
208
|
+
### 1. Penser avant de coder (Think Before Coding)
|
|
209
|
+
- **Ne pas assumer, ne pas cacher la confusion, expliciter les compromis.**
|
|
210
|
+
- Avant d'implémenter :
|
|
211
|
+
- Déclarez vos hypothèses de manière explicite. En cas d'incertitude, demandez.
|
|
212
|
+
- S'il existe plusieurs interprétations, présentez-les — ne choisissez pas en silence.
|
|
213
|
+
- Si une approche plus simple existe, proposez-la. Argumentez contre la complexité inutile si nécessaire.
|
|
214
|
+
- Si quelque chose n'est pas clair, arrêtez-vous. Nommez ce qui vous perturbe et demandez confirmation.
|
|
215
|
+
|
|
216
|
+
### 2. La simplicité d'abord (Simplicity First)
|
|
217
|
+
- **Le minimum de code nécessaire pour résoudre le problème. Rien de spéculatif.**
|
|
218
|
+
- Pas de fonctionnalités au-delà de ce qui est explicitement demandé.
|
|
219
|
+
- Pas d'abstractions pour du code à usage unique.
|
|
220
|
+
- Pas de "flexibilité" ou de "configurabilité" non requise.
|
|
221
|
+
- Pas de gestion d'erreurs pour des scénarios impossibles.
|
|
222
|
+
- Si vous écrivez 200 lignes alors que 50 suffiraient, réécrivez-le.
|
|
223
|
+
- Posez-vous toujours la question : "Est-ce qu'un développeur senior validerait cette implémentation comme simple et directe ?"
|
|
224
|
+
|
|
225
|
+
## Architecture du SDK
|
|
226
|
+
```
|
|
227
|
+
src/ffbb_data_client/
|
|
228
|
+
├── __init__.py # Point d'entrée du SDK, expose FFBBDataClient et FFBBTokens
|
|
229
|
+
├── clients/ # Clients d'API (REST et Meilisearch) et façades (≈6259 lignes)
|
|
230
|
+
├── config.py # Configuration centralisée (URLs, Headers, Endpoints, Facettes)
|
|
231
|
+
├── data/ # Ressources et données statiques
|
|
232
|
+
├── helpers/ # Méthodes utilitaires pour requêtes HTTP et mapping (≈790 lignes)
|
|
233
|
+
├── models/ # Modèles de données Pydantic type-safe (≈9878 lignes)
|
|
234
|
+
├── py.typed # Marqueur pour la compatibilité avec mypy
|
|
235
|
+
└── utils/ # Gestionnaires transversaux (cache, jetons de sécurité, validation) (≈1840 lignes)
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## Conventions de code
|
|
239
|
+
- **Modèles Pydantic** : Tous les modèles héritent de `pydantic.BaseModel` et fournissent une validation stricte.
|
|
240
|
+
- **Async/Sync en parallèle** : Le SDK implémente systématiquement la double interface synchrone (`get_x`)
|
|
241
|
+
et asynchrone (`get_x_async`) pour un maximum de flexibilité d'intégration.
|
|
242
|
+
- **Cache HTTP** : Utilisation d'`hishel` pour le cache de requêtes HTTP asynchrones et d'un cache local
|
|
243
|
+
configurable pour optimiser les appels et respecter les quotas FFBB.
|
|
244
|
+
- **Validation** : Les paramètres passés à `FFBBDataClient.create` sont strictement validés
|
|
245
|
+
via les utilitaires de validation robustes de `utils/input_validation.py`.
|
|
246
|
+
|
|
247
|
+
## Commandes courantes
|
|
248
|
+
- Lancer les tests locaux : `rtk pytest`
|
|
249
|
+
- Lancer la suite d'intégration Tox : `rtk tox`
|
|
250
|
+
- Vérifier les types : `rtk mypy src`
|
|
251
|
+
- Formater et vérifier le style : `rtk ruff format . && rtk ruff check .`
|
|
252
|
+
|
|
253
|
+
## Push / Tag / Release Gate
|
|
254
|
+
⚠️ OBLIGATION STRICTE : Toutes ces commandes DOIVENT être préfixées par 'rtk' dans le terminal
|
|
255
|
+
(ex: 'rtk pytest'). Ne jamais exécuter de commande nue sans 'rtk'.
|
|
256
|
+
Avant push/tag/release :
|
|
257
|
+
1. `rtk ruff format --check .`
|
|
258
|
+
2. `rtk ruff check .`
|
|
259
|
+
3. `rtk mypy src`
|
|
260
|
+
4. `rtk pytest`
|
|
@@ -5,6 +5,19 @@ 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.3.0] - 2026-05-24
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **API Schema Drift Detection**: Automated detection of changes inside Directus OpenAPI schemas (added/removed/modified properties, nested types, and nullability changes)
|
|
12
|
+
- **Meilisearch Attributes Drift Detection**: Automated detection of changes inside Meilisearch index schemas (`sampleKeys`) with robust sampling over 20 hits
|
|
13
|
+
- **CI/CD Pull Request Automation**: Pre-commit hooks and GitHub Actions workflow automatically open a Pull Request when any API property or index drift is detected
|
|
14
|
+
- Detailed Schema Drift reporting in `data/api_update_summary.md` and `report["drift"]` payload
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
- Robust Meilisearch sampling: index keys are now aggregated across 20 hits instead of 1, preventing false positives on optional null fields
|
|
18
|
+
- Pre-commit & flake8 E501 line too long violations in `tools/update_agents_md.py`
|
|
19
|
+
- Formatted `AGENTS.md` spacing and line wrapping for flawless agent ingestion
|
|
20
|
+
|
|
8
21
|
## [2.2.0] - 2026-05-17
|
|
9
22
|
|
|
10
23
|
### Changed
|
|
@@ -1,28 +1,3 @@
|
|
|
1
|
-
.. todo:: THIS IS SUPPOSED TO BE AN EXAMPLE. MODIFY IT ACCORDING TO YOUR NEEDS!
|
|
2
|
-
|
|
3
|
-
The document assumes you are using a source repository service that promotes a
|
|
4
|
-
contribution model similar to `GitHub's fork and pull request workflow`_.
|
|
5
|
-
While this is true for the majority of services (like GitHub, GitLab,
|
|
6
|
-
BitBucket), it might not be the case for private repositories (e.g., when
|
|
7
|
-
using Gerrit).
|
|
8
|
-
|
|
9
|
-
Also notice that the code examples might refer to GitHub URLs or the text
|
|
10
|
-
might use GitHub specific terminology (e.g., *Pull Request* instead of *Merge
|
|
11
|
-
Request*).
|
|
12
|
-
|
|
13
|
-
Please make sure to check the document having these assumptions in mind
|
|
14
|
-
and update things accordingly.
|
|
15
|
-
|
|
16
|
-
.. todo:: Provide the correct links/replacements at the bottom of the document.
|
|
17
|
-
|
|
18
|
-
.. todo:: You might want to have a look on `PyScaffold's contributor's guide`_,
|
|
19
|
-
|
|
20
|
-
especially if your project is open source. The text should be very similar to
|
|
21
|
-
this template, but there are a few extra contents that you might decide to
|
|
22
|
-
also include, like mentioning labels of your issue tracker or automated
|
|
23
|
-
releases.
|
|
24
|
-
|
|
25
|
-
|
|
26
1
|
============
|
|
27
2
|
Contributing
|
|
28
3
|
============
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ffbb-data-client
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3.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
|
|
@@ -316,6 +316,28 @@ Documentation complémentaire :
|
|
|
316
316
|
|
|
317
317
|
---
|
|
318
318
|
|
|
319
|
+
## 🛠️ Découverte d'API et Détection de Drift (Schema Drift)
|
|
320
|
+
|
|
321
|
+
Le projet intègre un système robuste de surveillance quotidienne de l'API de production de la FFBB (Directus & Meilisearch) afin de détecter immédiatement l'apparition de nouvelles ressources, de nouveaux champs ou de changements de types.
|
|
322
|
+
|
|
323
|
+
### 1. Fonctionnement
|
|
324
|
+
* **Script de découverte** : `scripts/discover_endpoints.py` interroge dynamiquement l'OpenAPI spec Directus de la FFBB, extrait toutes les collections, sonde les index Meilisearch (via un échantillonnage agrégé sur 20 hits) et calcule les différences structurelles avec les fichiers locaux.
|
|
325
|
+
* **Détection de dérive** : Le script compare les structures internes de chaque modèle (propriétés ajoutées, supprimées ou types modifiés) ainsi que les attributs Meilisearch, et génère un rapport consolidé dans `data/api_update_summary.md`.
|
|
326
|
+
|
|
327
|
+
### 2. Automatisation CI/CD
|
|
328
|
+
Un workflow quotidien (`update-ffbb-api-discovery.yml`) s'exécute chaque matin à 5h17 UTC pour :
|
|
329
|
+
1. Télécharger l'OpenAPI spec et sonder Meilisearch en production.
|
|
330
|
+
2. Analyser les dérives structurelles.
|
|
331
|
+
3. Si un changement structurel est détecté (ajout de collection, de propriétés ou d'index), le workflow ouvre automatiquement une **Pull Request** sur GitHub contenant un résumé des modifications pour permettre aux développeurs de mettre à jour les modèles Pydantic.
|
|
332
|
+
|
|
333
|
+
### 3. Exécution locale
|
|
334
|
+
Pour lancer manuellement la découverte d'API et mettre à jour les fichiers de schémas locaux :
|
|
335
|
+
```bash
|
|
336
|
+
python scripts/discover_endpoints.py
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
319
341
|
## 🤖 Intégration IA / MCP
|
|
320
342
|
|
|
321
343
|
Le client sert de base au serveur MCP FFBB et expose une API stable pour construire des outils agent-friendly : recherche de clubs, récupération de poules, classements, lives, calendriers et détails de rencontres.
|
|
@@ -264,6 +264,28 @@ Documentation complémentaire :
|
|
|
264
264
|
|
|
265
265
|
---
|
|
266
266
|
|
|
267
|
+
## 🛠️ Découverte d'API et Détection de Drift (Schema Drift)
|
|
268
|
+
|
|
269
|
+
Le projet intègre un système robuste de surveillance quotidienne de l'API de production de la FFBB (Directus & Meilisearch) afin de détecter immédiatement l'apparition de nouvelles ressources, de nouveaux champs ou de changements de types.
|
|
270
|
+
|
|
271
|
+
### 1. Fonctionnement
|
|
272
|
+
* **Script de découverte** : `scripts/discover_endpoints.py` interroge dynamiquement l'OpenAPI spec Directus de la FFBB, extrait toutes les collections, sonde les index Meilisearch (via un échantillonnage agrégé sur 20 hits) et calcule les différences structurelles avec les fichiers locaux.
|
|
273
|
+
* **Détection de dérive** : Le script compare les structures internes de chaque modèle (propriétés ajoutées, supprimées ou types modifiés) ainsi que les attributs Meilisearch, et génère un rapport consolidé dans `data/api_update_summary.md`.
|
|
274
|
+
|
|
275
|
+
### 2. Automatisation CI/CD
|
|
276
|
+
Un workflow quotidien (`update-ffbb-api-discovery.yml`) s'exécute chaque matin à 5h17 UTC pour :
|
|
277
|
+
1. Télécharger l'OpenAPI spec et sonder Meilisearch en production.
|
|
278
|
+
2. Analyser les dérives structurelles.
|
|
279
|
+
3. Si un changement structurel est détecté (ajout de collection, de propriétés ou d'index), le workflow ouvre automatiquement une **Pull Request** sur GitHub contenant un résumé des modifications pour permettre aux développeurs de mettre à jour les modèles Pydantic.
|
|
280
|
+
|
|
281
|
+
### 3. Exécution locale
|
|
282
|
+
Pour lancer manuellement la découverte d'API et mettre à jour les fichiers de schémas locaux :
|
|
283
|
+
```bash
|
|
284
|
+
python scripts/discover_endpoints.py
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
267
289
|
## 🤖 Intégration IA / MCP
|
|
268
290
|
|
|
269
291
|
Le client sert de base au serveur MCP FFBB et expose une API stable pour construire des outils agent-friendly : recherche de clubs, récupération de poules, classements, lives, calendriers et détails de rencontres.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# FFBB API update summary
|
|
2
|
+
|
|
3
|
+
- Timestamp: `2026-05-24T11:03:57.203628+00:00`
|
|
4
|
+
- API base URL: `https://api.ffbb.app/`
|
|
5
|
+
- Meilisearch base URL: `https://meilisearch-prod.ffbb.app/`
|
|
6
|
+
- OpenAPI version: `9be33d74bfb480282da91c53c8dfa29804914c96`
|
|
7
|
+
- OpenAPI SHA256: `d63e8450719e2580e1ab6c4960d6de978c1e2ab457f5e9d71cc3e872ed272641`
|
|
8
|
+
|
|
9
|
+
## Directus collections
|
|
10
|
+
- Total: `164`
|
|
11
|
+
- Added: None
|
|
12
|
+
- Removed: None
|
|
13
|
+
|
|
14
|
+
## Directus item paths
|
|
15
|
+
- Total: `331`
|
|
16
|
+
- Added: None
|
|
17
|
+
- Removed: None
|
|
18
|
+
|
|
19
|
+
## Meilisearch indexes
|
|
20
|
+
- Available total: `13`
|
|
21
|
+
- Added: None
|
|
22
|
+
- Removed: None
|
|
23
|
+
|
|
24
|
+
## Directus schema properties drift
|
|
25
|
+
- **ItemsFfbbsiteBlockJobs** :
|
|
26
|
+
- Added properties: `code`, `subscription_form`, `type_filter`
|
|
27
|
+
- **ItemsFfbbsiteJobs** :
|
|
28
|
+
- Added properties: `category`, `date_published`, `degree`, `postal_code`, `structure`, `structure_linked`, `terms_contact`, `type`
|
|
29
|
+
|
|
30
|
+
Generated by `python scripts/discover_endpoints.py`.
|
|
@@ -332,9 +332,9 @@
|
|
|
332
332
|
"items/youtube_videos_youtube_tags"
|
|
333
333
|
],
|
|
334
334
|
"metadata": {
|
|
335
|
-
"openapi_version": "
|
|
335
|
+
"openapi_version": "9be33d74bfb480282da91c53c8dfa29804914c96",
|
|
336
336
|
"source": "https://api.ffbb.app/server/specs/oas",
|
|
337
|
-
"timestamp": "2026-
|
|
337
|
+
"timestamp": "2026-05-24T11:03:51.034202+00:00"
|
|
338
338
|
},
|
|
339
339
|
"paths": {
|
|
340
340
|
"items/configuration": [
|
|
@@ -788,13 +788,15 @@
|
|
|
788
788
|
"get"
|
|
789
789
|
],
|
|
790
790
|
"items/ffbbsite_block_assets": [
|
|
791
|
-
"get"
|
|
791
|
+
"get",
|
|
792
|
+
"post"
|
|
792
793
|
],
|
|
793
794
|
"items/ffbbsite_block_assets/{id}": [
|
|
794
795
|
"get"
|
|
795
796
|
],
|
|
796
797
|
"items/ffbbsite_block_assets_directus_files": [
|
|
797
|
-
"get"
|
|
798
|
+
"get",
|
|
799
|
+
"post"
|
|
798
800
|
],
|
|
799
801
|
"items/ffbbsite_block_assets_directus_files/{id}": [
|
|
800
802
|
"get"
|
|
@@ -812,7 +814,8 @@
|
|
|
812
814
|
"get"
|
|
813
815
|
],
|
|
814
816
|
"items/ffbbsite_block_assets_files": [
|
|
815
|
-
"get"
|
|
817
|
+
"get",
|
|
818
|
+
"post"
|
|
816
819
|
],
|
|
817
820
|
"items/ffbbsite_block_assets_files/{id}": [
|
|
818
821
|
"get"
|
|
@@ -1100,37 +1103,43 @@
|
|
|
1100
1103
|
"get"
|
|
1101
1104
|
],
|
|
1102
1105
|
"items/ffbbsite_jobs": [
|
|
1103
|
-
"get"
|
|
1106
|
+
"get",
|
|
1107
|
+
"post"
|
|
1104
1108
|
],
|
|
1105
1109
|
"items/ffbbsite_jobs/{id}": [
|
|
1106
1110
|
"get"
|
|
1107
1111
|
],
|
|
1108
1112
|
"items/ffbbsite_jobs_contracts": [
|
|
1109
|
-
"get"
|
|
1113
|
+
"get",
|
|
1114
|
+
"post"
|
|
1110
1115
|
],
|
|
1111
1116
|
"items/ffbbsite_jobs_contracts/{id}": [
|
|
1112
1117
|
"get"
|
|
1113
1118
|
],
|
|
1114
1119
|
"items/ffbbsite_jobs_domains": [
|
|
1115
|
-
"get"
|
|
1120
|
+
"get",
|
|
1121
|
+
"post"
|
|
1116
1122
|
],
|
|
1117
1123
|
"items/ffbbsite_jobs_domains/{id}": [
|
|
1118
1124
|
"get"
|
|
1119
1125
|
],
|
|
1120
1126
|
"items/ffbbsite_jobs_experience": [
|
|
1121
|
-
"get"
|
|
1127
|
+
"get",
|
|
1128
|
+
"post"
|
|
1122
1129
|
],
|
|
1123
1130
|
"items/ffbbsite_jobs_experience/{id}": [
|
|
1124
1131
|
"get"
|
|
1125
1132
|
],
|
|
1126
1133
|
"items/ffbbsite_jobs_services": [
|
|
1127
|
-
"get"
|
|
1134
|
+
"get",
|
|
1135
|
+
"post"
|
|
1128
1136
|
],
|
|
1129
1137
|
"items/ffbbsite_jobs_services/{id}": [
|
|
1130
1138
|
"get"
|
|
1131
1139
|
],
|
|
1132
1140
|
"items/ffbbsite_jobs_studies": [
|
|
1133
|
-
"get"
|
|
1141
|
+
"get",
|
|
1142
|
+
"post"
|
|
1134
1143
|
],
|
|
1135
1144
|
"items/ffbbsite_jobs_studies/{id}": [
|
|
1136
1145
|
"get"
|