ffbb-data-client 2.4.15__tar.gz → 2.4.16__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.4.15 → ffbb_data_client-2.4.16}/.github/workflows/ci.yml +14 -1
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.github/workflows/publish.yml +37 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/AGENTS.md +9 -10
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/PKG-INFO +5 -5
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/README.md +4 -4
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/architecture.rst +2 -1
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/examples.rst +11 -24
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/migration.rst +3 -3
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/requirements.txt +0 -1
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/__init__.py +19 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/api.py +11 -3
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/clients/_mixins/competition.py +7 -6
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/clients/_mixins/getters.py +31 -30
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/clients/_mixins/organisme.py +5 -4
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/clients/_search_facade.py +16 -3
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/clients/meilisearch_client.py +12 -19
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/config.py +7 -1
- ffbb_data_client-2.4.16/src/ffbb_data_client/exceptions.py +39 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/helpers/http_requests_utils.py +91 -47
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/get_configuration_response.py +10 -17
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/utils/retry_utils.py +26 -14
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/utils/token_manager.py +12 -8
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client.egg-info/PKG-INFO +5 -5
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client.egg-info/SOURCES.txt +1 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client.egg-info/scm_file_list.json +1 -0
- ffbb_data_client-2.4.16/src/ffbb_data_client.egg-info/scm_version.json +8 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_201_unit_tests_core.py +2 -1
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_207_coverage_clients_extended.py +18 -18
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_208_new_methods_coverage.py +2 -2
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_210_targeted_clients_helpers_coverage.py +21 -4
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_search_many.py +24 -21
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_v3_new_features.py +5 -5
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/helpers/test_400_http_helpers.py +34 -1
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/utils/test_302_retry_utils.py +8 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/utils/test_304_config.py +1 -1
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/utils/test_305_token_manager.py +14 -1
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/utils/test_307_coverage_gaps_utils.py +4 -4
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tools/update_agents_md.py +3 -3
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tox.ini +1 -1
- ffbb_data_client-2.4.15/src/ffbb_data_client.egg-info/scm_version.json +0 -8
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.agents/rules/antigravity-rtk-rules.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.coveragerc +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.gitattributes +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.github/FUNDING.yml +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.github/dependabot.yml +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.github/scripts/ai-pr-reviewer.cjs +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.github/scripts/check_wrapper_parity.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.github/workflows/ai-pr-reviewer.yml +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.github/workflows/check_wrapper_parity.yml +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.github/workflows/codeql.yml +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.github/workflows/deploy-pages.yml +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.github/workflows/keep-ffbb-api-discovery-alive.yml +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.github/workflows/release-after-discovery-merge.yml +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.github/workflows/update-ffbb-api-discovery.yml +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.gitignore +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.isort.cfg +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.jules/bolt.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.omc/skills/codeql-security-hardening-expertise.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.omc/skills/pypi-immutable-release-workflow.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.omc/skills/terminal-output-hygiene-expertise.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.pre-commit-config.yaml +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/.readthedocs.yml +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/AUTHORS.rst +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/CHANGELOG.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/CODE_OF_CONDUCT.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/CONTRIBUTING.rst +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/DESIGN.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/Dockerfile +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/LICENSE.txt +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/LOCAL_CI_GUIDE.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/RELEASE_NOTES.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/SECURITY.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/data/api.ffbb.app.json +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/data/api_update_summary.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/data/collections.json +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/data/endpoint_discovery.json +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/data/field_dictionary.json +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/data/indexes.json +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/data/meilisearch-prod.ffbb.app.json +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/data/openapi.json +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/data/openapi_full.json +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/data/type_discovery_corrections.json +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/Makefile +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/_static/.gitignore +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/authors.rst +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/changelog.rst +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/conf.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/contributing.rst +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/data_dictionary.rst +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/index.rst +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/license.rst +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/readme.rst +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/test_strategy.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/docs/testing_conventions.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/examples/README.md +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/examples/complete_usage_example.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/examples/quick_start.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/examples/team_ranking_analysis.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/pyproject.toml +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/pytest.ini +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/run-ci-locally.sh +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/scripts/benchmark_concurrent_pagination.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/scripts/benchmark_search_organisme.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/scripts/discover_endpoints.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/scripts/discover_types.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/setup.cfg +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/setup.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/clients/__init__.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/clients/_helpers.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/clients/_mixins/__init__.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/clients/_mixins/external.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/clients/_mixins/list_methods.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/clients/_rest_facade.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/clients/api_ffbb_app_client.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/clients/ffbb_data_client.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/clients/meilisearch_ffbb_client.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/data/__init__.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/data/collections.json +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/data/endpoint_discovery.json +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/data/field_dictionary.json +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/data/indexes.json +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/data/openapi.json +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/helpers/__init__.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/helpers/http_requests_helper.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/helpers/meilisearch_client_extension.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/helpers/multi_search_query_helper.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/helpers/normalization.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/__init__.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/affiche.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/cartographie.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/categorie.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/categorie_type.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/clock.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/club_contacts.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/code.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/commune.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competition_fields.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competition_id.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competition_id_categorie.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competition_id_sexe.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competition_id_type_competition.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competition_id_type_competition_generique.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competition_origine.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competition_origine_categorie.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competition_origine_type_competition.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competition_origine_type_competition_generique.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competition_type.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competitions_facet_distribution.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competitions_facet_stats.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competitions_hit.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competitions_multi_search_query.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/competitions_query.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/configuration_models.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/contact_info.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/content_multi_search_query.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/coordonnees.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/coordonnees_type.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/document_flyer.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/document_flyer_type.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/engagement_contacts.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/engagements_facet_distribution.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/engagements_facet_stats.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/engagements_hit.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/engagements_multi_search_query.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/etat.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/external_competition_id.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/external_id.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/facet_distribution.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/facet_stats.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/field_set.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/folder.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/formation_session.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/formations_facet_distribution.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/formations_facet_stats.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/formations_hit.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/formations_multi_search_query.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/game_stats_model.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/game_stats_models.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/generic_search.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/geo.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/geo_sort_order.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/get_commune_response.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/get_competition_response.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/get_engagement_response.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/get_entraineur_response.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/get_formation_response.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/get_officiel_response.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/get_organisme_response.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/get_poule_response.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/get_pratique_response.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/get_rencontre_response.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/get_saisons_response.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/get_salle_response.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/get_terrain_response.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/get_tournoi_response.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/gradient_color.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/hit.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/id_engagement_equipe.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/id_organisme_equipe.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/id_organisme_equipe1_logo.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/id_poule.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/jour.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/label.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/labellisation.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/live.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/lives.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/logo.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/multi_search_queries.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/multi_search_query.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/multi_search_result_competitions.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/multi_search_result_engagements.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/multi_search_result_formations.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/multi_search_result_organismes.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/multi_search_result_pratiques.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/multi_search_result_rencontres.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/multi_search_result_salles.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/multi_search_result_terrains.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/multi_search_result_tournois.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/multi_search_results.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/multi_search_results_class.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/nature_sol.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/niveau.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/niveau_class.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/niveau_extractor.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/niveau_info.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/niveau_models.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/niveau_type.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/objectif.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/organisateur.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/organisateur_type.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/organisme_fields.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/organisme_id_pere.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/organismes_facet_distribution.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/organismes_facet_stats.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/organismes_hit.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/organismes_multi_search_query.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/organismes_query.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/phase_code.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/poule.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/poule_fields.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/poule_rencontre_item_model.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/poules_models.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/poules_query.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/pratique.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/pratiques_facet_distribution.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/pratiques_facet_stats.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/pratiques_hit.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/pratiques_hit_type.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/pratiques_multi_search_query.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/pratiques_type_class.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/publication_internet.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/purple_logo.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/query_fields_manager.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/ranking_engagement.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/rankings_models.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/rencontres_engagement.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/rencontres_facet_distribution.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/rencontres_facet_stats.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/rencontres_hit.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/rencontres_multi_search_query.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/saison.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/saison_fields.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/saisons_models.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/saisons_query.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/salle.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/salles_facet_distribution.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/salles_facet_stats.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/salles_hit.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/salles_multi_search_query.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/sexe.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/sexe_class.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/source.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/status.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/team_engagement.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/team_ranking.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/terrains_categorie_championnat_3x3_libelle.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/terrains_facet_distribution.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/terrains_facet_stats.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/terrains_hit.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/terrains_multi_search_query.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/terrains_name.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/terrains_sexe_enum.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/terrains_storage.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/tournoi_type_class.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/tournoi_type_enum.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/tournoi_types_3x3.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/tournoi_types_3x3_libelle.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/tournoi_types_3x3_libelle_enum.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/tournois_facet_distribution.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/tournois_facet_stats.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/tournois_hit.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/tournois_hit_type.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/tournois_libelle.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/tournois_multi_search_query.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/type_association.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/type_association_libelle.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/type_class.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/type_competition.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/type_competition_generique.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/type_enum.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/models/type_league.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/py.typed +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/utils/__init__.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/utils/cache_manager.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/utils/concurrency_utils.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/utils/converter_utils.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/utils/input_validation.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/utils/secure_logging.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client.egg-info/dependency_links.txt +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client.egg-info/not-zip-safe +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client.egg-info/requires.txt +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client.egg-info/top_level.txt +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/conftest.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/e2e/__init__.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/e2e/conftest.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/integration/__init__.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/integration/conftest.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/integration/test_500_user_journey.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/integration/test_501_user_journey_v3.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/integration/test_502_enhanced_integration.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/integration/test_503_secure_logging.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/integration/test_504_input_validation.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/integration/test_505_retry_timeout.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/integration/test_506_raw_json_model_conversion.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/__init__.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/__init__.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_200_api_ffbb_app_client.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_202_meilisearch_client.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_203_meilisearch_client_extension.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_204_ffbb_data_client.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_205_meilisearch_ffbb_client.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_206_coverage_gaps_clients.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_209_automatic_token_resolution.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_api_optimizations.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_async_methods.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_meilisearch_async.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_v2_backport_search.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/clients/test_warm_cache.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/conftest.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/helpers/__init__.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/helpers/test_meilisearch_client_extension_recursive_pagination.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/helpers/test_meilisearch_pagination_concurrent.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/helpers/test_normalization.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/__init__.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_100_competition_id_categorie.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_101_competition_id_sexe.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_102_competition_id_type_competition.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_103_competition_id_type_competition_generique.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_104_competition_origine_categorie.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_105_competition_origine_type_competition_generique.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_106_competition_origine.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_107_id_engagement_equipe.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_108_id_organisme_equipe.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_109_id_organisme_equipe1_logo.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_110_labellisation.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_111_niveau_class.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_112_purple_logo.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_113_salle.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_114_tournoi_type_class.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_115_type_association_libelle.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_116_type_competition_generique.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_117_organisateur.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_118_competition_id.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_119_terrains_inner_models.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_120_pratiques_inner_models.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_121_to_dict_round_trip.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_122_coverage_gaps.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_123_missing_coverage.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_123_v2_backport.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_124_targeted_coverage_gains.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/models/test_dx_aliases.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/test_310_discover_endpoints.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/test_311_normalize_team_name.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/utils/__init__.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/utils/test_300_secure_logging.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/utils/test_301_input_validation.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/utils/test_303_cache_manager.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/utils/test_306_converter_utils.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/utils/test_308_converter_utils_extended.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/tests/unit/utils/test_309_concurrency_utils.py +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/website/assets/apple-touch-icon.png +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/website/assets/favicon-192x192.png +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/website/assets/favicon-48x48.png +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/website/assets/favicon-96x96.png +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/website/assets/favicon.ico +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/website/assets/logo.webp +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/website/css/style.css +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/website/favicon.ico +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/website/index.html +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/website/llms-full.txt +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/website/llms.txt +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/website/robots.txt +0 -0
- {ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/website/sitemap.xml +0 -0
|
@@ -60,8 +60,21 @@ jobs:
|
|
|
60
60
|
pipx run --python '${{ steps.setup-python.outputs.python-path }}'
|
|
61
61
|
tox -e type
|
|
62
62
|
|
|
63
|
+
dependency-audit:
|
|
64
|
+
runs-on: ubuntu-latest
|
|
65
|
+
steps:
|
|
66
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
67
|
+
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
|
68
|
+
with:
|
|
69
|
+
python-version: "3.14"
|
|
70
|
+
cache: 'pip'
|
|
71
|
+
- name: Install package and auditor
|
|
72
|
+
run: python -m pip install . pip-audit
|
|
73
|
+
- name: Audit Python dependencies
|
|
74
|
+
run: python -m pip_audit
|
|
75
|
+
|
|
63
76
|
build:
|
|
64
|
-
needs: [lint, type-check]
|
|
77
|
+
needs: [lint, type-check, dependency-audit]
|
|
65
78
|
runs-on: ubuntu-latest
|
|
66
79
|
outputs:
|
|
67
80
|
wheel-distribution: ${{ steps.wheel-distribution.outputs.path }}
|
|
@@ -13,8 +13,45 @@ env:
|
|
|
13
13
|
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
14
14
|
|
|
15
15
|
jobs:
|
|
16
|
+
verify:
|
|
17
|
+
name: Verify Python ${{ matrix.python }}
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
strategy:
|
|
20
|
+
fail-fast: false
|
|
21
|
+
matrix:
|
|
22
|
+
include:
|
|
23
|
+
- python: "3.10"
|
|
24
|
+
toxenv: py310
|
|
25
|
+
- python: "3.11"
|
|
26
|
+
toxenv: py311
|
|
27
|
+
- python: "3.12"
|
|
28
|
+
toxenv: py312
|
|
29
|
+
- python: "3.13"
|
|
30
|
+
toxenv: py313
|
|
31
|
+
- python: "3.14"
|
|
32
|
+
toxenv: py314
|
|
33
|
+
steps:
|
|
34
|
+
- name: Checkout
|
|
35
|
+
uses: actions/checkout@v7
|
|
36
|
+
with:
|
|
37
|
+
fetch-depth: 0
|
|
38
|
+
- name: Set up Python
|
|
39
|
+
uses: actions/setup-python@v6
|
|
40
|
+
id: setup-python
|
|
41
|
+
with:
|
|
42
|
+
python-version: ${{ matrix.python }}
|
|
43
|
+
cache: 'pip'
|
|
44
|
+
- name: Run test suite
|
|
45
|
+
env:
|
|
46
|
+
API_FFBB_APP_BEARER_TOKEN: ${{ secrets.API_FFBB_APP_BEARER_TOKEN }}
|
|
47
|
+
MEILISEARCH_BEARER_TOKEN: ${{ secrets.MEILISEARCH_BEARER_TOKEN }}
|
|
48
|
+
run: >-
|
|
49
|
+
pipx run --python '${{ steps.setup-python.outputs.python-path }}'
|
|
50
|
+
tox -e ${{ matrix.toxenv }}
|
|
51
|
+
|
|
16
52
|
build:
|
|
17
53
|
name: Build distribution
|
|
54
|
+
needs: verify
|
|
18
55
|
runs-on: ubuntu-latest
|
|
19
56
|
permissions:
|
|
20
57
|
attestations: write
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# FFBB Data Client SDK
|
|
2
2
|
|
|
3
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 : ~
|
|
5
|
-
> (clients:
|
|
4
|
+
> Dernière mise à jour : ffbb-data-client | SDK total : ~19037 lignes de code
|
|
5
|
+
> (clients: 6014, models: 9806, utils: 2061, helpers: 1156)
|
|
6
6
|
|
|
7
7
|
## Langue
|
|
8
8
|
Tous les documents de travail (walkthrough.md, implementation_plan.md) DOIVENT être en français.
|
|
@@ -40,10 +40,9 @@ ou interroge l'API publique en cache en cas d'absence :
|
|
|
40
40
|
documentation (`AGENTS.md`), de site/landing page ou autres tâches de synchronisation de
|
|
41
41
|
manière autonome. Si vous estimez qu'une mise à jour automatique est pertinente ou non, prenez
|
|
42
42
|
la décision par vous-même sans attendre la validation explicite de l'utilisateur.
|
|
43
|
-
- **
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
3. Si un hook (end-of-file-fixer, black, isort...) modifie un fichier sur disque : **OBLIGATION de ré-indexer (`rtk git add -u`) et de ré-exécuter `rtk pre-commit run --all-files`** jusqu'à un passage 100% propre avant de créer le commit (`git commit`).
|
|
43
|
+
- **Validation pre-commit systématique (Zéro échec de CI)** : Pour éviter tout échec de build ou de formatage en CI,
|
|
44
|
+
exécutez systématiquement la validation complète locale via `rtk pre-commit run --all-files` avant de pousser
|
|
45
|
+
tout commit vers origin. Résolvez toutes les alertes (formatage, imports `isort`, typage) localement.
|
|
47
46
|
|
|
48
47
|
|
|
49
48
|
## Karpathy Guidelines (Règles de développement)
|
|
@@ -70,13 +69,13 @@ Ces directives inspirées d'Andrej Karpathy visent à éliminer les erreurs de c
|
|
|
70
69
|
```
|
|
71
70
|
src/ffbb_data_client/
|
|
72
71
|
├── __init__.py # Point d'entrée du SDK, expose FFBBDataClient et FFBBTokens
|
|
73
|
-
├── clients/ # Clients d'API (REST et Meilisearch) et façades (≈
|
|
72
|
+
├── clients/ # Clients d'API (REST et Meilisearch) et façades (≈6014 lignes)
|
|
74
73
|
├── config.py # Configuration centralisée (URLs, Headers, Endpoints, Facettes)
|
|
75
74
|
├── data/ # Ressources et données statiques
|
|
76
|
-
├── helpers/ # Méthodes utilitaires pour requêtes HTTP et mapping (≈
|
|
77
|
-
├── models/ # Modèles de données Pydantic type-safe (≈
|
|
75
|
+
├── helpers/ # Méthodes utilitaires pour requêtes HTTP et mapping (≈1156 lignes)
|
|
76
|
+
├── models/ # Modèles de données Pydantic type-safe (≈9806 lignes)
|
|
78
77
|
├── py.typed # Marqueur pour la compatibilité avec mypy
|
|
79
|
-
└── utils/ # Gestionnaires transversaux (cache, jetons de sécurité, validation) (≈
|
|
78
|
+
└── utils/ # Gestionnaires transversaux (cache, jetons de sécurité, validation) (≈2061 lignes)
|
|
80
79
|
```
|
|
81
80
|
|
|
82
81
|
## Conventions de code
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ffbb-data-client
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.16
|
|
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
|
|
@@ -94,7 +94,7 @@ Dynamic: license-file
|
|
|
94
94
|
`ffbb_data_client` simplifie l'accès aux API FFBB et à leurs index Meilisearch avec :
|
|
95
95
|
|
|
96
96
|
- une façade unique : `FFBBDataClient` ;
|
|
97
|
-
- des modèles Pydantic v2
|
|
97
|
+
- des modèles typés, avec validation Pydantic v2 sur les contrats sensibles ;
|
|
98
98
|
- une API utilisable en synchrone ou en `async/await` ;
|
|
99
99
|
- une gestion automatique des tokens via `TokenManager` ;
|
|
100
100
|
- du cache HTTP configurable via `hishel` ;
|
|
@@ -154,7 +154,7 @@ lives = client.get_lives()
|
|
|
154
154
|
| API FFBB | clubs, compétitions, organismes, saisons, poules, classements, rencontres, lives |
|
|
155
155
|
| Entités additionnelles | EDF (matches, joueurs, rosters, équipes), Genius Sport, Rematch Videos |
|
|
156
156
|
| Recherche | organismes, compétitions, rencontres, salles, terrains, pratiques, tournois, engagements et formations |
|
|
157
|
-
| REST typé | récupération de ressources individuelles avec modèles
|
|
157
|
+
| REST typé | récupération de ressources individuelles avec modèles typés et conversion contrôlée |
|
|
158
158
|
| Async | méthodes `*_async()` — source de vérité ; sync délègue via `_run_async()` |
|
|
159
159
|
| Cache | cache HTTP `hishel`, sessions `httpx` réutilisées, retries configurables, SQLite séparés sync/async |
|
|
160
160
|
| Sécurité | masquage des tokens dans les logs, CodeQL scanning, Dependabot |
|
|
@@ -229,7 +229,7 @@ entraineur = client.get_entraineur(44444)
|
|
|
229
229
|
|
|
230
230
|
Les assets Directus et autres collections peuvent être exploités via les méthodes REST/listing dédiées exposées par le client lorsque disponibles.
|
|
231
231
|
|
|
232
|
-
Les réponses sont converties en modèles
|
|
232
|
+
Les réponses sont converties en modèles typés lorsque le schéma est connu. Les contrats sensibles, notamment la configuration des tokens, utilisent une validation Pydantic stricte.
|
|
233
233
|
|
|
234
234
|
---
|
|
235
235
|
|
|
@@ -283,7 +283,7 @@ src/ffbb_data_client/
|
|
|
283
283
|
│ ├── api_ffbb_app_client.py # Client REST FFBB (async source of truth)
|
|
284
284
|
│ └── meilisearch_ffbb_client.py # Client recherche Meilisearch
|
|
285
285
|
├── helpers/ # Requêtes HTTP, multi-search, conversions
|
|
286
|
-
├── models/ # Modèles Pydantic v2
|
|
286
|
+
├── models/ # Modèles typés (dataclasses et Pydantic v2)
|
|
287
287
|
├── utils/ # cache (sync/async séparés), tokens, logging sécurisé
|
|
288
288
|
└── data/ # schémas et métadonnées embarqués
|
|
289
289
|
```
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
`ffbb_data_client` simplifie l'accès aux API FFBB et à leurs index Meilisearch avec :
|
|
39
39
|
|
|
40
40
|
- une façade unique : `FFBBDataClient` ;
|
|
41
|
-
- des modèles Pydantic v2
|
|
41
|
+
- des modèles typés, avec validation Pydantic v2 sur les contrats sensibles ;
|
|
42
42
|
- une API utilisable en synchrone ou en `async/await` ;
|
|
43
43
|
- une gestion automatique des tokens via `TokenManager` ;
|
|
44
44
|
- du cache HTTP configurable via `hishel` ;
|
|
@@ -98,7 +98,7 @@ lives = client.get_lives()
|
|
|
98
98
|
| API FFBB | clubs, compétitions, organismes, saisons, poules, classements, rencontres, lives |
|
|
99
99
|
| Entités additionnelles | EDF (matches, joueurs, rosters, équipes), Genius Sport, Rematch Videos |
|
|
100
100
|
| Recherche | organismes, compétitions, rencontres, salles, terrains, pratiques, tournois, engagements et formations |
|
|
101
|
-
| REST typé | récupération de ressources individuelles avec modèles
|
|
101
|
+
| REST typé | récupération de ressources individuelles avec modèles typés et conversion contrôlée |
|
|
102
102
|
| Async | méthodes `*_async()` — source de vérité ; sync délègue via `_run_async()` |
|
|
103
103
|
| Cache | cache HTTP `hishel`, sessions `httpx` réutilisées, retries configurables, SQLite séparés sync/async |
|
|
104
104
|
| Sécurité | masquage des tokens dans les logs, CodeQL scanning, Dependabot |
|
|
@@ -173,7 +173,7 @@ entraineur = client.get_entraineur(44444)
|
|
|
173
173
|
|
|
174
174
|
Les assets Directus et autres collections peuvent être exploités via les méthodes REST/listing dédiées exposées par le client lorsque disponibles.
|
|
175
175
|
|
|
176
|
-
Les réponses sont converties en modèles
|
|
176
|
+
Les réponses sont converties en modèles typés lorsque le schéma est connu. Les contrats sensibles, notamment la configuration des tokens, utilisent une validation Pydantic stricte.
|
|
177
177
|
|
|
178
178
|
---
|
|
179
179
|
|
|
@@ -227,7 +227,7 @@ src/ffbb_data_client/
|
|
|
227
227
|
│ ├── api_ffbb_app_client.py # Client REST FFBB (async source of truth)
|
|
228
228
|
│ └── meilisearch_ffbb_client.py # Client recherche Meilisearch
|
|
229
229
|
├── helpers/ # Requêtes HTTP, multi-search, conversions
|
|
230
|
-
├── models/ # Modèles Pydantic v2
|
|
230
|
+
├── models/ # Modèles typés (dataclasses et Pydantic v2)
|
|
231
231
|
├── utils/ # cache (sync/async séparés), tokens, logging sécurisé
|
|
232
232
|
└── data/ # schémas et métadonnées embarqués
|
|
233
233
|
```
|
|
@@ -64,7 +64,8 @@ Usage:
|
|
|
64
64
|
|
|
65
65
|
.. code-block:: python
|
|
66
66
|
|
|
67
|
-
from ffbb_data_client import
|
|
67
|
+
from ffbb_data_client import MultiSearchQuery
|
|
68
|
+
from ffbb_data_client.models import CompetitionType, Live
|
|
68
69
|
|
|
69
70
|
# Create search queries
|
|
70
71
|
query = MultiSearchQuery("basketball")
|
|
@@ -77,7 +77,7 @@ Cache Management
|
|
|
77
77
|
from ffbb_data_client.utils.cache_manager import CacheManager
|
|
78
78
|
|
|
79
79
|
# Clear token cache
|
|
80
|
-
CacheManager().
|
|
80
|
+
CacheManager().clear_cache()
|
|
81
81
|
|
|
82
82
|
Configuration Management (v1.2.0+)
|
|
83
83
|
====================================
|
|
@@ -296,8 +296,7 @@ Robust Error Handling
|
|
|
296
296
|
|
|
297
297
|
.. code-block:: python
|
|
298
298
|
|
|
299
|
-
from ffbb_data_client import FFBBDataClient
|
|
300
|
-
import requests
|
|
299
|
+
from ffbb_data_client import FFBBDataClient, FFBBError
|
|
301
300
|
|
|
302
301
|
try:
|
|
303
302
|
client = FFBBDataClient.create(MEILISEARCH_TOKEN, API_TOKEN)
|
|
@@ -307,8 +306,8 @@ Robust Error Handling
|
|
|
307
306
|
|
|
308
307
|
except ValueError as e:
|
|
309
308
|
print(f"Configuration error: {e}")
|
|
310
|
-
except
|
|
311
|
-
print(f"
|
|
309
|
+
except FFBBError as e:
|
|
310
|
+
print(f"FFBB error: {e}")
|
|
312
311
|
except Exception as e:
|
|
313
312
|
print(f"Unexpected error: {e}")
|
|
314
313
|
|
|
@@ -320,30 +319,18 @@ Using Cached Sessions
|
|
|
320
319
|
|
|
321
320
|
.. code-block:: python
|
|
322
321
|
|
|
323
|
-
from requests_cache import CachedSession
|
|
324
322
|
from ffbb_data_client import FFBBDataClient
|
|
323
|
+
from ffbb_data_client.utils.cache_manager import CacheConfig, CacheManager
|
|
325
324
|
|
|
326
|
-
|
|
327
|
-
cached_session = CachedSession(
|
|
328
|
-
'ffbb_cache',
|
|
329
|
-
backend='sqlite',
|
|
330
|
-
expire_after=3600 # 1 hour cache
|
|
331
|
-
)
|
|
332
|
-
|
|
333
|
-
# Create client with custom session
|
|
334
|
-
api_client = ApiFFBBAppClient(
|
|
335
|
-
bearer_token=API_TOKEN,
|
|
336
|
-
cached_session=cached_session
|
|
337
|
-
)
|
|
325
|
+
cache = CacheManager(CacheConfig(backend="sqlite", expire_after=3600))
|
|
338
326
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
327
|
+
client = FFBBDataClient.create(
|
|
328
|
+
api_bearer_token=API_TOKEN,
|
|
329
|
+
meilisearch_bearer_token=MEILISEARCH_TOKEN,
|
|
330
|
+
cached_session=cache.session,
|
|
331
|
+
async_cached_session=cache.async_session,
|
|
342
332
|
)
|
|
343
333
|
|
|
344
|
-
# Create main client
|
|
345
|
-
client = FFBBDataClient(api_client, meilisearch_client)
|
|
346
|
-
|
|
347
334
|
Data Export and Processing
|
|
348
335
|
==========================
|
|
349
336
|
|
|
@@ -102,12 +102,12 @@ Migration from v1.1.x to v1.2.0 (Upcoming)
|
|
|
102
102
|
tokens = TokenManager.get_tokens(use_cache=False)
|
|
103
103
|
|
|
104
104
|
# Use CacheManager directly for cache operations
|
|
105
|
-
CacheManager().
|
|
105
|
+
CacheManager().clear_cache()
|
|
106
106
|
|
|
107
107
|
**Migration Steps:**
|
|
108
108
|
|
|
109
109
|
1. Update TokenManager.get_tokens() calls to use cache_config parameter
|
|
110
|
-
2. Replace TokenManager.clear_cache() with CacheManager().
|
|
110
|
+
2. Replace TokenManager.clear_cache() with CacheManager().clear_cache()
|
|
111
111
|
3. Import CacheManager from ffbb_data_client.utils.cache_manager
|
|
112
112
|
|
|
113
113
|
---
|
|
@@ -165,4 +165,4 @@ Token Management Updates
|
|
|
165
165
|
# After v1.2.0
|
|
166
166
|
tokens = TokenManager.get_tokens(use_cache=False)
|
|
167
167
|
from ffbb_data_client.utils.cache_manager import CacheManager
|
|
168
|
-
CacheManager().
|
|
168
|
+
CacheManager().clear_cache()
|
|
@@ -4,7 +4,6 @@ pydantic>=2.13.4
|
|
|
4
4
|
python-dateutil>=2.9.0.post0
|
|
5
5
|
python-dotenv>=1.2.2
|
|
6
6
|
readme_renderer[md]>=44.0
|
|
7
|
-
requests_cache
|
|
8
7
|
# Requirements file for ReadTheDocs, check .readthedocs.yml.
|
|
9
8
|
# To build the module reference correctly, make sure every external package
|
|
10
9
|
# under `install_requires` in `setup.cfg` is also listed here!
|
|
@@ -10,6 +10,16 @@ from .clients.api_ffbb_app_client import ApiFFBBAppClient
|
|
|
10
10
|
from .clients.ffbb_data_client import FFBBDataClient
|
|
11
11
|
from .clients.meilisearch_client import MeilisearchClient
|
|
12
12
|
from .clients.meilisearch_ffbb_client import MeilisearchFFBBClient
|
|
13
|
+
from .exceptions import (
|
|
14
|
+
FFBBAuthenticationError,
|
|
15
|
+
FFBBError,
|
|
16
|
+
FFBBHTTPError,
|
|
17
|
+
FFBBNotFoundError,
|
|
18
|
+
FFBBRateLimitError,
|
|
19
|
+
FFBBResponseValidationError,
|
|
20
|
+
FFBBServerError,
|
|
21
|
+
FFBBTransportError,
|
|
22
|
+
)
|
|
13
23
|
from .helpers.meilisearch_client_extension import MeilisearchClientExtension
|
|
14
24
|
from .helpers.multi_search_query_helper import generate_queries
|
|
15
25
|
from .models.club_contacts import ClubContacts
|
|
@@ -76,6 +86,15 @@ __all__ = [
|
|
|
76
86
|
"FFBBDataClient",
|
|
77
87
|
"MeilisearchClient",
|
|
78
88
|
"MeilisearchFFBBClient",
|
|
89
|
+
# Exceptions
|
|
90
|
+
"FFBBError",
|
|
91
|
+
"FFBBHTTPError",
|
|
92
|
+
"FFBBNotFoundError",
|
|
93
|
+
"FFBBAuthenticationError",
|
|
94
|
+
"FFBBRateLimitError",
|
|
95
|
+
"FFBBServerError",
|
|
96
|
+
"FFBBTransportError",
|
|
97
|
+
"FFBBResponseValidationError",
|
|
79
98
|
# Helpers
|
|
80
99
|
"MeilisearchClientExtension",
|
|
81
100
|
"generate_queries",
|
|
@@ -8,6 +8,7 @@ from __future__ import annotations
|
|
|
8
8
|
|
|
9
9
|
import asyncio
|
|
10
10
|
import logging
|
|
11
|
+
import os
|
|
11
12
|
import re
|
|
12
13
|
import time
|
|
13
14
|
from collections import OrderedDict
|
|
@@ -112,11 +113,18 @@ l'ensemble des données publiques de la **Fédération Française de BasketBall*
|
|
|
112
113
|
lifespan=lifespan,
|
|
113
114
|
)
|
|
114
115
|
|
|
115
|
-
|
|
116
|
+
_cors_origins = [
|
|
117
|
+
origin.strip()
|
|
118
|
+
for origin in os.getenv(
|
|
119
|
+
"FFBB_CORS_ORIGINS", "http://localhost:3000,http://localhost:8000"
|
|
120
|
+
).split(",")
|
|
121
|
+
if origin.strip()
|
|
122
|
+
]
|
|
123
|
+
|
|
116
124
|
app.add_middleware(
|
|
117
125
|
CORSMiddleware,
|
|
118
|
-
allow_origins=
|
|
119
|
-
allow_credentials=
|
|
126
|
+
allow_origins=_cors_origins,
|
|
127
|
+
allow_credentials=False,
|
|
120
128
|
allow_methods=["*"],
|
|
121
129
|
allow_headers=["*"],
|
|
122
130
|
)
|
|
@@ -10,6 +10,7 @@ from ...config import (
|
|
|
10
10
|
ENDPOINT_POULES,
|
|
11
11
|
ENDPOINT_SAISONS,
|
|
12
12
|
)
|
|
13
|
+
from ...exceptions import FFBBNotFoundError
|
|
13
14
|
from ...helpers.http_requests_utils import http_get_json_async, url_with_params
|
|
14
15
|
from ...models.field_set import FieldSet
|
|
15
16
|
from ...models.get_competition_response import GetCompetitionResponse
|
|
@@ -75,13 +76,13 @@ class CompetitionMixin:
|
|
|
75
76
|
final_url,
|
|
76
77
|
self.headers,
|
|
77
78
|
debug=self.debug,
|
|
78
|
-
cached_session=
|
|
79
|
+
cached_session=cached_session or self.async_cached_session,
|
|
79
80
|
)
|
|
80
81
|
actual_data = data.get("data") if data and isinstance(data, dict) else data
|
|
81
82
|
if actual_data:
|
|
82
83
|
return GetCompetitionResponse.from_dict(actual_data)
|
|
83
84
|
return None
|
|
84
|
-
except
|
|
85
|
+
except FFBBNotFoundError as e:
|
|
85
86
|
if self.debug:
|
|
86
87
|
self.logger.error(f"Error in get_competition_async: {e}")
|
|
87
88
|
return None
|
|
@@ -129,13 +130,13 @@ class CompetitionMixin:
|
|
|
129
130
|
final_url,
|
|
130
131
|
self.headers,
|
|
131
132
|
debug=self.debug,
|
|
132
|
-
cached_session=
|
|
133
|
+
cached_session=cached_session or self.async_cached_session,
|
|
133
134
|
)
|
|
134
135
|
actual_data = data.get("data") if data and isinstance(data, dict) else data
|
|
135
136
|
if actual_data:
|
|
136
137
|
return GetPouleResponse.from_dict(actual_data)
|
|
137
138
|
return None
|
|
138
|
-
except
|
|
139
|
+
except FFBBNotFoundError as e:
|
|
139
140
|
if self.debug:
|
|
140
141
|
self.logger.error(f"Error in get_poule_async: {e}")
|
|
141
142
|
return None
|
|
@@ -205,13 +206,13 @@ class CompetitionMixin:
|
|
|
205
206
|
final_url,
|
|
206
207
|
self.headers,
|
|
207
208
|
debug=self.debug,
|
|
208
|
-
cached_session=
|
|
209
|
+
cached_session=cached_session or self.async_cached_session,
|
|
209
210
|
)
|
|
210
211
|
actual_data = data.get("data") if data and isinstance(data, dict) else data
|
|
211
212
|
if actual_data and isinstance(actual_data, list):
|
|
212
213
|
return GetSaisonsResponse.from_list(actual_data)
|
|
213
214
|
return []
|
|
214
|
-
except
|
|
215
|
+
except FFBBNotFoundError as e:
|
|
215
216
|
if self.debug:
|
|
216
217
|
self.logger.error(f"Error in get_saisons_async: {e}")
|
|
217
218
|
return []
|
{ffbb_data_client-2.4.15 → ffbb_data_client-2.4.16}/src/ffbb_data_client/clients/_mixins/getters.py
RENAMED
|
@@ -21,6 +21,7 @@ from ...config import (
|
|
|
21
21
|
ENDPOINT_TERRAINS,
|
|
22
22
|
ENDPOINT_TOURNOIS,
|
|
23
23
|
)
|
|
24
|
+
from ...exceptions import FFBBNotFoundError
|
|
24
25
|
from ...helpers.http_requests_utils import http_get_json_async, url_with_params
|
|
25
26
|
from ...models.configuration_models import GetConfigurationResponse
|
|
26
27
|
from ...models.get_commune_response import GetCommuneResponse
|
|
@@ -83,11 +84,11 @@ class GettersMixin:
|
|
|
83
84
|
final_url,
|
|
84
85
|
self.headers,
|
|
85
86
|
debug=self.debug,
|
|
86
|
-
cached_session=
|
|
87
|
+
cached_session=cached_session or self.async_cached_session,
|
|
87
88
|
retry_config=self.retry_config,
|
|
88
89
|
timeout_config=self.timeout_config,
|
|
89
90
|
)
|
|
90
|
-
except
|
|
91
|
+
except FFBBNotFoundError as e:
|
|
91
92
|
if self.debug:
|
|
92
93
|
self.logger.error(f"Error in _get_directus_item_async: {e}")
|
|
93
94
|
return None
|
|
@@ -149,11 +150,11 @@ class GettersMixin:
|
|
|
149
150
|
final_url,
|
|
150
151
|
self.headers,
|
|
151
152
|
debug=self.debug,
|
|
152
|
-
cached_session=
|
|
153
|
+
cached_session=cached_session or self.async_cached_session,
|
|
153
154
|
retry_config=self.retry_config,
|
|
154
155
|
timeout_config=self.timeout_config,
|
|
155
156
|
)
|
|
156
|
-
except
|
|
157
|
+
except FFBBNotFoundError as e:
|
|
157
158
|
if self.debug:
|
|
158
159
|
self.logger.error(f"Error in _list_directus_items_async: {e}")
|
|
159
160
|
return []
|
|
@@ -182,12 +183,12 @@ class GettersMixin:
|
|
|
182
183
|
url,
|
|
183
184
|
self.headers,
|
|
184
185
|
debug=self.debug,
|
|
185
|
-
cached_session=
|
|
186
|
+
cached_session=cached_session or self.async_cached_session,
|
|
186
187
|
retry_config=self.retry_config,
|
|
187
188
|
timeout_config=self.timeout_config,
|
|
188
189
|
)
|
|
189
190
|
return data if isinstance(data, dict) else None
|
|
190
|
-
except
|
|
191
|
+
except FFBBNotFoundError as e:
|
|
191
192
|
if self.debug:
|
|
192
193
|
self.logger.error(f"Error in get_openapi_spec_async: {e}")
|
|
193
194
|
return None
|
|
@@ -210,7 +211,7 @@ class GettersMixin:
|
|
|
210
211
|
url,
|
|
211
212
|
self.headers,
|
|
212
213
|
debug=self.debug,
|
|
213
|
-
cached_session=
|
|
214
|
+
cached_session=cached_session or self.async_cached_session,
|
|
214
215
|
retry_config=self.retry_config,
|
|
215
216
|
timeout_config=self.timeout_config,
|
|
216
217
|
)
|
|
@@ -220,7 +221,7 @@ class GettersMixin:
|
|
|
220
221
|
if not isinstance(raw_data, list):
|
|
221
222
|
return []
|
|
222
223
|
return lives_from_dict(raw_data)
|
|
223
|
-
except
|
|
224
|
+
except FFBBNotFoundError as e:
|
|
224
225
|
if self.debug:
|
|
225
226
|
self.logger.error(f"Error in get_lives_async: {e}")
|
|
226
227
|
return None
|
|
@@ -247,7 +248,7 @@ class GettersMixin:
|
|
|
247
248
|
url,
|
|
248
249
|
self.headers,
|
|
249
250
|
debug=self.debug,
|
|
250
|
-
cached_session=
|
|
251
|
+
cached_session=cached_session or self.async_cached_session,
|
|
251
252
|
retry_config=self.retry_config,
|
|
252
253
|
timeout_config=self.timeout_config,
|
|
253
254
|
)
|
|
@@ -255,7 +256,7 @@ class GettersMixin:
|
|
|
255
256
|
if actual_data:
|
|
256
257
|
return GetConfigurationResponse.from_dict(actual_data)
|
|
257
258
|
return None
|
|
258
|
-
except
|
|
259
|
+
except FFBBNotFoundError as e:
|
|
259
260
|
if self.debug:
|
|
260
261
|
self.logger.error(f"Error in get_configuration_async: {e}")
|
|
261
262
|
return None
|
|
@@ -282,11 +283,11 @@ class GettersMixin:
|
|
|
282
283
|
url,
|
|
283
284
|
self.headers,
|
|
284
285
|
debug=self.debug,
|
|
285
|
-
cached_session=
|
|
286
|
+
cached_session=cached_session or self.async_cached_session,
|
|
286
287
|
)
|
|
287
288
|
actual_data = data.get("data") if data and isinstance(data, dict) else data
|
|
288
289
|
return GetRencontreResponse.from_dict(actual_data) if actual_data else None
|
|
289
|
-
except
|
|
290
|
+
except FFBBNotFoundError as e:
|
|
290
291
|
if self.debug:
|
|
291
292
|
self.logger.error(f"Error in get_rencontre_async: {e}")
|
|
292
293
|
return None
|
|
@@ -309,11 +310,11 @@ class GettersMixin:
|
|
|
309
310
|
url,
|
|
310
311
|
self.headers,
|
|
311
312
|
debug=self.debug,
|
|
312
|
-
cached_session=
|
|
313
|
+
cached_session=cached_session or self.async_cached_session,
|
|
313
314
|
)
|
|
314
315
|
actual_data = data.get("data") if data and isinstance(data, dict) else data
|
|
315
316
|
return GetEngagementResponse.from_dict(actual_data) if actual_data else None
|
|
316
|
-
except
|
|
317
|
+
except FFBBNotFoundError as e:
|
|
317
318
|
if self.debug:
|
|
318
319
|
self.logger.error(f"Error in get_engagement_async: {e}")
|
|
319
320
|
return None
|
|
@@ -340,11 +341,11 @@ class GettersMixin:
|
|
|
340
341
|
url,
|
|
341
342
|
self.headers,
|
|
342
343
|
debug=self.debug,
|
|
343
|
-
cached_session=
|
|
344
|
+
cached_session=cached_session or self.async_cached_session,
|
|
344
345
|
)
|
|
345
346
|
actual_data = data.get("data") if data and isinstance(data, dict) else data
|
|
346
347
|
return GetFormationResponse.from_dict(actual_data) if actual_data else None
|
|
347
|
-
except
|
|
348
|
+
except FFBBNotFoundError as e:
|
|
348
349
|
if self.debug:
|
|
349
350
|
self.logger.error(f"Error in get_formation_async: {e}")
|
|
350
351
|
return None
|
|
@@ -367,11 +368,11 @@ class GettersMixin:
|
|
|
367
368
|
url,
|
|
368
369
|
self.headers,
|
|
369
370
|
debug=self.debug,
|
|
370
|
-
cached_session=
|
|
371
|
+
cached_session=cached_session or self.async_cached_session,
|
|
371
372
|
)
|
|
372
373
|
actual_data = data.get("data") if data and isinstance(data, dict) else data
|
|
373
374
|
return GetEntraineurResponse.from_dict(actual_data) if actual_data else None
|
|
374
|
-
except
|
|
375
|
+
except FFBBNotFoundError as e:
|
|
375
376
|
if self.debug:
|
|
376
377
|
self.logger.error(f"Error in get_entraineur_async: {e}")
|
|
377
378
|
return None
|
|
@@ -398,11 +399,11 @@ class GettersMixin:
|
|
|
398
399
|
url,
|
|
399
400
|
self.headers,
|
|
400
401
|
debug=self.debug,
|
|
401
|
-
cached_session=
|
|
402
|
+
cached_session=cached_session or self.async_cached_session,
|
|
402
403
|
)
|
|
403
404
|
actual_data = data.get("data") if data and isinstance(data, dict) else data
|
|
404
405
|
return GetCommuneResponse.from_dict(actual_data) if actual_data else None
|
|
405
|
-
except
|
|
406
|
+
except FFBBNotFoundError as e:
|
|
406
407
|
if self.debug:
|
|
407
408
|
self.logger.error(f"Error in get_commune_async: {e}")
|
|
408
409
|
return None
|
|
@@ -425,11 +426,11 @@ class GettersMixin:
|
|
|
425
426
|
url,
|
|
426
427
|
self.headers,
|
|
427
428
|
debug=self.debug,
|
|
428
|
-
cached_session=
|
|
429
|
+
cached_session=cached_session or self.async_cached_session,
|
|
429
430
|
)
|
|
430
431
|
actual_data = data.get("data") if data and isinstance(data, dict) else data
|
|
431
432
|
return GetOfficielResponse.from_dict(actual_data) if actual_data else None
|
|
432
|
-
except
|
|
433
|
+
except FFBBNotFoundError as e:
|
|
433
434
|
if self.debug:
|
|
434
435
|
self.logger.error(f"Error in get_officiel_async: {e}")
|
|
435
436
|
return None
|
|
@@ -452,11 +453,11 @@ class GettersMixin:
|
|
|
452
453
|
url,
|
|
453
454
|
self.headers,
|
|
454
455
|
debug=self.debug,
|
|
455
|
-
cached_session=
|
|
456
|
+
cached_session=cached_session or self.async_cached_session,
|
|
456
457
|
)
|
|
457
458
|
actual_data = data.get("data") if data and isinstance(data, dict) else data
|
|
458
459
|
return GetSalleResponse.from_dict(actual_data) if actual_data else None
|
|
459
|
-
except
|
|
460
|
+
except FFBBNotFoundError as e:
|
|
460
461
|
if self.debug:
|
|
461
462
|
self.logger.error(f"Error in get_salle_async: {e}")
|
|
462
463
|
return None
|
|
@@ -479,11 +480,11 @@ class GettersMixin:
|
|
|
479
480
|
url,
|
|
480
481
|
self.headers,
|
|
481
482
|
debug=self.debug,
|
|
482
|
-
cached_session=
|
|
483
|
+
cached_session=cached_session or self.async_cached_session,
|
|
483
484
|
)
|
|
484
485
|
actual_data = data.get("data") if data and isinstance(data, dict) else data
|
|
485
486
|
return GetTerrainResponse.from_dict(actual_data) if actual_data else None
|
|
486
|
-
except
|
|
487
|
+
except FFBBNotFoundError as e:
|
|
487
488
|
if self.debug:
|
|
488
489
|
self.logger.error(f"Error in get_terrain_async: {e}")
|
|
489
490
|
return None
|
|
@@ -506,11 +507,11 @@ class GettersMixin:
|
|
|
506
507
|
url,
|
|
507
508
|
self.headers,
|
|
508
509
|
debug=self.debug,
|
|
509
|
-
cached_session=
|
|
510
|
+
cached_session=cached_session or self.async_cached_session,
|
|
510
511
|
)
|
|
511
512
|
actual_data = data.get("data") if data and isinstance(data, dict) else data
|
|
512
513
|
return GetTournoiResponse.from_dict(actual_data) if actual_data else None
|
|
513
|
-
except
|
|
514
|
+
except FFBBNotFoundError as e:
|
|
514
515
|
if self.debug:
|
|
515
516
|
self.logger.error(f"Error in get_tournoi_async: {e}")
|
|
516
517
|
return None
|
|
@@ -533,11 +534,11 @@ class GettersMixin:
|
|
|
533
534
|
url,
|
|
534
535
|
self.headers,
|
|
535
536
|
debug=self.debug,
|
|
536
|
-
cached_session=
|
|
537
|
+
cached_session=cached_session or self.async_cached_session,
|
|
537
538
|
)
|
|
538
539
|
actual_data = data.get("data") if data and isinstance(data, dict) else data
|
|
539
540
|
return GetPratiqueResponse.from_dict(actual_data) if actual_data else None
|
|
540
|
-
except
|
|
541
|
+
except FFBBNotFoundError as e:
|
|
541
542
|
if self.debug:
|
|
542
543
|
self.logger.error(f"Error in get_pratique_async: {e}")
|
|
543
544
|
return None
|