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.
Files changed (207) hide show
  1. ffbb_api_client_v3/__init__.py +25 -0
  2. ffbb_data_client/__init__.py +175 -0
  3. ffbb_data_client/clients/__init__.py +13 -0
  4. ffbb_data_client/clients/api_ffbb_app_client.py +2475 -0
  5. ffbb_data_client/clients/ffbb_data_client.py +2789 -0
  6. ffbb_data_client/clients/meilisearch_client.py +218 -0
  7. ffbb_data_client/clients/meilisearch_ffbb_client.py +647 -0
  8. ffbb_data_client/config.py +153 -0
  9. ffbb_data_client/data/__init__.py +25 -0
  10. ffbb_data_client/data/collections.json +1364 -0
  11. ffbb_data_client/data/endpoint_discovery.json +1875 -0
  12. ffbb_data_client/data/indexes.json +501 -0
  13. ffbb_data_client/data/openapi.json +35713 -0
  14. ffbb_data_client/data/openapi_full.json +37622 -0
  15. ffbb_data_client/helpers/__init__.py +27 -0
  16. ffbb_data_client/helpers/http_requests_helper.py +73 -0
  17. ffbb_data_client/helpers/http_requests_utils.py +502 -0
  18. ffbb_data_client/helpers/meilisearch_client_extension.py +153 -0
  19. ffbb_data_client/helpers/multi_search_query_helper.py +35 -0
  20. ffbb_data_client/models/__init__.py +241 -0
  21. ffbb_data_client/models/affiche.py +45 -0
  22. ffbb_data_client/models/cartographie.py +82 -0
  23. ffbb_data_client/models/categorie.py +55 -0
  24. ffbb_data_client/models/categorie_type.py +42 -0
  25. ffbb_data_client/models/clock.py +38 -0
  26. ffbb_data_client/models/club_contacts.py +77 -0
  27. ffbb_data_client/models/code.py +7 -0
  28. ffbb_data_client/models/commune.py +66 -0
  29. ffbb_data_client/models/competition_fields.py +309 -0
  30. ffbb_data_client/models/competition_id.py +116 -0
  31. ffbb_data_client/models/competition_id_categorie.py +31 -0
  32. ffbb_data_client/models/competition_id_sexe.py +31 -0
  33. ffbb_data_client/models/competition_id_type_competition.py +27 -0
  34. ffbb_data_client/models/competition_id_type_competition_generique.py +24 -0
  35. ffbb_data_client/models/competition_origine.py +69 -0
  36. ffbb_data_client/models/competition_origine_categorie.py +23 -0
  37. ffbb_data_client/models/competition_origine_type_competition.py +14 -0
  38. ffbb_data_client/models/competition_origine_type_competition_generique.py +24 -0
  39. ffbb_data_client/models/competition_type.py +6 -0
  40. ffbb_data_client/models/competitions_facet_distribution.py +65 -0
  41. ffbb_data_client/models/competitions_facet_stats.py +14 -0
  42. ffbb_data_client/models/competitions_hit.py +232 -0
  43. ffbb_data_client/models/competitions_multi_search_query.py +40 -0
  44. ffbb_data_client/models/competitions_query.py +11 -0
  45. ffbb_data_client/models/configuration_models.py +5 -0
  46. ffbb_data_client/models/contact_info.py +18 -0
  47. ffbb_data_client/models/content_multi_search_query.py +93 -0
  48. ffbb_data_client/models/coordonnees.py +27 -0
  49. ffbb_data_client/models/coordonnees_type.py +5 -0
  50. ffbb_data_client/models/document_flyer.py +205 -0
  51. ffbb_data_client/models/document_flyer_type.py +6 -0
  52. ffbb_data_client/models/engagement_contacts.py +97 -0
  53. ffbb_data_client/models/engagements_facet_distribution.py +59 -0
  54. ffbb_data_client/models/engagements_facet_stats.py +14 -0
  55. ffbb_data_client/models/engagements_hit.py +192 -0
  56. ffbb_data_client/models/engagements_multi_search_query.py +41 -0
  57. ffbb_data_client/models/etat.py +6 -0
  58. ffbb_data_client/models/external_competition_id.py +42 -0
  59. ffbb_data_client/models/external_id.py +72 -0
  60. ffbb_data_client/models/facet_distribution.py +13 -0
  61. ffbb_data_client/models/facet_stats.py +13 -0
  62. ffbb_data_client/models/field_set.py +10 -0
  63. ffbb_data_client/models/folder.py +35 -0
  64. ffbb_data_client/models/formation_session.py +60 -0
  65. ffbb_data_client/models/formations_facet_distribution.py +61 -0
  66. ffbb_data_client/models/formations_facet_stats.py +14 -0
  67. ffbb_data_client/models/formations_hit.py +277 -0
  68. ffbb_data_client/models/formations_multi_search_query.py +41 -0
  69. ffbb_data_client/models/game_stats_model.py +57 -0
  70. ffbb_data_client/models/game_stats_models.py +5 -0
  71. ffbb_data_client/models/generic_search.py +92 -0
  72. ffbb_data_client/models/geo.py +27 -0
  73. ffbb_data_client/models/geo_sort_order.py +6 -0
  74. ffbb_data_client/models/get_commune_response.py +18 -0
  75. ffbb_data_client/models/get_competition_response.py +523 -0
  76. ffbb_data_client/models/get_configuration_response.py +45 -0
  77. ffbb_data_client/models/get_engagement_response.py +23 -0
  78. ffbb_data_client/models/get_entraineur_response.py +18 -0
  79. ffbb_data_client/models/get_formation_response.py +28 -0
  80. ffbb_data_client/models/get_officiel_response.py +18 -0
  81. ffbb_data_client/models/get_organisme_response.py +476 -0
  82. ffbb_data_client/models/get_poule_response.py +68 -0
  83. ffbb_data_client/models/get_pratique_response.py +18 -0
  84. ffbb_data_client/models/get_rencontre_response.py +93 -0
  85. ffbb_data_client/models/get_saisons_response.py +56 -0
  86. ffbb_data_client/models/get_salle_response.py +20 -0
  87. ffbb_data_client/models/get_terrain_response.py +16 -0
  88. ffbb_data_client/models/get_tournoi_response.py +16 -0
  89. ffbb_data_client/models/gradient_color.py +27 -0
  90. ffbb_data_client/models/hit.py +16 -0
  91. ffbb_data_client/models/id_engagement_equipe.py +32 -0
  92. ffbb_data_client/models/id_organisme_equipe.py +51 -0
  93. ffbb_data_client/models/id_organisme_equipe1_logo.py +28 -0
  94. ffbb_data_client/models/id_poule.py +27 -0
  95. ffbb_data_client/models/jour.py +11 -0
  96. ffbb_data_client/models/label.py +15 -0
  97. ffbb_data_client/models/labellisation.py +30 -0
  98. ffbb_data_client/models/live.py +192 -0
  99. ffbb_data_client/models/lives.py +6 -0
  100. ffbb_data_client/models/logo.py +28 -0
  101. ffbb_data_client/models/multi_search_queries.py +24 -0
  102. ffbb_data_client/models/multi_search_query.py +96 -0
  103. ffbb_data_client/models/multi_search_result_competitions.py +14 -0
  104. ffbb_data_client/models/multi_search_result_engagements.py +14 -0
  105. ffbb_data_client/models/multi_search_result_formations.py +12 -0
  106. ffbb_data_client/models/multi_search_result_organismes.py +12 -0
  107. ffbb_data_client/models/multi_search_result_pratiques.py +12 -0
  108. ffbb_data_client/models/multi_search_result_rencontres.py +12 -0
  109. ffbb_data_client/models/multi_search_result_salles.py +12 -0
  110. ffbb_data_client/models/multi_search_result_terrains.py +12 -0
  111. ffbb_data_client/models/multi_search_result_tournois.py +12 -0
  112. ffbb_data_client/models/multi_search_results.py +103 -0
  113. ffbb_data_client/models/multi_search_results_class.py +96 -0
  114. ffbb_data_client/models/nature_sol.py +57 -0
  115. ffbb_data_client/models/niveau.py +10 -0
  116. ffbb_data_client/models/niveau_class.py +27 -0
  117. ffbb_data_client/models/niveau_extractor.py +214 -0
  118. ffbb_data_client/models/niveau_info.py +64 -0
  119. ffbb_data_client/models/niveau_models.py +14 -0
  120. ffbb_data_client/models/niveau_type.py +10 -0
  121. ffbb_data_client/models/objectif.py +7 -0
  122. ffbb_data_client/models/organisateur.py +197 -0
  123. ffbb_data_client/models/organisateur_type.py +6 -0
  124. ffbb_data_client/models/organisme_fields.py +327 -0
  125. ffbb_data_client/models/organisme_id_pere.py +177 -0
  126. ffbb_data_client/models/organismes_facet_distribution.py +46 -0
  127. ffbb_data_client/models/organismes_facet_stats.py +14 -0
  128. ffbb_data_client/models/organismes_hit.py +196 -0
  129. ffbb_data_client/models/organismes_multi_search_query.py +41 -0
  130. ffbb_data_client/models/organismes_query.py +8 -0
  131. ffbb_data_client/models/phase_code.py +23 -0
  132. ffbb_data_client/models/poule.py +35 -0
  133. ffbb_data_client/models/poule_fields.py +261 -0
  134. ffbb_data_client/models/poule_rencontre_item_model.py +69 -0
  135. ffbb_data_client/models/poules_models.py +6 -0
  136. ffbb_data_client/models/poules_query.py +9 -0
  137. ffbb_data_client/models/pratique.py +7 -0
  138. ffbb_data_client/models/pratiques_facet_distribution.py +29 -0
  139. ffbb_data_client/models/pratiques_facet_stats.py +14 -0
  140. ffbb_data_client/models/pratiques_hit.py +310 -0
  141. ffbb_data_client/models/pratiques_hit_type.py +9 -0
  142. ffbb_data_client/models/pratiques_multi_search_query.py +41 -0
  143. ffbb_data_client/models/pratiques_type_class.py +45 -0
  144. ffbb_data_client/models/publication_internet.py +6 -0
  145. ffbb_data_client/models/purple_logo.py +24 -0
  146. ffbb_data_client/models/query_fields_manager.py +75 -0
  147. ffbb_data_client/models/ranking_engagement.py +41 -0
  148. ffbb_data_client/models/rankings_models.py +6 -0
  149. ffbb_data_client/models/rencontres_engagement.py +23 -0
  150. ffbb_data_client/models/rencontres_facet_distribution.py +65 -0
  151. ffbb_data_client/models/rencontres_facet_stats.py +14 -0
  152. ffbb_data_client/models/rencontres_hit.py +271 -0
  153. ffbb_data_client/models/rencontres_multi_search_query.py +41 -0
  154. ffbb_data_client/models/saison.py +23 -0
  155. ffbb_data_client/models/saison_fields.py +36 -0
  156. ffbb_data_client/models/saisons_models.py +6 -0
  157. ffbb_data_client/models/saisons_query.py +9 -0
  158. ffbb_data_client/models/salle.py +56 -0
  159. ffbb_data_client/models/salles_facet_distribution.py +14 -0
  160. ffbb_data_client/models/salles_facet_stats.py +14 -0
  161. ffbb_data_client/models/salles_hit.py +153 -0
  162. ffbb_data_client/models/salles_multi_search_query.py +40 -0
  163. ffbb_data_client/models/sexe.py +9 -0
  164. ffbb_data_client/models/sexe_class.py +31 -0
  165. ffbb_data_client/models/source.py +5 -0
  166. ffbb_data_client/models/status.py +5 -0
  167. ffbb_data_client/models/team_engagement.py +56 -0
  168. ffbb_data_client/models/team_ranking.py +108 -0
  169. ffbb_data_client/models/terrains_categorie_championnat_3x3_libelle.py +5 -0
  170. ffbb_data_client/models/terrains_facet_distribution.py +41 -0
  171. ffbb_data_client/models/terrains_facet_stats.py +14 -0
  172. ffbb_data_client/models/terrains_hit.py +223 -0
  173. ffbb_data_client/models/terrains_multi_search_query.py +42 -0
  174. ffbb_data_client/models/terrains_name.py +5 -0
  175. ffbb_data_client/models/terrains_sexe_enum.py +7 -0
  176. ffbb_data_client/models/terrains_storage.py +5 -0
  177. ffbb_data_client/models/tournoi_type_class.py +35 -0
  178. ffbb_data_client/models/tournoi_type_enum.py +7 -0
  179. ffbb_data_client/models/tournoi_types_3x3.py +43 -0
  180. ffbb_data_client/models/tournoi_types_3x3_libelle.py +60 -0
  181. ffbb_data_client/models/tournoi_types_3x3_libelle_enum.py +10 -0
  182. ffbb_data_client/models/tournois_facet_distribution.py +41 -0
  183. ffbb_data_client/models/tournois_facet_stats.py +14 -0
  184. ffbb_data_client/models/tournois_hit.py +132 -0
  185. ffbb_data_client/models/tournois_hit_type.py +5 -0
  186. ffbb_data_client/models/tournois_libelle.py +7 -0
  187. ffbb_data_client/models/tournois_multi_search_query.py +40 -0
  188. ffbb_data_client/models/type_association.py +23 -0
  189. ffbb_data_client/models/type_association_libelle.py +30 -0
  190. ffbb_data_client/models/type_class.py +23 -0
  191. ffbb_data_client/models/type_competition.py +8 -0
  192. ffbb_data_client/models/type_competition_generique.py +31 -0
  193. ffbb_data_client/models/type_enum.py +7 -0
  194. ffbb_data_client/models/type_league.py +6 -0
  195. ffbb_data_client/py.typed +0 -0
  196. ffbb_data_client/utils/__init__.py +27 -0
  197. ffbb_data_client/utils/cache_manager.py +393 -0
  198. ffbb_data_client/utils/converter_utils.py +329 -0
  199. ffbb_data_client/utils/input_validation.py +360 -0
  200. ffbb_data_client/utils/retry_utils.py +478 -0
  201. ffbb_data_client/utils/secure_logging.py +153 -0
  202. ffbb_data_client/utils/token_manager.py +115 -0
  203. ffbb_data_client-2.0.0.dist-info/METADATA +339 -0
  204. ffbb_data_client-2.0.0.dist-info/RECORD +207 -0
  205. ffbb_data_client-2.0.0.dist-info/WHEEL +5 -0
  206. ffbb_data_client-2.0.0.dist-info/licenses/LICENSE.txt +201 -0
  207. ffbb_data_client-2.0.0.dist-info/top_level.txt +2 -0
@@ -0,0 +1,327 @@
1
+ class OrganismeFields:
2
+ """Default fields for organisme queries."""
3
+
4
+ # Basic fields
5
+ ID = "id"
6
+ NOM = "nom"
7
+ CODE = "code"
8
+ TELEPHONE = "telephone"
9
+ ADRESSE = "adresse"
10
+ MAIL = "mail"
11
+ TYPE = "type"
12
+ NOM_SIMPLE = "nom_simple"
13
+ URL_SITE_WEB = "urlSiteWeb"
14
+
15
+ # Additional fields from upstream
16
+ DATE_AFFILIATION = "dateAffiliation"
17
+ ENTREPRISE = "entreprise"
18
+ HANDIBASKET = "handibasket"
19
+ HORS_ASSOCIATION = "horsAssociation"
20
+ LOGO_BASE64 = "logo_base64"
21
+ OMNISPORT = "omnisport"
22
+ SAISON_EN_COURS = "saison_en_cours"
23
+ URL_COMPETITION = "url_competition"
24
+ # Commune fields
25
+ COMMUNE_CODE_POSTAL = "commune.codePostal"
26
+ COMMUNE_LIBELLE = "commune.libelle"
27
+
28
+ # Competitions fields
29
+ COMPETITIONS_ID = "competitions.id"
30
+ COMPETITIONS_NOM = "competitions.nom"
31
+
32
+ # Engagements fields
33
+ ENGAGEMENTS_ID = "engagements.id"
34
+ ENGAGEMENTS_NUMERO_EQUIPE = "engagements.numeroEquipe"
35
+ ENGAGEMENTS_ID_COMPETITION_ID = "engagements.idCompetition.id"
36
+ ENGAGEMENTS_ID_COMPETITION_NOM = "engagements.idCompetition.nom"
37
+ ENGAGEMENTS_ID_COMPETITION_CODE = "engagements.idCompetition.code"
38
+ ENGAGEMENTS_ID_COMPETITION_SEXE = "engagements.idCompetition.sexe"
39
+ ENGAGEMENTS_ID_COMPETITION_COMPETITION_ORIGINE = (
40
+ "engagements.idCompetition.competition_origine"
41
+ )
42
+ ENGAGEMENTS_ID_COMPETITION_COMPETITION_ORIGINE_NOM = (
43
+ "engagements.idCompetition.competition_origine_nom"
44
+ )
45
+ ENGAGEMENTS_ID_COMPETITION_COMPETITION_ORIGINE_NIVEAU = (
46
+ "engagements.idCompetition.competition_origine_niveau"
47
+ )
48
+ ENGAGEMENTS_ID_COMPETITION_TYPE_COMPETITION = (
49
+ "engagements.idCompetition.typeCompetition"
50
+ )
51
+ ENGAGEMENTS_ID_COMPETITION_LOGO_ID = "engagements.idCompetition.logo.id"
52
+ ENGAGEMENTS_ID_COMPETITION_LOGO_GRADIENT_COLOR = (
53
+ "engagements.idCompetition.logo.gradient_color"
54
+ )
55
+ ENGAGEMENTS_ID_COMPETITION_SAISON_ID = "engagements.idCompetition.saison.id"
56
+ ENGAGEMENTS_ID_COMPETITION_SAISON_LIBELLE = (
57
+ "engagements.idCompetition.saison.libelle"
58
+ )
59
+ ENGAGEMENTS_ID_COMPETITION_ID_COMPETITION_PERE = (
60
+ "engagements.idCompetition.idCompetitionPere"
61
+ )
62
+ ENGAGEMENTS_ID_COMPETITION_ID_COMPETITION_PERE_ID = (
63
+ "engagements.idCompetition.idCompetitionPere.id"
64
+ )
65
+ ENGAGEMENTS_ID_COMPETITION_ID_COMPETITION_PERE_NOM = (
66
+ "engagements.idCompetition.idCompetitionPere.nom"
67
+ )
68
+ ENGAGEMENTS_ID_COMPETITION_ORGANISATEUR_TYPE = (
69
+ "engagements.idCompetition.organisateur.type"
70
+ )
71
+ ENGAGEMENTS_ID_COMPETITION_TYPE_COMPETITION_GENERIQUE_LOGO_ID = (
72
+ "engagements.idCompetition.typeCompetitionGenerique.logo.id"
73
+ )
74
+ ENGAGEMENTS_ID_COMPETITION_TYPE_COMPETITION_GENERIQUE_LOGO_GRADIENT_COLOR = (
75
+ "engagements.idCompetition.typeCompetitionGenerique.logo.gradient_color"
76
+ )
77
+ ENGAGEMENTS_ID_COMPETITION_CATEGORIE_CODE = (
78
+ "engagements.idCompetition.categorie.code"
79
+ )
80
+ ENGAGEMENTS_ID_COMPETITION_CATEGORIE_ORDRE = (
81
+ "engagements.idCompetition.categorie.ordre"
82
+ )
83
+ ENGAGEMENTS_ID_POULE_ID = "engagements.idPoule.id"
84
+ ENGAGEMENTS_ID_POULE_NOM = "engagements.idPoule.nom"
85
+
86
+ # Cartographie fields (model: CartographieModel)
87
+ CARTOGRAPHIE_LATITUDE = "cartographie.latitude"
88
+ CARTOGRAPHIE_LONGITUDE = "cartographie.longitude"
89
+
90
+ # Club Pro fields (model: direct attributes)
91
+ NOM_CLUB_PRO = "nomClubPro"
92
+ ADRESSE_CLUB_PRO = "adresseClubPro"
93
+ COMMUNE_CLUB_PRO = "communeClubPro"
94
+
95
+ # Logo fields (model: LogoModel)
96
+ LOGO_ID = "logo.id"
97
+ LOGO_GRADIENT_COLOR = "logo.gradient_color"
98
+
99
+ # Salle fields (model: SalleModel)
100
+ SALLE_ID = "salle.id"
101
+ SALLE_NUMERO = "salle.numero"
102
+ SALLE_LIBELLE = "salle.libelle"
103
+ SALLE_LIBELLE2 = "salle.libelle2"
104
+ SALLE_ADRESSE = "salle.adresse"
105
+ SALLE_ADRESSE_COMPLEMENT = "salle.adresseComplement"
106
+ SALLE_COMMUNE_CODE_POSTAL = "salle.commune.codePostal"
107
+ SALLE_COMMUNE_LIBELLE = "salle.commune.libelle"
108
+ SALLE_CARTOGRAPHIE_LATITUDE = "salle.cartographie.latitude"
109
+ SALLE_CARTOGRAPHIE_LONGITUDE = "salle.cartographie.longitude"
110
+
111
+ # Organismes fils (model: list[Any])
112
+ ORGANISMES_FILS = "organismes_fils"
113
+
114
+ # Offres Pratiques fields (model: OffrespratiquesitemModel)
115
+ OFFRES_PRATIQUES_ID = "offresPratiques.ffbbserver_offres_pratiques_id.id"
116
+ OFFRES_PRATIQUES_TITLE = "offresPratiques.ffbbserver_offres_pratiques_id.title"
117
+ OFFRES_PRATIQUES_CATEGORIE = (
118
+ "offresPratiques.ffbbserver_offres_pratiques_id.categoriePratique"
119
+ )
120
+ OFFRES_PRATIQUES_TYPE = (
121
+ "offresPratiques.ffbbserver_offres_pratiques_id.typePratique"
122
+ )
123
+
124
+ # Labellisation fields (model: LabellisationitemModel)
125
+ LABELLISATION_ID = "labellisation.id"
126
+ LABELLISATION_DEBUT = "labellisation.debut"
127
+ LABELLISATION_FIN = "labellisation.fin"
128
+ LABELLISATION_PROGRAMME_ID = "labellisation.idLabellisationProgramme.id"
129
+ LABELLISATION_PROGRAMME_LIBELLE = "labellisation.idLabellisationProgramme.libelle"
130
+ LABELLISATION_PROGRAMME_LABEL = (
131
+ "labellisation.idLabellisationProgramme.labellisationLabel"
132
+ )
133
+ LABELLISATION_PROGRAMME_LOGO_VERTICAL = (
134
+ "labellisation.idLabellisationProgramme.logo_vertical"
135
+ )
136
+
137
+ # Membres fields
138
+ MEMBRES_ID = "membres.id"
139
+ MEMBRES_NOM = "membres.nom"
140
+ MEMBRES_PRENOM = "membres.prenom"
141
+
142
+ @classmethod
143
+ def get_default_fields(cls) -> list[str]:
144
+ """Get default fields for organisme queries."""
145
+ return [
146
+ cls.ID,
147
+ cls.NOM,
148
+ cls.CODE,
149
+ cls.TELEPHONE,
150
+ cls.ADRESSE,
151
+ cls.COMMUNE_CODE_POSTAL,
152
+ cls.COMMUNE_LIBELLE,
153
+ cls.MAIL,
154
+ cls.TYPE,
155
+ cls.NOM_SIMPLE,
156
+ cls.URL_SITE_WEB,
157
+ cls.DATE_AFFILIATION,
158
+ cls.ENTREPRISE,
159
+ cls.HANDIBASKET,
160
+ cls.HORS_ASSOCIATION,
161
+ cls.LOGO_BASE64,
162
+ cls.OMNISPORT,
163
+ cls.SAISON_EN_COURS,
164
+ cls.URL_COMPETITION,
165
+ # Cartographie
166
+ cls.CARTOGRAPHIE_LATITUDE,
167
+ cls.CARTOGRAPHIE_LONGITUDE,
168
+ # Club Pro
169
+ cls.NOM_CLUB_PRO,
170
+ cls.ADRESSE_CLUB_PRO,
171
+ cls.COMMUNE_CLUB_PRO,
172
+ # Logo
173
+ cls.LOGO_ID,
174
+ cls.LOGO_GRADIENT_COLOR,
175
+ # Salle
176
+ cls.SALLE_ID,
177
+ cls.SALLE_NUMERO,
178
+ cls.SALLE_LIBELLE,
179
+ cls.SALLE_LIBELLE2,
180
+ cls.SALLE_ADRESSE,
181
+ cls.SALLE_ADRESSE_COMPLEMENT,
182
+ cls.SALLE_COMMUNE_CODE_POSTAL,
183
+ cls.SALLE_COMMUNE_LIBELLE,
184
+ cls.SALLE_CARTOGRAPHIE_LATITUDE,
185
+ cls.SALLE_CARTOGRAPHIE_LONGITUDE,
186
+ # Organismes fils
187
+ cls.ORGANISMES_FILS,
188
+ # Offres Pratiques
189
+ cls.OFFRES_PRATIQUES_ID,
190
+ cls.OFFRES_PRATIQUES_TITLE,
191
+ cls.OFFRES_PRATIQUES_CATEGORIE,
192
+ cls.OFFRES_PRATIQUES_TYPE,
193
+ # Labellisation
194
+ cls.LABELLISATION_ID,
195
+ cls.LABELLISATION_DEBUT,
196
+ cls.LABELLISATION_FIN,
197
+ cls.LABELLISATION_PROGRAMME_ID,
198
+ cls.LABELLISATION_PROGRAMME_LIBELLE,
199
+ cls.LABELLISATION_PROGRAMME_LABEL,
200
+ cls.LABELLISATION_PROGRAMME_LOGO_VERTICAL,
201
+ # Competitions
202
+ cls.COMPETITIONS_ID,
203
+ cls.COMPETITIONS_NOM,
204
+ # Engagements
205
+ cls.ENGAGEMENTS_ID,
206
+ cls.ENGAGEMENTS_NUMERO_EQUIPE,
207
+ cls.ENGAGEMENTS_ID_COMPETITION_ID,
208
+ cls.ENGAGEMENTS_ID_COMPETITION_NOM,
209
+ cls.ENGAGEMENTS_ID_COMPETITION_CODE,
210
+ cls.ENGAGEMENTS_ID_COMPETITION_SEXE,
211
+ cls.ENGAGEMENTS_ID_COMPETITION_COMPETITION_ORIGINE,
212
+ cls.ENGAGEMENTS_ID_COMPETITION_COMPETITION_ORIGINE_NOM,
213
+ cls.ENGAGEMENTS_ID_COMPETITION_COMPETITION_ORIGINE_NIVEAU,
214
+ cls.ENGAGEMENTS_ID_COMPETITION_TYPE_COMPETITION,
215
+ cls.ENGAGEMENTS_ID_COMPETITION_LOGO_ID,
216
+ cls.ENGAGEMENTS_ID_COMPETITION_LOGO_GRADIENT_COLOR,
217
+ cls.ENGAGEMENTS_ID_COMPETITION_SAISON_ID,
218
+ cls.ENGAGEMENTS_ID_COMPETITION_SAISON_LIBELLE,
219
+ cls.ENGAGEMENTS_ID_COMPETITION_ID_COMPETITION_PERE,
220
+ cls.ENGAGEMENTS_ID_COMPETITION_ID_COMPETITION_PERE_ID,
221
+ cls.ENGAGEMENTS_ID_COMPETITION_ID_COMPETITION_PERE_NOM,
222
+ cls.ENGAGEMENTS_ID_COMPETITION_ORGANISATEUR_TYPE,
223
+ cls.ENGAGEMENTS_ID_COMPETITION_TYPE_COMPETITION_GENERIQUE_LOGO_ID,
224
+ cls.ENGAGEMENTS_ID_COMPETITION_TYPE_COMPETITION_GENERIQUE_LOGO_GRADIENT_COLOR,
225
+ cls.ENGAGEMENTS_ID_COMPETITION_CATEGORIE_CODE,
226
+ cls.ENGAGEMENTS_ID_COMPETITION_CATEGORIE_ORDRE,
227
+ cls.ENGAGEMENTS_ID_POULE_ID,
228
+ cls.ENGAGEMENTS_ID_POULE_NOM,
229
+ # Membres (basic info)
230
+ cls.MEMBRES_ID,
231
+ cls.MEMBRES_NOM,
232
+ cls.MEMBRES_PRENOM,
233
+ ]
234
+
235
+ @classmethod
236
+ def get_search_fields(cls) -> list[str]:
237
+ """Champs minimaux pour identifier un organisme dans un contexte
238
+ de recherche. 31 champs vs 77 pour get_default_fields().
239
+ Exclus : membres.*, labellisation.*, offresPratiques.*, salle.*
240
+ """
241
+ return [
242
+ cls.ID,
243
+ cls.NOM,
244
+ cls.CODE,
245
+ cls.TELEPHONE,
246
+ cls.ADRESSE,
247
+ cls.MAIL,
248
+ cls.TYPE,
249
+ cls.NOM_SIMPLE,
250
+ cls.URL_SITE_WEB,
251
+ cls.COMMUNE_CODE_POSTAL,
252
+ cls.COMMUNE_LIBELLE,
253
+ cls.CARTOGRAPHIE_LATITUDE,
254
+ cls.CARTOGRAPHIE_LONGITUDE,
255
+ cls.NOM_CLUB_PRO,
256
+ cls.LOGO_ID,
257
+ cls.LOGO_GRADIENT_COLOR,
258
+ cls.ENGAGEMENTS_ID,
259
+ cls.ENGAGEMENTS_NUMERO_EQUIPE,
260
+ cls.ENGAGEMENTS_ID_COMPETITION_ID,
261
+ cls.ENGAGEMENTS_ID_COMPETITION_NOM,
262
+ cls.ENGAGEMENTS_ID_COMPETITION_CODE,
263
+ cls.ENGAGEMENTS_ID_COMPETITION_SEXE,
264
+ cls.ENGAGEMENTS_ID_COMPETITION_TYPE_COMPETITION,
265
+ cls.ENGAGEMENTS_ID_COMPETITION_SAISON_ID,
266
+ cls.ENGAGEMENTS_ID_COMPETITION_CATEGORIE_CODE,
267
+ cls.ENGAGEMENTS_ID_COMPETITION_CATEGORIE_ORDRE,
268
+ cls.ENGAGEMENTS_ID_POULE_ID,
269
+ cls.ENGAGEMENTS_ID_POULE_NOM,
270
+ cls.COMPETITIONS_ID,
271
+ cls.COMPETITIONS_NOM,
272
+ cls.ORGANISMES_FILS,
273
+ ]
274
+
275
+ @classmethod
276
+ def get_engagements_fields(cls) -> list[str]:
277
+ """Get engagements-only fields for lightweight team listing queries."""
278
+ return [
279
+ cls.ID,
280
+ cls.NOM,
281
+ cls.CODE,
282
+ # Engagements
283
+ cls.ENGAGEMENTS_ID,
284
+ cls.ENGAGEMENTS_NUMERO_EQUIPE,
285
+ cls.ENGAGEMENTS_ID_COMPETITION_ID,
286
+ cls.ENGAGEMENTS_ID_COMPETITION_NOM,
287
+ cls.ENGAGEMENTS_ID_COMPETITION_CODE,
288
+ cls.ENGAGEMENTS_ID_COMPETITION_SEXE,
289
+ cls.ENGAGEMENTS_ID_COMPETITION_COMPETITION_ORIGINE,
290
+ cls.ENGAGEMENTS_ID_COMPETITION_COMPETITION_ORIGINE_NOM,
291
+ cls.ENGAGEMENTS_ID_COMPETITION_COMPETITION_ORIGINE_NIVEAU,
292
+ cls.ENGAGEMENTS_ID_COMPETITION_TYPE_COMPETITION,
293
+ cls.ENGAGEMENTS_ID_COMPETITION_LOGO_ID,
294
+ cls.ENGAGEMENTS_ID_COMPETITION_SAISON_ID,
295
+ cls.ENGAGEMENTS_ID_COMPETITION_ORGANISATEUR_TYPE,
296
+ cls.ENGAGEMENTS_ID_COMPETITION_CATEGORIE_CODE,
297
+ cls.ENGAGEMENTS_ID_COMPETITION_CATEGORIE_ORDRE,
298
+ cls.ENGAGEMENTS_ID_POULE_ID,
299
+ cls.ENGAGEMENTS_ID_POULE_NOM,
300
+ ]
301
+
302
+ @classmethod
303
+ def get_basic_fields(cls) -> list[str]:
304
+ """Get basic fields for simple organisme queries."""
305
+ return [
306
+ cls.ID,
307
+ cls.NOM,
308
+ cls.CODE,
309
+ cls.TELEPHONE,
310
+ cls.ADRESSE,
311
+ cls.MAIL,
312
+ ]
313
+
314
+ @classmethod
315
+ def get_detailed_fields(cls) -> list[str]:
316
+ """Get detailed fields including personal member data."""
317
+ return cls.get_default_fields() + [
318
+ # Additional member personal data (not in default)
319
+ "membres.mail",
320
+ "membres.telephonePortable",
321
+ "membres.adresse1",
322
+ "membres.adresse2",
323
+ "membres.codePostal",
324
+ "membres.ville",
325
+ "membres.telephoneFixe",
326
+ "membres.codeFonction",
327
+ ]
@@ -0,0 +1,177 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from datetime import datetime
5
+ from typing import Any
6
+ from uuid import UUID
7
+
8
+ from ..utils.converter_utils import (
9
+ from_bool,
10
+ from_datetime,
11
+ from_int,
12
+ from_list,
13
+ from_obj,
14
+ from_str,
15
+ from_uuid,
16
+ )
17
+
18
+
19
+ @dataclass
20
+ class OrganismeIDPere:
21
+ adresse: str | None = None
22
+ adresse_club_pro: str | None = None
23
+ cartographie: str | None = None
24
+ code: str | None = None
25
+ commune: int | None = None
26
+ commune_club_pro: str | None = None
27
+ date_created: datetime | None = None
28
+ date_updated: datetime | None = None
29
+ id: int | None = None
30
+ mail: str | None = None
31
+ nom: str | None = None
32
+ nom_club_pro: str | None = None
33
+ organisme_id_pere: OrganismeIDPere | None = None
34
+ salle: str | None = None
35
+ telephone: str | None = None
36
+ type: str | None = None
37
+ type_association: str | None = None
38
+ url_site_web: str | None = None
39
+ logo: UUID | None = None
40
+ nom_simple: str | None = None
41
+ date_affiliation: datetime | None = None
42
+ saison_en_cours: bool | None = None
43
+ entreprise: bool | None = None
44
+ handibasket: bool | None = None
45
+ omnisport: bool | None = None
46
+ hors_association: bool | None = None
47
+ offres_pratiques: list[Any] | None = None
48
+ engagements: list[Any] | None = None
49
+ labellisation: list[Any] | None = None
50
+
51
+ @staticmethod
52
+ def from_dict(obj: Any) -> OrganismeIDPere:
53
+ assert isinstance(obj, dict)
54
+ adresse = from_str(obj, "adresse")
55
+ adresse_club_pro = from_str(obj, "adresseClubPro")
56
+ cartographie = from_str(obj, "cartographie")
57
+ code = from_str(obj, "code")
58
+ commune = from_int(obj, "commune")
59
+ commune_club_pro = from_str(obj, "communeClubPro")
60
+ date_created = from_datetime(obj, "date_created")
61
+ date_updated = from_datetime(obj, "date_updated")
62
+ id = from_int(obj, "id")
63
+ mail = from_str(obj, "mail")
64
+ nom = from_str(obj, "nom")
65
+ nom_club_pro = from_str(obj, "nomClubPro")
66
+ organisme_id_pere = from_obj(
67
+ OrganismeIDPere.from_dict, obj, "organisme_id_pere"
68
+ )
69
+ salle = from_str(obj, "salle")
70
+ telephone = from_str(obj, "telephone")
71
+ type = from_str(obj, "type")
72
+ type_association = from_str(obj, "type_association")
73
+ url_site_web = from_str(obj, "urlSiteWeb")
74
+ logo = from_uuid(obj, "logo")
75
+ nom_simple = from_str(obj, "nom_simple")
76
+ date_affiliation = from_datetime(obj, "dateAffiliation")
77
+ saison_en_cours = from_bool(obj, "saison_en_cours")
78
+ entreprise = from_bool(obj, "entreprise")
79
+ handibasket = from_bool(obj, "handibasket")
80
+ omnisport = from_bool(obj, "omnisport")
81
+ hors_association = from_bool(obj, "horsAssociation")
82
+ offres_pratiques = from_list(lambda x: x, obj, "offresPratiques")
83
+ engagements = from_list(lambda x: x, obj, "engagements")
84
+ labellisation = from_list(lambda x: x, obj, "labellisation")
85
+ return OrganismeIDPere(
86
+ adresse=adresse,
87
+ adresse_club_pro=adresse_club_pro,
88
+ cartographie=cartographie,
89
+ code=code,
90
+ commune=commune,
91
+ commune_club_pro=commune_club_pro,
92
+ date_created=date_created,
93
+ date_updated=date_updated,
94
+ id=id,
95
+ mail=mail,
96
+ nom=nom,
97
+ nom_club_pro=nom_club_pro,
98
+ organisme_id_pere=organisme_id_pere,
99
+ salle=salle,
100
+ telephone=telephone,
101
+ type=type,
102
+ type_association=type_association,
103
+ url_site_web=url_site_web,
104
+ logo=logo,
105
+ nom_simple=nom_simple,
106
+ date_affiliation=date_affiliation,
107
+ saison_en_cours=saison_en_cours,
108
+ entreprise=entreprise,
109
+ handibasket=handibasket,
110
+ omnisport=omnisport,
111
+ hors_association=hors_association,
112
+ offres_pratiques=offres_pratiques,
113
+ engagements=engagements,
114
+ labellisation=labellisation,
115
+ )
116
+
117
+ def to_dict(self) -> dict:
118
+ result: dict = {}
119
+ if self.adresse is not None:
120
+ result["adresse"] = self.adresse
121
+ if self.adresse_club_pro is not None:
122
+ result["adresseClubPro"] = self.adresse_club_pro
123
+ if self.cartographie is not None:
124
+ result["cartographie"] = self.cartographie
125
+ if self.code is not None:
126
+ result["code"] = self.code
127
+ if self.commune is not None:
128
+ result["commune"] = str(self.commune)
129
+ if self.commune_club_pro is not None:
130
+ result["communeClubPro"] = self.commune_club_pro
131
+ if self.date_created is not None:
132
+ result["date_created"] = self.date_created.isoformat()
133
+ if self.date_updated is not None:
134
+ result["date_updated"] = self.date_updated.isoformat()
135
+ if self.id is not None:
136
+ result["id"] = str(self.id)
137
+ if self.mail is not None:
138
+ result["mail"] = self.mail
139
+ if self.nom is not None:
140
+ result["nom"] = self.nom
141
+ if self.nom_club_pro is not None:
142
+ result["nomClubPro"] = self.nom_club_pro
143
+ if self.organisme_id_pere is not None:
144
+ result["organisme_id_pere"] = self.organisme_id_pere.to_dict()
145
+ if self.salle is not None:
146
+ result["salle"] = self.salle
147
+ if self.telephone is not None:
148
+ result["telephone"] = self.telephone
149
+ if self.type is not None:
150
+ result["type"] = self.type
151
+ if self.type_association is not None:
152
+ result["type_association"] = self.type_association
153
+ if self.url_site_web is not None:
154
+ result["urlSiteWeb"] = self.url_site_web
155
+ if self.logo is not None:
156
+ result["logo"] = str(self.logo)
157
+ if self.nom_simple is not None:
158
+ result["nom_simple"] = self.nom_simple
159
+ if self.date_affiliation is not None:
160
+ result["dateAffiliation"] = self.date_affiliation.isoformat()
161
+ if self.saison_en_cours is not None:
162
+ result["saison_en_cours"] = self.saison_en_cours
163
+ if self.entreprise is not None:
164
+ result["entreprise"] = self.entreprise
165
+ if self.handibasket is not None:
166
+ result["handibasket"] = self.handibasket
167
+ if self.omnisport is not None:
168
+ result["omnisport"] = self.omnisport
169
+ if self.hors_association is not None:
170
+ result["horsAssociation"] = self.hors_association
171
+ if self.offres_pratiques is not None:
172
+ result["offresPratiques"] = self.offres_pratiques
173
+ if self.engagements is not None:
174
+ result["engagements"] = self.engagements
175
+ if self.labellisation is not None:
176
+ result["labellisation"] = self.labellisation
177
+ return result
@@ -0,0 +1,46 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Any
5
+
6
+ from ..utils.converter_utils import from_obj
7
+ from .facet_distribution import FacetDistribution
8
+ from .labellisation import Labellisation
9
+ from .type_association_libelle import TypeAssociationLibelle
10
+ from .type_class import TypeClass
11
+
12
+
13
+ @dataclass
14
+ class OrganismesFacetDistribution(FacetDistribution):
15
+ labellisation: Labellisation | None = None
16
+ offres_pratiques: dict[str, int] | None = None
17
+ type: TypeClass | None = None
18
+ type_association_libelle: TypeAssociationLibelle | None = None
19
+
20
+ @staticmethod
21
+ def from_dict(obj: Any) -> OrganismesFacetDistribution:
22
+ assert isinstance(obj, dict)
23
+ labellisation = from_obj(Labellisation.from_dict, obj, "labellisation")
24
+ offres_pratiques = obj.get("offresPratiques")
25
+ type = from_obj(TypeClass.from_dict, obj, "type")
26
+ type_association_libelle = from_obj(
27
+ TypeAssociationLibelle.from_dict, obj, "type_association.libelle"
28
+ )
29
+ return OrganismesFacetDistribution(
30
+ labellisation=labellisation,
31
+ offres_pratiques=offres_pratiques,
32
+ type=type,
33
+ type_association_libelle=type_association_libelle,
34
+ )
35
+
36
+ def to_dict(self) -> dict:
37
+ result: dict = {}
38
+ if self.labellisation is not None:
39
+ result["labellisation"] = self.labellisation.to_dict()
40
+ if self.offres_pratiques is not None:
41
+ result["offresPratiques"] = self.offres_pratiques
42
+ if self.type is not None:
43
+ result["type"] = self.type.to_dict()
44
+ if self.type_association_libelle is not None:
45
+ result["type_association.libelle"] = self.type_association_libelle.to_dict()
46
+ return result
@@ -0,0 +1,14 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any
4
+
5
+ from .facet_stats import FacetStats
6
+
7
+
8
+ class OrganismesFacetStats(FacetStats):
9
+ @staticmethod
10
+ def from_dict(obj: Any) -> OrganismesFacetStats:
11
+ return OrganismesFacetStats()
12
+
13
+ def to_dict(self) -> dict:
14
+ return super().to_dict()