1+ from __future__ import annotations
2+
13import collections
4+ import typing
25
36from .constants import DEFAULT_LINK_FIELDS
47from .graphql import FIELD_VALUE , GraphQlQuery , fields_to_dict
58
9+ if typing .TYPE_CHECKING :
10+ from .graphql import (
11+ GraphQlQueryEdgeField ,
12+ )
13+
614
7- def add_links_fields (entity_field , nested_fields ):
15+ def add_links_fields (
16+ entity_field : GraphQlQueryEdgeField ,
17+ nested_fields : dict | None ,
18+ supports_data : bool = False ,
19+ ) -> None :
820 if "links" not in nested_fields :
921 return
1022 links_fields = nested_fields .pop ("links" )
1123
1224 link_edge_fields = set (DEFAULT_LINK_FIELDS )
25+ if supports_data :
26+ link_edge_fields .add ("data" )
27+
1328 if isinstance (links_fields , dict ):
1429 simple_fields = set (links_fields )
1530 simple_variant = len (simple_fields - link_edge_fields ) == 0
@@ -121,7 +136,11 @@ def product_types_query(fields):
121136 return query
122137
123138
124- def folders_graphql_query (fields ):
139+ def folders_graphql_query (
140+ fields : set [str ],
141+ * ,
142+ links_support_data : bool = False ,
143+ ) -> GraphQlQuery :
125144 query = GraphQlQuery ("FoldersQuery" )
126145 project_name_var = query .add_variable ("projectName" , "String!" )
127146 folder_ids_var = query .add_variable ("folderIds" , "[String!]" )
@@ -161,7 +180,11 @@ def folders_graphql_query(fields):
161180 folders_field .set_filter ("filter" , filter_var )
162181
163182 nested_fields = fields_to_dict (fields )
164- add_links_fields (folders_field , nested_fields )
183+ add_links_fields (
184+ folders_field ,
185+ nested_fields ,
186+ supports_data = links_support_data ,
187+ )
165188
166189 query_queue = collections .deque ()
167190 for key , value in nested_fields .items ():
@@ -179,7 +202,11 @@ def folders_graphql_query(fields):
179202 return query
180203
181204
182- def tasks_graphql_query (fields ):
205+ def tasks_graphql_query (
206+ fields : set [str ],
207+ * ,
208+ links_support_data : bool = False ,
209+ ) -> GraphQlQuery :
183210 query = GraphQlQuery ("TasksQuery" )
184211 project_name_var = query .add_variable ("projectName" , "String!" )
185212 task_ids_var = query .add_variable ("taskIds" , "[String!]" )
@@ -209,7 +236,11 @@ def tasks_graphql_query(fields):
209236 tasks_field .set_filter ("filter" , filter_var )
210237
211238 nested_fields = fields_to_dict (fields )
212- add_links_fields (tasks_field , nested_fields )
239+ add_links_fields (
240+ tasks_field ,
241+ nested_fields ,
242+ supports_data = links_support_data ,
243+ )
213244
214245 query_queue = collections .deque ()
215246 for key , value in nested_fields .items ():
@@ -227,7 +258,11 @@ def tasks_graphql_query(fields):
227258 return query
228259
229260
230- def tasks_by_folder_paths_graphql_query (fields ):
261+ def tasks_by_folder_paths_graphql_query (
262+ fields : set [str ],
263+ * ,
264+ links_support_data : bool = False ,
265+ ) -> GraphQlQuery :
231266 query = GraphQlQuery ("TasksByFolderPathQuery" )
232267 project_name_var = query .add_variable ("projectName" , "String!" )
233268 task_names_var = query .add_variable ("taskNames" , "[String!]" )
@@ -258,7 +293,11 @@ def tasks_by_folder_paths_graphql_query(fields):
258293 tasks_field .set_filter ("filter" , filter_var )
259294
260295 nested_fields = fields_to_dict (fields )
261- add_links_fields (tasks_field , nested_fields )
296+ add_links_fields (
297+ tasks_field ,
298+ nested_fields ,
299+ supports_data = links_support_data ,
300+ )
262301
263302 query_queue = collections .deque ()
264303 for key , value in nested_fields .items ():
@@ -276,7 +315,11 @@ def tasks_by_folder_paths_graphql_query(fields):
276315 return query
277316
278317
279- def products_graphql_query (fields ):
318+ def products_graphql_query (
319+ fields : set [str ],
320+ * ,
321+ links_support_data : bool = False ,
322+ ) -> GraphQlQuery :
280323 query = GraphQlQuery ("ProductsQuery" )
281324
282325 project_name_var = query .add_variable ("projectName" , "String!" )
@@ -308,7 +351,11 @@ def products_graphql_query(fields):
308351 products_field .set_filter ("filter" , filter_var )
309352
310353 nested_fields = fields_to_dict (set (fields ))
311- add_links_fields (products_field , nested_fields )
354+ add_links_fields (
355+ products_field ,
356+ nested_fields ,
357+ supports_data = links_support_data ,
358+ )
312359
313360 query_queue = collections .deque ()
314361 for key , value in nested_fields .items ():
@@ -326,7 +373,11 @@ def products_graphql_query(fields):
326373 return query
327374
328375
329- def versions_graphql_query (fields ):
376+ def versions_graphql_query (
377+ fields : set [str ],
378+ * ,
379+ links_support_data : bool = False ,
380+ ) -> GraphQlQuery :
330381 query = GraphQlQuery ("VersionsQuery" )
331382
332383 project_name_var = query .add_variable ("projectName" , "String!" )
@@ -359,7 +410,11 @@ def versions_graphql_query(fields):
359410 versions_field .set_filter ("filter" , filter_var )
360411
361412 nested_fields = fields_to_dict (set (fields ))
362- add_links_fields (versions_field , nested_fields )
413+ add_links_fields (
414+ versions_field ,
415+ nested_fields ,
416+ supports_data = links_support_data ,
417+ )
363418
364419 query_queue = collections .deque ()
365420 for key , value in nested_fields .items ():
@@ -377,7 +432,11 @@ def versions_graphql_query(fields):
377432 return query
378433
379434
380- def representations_graphql_query (fields ):
435+ def representations_graphql_query (
436+ fields : set [str ],
437+ * ,
438+ links_support_data : bool = False ,
439+ ) -> GraphQlQuery :
381440 query = GraphQlQuery ("RepresentationsQuery" )
382441
383442 project_name_var = query .add_variable ("projectName" , "String!" )
@@ -408,7 +467,11 @@ def representations_graphql_query(fields):
408467 repres_field .set_filter ("filter" , filter_var )
409468
410469 nested_fields = fields_to_dict (set (fields ))
411- add_links_fields (repres_field , nested_fields )
470+ add_links_fields (
471+ repres_field ,
472+ nested_fields ,
473+ supports_data = links_support_data ,
474+ )
412475
413476 query_queue = collections .deque ()
414477 for key , value in nested_fields .items ():
@@ -525,7 +588,11 @@ def representations_hierarchy_qraphql_query(
525588 return query
526589
527590
528- def workfiles_info_graphql_query (fields ):
591+ def workfiles_info_graphql_query (
592+ fields : set [str ],
593+ * ,
594+ links_support_data : bool = False ,
595+ ) -> GraphQlQuery :
529596 query = GraphQlQuery ("WorkfilesInfo" )
530597 project_name_var = query .add_variable ("projectName" , "String!" )
531598 workfiles_info_ids = query .add_variable ("workfileIds" , "[String!]" )
@@ -549,7 +616,11 @@ def workfiles_info_graphql_query(fields):
549616 workfiles_field .set_filter ("tags" , tags_var )
550617
551618 nested_fields = fields_to_dict (set (fields ))
552- add_links_fields (workfiles_field , nested_fields )
619+ add_links_fields (
620+ workfiles_field ,
621+ nested_fields ,
622+ supports_data = links_support_data ,
623+ )
553624
554625 query_queue = collections .deque ()
555626 for key , value in nested_fields .items ():
0 commit comments