ffbb-data-client 2.0.0__py3-none-any.whl
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_api_client_v3/__init__.py +25 -0
- ffbb_data_client/__init__.py +175 -0
- ffbb_data_client/clients/__init__.py +13 -0
- ffbb_data_client/clients/api_ffbb_app_client.py +2475 -0
- ffbb_data_client/clients/ffbb_data_client.py +2789 -0
- ffbb_data_client/clients/meilisearch_client.py +218 -0
- ffbb_data_client/clients/meilisearch_ffbb_client.py +647 -0
- ffbb_data_client/config.py +153 -0
- ffbb_data_client/data/__init__.py +25 -0
- ffbb_data_client/data/collections.json +1364 -0
- ffbb_data_client/data/endpoint_discovery.json +1875 -0
- ffbb_data_client/data/indexes.json +501 -0
- ffbb_data_client/data/openapi.json +35713 -0
- ffbb_data_client/data/openapi_full.json +37622 -0
- ffbb_data_client/helpers/__init__.py +27 -0
- ffbb_data_client/helpers/http_requests_helper.py +73 -0
- ffbb_data_client/helpers/http_requests_utils.py +502 -0
- ffbb_data_client/helpers/meilisearch_client_extension.py +153 -0
- ffbb_data_client/helpers/multi_search_query_helper.py +35 -0
- ffbb_data_client/models/__init__.py +241 -0
- ffbb_data_client/models/affiche.py +45 -0
- ffbb_data_client/models/cartographie.py +82 -0
- ffbb_data_client/models/categorie.py +55 -0
- ffbb_data_client/models/categorie_type.py +42 -0
- ffbb_data_client/models/clock.py +38 -0
- ffbb_data_client/models/club_contacts.py +77 -0
- ffbb_data_client/models/code.py +7 -0
- ffbb_data_client/models/commune.py +66 -0
- ffbb_data_client/models/competition_fields.py +309 -0
- ffbb_data_client/models/competition_id.py +116 -0
- ffbb_data_client/models/competition_id_categorie.py +31 -0
- ffbb_data_client/models/competition_id_sexe.py +31 -0
- ffbb_data_client/models/competition_id_type_competition.py +27 -0
- ffbb_data_client/models/competition_id_type_competition_generique.py +24 -0
- ffbb_data_client/models/competition_origine.py +69 -0
- ffbb_data_client/models/competition_origine_categorie.py +23 -0
- ffbb_data_client/models/competition_origine_type_competition.py +14 -0
- ffbb_data_client/models/competition_origine_type_competition_generique.py +24 -0
- ffbb_data_client/models/competition_type.py +6 -0
- ffbb_data_client/models/competitions_facet_distribution.py +65 -0
- ffbb_data_client/models/competitions_facet_stats.py +14 -0
- ffbb_data_client/models/competitions_hit.py +232 -0
- ffbb_data_client/models/competitions_multi_search_query.py +40 -0
- ffbb_data_client/models/competitions_query.py +11 -0
- ffbb_data_client/models/configuration_models.py +5 -0
- ffbb_data_client/models/contact_info.py +18 -0
- ffbb_data_client/models/content_multi_search_query.py +93 -0
- ffbb_data_client/models/coordonnees.py +27 -0
- ffbb_data_client/models/coordonnees_type.py +5 -0
- ffbb_data_client/models/document_flyer.py +205 -0
- ffbb_data_client/models/document_flyer_type.py +6 -0
- ffbb_data_client/models/engagement_contacts.py +97 -0
- ffbb_data_client/models/engagements_facet_distribution.py +59 -0
- ffbb_data_client/models/engagements_facet_stats.py +14 -0
- ffbb_data_client/models/engagements_hit.py +192 -0
- ffbb_data_client/models/engagements_multi_search_query.py +41 -0
- ffbb_data_client/models/etat.py +6 -0
- ffbb_data_client/models/external_competition_id.py +42 -0
- ffbb_data_client/models/external_id.py +72 -0
- ffbb_data_client/models/facet_distribution.py +13 -0
- ffbb_data_client/models/facet_stats.py +13 -0
- ffbb_data_client/models/field_set.py +10 -0
- ffbb_data_client/models/folder.py +35 -0
- ffbb_data_client/models/formation_session.py +60 -0
- ffbb_data_client/models/formations_facet_distribution.py +61 -0
- ffbb_data_client/models/formations_facet_stats.py +14 -0
- ffbb_data_client/models/formations_hit.py +277 -0
- ffbb_data_client/models/formations_multi_search_query.py +41 -0
- ffbb_data_client/models/game_stats_model.py +57 -0
- ffbb_data_client/models/game_stats_models.py +5 -0
- ffbb_data_client/models/generic_search.py +92 -0
- ffbb_data_client/models/geo.py +27 -0
- ffbb_data_client/models/geo_sort_order.py +6 -0
- ffbb_data_client/models/get_commune_response.py +18 -0
- ffbb_data_client/models/get_competition_response.py +523 -0
- ffbb_data_client/models/get_configuration_response.py +45 -0
- ffbb_data_client/models/get_engagement_response.py +23 -0
- ffbb_data_client/models/get_entraineur_response.py +18 -0
- ffbb_data_client/models/get_formation_response.py +28 -0
- ffbb_data_client/models/get_officiel_response.py +18 -0
- ffbb_data_client/models/get_organisme_response.py +476 -0
- ffbb_data_client/models/get_poule_response.py +68 -0
- ffbb_data_client/models/get_pratique_response.py +18 -0
- ffbb_data_client/models/get_rencontre_response.py +93 -0
- ffbb_data_client/models/get_saisons_response.py +56 -0
- ffbb_data_client/models/get_salle_response.py +20 -0
- ffbb_data_client/models/get_terrain_response.py +16 -0
- ffbb_data_client/models/get_tournoi_response.py +16 -0
- ffbb_data_client/models/gradient_color.py +27 -0
- ffbb_data_client/models/hit.py +16 -0
- ffbb_data_client/models/id_engagement_equipe.py +32 -0
- ffbb_data_client/models/id_organisme_equipe.py +51 -0
- ffbb_data_client/models/id_organisme_equipe1_logo.py +28 -0
- ffbb_data_client/models/id_poule.py +27 -0
- ffbb_data_client/models/jour.py +11 -0
- ffbb_data_client/models/label.py +15 -0
- ffbb_data_client/models/labellisation.py +30 -0
- ffbb_data_client/models/live.py +192 -0
- ffbb_data_client/models/lives.py +6 -0
- ffbb_data_client/models/logo.py +28 -0
- ffbb_data_client/models/multi_search_queries.py +24 -0
- ffbb_data_client/models/multi_search_query.py +96 -0
- ffbb_data_client/models/multi_search_result_competitions.py +14 -0
- ffbb_data_client/models/multi_search_result_engagements.py +14 -0
- ffbb_data_client/models/multi_search_result_formations.py +12 -0
- ffbb_data_client/models/multi_search_result_organismes.py +12 -0
- ffbb_data_client/models/multi_search_result_pratiques.py +12 -0
- ffbb_data_client/models/multi_search_result_rencontres.py +12 -0
- ffbb_data_client/models/multi_search_result_salles.py +12 -0
- ffbb_data_client/models/multi_search_result_terrains.py +12 -0
- ffbb_data_client/models/multi_search_result_tournois.py +12 -0
- ffbb_data_client/models/multi_search_results.py +103 -0
- ffbb_data_client/models/multi_search_results_class.py +96 -0
- ffbb_data_client/models/nature_sol.py +57 -0
- ffbb_data_client/models/niveau.py +10 -0
- ffbb_data_client/models/niveau_class.py +27 -0
- ffbb_data_client/models/niveau_extractor.py +214 -0
- ffbb_data_client/models/niveau_info.py +64 -0
- ffbb_data_client/models/niveau_models.py +14 -0
- ffbb_data_client/models/niveau_type.py +10 -0
- ffbb_data_client/models/objectif.py +7 -0
- ffbb_data_client/models/organisateur.py +197 -0
- ffbb_data_client/models/organisateur_type.py +6 -0
- ffbb_data_client/models/organisme_fields.py +327 -0
- ffbb_data_client/models/organisme_id_pere.py +177 -0
- ffbb_data_client/models/organismes_facet_distribution.py +46 -0
- ffbb_data_client/models/organismes_facet_stats.py +14 -0
- ffbb_data_client/models/organismes_hit.py +196 -0
- ffbb_data_client/models/organismes_multi_search_query.py +41 -0
- ffbb_data_client/models/organismes_query.py +8 -0
- ffbb_data_client/models/phase_code.py +23 -0
- ffbb_data_client/models/poule.py +35 -0
- ffbb_data_client/models/poule_fields.py +261 -0
- ffbb_data_client/models/poule_rencontre_item_model.py +69 -0
- ffbb_data_client/models/poules_models.py +6 -0
- ffbb_data_client/models/poules_query.py +9 -0
- ffbb_data_client/models/pratique.py +7 -0
- ffbb_data_client/models/pratiques_facet_distribution.py +29 -0
- ffbb_data_client/models/pratiques_facet_stats.py +14 -0
- ffbb_data_client/models/pratiques_hit.py +310 -0
- ffbb_data_client/models/pratiques_hit_type.py +9 -0
- ffbb_data_client/models/pratiques_multi_search_query.py +41 -0
- ffbb_data_client/models/pratiques_type_class.py +45 -0
- ffbb_data_client/models/publication_internet.py +6 -0
- ffbb_data_client/models/purple_logo.py +24 -0
- ffbb_data_client/models/query_fields_manager.py +75 -0
- ffbb_data_client/models/ranking_engagement.py +41 -0
- ffbb_data_client/models/rankings_models.py +6 -0
- ffbb_data_client/models/rencontres_engagement.py +23 -0
- ffbb_data_client/models/rencontres_facet_distribution.py +65 -0
- ffbb_data_client/models/rencontres_facet_stats.py +14 -0
- ffbb_data_client/models/rencontres_hit.py +271 -0
- ffbb_data_client/models/rencontres_multi_search_query.py +41 -0
- ffbb_data_client/models/saison.py +23 -0
- ffbb_data_client/models/saison_fields.py +36 -0
- ffbb_data_client/models/saisons_models.py +6 -0
- ffbb_data_client/models/saisons_query.py +9 -0
- ffbb_data_client/models/salle.py +56 -0
- ffbb_data_client/models/salles_facet_distribution.py +14 -0
- ffbb_data_client/models/salles_facet_stats.py +14 -0
- ffbb_data_client/models/salles_hit.py +153 -0
- ffbb_data_client/models/salles_multi_search_query.py +40 -0
- ffbb_data_client/models/sexe.py +9 -0
- ffbb_data_client/models/sexe_class.py +31 -0
- ffbb_data_client/models/source.py +5 -0
- ffbb_data_client/models/status.py +5 -0
- ffbb_data_client/models/team_engagement.py +56 -0
- ffbb_data_client/models/team_ranking.py +108 -0
- ffbb_data_client/models/terrains_categorie_championnat_3x3_libelle.py +5 -0
- ffbb_data_client/models/terrains_facet_distribution.py +41 -0
- ffbb_data_client/models/terrains_facet_stats.py +14 -0
- ffbb_data_client/models/terrains_hit.py +223 -0
- ffbb_data_client/models/terrains_multi_search_query.py +42 -0
- ffbb_data_client/models/terrains_name.py +5 -0
- ffbb_data_client/models/terrains_sexe_enum.py +7 -0
- ffbb_data_client/models/terrains_storage.py +5 -0
- ffbb_data_client/models/tournoi_type_class.py +35 -0
- ffbb_data_client/models/tournoi_type_enum.py +7 -0
- ffbb_data_client/models/tournoi_types_3x3.py +43 -0
- ffbb_data_client/models/tournoi_types_3x3_libelle.py +60 -0
- ffbb_data_client/models/tournoi_types_3x3_libelle_enum.py +10 -0
- ffbb_data_client/models/tournois_facet_distribution.py +41 -0
- ffbb_data_client/models/tournois_facet_stats.py +14 -0
- ffbb_data_client/models/tournois_hit.py +132 -0
- ffbb_data_client/models/tournois_hit_type.py +5 -0
- ffbb_data_client/models/tournois_libelle.py +7 -0
- ffbb_data_client/models/tournois_multi_search_query.py +40 -0
- ffbb_data_client/models/type_association.py +23 -0
- ffbb_data_client/models/type_association_libelle.py +30 -0
- ffbb_data_client/models/type_class.py +23 -0
- ffbb_data_client/models/type_competition.py +8 -0
- ffbb_data_client/models/type_competition_generique.py +31 -0
- ffbb_data_client/models/type_enum.py +7 -0
- ffbb_data_client/models/type_league.py +6 -0
- ffbb_data_client/py.typed +0 -0
- ffbb_data_client/utils/__init__.py +27 -0
- ffbb_data_client/utils/cache_manager.py +393 -0
- ffbb_data_client/utils/converter_utils.py +329 -0
- ffbb_data_client/utils/input_validation.py +360 -0
- ffbb_data_client/utils/retry_utils.py +478 -0
- ffbb_data_client/utils/secure_logging.py +153 -0
- ffbb_data_client/utils/token_manager.py +115 -0
- ffbb_data_client-2.0.0.dist-info/METADATA +339 -0
- ffbb_data_client-2.0.0.dist-info/RECORD +207 -0
- ffbb_data_client-2.0.0.dist-info/WHEEL +5 -0
- ffbb_data_client-2.0.0.dist-info/licenses/LICENSE.txt +201 -0
- ffbb_data_client-2.0.0.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,647 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import cast
|
|
4
|
+
|
|
5
|
+
import httpx
|
|
6
|
+
from httpx import Client
|
|
7
|
+
|
|
8
|
+
from ..config import MEILISEARCH_BASE_URL
|
|
9
|
+
from ..helpers.meilisearch_client_extension import MeilisearchClientExtension
|
|
10
|
+
from ..models.competitions_multi_search_query import CompetitionsMultiSearchQuery
|
|
11
|
+
from ..models.content_multi_search_query import (
|
|
12
|
+
GaleriesMultiSearchQuery,
|
|
13
|
+
NewsMultiSearchQuery,
|
|
14
|
+
RssMultiSearchQuery,
|
|
15
|
+
YoutubeVideosMultiSearchQuery,
|
|
16
|
+
)
|
|
17
|
+
from ..models.engagements_multi_search_query import EngagementsMultiSearchQuery
|
|
18
|
+
from ..models.formations_multi_search_query import FormationsMultiSearchQuery
|
|
19
|
+
from ..models.generic_search import (
|
|
20
|
+
GaleriesMultiSearchResult,
|
|
21
|
+
NewsMultiSearchResult,
|
|
22
|
+
RssMultiSearchResult,
|
|
23
|
+
YoutubeVideosMultiSearchResult,
|
|
24
|
+
)
|
|
25
|
+
from ..models.geo_sort_order import GeoSortOrder
|
|
26
|
+
from ..models.multi_search_result_competitions import CompetitionsMultiSearchResult
|
|
27
|
+
from ..models.multi_search_result_engagements import EngagementsMultiSearchResult
|
|
28
|
+
from ..models.multi_search_result_formations import FormationsMultiSearchResult
|
|
29
|
+
from ..models.multi_search_result_organismes import OrganismesMultiSearchResult
|
|
30
|
+
from ..models.multi_search_result_pratiques import PratiquesMultiSearchResult
|
|
31
|
+
from ..models.multi_search_result_rencontres import RencontresMultiSearchResult
|
|
32
|
+
from ..models.multi_search_result_salles import SallesMultiSearchResult
|
|
33
|
+
from ..models.multi_search_result_terrains import TerrainsMultiSearchResult
|
|
34
|
+
from ..models.multi_search_result_tournois import TournoisMultiSearchResult
|
|
35
|
+
from ..models.organismes_multi_search_query import OrganismesMultiSearchQuery
|
|
36
|
+
from ..models.pratiques_multi_search_query import PratiquesMultiSearchQuery
|
|
37
|
+
from ..models.rencontres_multi_search_query import RencontresMultiSearchQuery
|
|
38
|
+
from ..models.salles_multi_search_query import SallesMultiSearchQuery
|
|
39
|
+
from ..models.terrains_multi_search_query import TerrainsMultiSearchQuery
|
|
40
|
+
from ..models.tournois_multi_search_query import TournoisMultiSearchQuery
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class MeilisearchFFBBClient(MeilisearchClientExtension):
|
|
44
|
+
def __init__(
|
|
45
|
+
self,
|
|
46
|
+
bearer_token: str,
|
|
47
|
+
url: str = MEILISEARCH_BASE_URL,
|
|
48
|
+
debug: bool = False,
|
|
49
|
+
cached_session: Client | None = None,
|
|
50
|
+
*,
|
|
51
|
+
async_cached_session: httpx.AsyncClient | None = None,
|
|
52
|
+
):
|
|
53
|
+
super().__init__(
|
|
54
|
+
bearer_token,
|
|
55
|
+
url,
|
|
56
|
+
debug,
|
|
57
|
+
cached_session,
|
|
58
|
+
async_cached_session=async_cached_session,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
def search_multiple_organismes(
|
|
62
|
+
self,
|
|
63
|
+
names: list[str | None] | None = None,
|
|
64
|
+
filter: list[str] | None = None,
|
|
65
|
+
sort: list[str] | None = None,
|
|
66
|
+
limit: int | None = 10,
|
|
67
|
+
cached_session: Client | None = None,
|
|
68
|
+
) -> list[OrganismesMultiSearchResult] | None:
|
|
69
|
+
if not names:
|
|
70
|
+
return None
|
|
71
|
+
|
|
72
|
+
queries = [
|
|
73
|
+
OrganismesMultiSearchQuery(name, limit=limit, filter=filter, sort=sort)
|
|
74
|
+
for name in names
|
|
75
|
+
]
|
|
76
|
+
results = self.recursive_multi_search(queries, cached_session)
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
cast(list[OrganismesMultiSearchResult], results.results)
|
|
80
|
+
if results
|
|
81
|
+
else None
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
def search_organismes(
|
|
85
|
+
self,
|
|
86
|
+
name: str | None = None,
|
|
87
|
+
filter: list[str] | None = None,
|
|
88
|
+
sort: list[str] | None = None,
|
|
89
|
+
limit: int | None = 10,
|
|
90
|
+
cached_session: Client | None = None,
|
|
91
|
+
) -> OrganismesMultiSearchResult | None:
|
|
92
|
+
results = self.search_multiple_organismes(
|
|
93
|
+
[name],
|
|
94
|
+
filter=filter,
|
|
95
|
+
sort=sort,
|
|
96
|
+
limit=limit,
|
|
97
|
+
cached_session=cached_session,
|
|
98
|
+
)
|
|
99
|
+
return results[0] if results else None
|
|
100
|
+
|
|
101
|
+
def search_organismes_by_geo(
|
|
102
|
+
self,
|
|
103
|
+
lat: float,
|
|
104
|
+
lng: float,
|
|
105
|
+
radius_km: float = 10.0,
|
|
106
|
+
q: str = "",
|
|
107
|
+
limit: int | None = 20,
|
|
108
|
+
geo_sort: GeoSortOrder = GeoSortOrder.NEAREST_FIRST,
|
|
109
|
+
cached_session: Client | None = None,
|
|
110
|
+
) -> OrganismesMultiSearchResult | None:
|
|
111
|
+
filter_str = f"_geoRadius({lat}, {lng}, {int(radius_km * 1000)})"
|
|
112
|
+
sort = [f"_geoPoint({lat}, {lng}):{geo_sort.value}"]
|
|
113
|
+
return self.search_organismes(
|
|
114
|
+
name=q,
|
|
115
|
+
filter=[filter_str],
|
|
116
|
+
sort=sort,
|
|
117
|
+
limit=limit,
|
|
118
|
+
cached_session=cached_session,
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
def search_organismes_by_city(
|
|
122
|
+
self,
|
|
123
|
+
city_name: str,
|
|
124
|
+
q: str = "",
|
|
125
|
+
limit: int = 200,
|
|
126
|
+
cached_session: Client | None = None,
|
|
127
|
+
) -> OrganismesMultiSearchResult | None:
|
|
128
|
+
filter_str = f'commune = "{city_name}"'
|
|
129
|
+
return self.search_organismes(
|
|
130
|
+
name=q, filter=[filter_str], limit=limit, cached_session=cached_session
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
def search_multiple_rencontres(
|
|
134
|
+
self,
|
|
135
|
+
names: list[str | None] | None = None,
|
|
136
|
+
filter: list[str] | None = None,
|
|
137
|
+
sort: list[str] | None = None,
|
|
138
|
+
limit: int | None = 10,
|
|
139
|
+
cached_session: Client | None = None,
|
|
140
|
+
) -> list[RencontresMultiSearchResult] | None:
|
|
141
|
+
if not names:
|
|
142
|
+
return None
|
|
143
|
+
|
|
144
|
+
queries = [
|
|
145
|
+
RencontresMultiSearchQuery(name, limit=limit, filter=filter, sort=sort)
|
|
146
|
+
for name in names
|
|
147
|
+
]
|
|
148
|
+
results = self.recursive_multi_search(queries, cached_session)
|
|
149
|
+
|
|
150
|
+
return (
|
|
151
|
+
cast(list[RencontresMultiSearchResult], results.results)
|
|
152
|
+
if results
|
|
153
|
+
else None
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
def search_rencontres(
|
|
157
|
+
self,
|
|
158
|
+
name: str | None = None,
|
|
159
|
+
filter: list[str] | None = None,
|
|
160
|
+
sort: list[str] | None = None,
|
|
161
|
+
limit: int | None = 10,
|
|
162
|
+
cached_session: Client | None = None,
|
|
163
|
+
) -> RencontresMultiSearchResult | None:
|
|
164
|
+
results = self.search_multiple_rencontres(
|
|
165
|
+
[name],
|
|
166
|
+
filter=filter,
|
|
167
|
+
sort=sort,
|
|
168
|
+
limit=limit,
|
|
169
|
+
cached_session=cached_session,
|
|
170
|
+
)
|
|
171
|
+
return results[0] if results else None
|
|
172
|
+
|
|
173
|
+
def search_multiple_terrains(
|
|
174
|
+
self,
|
|
175
|
+
names: list[str | None] | None = None,
|
|
176
|
+
filter: list[str] | None = None,
|
|
177
|
+
sort: list[str] | None = None,
|
|
178
|
+
limit: int | None = 10,
|
|
179
|
+
cached_session: Client | None = None,
|
|
180
|
+
) -> list[TerrainsMultiSearchResult] | None:
|
|
181
|
+
if not names:
|
|
182
|
+
return None
|
|
183
|
+
|
|
184
|
+
queries = [
|
|
185
|
+
TerrainsMultiSearchQuery(name, limit=limit, filter=filter, sort=sort)
|
|
186
|
+
for name in names
|
|
187
|
+
]
|
|
188
|
+
results = self.recursive_multi_search(queries, cached_session)
|
|
189
|
+
|
|
190
|
+
return (
|
|
191
|
+
cast(list[TerrainsMultiSearchResult], results.results) if results else None
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
def search_terrains(
|
|
195
|
+
self,
|
|
196
|
+
name: str | None = None,
|
|
197
|
+
filter: list[str] | None = None,
|
|
198
|
+
sort: list[str] | None = None,
|
|
199
|
+
limit: int | None = 10,
|
|
200
|
+
cached_session: Client | None = None,
|
|
201
|
+
) -> TerrainsMultiSearchResult | None:
|
|
202
|
+
results = self.search_multiple_terrains(
|
|
203
|
+
[name],
|
|
204
|
+
filter=filter,
|
|
205
|
+
sort=sort,
|
|
206
|
+
limit=limit,
|
|
207
|
+
cached_session=cached_session,
|
|
208
|
+
)
|
|
209
|
+
return results[0] if results else None
|
|
210
|
+
|
|
211
|
+
def search_multiple_competitions(
|
|
212
|
+
self,
|
|
213
|
+
names: list[str | None] | None = None,
|
|
214
|
+
filter: list[str] | None = None,
|
|
215
|
+
sort: list[str] | None = None,
|
|
216
|
+
limit: int | None = 10,
|
|
217
|
+
cached_session: Client | None = None,
|
|
218
|
+
) -> list[CompetitionsMultiSearchResult] | None:
|
|
219
|
+
if not names:
|
|
220
|
+
return None
|
|
221
|
+
|
|
222
|
+
queries = [
|
|
223
|
+
CompetitionsMultiSearchQuery(name, limit=limit, filter=filter, sort=sort)
|
|
224
|
+
for name in names
|
|
225
|
+
]
|
|
226
|
+
results = self.recursive_multi_search(queries, cached_session)
|
|
227
|
+
|
|
228
|
+
return (
|
|
229
|
+
cast(list[CompetitionsMultiSearchResult], results.results)
|
|
230
|
+
if results
|
|
231
|
+
else None
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
def search_competitions(
|
|
235
|
+
self,
|
|
236
|
+
name: str | None = None,
|
|
237
|
+
filter: list[str] | None = None,
|
|
238
|
+
sort: list[str] | None = None,
|
|
239
|
+
limit: int | None = 10,
|
|
240
|
+
cached_session: Client | None = None,
|
|
241
|
+
) -> CompetitionsMultiSearchResult | None:
|
|
242
|
+
results = self.search_multiple_competitions(
|
|
243
|
+
[name],
|
|
244
|
+
filter=filter,
|
|
245
|
+
sort=sort,
|
|
246
|
+
limit=limit,
|
|
247
|
+
cached_session=cached_session,
|
|
248
|
+
)
|
|
249
|
+
return results[0] if results else None
|
|
250
|
+
|
|
251
|
+
def search_multiple_salles(
|
|
252
|
+
self,
|
|
253
|
+
names: list[str | None] | None = None,
|
|
254
|
+
filter: list[str] | None = None,
|
|
255
|
+
sort: list[str] | None = None,
|
|
256
|
+
limit: int | None = 10,
|
|
257
|
+
cached_session: Client | None = None,
|
|
258
|
+
) -> list[SallesMultiSearchResult] | None:
|
|
259
|
+
if not names:
|
|
260
|
+
return None
|
|
261
|
+
|
|
262
|
+
queries = [
|
|
263
|
+
SallesMultiSearchQuery(name, limit=limit, filter=filter, sort=sort)
|
|
264
|
+
for name in names
|
|
265
|
+
]
|
|
266
|
+
results = self.recursive_multi_search(queries, cached_session)
|
|
267
|
+
|
|
268
|
+
return cast(list[SallesMultiSearchResult], results.results) if results else None
|
|
269
|
+
|
|
270
|
+
def search_salles(
|
|
271
|
+
self,
|
|
272
|
+
name: str | None = None,
|
|
273
|
+
filter: list[str] | None = None,
|
|
274
|
+
sort: list[str] | None = None,
|
|
275
|
+
limit: int | None = 10,
|
|
276
|
+
cached_session: Client | None = None,
|
|
277
|
+
) -> SallesMultiSearchResult | None:
|
|
278
|
+
results = self.search_multiple_salles(
|
|
279
|
+
[name],
|
|
280
|
+
filter=filter,
|
|
281
|
+
sort=sort,
|
|
282
|
+
limit=limit,
|
|
283
|
+
cached_session=cached_session,
|
|
284
|
+
)
|
|
285
|
+
return results[0] if results else None
|
|
286
|
+
|
|
287
|
+
def search_salles_by_geo(
|
|
288
|
+
self,
|
|
289
|
+
lat: float,
|
|
290
|
+
lng: float,
|
|
291
|
+
radius_km: float = 10.0,
|
|
292
|
+
q: str = "",
|
|
293
|
+
limit: int | None = 20,
|
|
294
|
+
geo_sort: GeoSortOrder = GeoSortOrder.NEAREST_FIRST,
|
|
295
|
+
cached_session: Client | None = None,
|
|
296
|
+
) -> SallesMultiSearchResult | None:
|
|
297
|
+
filter_str = f"_geoRadius({lat}, {lng}, {int(radius_km * 1000)})"
|
|
298
|
+
sort = [f"_geoPoint({lat}, {lng}):{geo_sort.value}"]
|
|
299
|
+
return self.search_salles(
|
|
300
|
+
name=q,
|
|
301
|
+
filter=[filter_str],
|
|
302
|
+
sort=sort,
|
|
303
|
+
limit=limit,
|
|
304
|
+
cached_session=cached_session,
|
|
305
|
+
)
|
|
306
|
+
|
|
307
|
+
def search_multiple_tournois(
|
|
308
|
+
self,
|
|
309
|
+
names: list[str | None] | None = None,
|
|
310
|
+
filter: list[str] | None = None,
|
|
311
|
+
sort: list[str] | None = None,
|
|
312
|
+
limit: int | None = 10,
|
|
313
|
+
cached_session: Client | None = None,
|
|
314
|
+
) -> list[TournoisMultiSearchResult] | None:
|
|
315
|
+
if not names:
|
|
316
|
+
return None
|
|
317
|
+
|
|
318
|
+
queries = [
|
|
319
|
+
TournoisMultiSearchQuery(name, limit=limit, filter=filter, sort=sort)
|
|
320
|
+
for name in names
|
|
321
|
+
]
|
|
322
|
+
results = self.recursive_multi_search(queries, cached_session)
|
|
323
|
+
|
|
324
|
+
return (
|
|
325
|
+
cast(list[TournoisMultiSearchResult], results.results) if results else None
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
def search_tournois(
|
|
329
|
+
self,
|
|
330
|
+
name: str | None = None,
|
|
331
|
+
filter: list[str] | None = None,
|
|
332
|
+
sort: list[str] | None = None,
|
|
333
|
+
limit: int | None = 10,
|
|
334
|
+
cached_session: Client | None = None,
|
|
335
|
+
) -> TournoisMultiSearchResult | None:
|
|
336
|
+
results = self.search_multiple_tournois(
|
|
337
|
+
[name],
|
|
338
|
+
filter=filter,
|
|
339
|
+
sort=sort,
|
|
340
|
+
limit=limit,
|
|
341
|
+
cached_session=cached_session,
|
|
342
|
+
)
|
|
343
|
+
return results[0] if results else None
|
|
344
|
+
|
|
345
|
+
def search_multiple_pratiques(
|
|
346
|
+
self,
|
|
347
|
+
names: list[str | None] | None = None,
|
|
348
|
+
filter: list[str] | None = None,
|
|
349
|
+
sort: list[str] | None = None,
|
|
350
|
+
limit: int | None = 10,
|
|
351
|
+
cached_session: Client | None = None,
|
|
352
|
+
) -> list[PratiquesMultiSearchResult] | None:
|
|
353
|
+
if not names:
|
|
354
|
+
return None
|
|
355
|
+
|
|
356
|
+
queries = [
|
|
357
|
+
PratiquesMultiSearchQuery(name, limit=limit, filter=filter, sort=sort)
|
|
358
|
+
for name in names
|
|
359
|
+
]
|
|
360
|
+
results = self.recursive_multi_search(queries, cached_session)
|
|
361
|
+
|
|
362
|
+
return (
|
|
363
|
+
cast(list[PratiquesMultiSearchResult], results.results) if results else None
|
|
364
|
+
)
|
|
365
|
+
|
|
366
|
+
def search_pratiques(
|
|
367
|
+
self,
|
|
368
|
+
name: str | None = None,
|
|
369
|
+
filter: list[str] | None = None,
|
|
370
|
+
sort: list[str] | None = None,
|
|
371
|
+
limit: int | None = 10,
|
|
372
|
+
cached_session: Client | None = None,
|
|
373
|
+
) -> PratiquesMultiSearchResult | None:
|
|
374
|
+
results = self.search_multiple_pratiques(
|
|
375
|
+
[name],
|
|
376
|
+
filter=filter,
|
|
377
|
+
sort=sort,
|
|
378
|
+
limit=limit,
|
|
379
|
+
cached_session=cached_session,
|
|
380
|
+
)
|
|
381
|
+
return results[0] if results else None
|
|
382
|
+
|
|
383
|
+
def search_multiple_engagements(
|
|
384
|
+
self,
|
|
385
|
+
names: list[str | None] | None = None,
|
|
386
|
+
filter: list[str] | None = None,
|
|
387
|
+
sort: list[str] | None = None,
|
|
388
|
+
limit: int | None = 10,
|
|
389
|
+
cached_session: Client | None = None,
|
|
390
|
+
) -> list[EngagementsMultiSearchResult] | None:
|
|
391
|
+
if not names:
|
|
392
|
+
return None
|
|
393
|
+
|
|
394
|
+
queries = [
|
|
395
|
+
EngagementsMultiSearchQuery(name, limit=limit, filter=filter, sort=sort)
|
|
396
|
+
for name in names
|
|
397
|
+
]
|
|
398
|
+
results = self.recursive_multi_search(queries, cached_session)
|
|
399
|
+
|
|
400
|
+
return (
|
|
401
|
+
cast(list[EngagementsMultiSearchResult], results.results)
|
|
402
|
+
if results
|
|
403
|
+
else None
|
|
404
|
+
)
|
|
405
|
+
|
|
406
|
+
def search_engagements(
|
|
407
|
+
self,
|
|
408
|
+
name: str | None = None,
|
|
409
|
+
filter: list[str] | None = None,
|
|
410
|
+
sort: list[str] | None = None,
|
|
411
|
+
limit: int | None = 10,
|
|
412
|
+
cached_session: Client | None = None,
|
|
413
|
+
) -> EngagementsMultiSearchResult | None:
|
|
414
|
+
results = self.search_multiple_engagements(
|
|
415
|
+
[name],
|
|
416
|
+
filter=filter,
|
|
417
|
+
sort=sort,
|
|
418
|
+
limit=limit,
|
|
419
|
+
cached_session=cached_session,
|
|
420
|
+
)
|
|
421
|
+
return results[0] if results else None
|
|
422
|
+
|
|
423
|
+
def search_engagements_by_geo(
|
|
424
|
+
self,
|
|
425
|
+
lat: float,
|
|
426
|
+
lng: float,
|
|
427
|
+
radius_km: float = 10.0,
|
|
428
|
+
q: str = "",
|
|
429
|
+
limit: int | None = 20,
|
|
430
|
+
geo_sort: GeoSortOrder = GeoSortOrder.NEAREST_FIRST,
|
|
431
|
+
cached_session: Client | None = None,
|
|
432
|
+
) -> EngagementsMultiSearchResult | None:
|
|
433
|
+
filter_str = f"_geoRadius({lat}, {lng}, {int(radius_km * 1000)})"
|
|
434
|
+
sort = [f"_geoPoint({lat}, {lng}):{geo_sort.value}"]
|
|
435
|
+
return self.search_engagements(
|
|
436
|
+
name=q,
|
|
437
|
+
filter=[filter_str],
|
|
438
|
+
sort=sort,
|
|
439
|
+
limit=limit,
|
|
440
|
+
cached_session=cached_session,
|
|
441
|
+
)
|
|
442
|
+
|
|
443
|
+
def search_engagements_filtered(
|
|
444
|
+
self,
|
|
445
|
+
lat: float,
|
|
446
|
+
lng: float,
|
|
447
|
+
radius_km: float = 10.0,
|
|
448
|
+
q: str = "",
|
|
449
|
+
limit: int | None = 5000,
|
|
450
|
+
sexes: list[str] | None = None,
|
|
451
|
+
niveau_codes: list[str] | None = None,
|
|
452
|
+
cached_session: Client | None = None,
|
|
453
|
+
) -> EngagementsMultiSearchResult | None:
|
|
454
|
+
filters: list[str] = [f"_geoRadius({lat}, {lng}, {int(radius_km * 1000)})"]
|
|
455
|
+
if sexes:
|
|
456
|
+
filters.append(" OR ".join(f'sexe = "{s}"' for s in sexes))
|
|
457
|
+
if niveau_codes:
|
|
458
|
+
filters.append(" OR ".join(f'niveau.code = "{n}"' for n in niveau_codes))
|
|
459
|
+
return self.search_engagements(
|
|
460
|
+
name=q, filter=filters, limit=limit, cached_session=cached_session
|
|
461
|
+
)
|
|
462
|
+
|
|
463
|
+
def search_multiple_formations(
|
|
464
|
+
self,
|
|
465
|
+
names: list[str | None] | None = None,
|
|
466
|
+
filter: list[str] | None = None,
|
|
467
|
+
sort: list[str] | None = None,
|
|
468
|
+
limit: int | None = 10,
|
|
469
|
+
cached_session: Client | None = None,
|
|
470
|
+
) -> list[FormationsMultiSearchResult] | None:
|
|
471
|
+
if not names:
|
|
472
|
+
return None
|
|
473
|
+
|
|
474
|
+
queries = [
|
|
475
|
+
FormationsMultiSearchQuery(name, limit=limit, filter=filter, sort=sort)
|
|
476
|
+
for name in names
|
|
477
|
+
]
|
|
478
|
+
results = self.recursive_multi_search(queries, cached_session)
|
|
479
|
+
|
|
480
|
+
return (
|
|
481
|
+
cast(list[FormationsMultiSearchResult], results.results)
|
|
482
|
+
if results
|
|
483
|
+
else None
|
|
484
|
+
)
|
|
485
|
+
|
|
486
|
+
def search_formations(
|
|
487
|
+
self,
|
|
488
|
+
name: str | None = None,
|
|
489
|
+
filter: list[str] | None = None,
|
|
490
|
+
sort: list[str] | None = None,
|
|
491
|
+
limit: int | None = 10,
|
|
492
|
+
cached_session: Client | None = None,
|
|
493
|
+
) -> FormationsMultiSearchResult | None:
|
|
494
|
+
results = self.search_multiple_formations(
|
|
495
|
+
[name],
|
|
496
|
+
filter=filter,
|
|
497
|
+
sort=sort,
|
|
498
|
+
limit=limit,
|
|
499
|
+
cached_session=cached_session,
|
|
500
|
+
)
|
|
501
|
+
return results[0] if results else None
|
|
502
|
+
|
|
503
|
+
def search_multiple_news(
|
|
504
|
+
self,
|
|
505
|
+
names: list[str | None] | None = None,
|
|
506
|
+
filter: list[str] | None = None,
|
|
507
|
+
sort: list[str] | None = None,
|
|
508
|
+
limit: int | None = 10,
|
|
509
|
+
cached_session: Client | None = None,
|
|
510
|
+
) -> list[NewsMultiSearchResult] | None:
|
|
511
|
+
if not names:
|
|
512
|
+
return None
|
|
513
|
+
|
|
514
|
+
queries = [
|
|
515
|
+
NewsMultiSearchQuery(name, limit=limit, filter=filter, sort=sort)
|
|
516
|
+
for name in names
|
|
517
|
+
]
|
|
518
|
+
results = self.recursive_multi_search(queries, cached_session)
|
|
519
|
+
return cast(list[NewsMultiSearchResult], results.results) if results else None
|
|
520
|
+
|
|
521
|
+
def search_news(
|
|
522
|
+
self,
|
|
523
|
+
name: str | None = None,
|
|
524
|
+
filter: list[str] | None = None,
|
|
525
|
+
sort: list[str] | None = None,
|
|
526
|
+
limit: int | None = 10,
|
|
527
|
+
cached_session: Client | None = None,
|
|
528
|
+
) -> NewsMultiSearchResult | None:
|
|
529
|
+
results = self.search_multiple_news(
|
|
530
|
+
[name],
|
|
531
|
+
filter=filter,
|
|
532
|
+
sort=sort,
|
|
533
|
+
limit=limit,
|
|
534
|
+
cached_session=cached_session,
|
|
535
|
+
)
|
|
536
|
+
return results[0] if results else None
|
|
537
|
+
|
|
538
|
+
def search_multiple_youtube_videos(
|
|
539
|
+
self,
|
|
540
|
+
names: list[str | None] | None = None,
|
|
541
|
+
filter: list[str] | None = None,
|
|
542
|
+
sort: list[str] | None = None,
|
|
543
|
+
limit: int | None = 10,
|
|
544
|
+
cached_session: Client | None = None,
|
|
545
|
+
) -> list[YoutubeVideosMultiSearchResult] | None:
|
|
546
|
+
if not names:
|
|
547
|
+
return None
|
|
548
|
+
|
|
549
|
+
queries = [
|
|
550
|
+
YoutubeVideosMultiSearchQuery(name, limit=limit, filter=filter, sort=sort)
|
|
551
|
+
for name in names
|
|
552
|
+
]
|
|
553
|
+
results = self.recursive_multi_search(queries, cached_session)
|
|
554
|
+
return (
|
|
555
|
+
cast(list[YoutubeVideosMultiSearchResult], results.results)
|
|
556
|
+
if results
|
|
557
|
+
else None
|
|
558
|
+
)
|
|
559
|
+
|
|
560
|
+
def search_youtube_videos(
|
|
561
|
+
self,
|
|
562
|
+
name: str | None = None,
|
|
563
|
+
filter: list[str] | None = None,
|
|
564
|
+
sort: list[str] | None = None,
|
|
565
|
+
limit: int | None = 10,
|
|
566
|
+
cached_session: Client | None = None,
|
|
567
|
+
) -> YoutubeVideosMultiSearchResult | None:
|
|
568
|
+
results = self.search_multiple_youtube_videos(
|
|
569
|
+
[name],
|
|
570
|
+
filter=filter,
|
|
571
|
+
sort=sort,
|
|
572
|
+
limit=limit,
|
|
573
|
+
cached_session=cached_session,
|
|
574
|
+
)
|
|
575
|
+
return results[0] if results else None
|
|
576
|
+
|
|
577
|
+
def search_multiple_rss(
|
|
578
|
+
self,
|
|
579
|
+
names: list[str | None] | None = None,
|
|
580
|
+
filter: list[str] | None = None,
|
|
581
|
+
sort: list[str] | None = None,
|
|
582
|
+
limit: int | None = 10,
|
|
583
|
+
cached_session: Client | None = None,
|
|
584
|
+
) -> list[RssMultiSearchResult] | None:
|
|
585
|
+
if not names:
|
|
586
|
+
return None
|
|
587
|
+
|
|
588
|
+
queries = [
|
|
589
|
+
RssMultiSearchQuery(name, limit=limit, filter=filter, sort=sort)
|
|
590
|
+
for name in names
|
|
591
|
+
]
|
|
592
|
+
results = self.recursive_multi_search(queries, cached_session)
|
|
593
|
+
return cast(list[RssMultiSearchResult], results.results) if results else None
|
|
594
|
+
|
|
595
|
+
def search_rss(
|
|
596
|
+
self,
|
|
597
|
+
name: str | None = None,
|
|
598
|
+
filter: list[str] | None = None,
|
|
599
|
+
sort: list[str] | None = None,
|
|
600
|
+
limit: int | None = 10,
|
|
601
|
+
cached_session: Client | None = None,
|
|
602
|
+
) -> RssMultiSearchResult | None:
|
|
603
|
+
results = self.search_multiple_rss(
|
|
604
|
+
[name],
|
|
605
|
+
filter=filter,
|
|
606
|
+
sort=sort,
|
|
607
|
+
limit=limit,
|
|
608
|
+
cached_session=cached_session,
|
|
609
|
+
)
|
|
610
|
+
return results[0] if results else None
|
|
611
|
+
|
|
612
|
+
def search_multiple_galeries(
|
|
613
|
+
self,
|
|
614
|
+
names: list[str | None] | None = None,
|
|
615
|
+
filter: list[str] | None = None,
|
|
616
|
+
sort: list[str] | None = None,
|
|
617
|
+
limit: int | None = 10,
|
|
618
|
+
cached_session: Client | None = None,
|
|
619
|
+
) -> list[GaleriesMultiSearchResult] | None:
|
|
620
|
+
if not names:
|
|
621
|
+
return None
|
|
622
|
+
|
|
623
|
+
queries = [
|
|
624
|
+
GaleriesMultiSearchQuery(name, limit=limit, filter=filter, sort=sort)
|
|
625
|
+
for name in names
|
|
626
|
+
]
|
|
627
|
+
results = self.recursive_multi_search(queries, cached_session)
|
|
628
|
+
return (
|
|
629
|
+
cast(list[GaleriesMultiSearchResult], results.results) if results else None
|
|
630
|
+
)
|
|
631
|
+
|
|
632
|
+
def search_galeries(
|
|
633
|
+
self,
|
|
634
|
+
name: str | None = None,
|
|
635
|
+
filter: list[str] | None = None,
|
|
636
|
+
sort: list[str] | None = None,
|
|
637
|
+
limit: int | None = 10,
|
|
638
|
+
cached_session: Client | None = None,
|
|
639
|
+
) -> GaleriesMultiSearchResult | None:
|
|
640
|
+
results = self.search_multiple_galeries(
|
|
641
|
+
[name],
|
|
642
|
+
filter=filter,
|
|
643
|
+
sort=sort,
|
|
644
|
+
limit=limit,
|
|
645
|
+
cached_session=cached_session,
|
|
646
|
+
)
|
|
647
|
+
return results[0] if results else None
|