FFBB Data Client — SDK Python asynchrone pour les Statistiques de Basket France. Type-safe Pydantic models, async/sync, Meilisearch.
Project description
🏀 FFBB Data Client
SDK Python moderne, typé et asynchrone pour exploiter les données publiques FFBB : clubs, compétitions, rencontres, classements, salles, officiels et recherche Meilisearch.
Installation • Démarrage rapide • Fonctionnalités • Recherche • Async • Développement
📌 À propos
ffbb_data_client simplifie l'accès aux API FFBB et à leurs index Meilisearch avec :
- une façade unique :
FFBBDataClient; - des modèles Pydantic v2 typés ;
- une API utilisable en synchrone ou en
async/await; - une gestion automatique des tokens via
TokenManager; - du cache HTTP configurable via
hishel; - des helpers prêts pour l'intégration MCP / agents IA.
La V3 remplace l’approche V2 basée sur des dictionnaires bruts et une configuration manuelle. Elle privilégie le typage, la robustesse réseau et les appels batchés.
🚀 Version v1.7.0 — 30 avril 2026
Principales évolutions récentes :
- ajout d'entités REST et Meilisearch : rencontres, officiels, entraîneurs, communes et assets ;
- réutilisation des clients
httpxsynchrones et asynchrones ; - cache Meilisearch optimisé pour limiter les copies coûteuses ;
- retries de transport configurables via
CacheConfig.transport_retries; - mise à jour des schémas OpenAPI, collections et index ;
- stabilisation CI, typage, tests et formatage.
Voir aussi : CHANGELOG.md et RELEASE_NOTES.md.
📦 Installation
pip install ffbb_data_client
Pour contribuer ou exécuter les tests :
git clone https://github.com/nickdesi/ffbb-data-client.git
cd ffbb-data-client
pip install -e ".[testing]"
Prérequis : Python >=3.10.
⚡ Démarrage rapide
from ffbb_data_client import FFBBDataClient
client = FFBBDataClient.create()
# Recherche globale sur les index FFBB
results = client.multi_search("Pau Orthez")
for result in results or []:
print(result.index_uid, len(result.hits or []))
# Lives en cours
lives = client.get_lives()
FFBBDataClient.create() résout automatiquement les tokens si aucun token n'est passé explicitement.
✨ Fonctionnalités
| Domaine | Capacités |
|---|---|
| API FFBB | clubs, compétitions, organismes, saisons, poules, classements, rencontres, lives |
| Recherche | organismes, compétitions, rencontres, salles, terrains, pratiques, tournois, engagements et formations |
| REST typé | récupération de ressources individuelles avec modèles Pydantic v2 |
| Async | méthodes *_async() pour les appels réseau non bloquants |
| Cache | cache HTTP hishel, sessions httpx réutilisées, retries configurables |
| Sécurité | masquage des tokens dans les logs |
| IA / MCP | structure compatible avec des wrappers MCP et agents IA |
🔍 Recherche Meilisearch
Recherche globale
results = client.multi_search("Clermont")
Recherche ciblée
organismes = client.search_organismes(
"Clermont",
filter=['codePostal = "63000"'],
sort=["nom:asc"],
limit=10,
)
rencontres = client.search_rencontres("N1M", limit=20)
salles = client.search_salles("Maison des Sports", limit=5)
engagements = client.search_engagements("U15M", limit=20)
Recherche géographique
clubs = client.search_organismes_by_geo(
lat=45.7772,
lng=3.0870,
radius_km=20,
limit=20,
)
Principales méthodes exposées
| Ressource | Méthode sync | Méthode async |
|---|---|---|
| Recherche globale | multi_search() |
multi_search_async() |
| Clubs / organismes | search_organismes() |
search_organismes_async() |
| Compétitions | search_competitions() |
search_competitions_async() |
| Rencontres | search_rencontres() |
search_rencontres_async() |
| Salles | search_salles() |
search_salles_async() |
| Terrains | search_terrains() |
search_terrains_async() |
| Pratiques | search_pratiques() |
search_pratiques_async() |
| Tournois | search_tournois() |
search_tournois_async() |
| Engagements | search_engagements() |
search_engagements_async() |
| Formations | search_formations() |
search_formations_async() |
🧱 Accès REST typé
# Ressources principales
organisme = client.get_organisme(12345)
competition = client.get_competition(67890)
poule = client.get_poule(11111)
# Ressources ajoutées récemment
rencontre = client.get_rencontre(22222)
officiel = client.get_officiel(33333)
entraineur = client.get_entraineur(44444)
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.
Les réponses sont converties en modèles Pydantic lorsque le schéma est connu, ce qui apporte validation, autocomplétion et sérialisation propre.
🧵 Utilisation asynchrone
import asyncio
from ffbb_data_client import FFBBDataClient
async def main() -> None:
client = FFBBDataClient.create()
results = await client.search_organismes_async("ASVEL")
lives = await client.get_lives_async()
print(results.estimated_total_hits if results else 0)
print(len(lives or []))
asyncio.run(main())
🔐 Tokens et configuration
Par défaut, le client utilise TokenManager.get_tokens() au moment de la création :
from ffbb_data_client import FFBBDataClient, TokenManager
tokens = TokenManager.get_tokens()
client = FFBBDataClient.create(
api_bearer_token=tokens.api_token,
meilisearch_bearer_token=tokens.meilisearch_token,
)
Il est donc possible de laisser le client résoudre les tokens automatiquement ou de les fournir explicitement selon le contexte d'exécution.
🏗 Architecture
src/ffbb_data_client/
├── clients/
│ ├── ffbb_data_client.py # Façade publique
│ ├── api_ffbb_app_client.py # Client REST FFBB
│ └── meilisearch_ffbb_client.py # Client recherche Meilisearch
├── helpers/ # Requêtes HTTP, multi-search, conversions
├── models/ # Modèles Pydantic v2
├── utils/ # cache, tokens, logging sécurisé
└── data/ # schémas et métadonnées embarqués
🧪 Développement local
pip install -e ".[testing]"
pytest tests/
Commandes utiles :
pytest tests/unit/
pytest tests/integration/
pytest tests/ --cov=src
Documentation complémentaire :
🤖 Intégration IA / MCP
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.
Projet associé : FFBB-MCP-Server
🤝 Contribuer
Les contributions sont bienvenues :
- ouvrez une issue pour un bug ;
- proposez une évolution via les discussions ;
- lancez les tests localement avant une pull request.
📄 Licence
Distribué sous licence Apache-2.0. Voir LICENSE.txt.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ffbb_data_client-2.0.1.tar.gz.
File metadata
- Download URL: ffbb_data_client-2.0.1.tar.gz
- Upload date:
- Size: 466.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
707830754b519efbb2a8690cbdaadbe8cf9449fe9d9b291d12b731141f01c5ef
|
|
| MD5 |
dc411686247d967a413ddf518919e847
|
|
| BLAKE2b-256 |
8f70d080ee3498d43010b0cd853b8bdaf6fa6269378e4cfc3971e896d91706bd
|
Provenance
The following attestation bundles were made for ffbb_data_client-2.0.1.tar.gz:
Publisher:
publish.yml on nickdesi/ffbb-data-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ffbb_data_client-2.0.1.tar.gz -
Subject digest:
707830754b519efbb2a8690cbdaadbe8cf9449fe9d9b291d12b731141f01c5ef - Sigstore transparency entry: 1435892228
- Sigstore integration time:
-
Permalink:
nickdesi/ffbb-data-client@26d2fe7a8f2ecc08e13abed8f1b63249db125e1a -
Branch / Tag:
refs/tags/v2.0.1 - Owner: https://github.com/nickdesi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@26d2fe7a8f2ecc08e13abed8f1b63249db125e1a -
Trigger Event:
push
-
Statement type:
File details
Details for the file ffbb_data_client-2.0.1-py3-none-any.whl.
File metadata
- Download URL: ffbb_data_client-2.0.1-py3-none-any.whl
- Upload date:
- Size: 257.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea365ea9307c1bd61d3b1b2e014a405edfe603caaf64cd1dbd3228254c4f74b5
|
|
| MD5 |
8928d981e6db6558001b8ab82ce55f3f
|
|
| BLAKE2b-256 |
990bb61b461cec4658c782c7b00a931dc2c72bff6d0425f9a746dc9d8006e8c7
|
Provenance
The following attestation bundles were made for ffbb_data_client-2.0.1-py3-none-any.whl:
Publisher:
publish.yml on nickdesi/ffbb-data-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ffbb_data_client-2.0.1-py3-none-any.whl -
Subject digest:
ea365ea9307c1bd61d3b1b2e014a405edfe603caaf64cd1dbd3228254c4f74b5 - Sigstore transparency entry: 1435892231
- Sigstore integration time:
-
Permalink:
nickdesi/ffbb-data-client@26d2fe7a8f2ecc08e13abed8f1b63249db125e1a -
Branch / Tag:
refs/tags/v2.0.1 - Owner: https://github.com/nickdesi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@26d2fe7a8f2ecc08e13abed8f1b63249db125e1a -
Trigger Event:
push
-
Statement type: