@@ -440,6 +440,38 @@ def __repr__(self) -> str:
440
440
return repr (self ._filter )
441
441
442
442
443
+ class VisualizationAttributeFilterConfig :
444
+ """
445
+ Represents attribute filter configuration used by a visualization.
446
+ """
447
+
448
+ def __init__ (self , afc : tuple [str , Any ]) -> None :
449
+ local_id , data = afc
450
+ self ._local_id = local_id
451
+ self ._data = data
452
+
453
+ @property
454
+ def local_id (self ) -> str :
455
+ return self ._local_id
456
+
457
+ @property
458
+ def label_id (self ) -> str :
459
+ return self ._data ["displayAsLabel" ]["identifier" ]["id" ]
460
+
461
+ @property
462
+ def type (self ) -> str :
463
+ return self ._data ["displayAsLabel" ]["identifier" ]["type" ]
464
+
465
+ def __str__ (self ) -> str :
466
+ return self .__repr__ ()
467
+
468
+ def __repr__ (self ) -> str :
469
+ return (
470
+ f"VisualizationAttributeFilterConfig(local_id='{ self .local_id } ', label_id='{ self .label_id } ', "
471
+ f"type='{ self .type } ')"
472
+ )
473
+
474
+
443
475
class VisualizationSortLocator :
444
476
def __init__ (self , locator : dict [str , str ], locator_type : LocatorItemType ) -> None :
445
477
self ._locator = locator
@@ -546,6 +578,7 @@ def __init__(
546
578
side_loads : Optional [SideLoads ] = None ,
547
579
) -> None :
548
580
self ._vo = from_vis_obj
581
+ self ._attribute_filter_configs : Optional [list [VisualizationAttributeFilterConfig ]] = None
549
582
self ._buckets : Optional [list [VisualizationBucket ]] = None
550
583
self ._filters : Optional [list [VisualizationFilter ]] = None
551
584
self ._sorts : Optional [list [VisualizationSort ]] = None
@@ -568,6 +601,15 @@ def are_relations_valid(self) -> str:
568
601
# Fallback to true for tests, where fixtures were generated without HTTP header activating this feature
569
602
return self ._vo ["attributes" ].get ("areRelationsValid" , "true" )
570
603
604
+ @property
605
+ def attribute_filter_configs (self ) -> Optional [list [VisualizationAttributeFilterConfig ]]:
606
+ visualization_attribute_filter_configs = safeget (self ._vo , ["attributes" , "content" , "attributeFilterConfigs" ])
607
+ if self ._attribute_filter_configs is None and visualization_attribute_filter_configs is not None :
608
+ self ._attribute_filter_configs = [
609
+ VisualizationAttributeFilterConfig (afc ) for afc in visualization_attribute_filter_configs .items ()
610
+ ]
611
+ return self ._attribute_filter_configs
612
+
571
613
@property
572
614
def buckets (self ) -> list [VisualizationBucket ]:
573
615
if self ._buckets is None :
0 commit comments