qe-api-client 2.8.0__py3-none-any.whl → 3.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.
- qe_api_client/api_classes/engine_app_api.py +132 -51
- qe_api_client/api_classes/engine_generic_object_api.py +45 -6
- qe_api_client/engine.py +1256 -9
- qe_api_client/structs.py +109 -1
- {qe_api_client-2.8.0.dist-info → qe_api_client-3.0.0.dist-info}/METADATA +1 -1
- {qe_api_client-2.8.0.dist-info → qe_api_client-3.0.0.dist-info}/RECORD +9 -9
- {qe_api_client-2.8.0.dist-info → qe_api_client-3.0.0.dist-info}/WHEEL +0 -0
- {qe_api_client-2.8.0.dist-info → qe_api_client-3.0.0.dist-info}/licenses/LICENSE +0 -0
- {qe_api_client-2.8.0.dist-info → qe_api_client-3.0.0.dist-info}/top_level.txt +0 -0
qe_api_client/engine.py
CHANGED
@@ -12,6 +12,8 @@ import qe_api_client.structs as structs
|
|
12
12
|
import math
|
13
13
|
import pandas as pd
|
14
14
|
import numpy as np
|
15
|
+
from datetime import datetime, timezone
|
16
|
+
import time
|
15
17
|
|
16
18
|
|
17
19
|
class QixEngine:
|
@@ -451,6 +453,266 @@ class QixEngine:
|
|
451
453
|
return chart
|
452
454
|
|
453
455
|
|
456
|
+
def create_snapshot(self, app_handle: int, object_id: str, snapshot_title: str = "", snapshot_description: str = "",
|
457
|
+
show_titles: bool = True, object_width: float = 1280, object_height: float = 720, bounding_client_width: float = 1280,
|
458
|
+
bounding_client_height: float = 720, rtl: bool = False, parent_width: float = 1280, parent_height: float = 720,
|
459
|
+
content_width: float = 1280, content_height: float = 720, chart_data_scroll_offset_start: int = 0,
|
460
|
+
chart_data_scroll_offset_end: int = 53, chart_data_legend_scroll_offset: int = 0, chart_data_zoom_min = 0,
|
461
|
+
chart_data_zoom_max = 0):
|
462
|
+
"""
|
463
|
+
Creates a snapshot object.
|
464
|
+
|
465
|
+
Parameters:
|
466
|
+
app_handle (int): The handle of the app.
|
467
|
+
object_id (str): The id of the object.
|
468
|
+
snapshot_title (str): The title of the snapshot.
|
469
|
+
snapshot_description (str): The description of the snapshot.
|
470
|
+
show_titles (bool): Enables / disables chart title.
|
471
|
+
object_width (float): The width of the snapshot object.
|
472
|
+
object_height (float): The height of the snapshot object.
|
473
|
+
bounding_client_width (float): The width of the bounding client.
|
474
|
+
bounding_client_height (float): The height of the bounding client.
|
475
|
+
rtl (bool): Controls the rendering of content with right-to-left (RTL) language support.
|
476
|
+
parent_width (float): The width of the parent object.
|
477
|
+
parent_height (float): The height of the parent object.
|
478
|
+
content_width (float): The width of the content object.
|
479
|
+
content_height (float): The height of the content object.
|
480
|
+
chart_data_scroll_offset_start (int): Scroll offset start.
|
481
|
+
chart_data_scroll_offset_end (int): Scroll offset end.
|
482
|
+
chart_data_legend_scroll_offset (int): Legend scroll offset.
|
483
|
+
chart_data_zoom_min: Minimum chart data zoom.
|
484
|
+
chart_data_zoom_max: Maximum chart data zoom.
|
485
|
+
|
486
|
+
Returns:
|
487
|
+
dict: The handle and Id of the created snapshot.
|
488
|
+
"""
|
489
|
+
# Get chart object
|
490
|
+
chart_obj = self.eaa.get_object(app_handle=app_handle, object_id=object_id)
|
491
|
+
chart_obj_handle = self.get_handle(chart_obj)
|
492
|
+
|
493
|
+
# Get sheet object
|
494
|
+
sheet_obj = self.get_object_sheet(app_handle=app_handle, obj_id=object_id)
|
495
|
+
sheet_id = self.get_id(sheet_obj)
|
496
|
+
|
497
|
+
# Get the visualization type
|
498
|
+
chart_obj_layout = self.egoa.get_layout(handle=chart_obj_handle)
|
499
|
+
visualization = chart_obj_layout["visualization"]
|
500
|
+
|
501
|
+
# Attribut "qInfo" changed
|
502
|
+
chart_obj_layout["qInfo"] = {"qType": "snapshot"}
|
503
|
+
|
504
|
+
# Attribut "showTitles" changed
|
505
|
+
chart_obj_layout["showTitles"] = show_titles
|
506
|
+
|
507
|
+
# Attribut "qMetaDef" added
|
508
|
+
chart_obj_layout["qMetaDef"] = {"title": snapshot_title, "description": snapshot_description}
|
509
|
+
|
510
|
+
# Attribut "creationDate" added
|
511
|
+
chart_obj_layout["creationDate"] = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + "Z"
|
512
|
+
|
513
|
+
# Attribut "permissions" added
|
514
|
+
chart_obj_layout["permissions"] = {"update": True, "publish": False, "export": False, "exportData": True,
|
515
|
+
"changeOwner": False, "remove": True}
|
516
|
+
|
517
|
+
# Attribut "visualizationType" added
|
518
|
+
chart_obj_layout["visualizationType"] = visualization
|
519
|
+
|
520
|
+
# Attribut "sourceObjectId" added
|
521
|
+
chart_obj_layout["sourceObjectId"] = object_id
|
522
|
+
|
523
|
+
# Attribut "sheetId" added
|
524
|
+
chart_obj_layout["sheetId"] = sheet_id
|
525
|
+
|
526
|
+
# Attribut "timestamp" added
|
527
|
+
chart_obj_layout["timestamp"] = int(time.time() * 1000)
|
528
|
+
|
529
|
+
# Attribut "isClone" added
|
530
|
+
chart_obj_layout["isClone"] = False
|
531
|
+
|
532
|
+
# Attribut "supportExport" added
|
533
|
+
chart_obj_layout["supportExport"] = True
|
534
|
+
|
535
|
+
# Attribut "qIncludeVariables" added
|
536
|
+
chart_obj_layout["qIncludeVariables"] = True
|
537
|
+
|
538
|
+
# Build the special snapshot parameters for the different chart types.
|
539
|
+
if visualization in ["pivot-table"]:
|
540
|
+
# Attribut "snapshotData" added
|
541
|
+
chart_obj_layout["snapshotData"] = {
|
542
|
+
"object": {
|
543
|
+
"size": {
|
544
|
+
"w": object_width,
|
545
|
+
"h": object_height,
|
546
|
+
"boundingClientWidth": bounding_client_width,
|
547
|
+
"boundingClientHeight": bounding_client_height
|
548
|
+
}
|
549
|
+
},
|
550
|
+
"rtl": rtl,
|
551
|
+
"parent": {
|
552
|
+
"h": parent_height,
|
553
|
+
"w": parent_width
|
554
|
+
}
|
555
|
+
}
|
556
|
+
|
557
|
+
elif visualization in ["sn-table"]:
|
558
|
+
# Attribut "snapshotData" added
|
559
|
+
chart_obj_layout["snapshotData"] = {
|
560
|
+
"object": {
|
561
|
+
"size": {
|
562
|
+
"w": object_width,
|
563
|
+
"h": object_height,
|
564
|
+
"boundingClientWidth": bounding_client_width,
|
565
|
+
"boundingClientHeight": bounding_client_height
|
566
|
+
}
|
567
|
+
},
|
568
|
+
"rtl": rtl,
|
569
|
+
"content": {
|
570
|
+
"scrollLeft": 0,
|
571
|
+
"visibleLeft": 0,
|
572
|
+
"visibleWidth": 6,
|
573
|
+
"visibleTop": 0,
|
574
|
+
"visibleHeight": 18,
|
575
|
+
"rowsPerPage": 18,
|
576
|
+
"page": 0,
|
577
|
+
"size": {
|
578
|
+
"width": object_width,
|
579
|
+
"height": object_height
|
580
|
+
},
|
581
|
+
"estimatedRowHeight": 25
|
582
|
+
},
|
583
|
+
"parent": {
|
584
|
+
"h": parent_height,
|
585
|
+
"w": parent_width
|
586
|
+
}
|
587
|
+
}
|
588
|
+
|
589
|
+
elif visualization in ["sn-pivot-table"]:
|
590
|
+
# Attribut "snapshotData" added
|
591
|
+
chart_obj_layout["snapshotData"] = {
|
592
|
+
"object": {
|
593
|
+
"size": {
|
594
|
+
"w": object_width,
|
595
|
+
"h": object_height,
|
596
|
+
"boundingClientWidth": bounding_client_width,
|
597
|
+
"boundingClientHeight": bounding_client_height
|
598
|
+
}
|
599
|
+
},
|
600
|
+
"rtl": rtl,
|
601
|
+
"content": {
|
602
|
+
"qPivotDataPages": chart_obj_layout["qHyperCube"]["qPivotDataPages"],
|
603
|
+
"scrollTop": 0,
|
604
|
+
"scrollLeft": 0,
|
605
|
+
"leftGridScrollLeft": 0,
|
606
|
+
"topGridScrollTop": 0,
|
607
|
+
"page": 0,
|
608
|
+
"rowsPerPage": 15000
|
609
|
+
},
|
610
|
+
"parent": {
|
611
|
+
"h": parent_height,
|
612
|
+
"w": parent_width
|
613
|
+
}
|
614
|
+
}
|
615
|
+
|
616
|
+
elif visualization in ["combochart", "barchart"]:
|
617
|
+
# Attribut "snapshotData" added
|
618
|
+
chart_obj_layout["snapshotData"] = {
|
619
|
+
"object": {
|
620
|
+
"size": {
|
621
|
+
"w": object_width,
|
622
|
+
"h": object_height,
|
623
|
+
"boundingClientWidth": bounding_client_width,
|
624
|
+
"boundingClientHeight": bounding_client_height
|
625
|
+
}
|
626
|
+
},
|
627
|
+
"rtl": rtl,
|
628
|
+
"content": {
|
629
|
+
"size": {
|
630
|
+
"w": content_width,
|
631
|
+
"h": content_height
|
632
|
+
},
|
633
|
+
"chartData": {
|
634
|
+
"scrollOffset": {
|
635
|
+
"start": chart_data_scroll_offset_start,
|
636
|
+
"end": chart_data_scroll_offset_end
|
637
|
+
},
|
638
|
+
"legendScrollOffset": chart_data_legend_scroll_offset
|
639
|
+
}
|
640
|
+
},
|
641
|
+
"parent": {
|
642
|
+
"h": parent_height,
|
643
|
+
"w": parent_width
|
644
|
+
}
|
645
|
+
}
|
646
|
+
|
647
|
+
elif visualization in ["linechart"]:
|
648
|
+
# Attribut "snapshotData" added
|
649
|
+
chart_obj_layout["snapshotData"] = {
|
650
|
+
"object": {
|
651
|
+
"size": {
|
652
|
+
"w": object_width,
|
653
|
+
"h": object_height,
|
654
|
+
"boundingClientWidth": bounding_client_width,
|
655
|
+
"boundingClientHeight": bounding_client_height
|
656
|
+
}
|
657
|
+
},
|
658
|
+
"rtl": rtl,
|
659
|
+
"content": {
|
660
|
+
"size": {
|
661
|
+
"w": content_width,
|
662
|
+
"h": content_height
|
663
|
+
},
|
664
|
+
"chartData": {
|
665
|
+
"zoom": {
|
666
|
+
"min": chart_data_zoom_min,
|
667
|
+
"max": chart_data_zoom_max
|
668
|
+
}
|
669
|
+
}
|
670
|
+
},
|
671
|
+
"parent": {
|
672
|
+
"h": parent_height,
|
673
|
+
"w": parent_width
|
674
|
+
}
|
675
|
+
}
|
676
|
+
|
677
|
+
else:
|
678
|
+
print("Chart type not supported.")
|
679
|
+
|
680
|
+
# Create snapshot
|
681
|
+
snapshot = self.eaa.create_bookmark(doc_handle=app_handle, prop=chart_obj_layout)
|
682
|
+
snapshot.update({"visualization": visualization})
|
683
|
+
|
684
|
+
return snapshot
|
685
|
+
|
686
|
+
|
687
|
+
def embed_snapshot(self, app_handle: int, snapshot_id: str, slide_id: str):
|
688
|
+
"""
|
689
|
+
Embeds a created snapshot object on a slide.
|
690
|
+
|
691
|
+
Parameters:
|
692
|
+
app_handle (int): The handle of the app.
|
693
|
+
snapshot_id (str): The id of the snapshot.
|
694
|
+
slide_id (str): The id of the slide to embed.
|
695
|
+
"""
|
696
|
+
# Get the slide, where the snapshot should be embeded.
|
697
|
+
slide = self.eaa.get_object(app_handle=app_handle, object_id=slide_id)
|
698
|
+
slide_handle = self.get_handle(slide)
|
699
|
+
|
700
|
+
# Get the visualization type of the snapshot
|
701
|
+
snapshot = self.eaa.get_bookmark(app_handle=app_handle, bookmark_id=snapshot_id)
|
702
|
+
snapshot_handle = self.get_handle(snapshot)
|
703
|
+
snapshot_layout = self.egoa.get_layout(handle=snapshot_handle)
|
704
|
+
visualization_type = snapshot_layout["visualizationType"]
|
705
|
+
|
706
|
+
# create the snapshot
|
707
|
+
slideitem_snapshot_properties = self.structs.slideitem_snapshot_properties(snapshot_id=snapshot_id,
|
708
|
+
visualization_type=visualization_type)
|
709
|
+
slideitem_snapshot = self.egoa.create_child(handle=slide_handle, prop=slideitem_snapshot_properties)
|
710
|
+
slideitem_snapshot_handle = self.get_handle(slideitem_snapshot)
|
711
|
+
|
712
|
+
slideitem_snapshot_embeded = self.egoa.embed_snapshot_object(handle=slideitem_snapshot_handle,
|
713
|
+
snapshot_id=snapshot_id)
|
714
|
+
|
715
|
+
|
454
716
|
def get_app_lineage_info(self, app_handle):
|
455
717
|
"""
|
456
718
|
Gets the lineage information of the app. The lineage information includes the LOAD and STORE statements from
|
@@ -500,19 +762,60 @@ class QixEngine:
|
|
500
762
|
|
501
763
|
Parameters:
|
502
764
|
obj : dict
|
503
|
-
The object containing the
|
765
|
+
The object containing the id.
|
504
766
|
|
505
767
|
Returns:
|
506
|
-
int: The
|
768
|
+
int: The id value.
|
507
769
|
|
508
770
|
Raises:
|
509
|
-
ValueError: If the
|
771
|
+
ValueError: If the id value is invalid.
|
510
772
|
"""
|
511
773
|
try:
|
512
774
|
return obj["qGenericId"]
|
513
775
|
except ValueError:
|
514
776
|
return "Bad id value in " + obj
|
515
777
|
|
778
|
+
@staticmethod
|
779
|
+
def get_type(obj):
|
780
|
+
"""
|
781
|
+
Retrieves the type from a given object.
|
782
|
+
|
783
|
+
Parameters:
|
784
|
+
obj : dict
|
785
|
+
The object containing the type.
|
786
|
+
|
787
|
+
Returns:
|
788
|
+
int: The type value.
|
789
|
+
|
790
|
+
Raises:
|
791
|
+
ValueError: If the type value is invalid.
|
792
|
+
"""
|
793
|
+
try:
|
794
|
+
return obj["qGenericType"]
|
795
|
+
except ValueError:
|
796
|
+
return "Bad type value in " + obj
|
797
|
+
|
798
|
+
|
799
|
+
def get_object_sheet(self, app_handle: int, obj_id: str):
|
800
|
+
"""
|
801
|
+
Retrieves the sheet from a given chart object.
|
802
|
+
|
803
|
+
Parameters:
|
804
|
+
app_handle (int): The handle of the app.
|
805
|
+
obj_id (str): The ID of the object.
|
806
|
+
|
807
|
+
Returns:
|
808
|
+
dict: The sheet object with handle and id.
|
809
|
+
"""
|
810
|
+
parent_obj = self.eaa.get_object(app_handle=app_handle, object_id=obj_id)
|
811
|
+
while self.get_type(parent_obj) != "sheet":
|
812
|
+
obj = parent_obj
|
813
|
+
obj_handle = self.get_handle(obj)
|
814
|
+
parent_obj = self.egoa.get_parent(handle=obj_handle)
|
815
|
+
|
816
|
+
return parent_obj
|
817
|
+
|
818
|
+
|
516
819
|
def get_chart_data(self, app_handle, obj_id):
|
517
820
|
"""
|
518
821
|
Retrieves the data from a given chart object.
|
@@ -569,7 +872,7 @@ class QixEngine:
|
|
569
872
|
# Retrieves the hypercube data in a loop (because of limitation from 10.000 cells per call)
|
570
873
|
while no_of_rows > page * height:
|
571
874
|
nx_page = self.structs.nx_page(left=0, top=page * height, width=width, height=height)
|
572
|
-
hc_data = self.egoa.get_hypercube_data(obj_handle, '/qHyperCubeDef', nx_page)[
|
875
|
+
hc_data = self.egoa.get_hypercube_data(handle=obj_handle, path='/qHyperCubeDef', pages=[nx_page])[
|
573
876
|
'qDataPages'][0]['qMatrix']
|
574
877
|
data_values.extend(hc_data)
|
575
878
|
page += 1
|
@@ -613,7 +916,7 @@ class QixEngine:
|
|
613
916
|
|
614
917
|
col_headers = []
|
615
918
|
nx_page_top = self.structs.nx_page(left=0, top=0, width=width, height=1)
|
616
|
-
hc_top = self.egoa.get_hypercube_pivot_data(obj_handle, '/qHyperCubeDef', nx_page_top)['qDataPages'][0]['qTop']
|
919
|
+
hc_top = self.egoa.get_hypercube_pivot_data(handle=obj_handle, path='/qHyperCubeDef', pages=[nx_page_top])['qDataPages'][0]['qTop']
|
617
920
|
for top_node in hc_top:
|
618
921
|
col_headers.extend(get_column_paths(top_node))
|
619
922
|
|
@@ -627,13 +930,13 @@ class QixEngine:
|
|
627
930
|
nx_page = self.structs.nx_page(left=0, top=page * height, width=width, height=height)
|
628
931
|
|
629
932
|
# Retrieves the row headers for the pivot table
|
630
|
-
hc_left = self.egoa.get_hypercube_pivot_data(obj_handle, '/qHyperCubeDef', nx_page)[
|
933
|
+
hc_left = self.egoa.get_hypercube_pivot_data(handle=obj_handle, path='/qHyperCubeDef', pages=[nx_page])[
|
631
934
|
'qDataPages'][0]['qLeft']
|
632
935
|
for left_node in hc_left:
|
633
936
|
row_headers.extend(get_all_dimensions(left_node))
|
634
937
|
|
635
938
|
# Retrieves the data for the pivot table
|
636
|
-
hc_data = self.egoa.get_hypercube_pivot_data(obj_handle, '/qHyperCubeDef', nx_page)[
|
939
|
+
hc_data = self.egoa.get_hypercube_pivot_data(handle=obj_handle, path='/qHyperCubeDef', pages=[nx_page])[
|
637
940
|
'qDataPages'][0]['qData']
|
638
941
|
for row in hc_data:
|
639
942
|
data_values.append([cell['qText'] for cell in row])
|
@@ -654,7 +957,7 @@ class QixEngine:
|
|
654
957
|
elif obj_layout['qInfo']['qType'] in ['barchart'] and obj_layout['qHyperCube']['qStackedDataPages'] != []:
|
655
958
|
max_no_cells = no_of_columns * no_of_rows
|
656
959
|
nx_page = self.structs.nx_page(left=0, top=0, width=no_of_columns, height=no_of_rows)
|
657
|
-
hc_data = self.egoa.get_hypercube_stack_data(obj_handle, '/qHyperCubeDef', nx_page, max_no_cells)[
|
960
|
+
hc_data = self.egoa.get_hypercube_stack_data(handle=obj_handle, path='/qHyperCubeDef', pages=[nx_page], max_no_cells=max_no_cells)[
|
658
961
|
'qDataPages'][0]['qData'][0]['qSubNodes']
|
659
962
|
|
660
963
|
# Transform the nested structure into a flat DataFrame
|
@@ -740,7 +1043,7 @@ class QixEngine:
|
|
740
1043
|
# Retrieves the hypercube data in a loop (because of limitation from 10.000 cells per call)
|
741
1044
|
while no_of_rows > page * height:
|
742
1045
|
nx_page = self.structs.nx_page(left=0, top=page * height, width=width, height=height)
|
743
|
-
hc_data = self.egoa.get_hypercube_data(hc_obj_handle, '/qHyperCubeDef', nx_page)['qDataPages'][0]['qMatrix']
|
1046
|
+
hc_data = self.egoa.get_hypercube_data(handle=hc_obj_handle, path='/qHyperCubeDef', pages=[nx_page])['qDataPages'][0]['qMatrix']
|
744
1047
|
data_values.extend(hc_data)
|
745
1048
|
page += 1
|
746
1049
|
|
@@ -1138,6 +1441,950 @@ class QixEngine:
|
|
1138
1441
|
return df_sheet_list
|
1139
1442
|
|
1140
1443
|
|
1444
|
+
# def get_object_properties(self, app_handle: int, obj_type: str):
|
1445
|
+
# """
|
1446
|
+
# Retrieves a list with all metadata of given object.
|
1447
|
+
#
|
1448
|
+
# Parameters:
|
1449
|
+
# app_handle (int): The handle of the app.
|
1450
|
+
# obj_type (str): The type of the given object.
|
1451
|
+
#
|
1452
|
+
# Returns:
|
1453
|
+
# DataFrame: A table with all metadata of given object.
|
1454
|
+
# """
|
1455
|
+
#
|
1456
|
+
# # Define the DataFrame structure of filterpane
|
1457
|
+
# if obj_type in ["filterpane"]:
|
1458
|
+
# df_obj_list = pd.DataFrame(
|
1459
|
+
# columns=["qInfo", "qExtendsId", "qMetaDef", "qStateName", "showTitles", "title", "subtitle", "footnote",
|
1460
|
+
# "disableNavMenu", "showDetails", "showDetailsExpression", "visualization", "version",
|
1461
|
+
# "qChildren"])
|
1462
|
+
# # Define the DataFrame structure of listbox
|
1463
|
+
# elif obj_type in ["listbox"]:
|
1464
|
+
# df_obj_list = pd.DataFrame(
|
1465
|
+
# columns=["qInfo", "qExtendsId", "qMetaDef", "qStateName", "qListObjectDef", "showTitles", "title",
|
1466
|
+
# "subtitle", "footnote", "disableNavMenu", "showDetails", "showDetailsExpression",
|
1467
|
+
# "visualization", "qChildren"])
|
1468
|
+
# # Define the DataFrame structure of table
|
1469
|
+
# elif obj_type in ["table"]:
|
1470
|
+
# df_obj_list = pd.DataFrame(
|
1471
|
+
# columns=["qInfo", "qExtendsId", "qMetaDef", "qStateName", "qHyperCubeDef", "script", "search", "showTitles", "title",
|
1472
|
+
# "subtitle", "footnote", "disableNavMenu", "showDetails", "showDetailsExpression", "totals",
|
1473
|
+
# "scrolling", "multiline", "visualization", "qChildren"])
|
1474
|
+
# else:
|
1475
|
+
# return "Chart type not supported."
|
1476
|
+
#
|
1477
|
+
# # Get object data
|
1478
|
+
# options = self.structs.options(types=[obj_type])
|
1479
|
+
# obj_list = self.eaa.get_objects(app_handle=app_handle, options=options)
|
1480
|
+
#
|
1481
|
+
# for obj in obj_list:
|
1482
|
+
# # Get filterpane ID
|
1483
|
+
# obj_id = obj["qInfo"]["qId"]
|
1484
|
+
# # Get filterpane object
|
1485
|
+
# obj = self.eaa.get_object(app_handle=app_handle, object_id=obj_id)
|
1486
|
+
# # Get filterpane handle
|
1487
|
+
# obj_handle = self.get_handle(obj)
|
1488
|
+
# # Get filterpane full property tree
|
1489
|
+
# obj_full_property_tree = self.egoa.get_full_property_tree(handle=obj_handle)
|
1490
|
+
#
|
1491
|
+
# # Get filterpane properties
|
1492
|
+
# obj_props = obj_full_property_tree["qProperty"]
|
1493
|
+
# obj_children = obj_full_property_tree["qChildren"]
|
1494
|
+
# obj_children_ids = [child["qProperty"]["qInfo"]["qId"] for child in obj_children]
|
1495
|
+
# obj_props["qChildren"] = obj_children_ids
|
1496
|
+
#
|
1497
|
+
# # Concatenate the filterpane metadata to the DataFrame structure
|
1498
|
+
# df_obj_list.loc[len(df_obj_list)] = obj_props
|
1499
|
+
#
|
1500
|
+
#
|
1501
|
+
# # Resolve the dictionary structure of attribute "qInfo"
|
1502
|
+
# df_obj_list_expanded = (df_obj_list["qInfo"].dropna().apply(pd.Series).add_prefix("qInfo_"))
|
1503
|
+
# df_obj_list = df_obj_list.drop(columns=["qInfo"]).join(df_obj_list_expanded)
|
1504
|
+
#
|
1505
|
+
# if obj_type in ["listbox"]:
|
1506
|
+
# # Resolve the dictionary structure of attribute "title"
|
1507
|
+
# df_obj_list_expanded = (
|
1508
|
+
# df_obj_list["title"].dropna()
|
1509
|
+
# # .apply(lambda x: x if isinstance(x, dict) else {})
|
1510
|
+
# .apply(pd.Series).add_prefix("title_"))
|
1511
|
+
# # df_obj_list_expanded = (
|
1512
|
+
# # df_obj_list["title"].dropna()
|
1513
|
+
# # .apply(lambda x: x.get("qStringExpression", {}).get("qExpr") if isinstance(x, dict) else x)
|
1514
|
+
# # .to_frame("title_qStringExpression")
|
1515
|
+
# # )
|
1516
|
+
# df_obj_list = df_obj_list.drop(columns=["title"]).join(df_obj_list_expanded)
|
1517
|
+
#
|
1518
|
+
# # Resolve the dictionary structure of attribute "title_qStringExpression"
|
1519
|
+
# df_obj_list_expanded = (
|
1520
|
+
# df_obj_list["title_qStringExpression"].dropna()
|
1521
|
+
# .apply(pd.Series).add_prefix("title_qStringExpression_"))
|
1522
|
+
# df_obj_list = df_obj_list.drop(columns=["title_qStringExpression"]).join(df_obj_list_expanded)
|
1523
|
+
#
|
1524
|
+
# # Resolve the dictionary structure of attribute "qListObjectDef"
|
1525
|
+
# df_obj_list_expanded = (
|
1526
|
+
# df_obj_list["qListObjectDef"].dropna().apply(pd.Series).add_prefix("qListObjectDef_"))
|
1527
|
+
# df_obj_list = df_obj_list.drop(columns=["qListObjectDef"]).join(df_obj_list_expanded)
|
1528
|
+
#
|
1529
|
+
# # Resolve the dictionary structure of attribute "qListObjectDef_qDef"
|
1530
|
+
# df_obj_list_expanded = (
|
1531
|
+
# df_obj_list["qListObjectDef_qDef"].dropna().apply(pd.Series).add_prefix("qListObjectDef_qDef_"))
|
1532
|
+
# df_obj_list = df_obj_list.drop(columns=["qListObjectDef_qDef"]).join(df_obj_list_expanded)
|
1533
|
+
#
|
1534
|
+
# if obj_type in ["table"]:
|
1535
|
+
# # Resolve the dictionary structure of attribute "qHyperCubeDef"
|
1536
|
+
# df_obj_list_expanded = (
|
1537
|
+
# df_obj_list["qHyperCubeDef"].dropna().apply(pd.Series).add_prefix("qHyperCubeDef_"))
|
1538
|
+
# df_obj_list = df_obj_list.drop(columns=["qHyperCubeDef"]).join(df_obj_list_expanded)
|
1539
|
+
#
|
1540
|
+
# # Resolve the dictionary structure of attribute "search"
|
1541
|
+
# df_obj_list_expanded = (
|
1542
|
+
# df_obj_list["search"].dropna().apply(pd.Series).add_prefix("search_"))
|
1543
|
+
# df_obj_list = df_obj_list.drop(columns=["search"]).join(df_obj_list_expanded)
|
1544
|
+
#
|
1545
|
+
# return df_obj_list
|
1546
|
+
|
1547
|
+
|
1548
|
+
def get_object_type_properties(self, app_obj: dict, obj_type: str):
|
1549
|
+
"""
|
1550
|
+
Retrieves a list with all metadata of given type of objects.
|
1551
|
+
|
1552
|
+
Parameters:
|
1553
|
+
app_obj (dict): The response od the opened app.
|
1554
|
+
obj_type (str): The type of the given object.
|
1555
|
+
|
1556
|
+
Returns:
|
1557
|
+
List: A list with all metadata of given type of objects.
|
1558
|
+
"""
|
1559
|
+
|
1560
|
+
# Get app handle
|
1561
|
+
app_handle = self.get_handle(app_obj)
|
1562
|
+
# Get app ID
|
1563
|
+
app_id = self.get_id(app_obj)
|
1564
|
+
# Get objects structure
|
1565
|
+
options = self.structs.options(types=[obj_type])
|
1566
|
+
# Get objects per type
|
1567
|
+
obj_list = self.eaa.get_objects(app_handle=app_handle, options=options)
|
1568
|
+
# Define list variable
|
1569
|
+
obj_props_list = []
|
1570
|
+
|
1571
|
+
# Loop objects from the list
|
1572
|
+
for obj in obj_list:
|
1573
|
+
# Get object ID
|
1574
|
+
obj_id = obj["qInfo"]["qId"]
|
1575
|
+
# Get object
|
1576
|
+
obj = self.eaa.get_object(app_handle=app_handle, object_id=obj_id)
|
1577
|
+
# Get object handle
|
1578
|
+
obj_handle = self.get_handle(obj)
|
1579
|
+
# Get object full property tree
|
1580
|
+
obj_props = self.egoa.get_full_property_tree(handle=obj_handle)
|
1581
|
+
# Insert app id
|
1582
|
+
obj_props["qDocId"] = app_id
|
1583
|
+
# Concatenate object properties to the list
|
1584
|
+
obj_props_list.append(obj_props)
|
1585
|
+
|
1586
|
+
return obj_props_list
|
1587
|
+
|
1588
|
+
|
1589
|
+
# def get_objects_properties(self, app_obj: dict):
|
1590
|
+
# """
|
1591
|
+
# Retrieves a list with all metadata of all app objects.
|
1592
|
+
#
|
1593
|
+
# Parameters:
|
1594
|
+
# app_obj (dict): The response od the opened app.
|
1595
|
+
#
|
1596
|
+
# Returns:
|
1597
|
+
# List: A list with all metadata of all app objects.
|
1598
|
+
# """
|
1599
|
+
# app_handle = self.get_handle(app_obj)
|
1600
|
+
# app_id = self.get_id(app_obj)
|
1601
|
+
#
|
1602
|
+
# app_infos = self.eaa.get_all_infos(app_handle=app_handle)
|
1603
|
+
#
|
1604
|
+
# # Extrahiere alle qId-Werte in eine Liste
|
1605
|
+
# obj_id_list = [item["qId"] for item in app_infos]
|
1606
|
+
#
|
1607
|
+
# obj_props_list = []
|
1608
|
+
#
|
1609
|
+
# for obj_id in obj_id_list:
|
1610
|
+
# obj = self.eaa.get_object(app_handle=app_handle, object_id=obj_id)
|
1611
|
+
# obj_handle = self.get_handle(obj)
|
1612
|
+
# obj_props = self.egoa.get_full_property_tree(handle=obj_handle)
|
1613
|
+
# obj_props["appId"] = app_id
|
1614
|
+
# obj_props_list.append(obj_props)
|
1615
|
+
#
|
1616
|
+
# return obj_props_list
|
1617
|
+
|
1618
|
+
|
1619
|
+
# def get_app_properties(self, app_handle):
|
1620
|
+
# """
|
1621
|
+
# Retrieves a list with all app property metadata.
|
1622
|
+
#
|
1623
|
+
# Parameters:
|
1624
|
+
# app_handle (int): The handle of the app.
|
1625
|
+
#
|
1626
|
+
# Returns:
|
1627
|
+
# DataFrame: A table with all app property metadata.
|
1628
|
+
# """
|
1629
|
+
#
|
1630
|
+
# # Define the DataFrame structure
|
1631
|
+
# df_app_property_list = pd.DataFrame(
|
1632
|
+
# columns=["qInfo", "qExtendsId", "qMetaDef", "qStateName", "sheetTitleBgColor", "sheetTitleGradientColor",
|
1633
|
+
# "sheetTitleColor", "sheetLogoThumbnail", "sheetLogoPosition", "rtl", "theme", "disableCellNavMenu",
|
1634
|
+
# "defaultBookmarkId", "qChildren"])
|
1635
|
+
#
|
1636
|
+
# # Get app property object data
|
1637
|
+
# options = self.structs.options(types=["appprops"])
|
1638
|
+
# app_property_list = self.eaa.get_objects(app_handle=app_handle, options=options)
|
1639
|
+
#
|
1640
|
+
# for app_property in app_property_list:
|
1641
|
+
# # Get app property ID
|
1642
|
+
# app_property_id = app_property["qInfo"]["qId"]
|
1643
|
+
# # Get app property object
|
1644
|
+
# app_property_obj = self.eaa.get_object(app_handle=app_handle, object_id=app_property_id)
|
1645
|
+
# # Get app property handle
|
1646
|
+
# app_property_handle = self.get_handle(app_property_obj)
|
1647
|
+
# # Get app property full property tree
|
1648
|
+
# app_property_full_property_tree = self.egoa.get_full_property_tree(handle=app_property_handle)
|
1649
|
+
#
|
1650
|
+
# # Get app property properties
|
1651
|
+
# app_property_props = app_property_full_property_tree["qProperty"]
|
1652
|
+
# app_property_children = app_property_full_property_tree["qChildren"]
|
1653
|
+
# app_property_children_ids = [child["qProperty"]["qInfo"]["qId"] for child in app_property_children]
|
1654
|
+
# app_property_props["qChildren"] = app_property_children_ids
|
1655
|
+
#
|
1656
|
+
# # Concatenate the app property metadata to the DataFrame structure
|
1657
|
+
# df_app_property_list.loc[len(df_app_property_list)] = app_property_props
|
1658
|
+
#
|
1659
|
+
#
|
1660
|
+
# # Resolve the dictionary structure of attribute "qInfo"
|
1661
|
+
# df_app_property_list_expanded = (df_app_property_list["qInfo"].dropna().apply(pd.Series).add_prefix("qInfo_"))
|
1662
|
+
# df_app_property_list = df_app_property_list.drop(columns=["qInfo"]).join(df_app_property_list_expanded)
|
1663
|
+
#
|
1664
|
+
# # Resolve the dictionary structure of attribute "sheetTitleBgColor"
|
1665
|
+
# df_app_property_list_expanded = (df_app_property_list["sheetTitleBgColor"].dropna().apply(pd.Series).add_prefix("sheetTitleBgColor_"))
|
1666
|
+
# df_app_property_list = df_app_property_list.drop(columns=["sheetTitleBgColor"]).join(df_app_property_list_expanded)
|
1667
|
+
#
|
1668
|
+
# # Resolve the dictionary structure of attribute "sheetTitleGradientColor"
|
1669
|
+
# df_app_property_list_expanded = (
|
1670
|
+
# df_app_property_list["sheetTitleGradientColor"].dropna().apply(pd.Series).add_prefix("sheetTitleGradientColor_"))
|
1671
|
+
# df_app_property_list = df_app_property_list.drop(columns=["sheetTitleGradientColor"]).join(
|
1672
|
+
# df_app_property_list_expanded)
|
1673
|
+
#
|
1674
|
+
# # Resolve the dictionary structure of attribute "sheetLogoThumbnail"
|
1675
|
+
# df_app_property_list_expanded = (
|
1676
|
+
# df_app_property_list["sheetLogoThumbnail"].dropna().apply(pd.Series).add_prefix("sheetLogoThumbnail_"))
|
1677
|
+
# df_app_property_list = df_app_property_list.drop(columns=["sheetLogoThumbnail"]).join(
|
1678
|
+
# df_app_property_list_expanded)
|
1679
|
+
#
|
1680
|
+
# return df_app_property_list
|
1681
|
+
#
|
1682
|
+
#
|
1683
|
+
# def get_app_sheet_groups(self, app_handle):
|
1684
|
+
# """
|
1685
|
+
# Retrieves a list with all app sheet group metadata.
|
1686
|
+
#
|
1687
|
+
# Parameters:
|
1688
|
+
# app_handle (int): The 0handle of the app.
|
1689
|
+
#
|
1690
|
+
# Returns:
|
1691
|
+
# DataFrame: A table with all sheet group metadata from an app.
|
1692
|
+
# """
|
1693
|
+
#
|
1694
|
+
# # Define the DataFrame structure
|
1695
|
+
# df_sheet_group_list = pd.DataFrame(
|
1696
|
+
# columns=["qInfo", "qExtendsId", "qMetaDef", "qStateName", "rank", "qChildren", "qEmbeddedSnapshotRef"])
|
1697
|
+
#
|
1698
|
+
# # Get sheet group object data
|
1699
|
+
# options = self.structs.options(types=["sheetgroup"])
|
1700
|
+
# sheet_group_list = self.eaa.get_objects(app_handle=app_handle, options=options)
|
1701
|
+
#
|
1702
|
+
# for sheet_group in sheet_group_list:
|
1703
|
+
# # Get sheet group ID
|
1704
|
+
# sheet_group_id = sheet_group["qInfo"]["qId"]
|
1705
|
+
# # Get sheet group object
|
1706
|
+
# sheet_group_obj = self.eaa.get_object(app_handle=app_handle, object_id=sheet_group_id)
|
1707
|
+
# # Get sheet group handle
|
1708
|
+
# sheet_group_handle = self.get_handle(sheet_group_obj)
|
1709
|
+
# # Get sheet group full property tree
|
1710
|
+
# sheet_group_full_property_tree = self.egoa.get_full_property_tree(handle=sheet_group_handle)
|
1711
|
+
#
|
1712
|
+
# # Get sheet group properties
|
1713
|
+
# sheet_group_props = sheet_group_full_property_tree["qProperty"]
|
1714
|
+
# sheet_group_children = sheet_group_full_property_tree["qChildren"]
|
1715
|
+
# sheet_group_children_ids = [child["qProperty"]["qInfo"]["qId"] for child in sheet_group_children]
|
1716
|
+
# sheet_group_props["qChildren"] = sheet_group_children_ids
|
1717
|
+
#
|
1718
|
+
# # Concatenate the sheet group metadata to the DataFrame structure
|
1719
|
+
# df_sheet_group_list.loc[len(df_sheet_group_list)] = sheet_group_props
|
1720
|
+
#
|
1721
|
+
#
|
1722
|
+
# # Resolve the dictionary structure of attribute "qInfo"
|
1723
|
+
# df_sheet_group_list_expanded = (df_sheet_group_list["qInfo"].dropna().apply(pd.Series).add_prefix("qInfo_"))
|
1724
|
+
# df_sheet_group_list = df_sheet_group_list.drop(columns=["qInfo"]).join(df_sheet_group_list_expanded)
|
1725
|
+
#
|
1726
|
+
# # Resolve the dictionary structure of attribute "qMetaDef"
|
1727
|
+
# df_sheet_group_list_expanded = (df_sheet_group_list["qMetaDef"].dropna().apply(pd.Series).add_prefix("qMetaDef_"))
|
1728
|
+
# df_sheet_group_list = df_sheet_group_list.drop(columns=["qMetaDef"]).join(df_sheet_group_list_expanded)
|
1729
|
+
#
|
1730
|
+
# return df_sheet_group_list
|
1731
|
+
#
|
1732
|
+
#
|
1733
|
+
# def get_app_sheets(self, app_handle):
|
1734
|
+
# """
|
1735
|
+
# Retrieves a list with all app sheet metadata.
|
1736
|
+
#
|
1737
|
+
# Parameters:
|
1738
|
+
# app_handle (int): The 0handle of the app.
|
1739
|
+
#
|
1740
|
+
# Returns:
|
1741
|
+
# DataFrame: A table with all sheet metadata from an app.
|
1742
|
+
# """
|
1743
|
+
#
|
1744
|
+
# # Define the DataFrame structure
|
1745
|
+
# df_sheet_list = pd.DataFrame(
|
1746
|
+
# columns=["qInfo", "qExtendsId", "qMetaDef", "qStateName", "creationDate", "rank", "thumbnail", "columns",
|
1747
|
+
# "rows", "cells", "qChildListDef", "customRowBase", "gridResolution", "layoutOptions", "gridMode",
|
1748
|
+
# "groupId", "labelExpression", "qChildren"])
|
1749
|
+
#
|
1750
|
+
# # Get sheet object data
|
1751
|
+
# options = self.structs.options(types=["sheet"])
|
1752
|
+
# sheet_list = self.eaa.get_objects(app_handle=app_handle, options=options)
|
1753
|
+
#
|
1754
|
+
# for sheet in sheet_list:
|
1755
|
+
# # Get sheet ID
|
1756
|
+
# sheet_id = sheet["qInfo"]["qId"]
|
1757
|
+
# # Get sheet object
|
1758
|
+
# sheet_obj = self.eaa.get_object(app_handle=app_handle, object_id=sheet_id)
|
1759
|
+
# # Get sheet handle
|
1760
|
+
# sheet_handle = self.get_handle(sheet_obj)
|
1761
|
+
# # Get sheet full property tree
|
1762
|
+
# sheet_full_property_tree = self.egoa.get_full_property_tree(handle=sheet_handle)
|
1763
|
+
#
|
1764
|
+
# # Get sheet properties
|
1765
|
+
# sheet_props = sheet_full_property_tree["qProperty"]
|
1766
|
+
# sheet_children = sheet_full_property_tree["qChildren"]
|
1767
|
+
# sheet_children_ids = [child["qProperty"]["qInfo"]["qId"] for child in sheet_children]
|
1768
|
+
# sheet_props["qChildren"] = sheet_children_ids
|
1769
|
+
#
|
1770
|
+
# # Concatenate the sheet metadata to the DataFrame structure
|
1771
|
+
# df_sheet_list.loc[len(df_sheet_list)] = sheet_props
|
1772
|
+
#
|
1773
|
+
#
|
1774
|
+
# # Resolve the dictionary structure of attribute "qInfo"
|
1775
|
+
# df_sheet_list_expanded = (df_sheet_list["qInfo"].dropna().apply(pd.Series).add_prefix("qInfo_"))
|
1776
|
+
# df_sheet_list = df_sheet_list.drop(columns=["qInfo"]).join(df_sheet_list_expanded)
|
1777
|
+
#
|
1778
|
+
# # Resolve the dictionary structure of attribute "qMetaDef"
|
1779
|
+
# df_sheet_list_expanded = (df_sheet_list["qMetaDef"].dropna().apply(pd.Series).add_prefix("qMetaDef_"))
|
1780
|
+
# df_sheet_list = df_sheet_list.drop(columns=["qMetaDef"]).join(df_sheet_list_expanded)
|
1781
|
+
#
|
1782
|
+
# # Resolve the dictionary structure of attribute "thumbnail"
|
1783
|
+
# df_sheet_list_expanded = (df_sheet_list["thumbnail"].dropna().apply(pd.Series).add_prefix("thumbnail_"))
|
1784
|
+
# df_sheet_list = df_sheet_list.drop(columns=["thumbnail"]).join(df_sheet_list_expanded)
|
1785
|
+
#
|
1786
|
+
# # Resolve the dictionary structure of attribute "thumbnail_qStaticContentUrlDef"
|
1787
|
+
# df_sheet_list_expanded = (df_sheet_list["thumbnail_qStaticContentUrlDef"].dropna().apply(pd.Series).add_prefix("thumbnail_qStaticContentUrlDef_"))
|
1788
|
+
# df_sheet_list = df_sheet_list.drop(columns=["thumbnail_qStaticContentUrlDef"]).join(df_sheet_list_expanded)
|
1789
|
+
#
|
1790
|
+
# # Resolve the dictionary structure of attribute "qChildListDef"
|
1791
|
+
# df_sheet_list_expanded = (df_sheet_list["qChildListDef"].dropna().apply(pd.Series).add_prefix("qChildListDef_"))
|
1792
|
+
# df_sheet_list = df_sheet_list.drop(columns=["qChildListDef"]).join(df_sheet_list_expanded)
|
1793
|
+
#
|
1794
|
+
# # Resolve the dictionary structure of attribute "qChildListDef_qData"
|
1795
|
+
# df_sheet_list_expanded = (df_sheet_list["qChildListDef_qData"].dropna().apply(pd.Series).add_prefix("qChildListDef_qData_"))
|
1796
|
+
# df_sheet_list = df_sheet_list.drop(columns=["qChildListDef_qData"]).join(df_sheet_list_expanded)
|
1797
|
+
#
|
1798
|
+
# # Resolve the dictionary structure of attribute "layoutOptions"
|
1799
|
+
# df_sheet_list_expanded = (df_sheet_list["layoutOptions"].dropna().apply(pd.Series).add_prefix("layoutOptions_"))
|
1800
|
+
# df_sheet_list = df_sheet_list.drop(columns=["layoutOptions"]).join(df_sheet_list_expanded)
|
1801
|
+
#
|
1802
|
+
# return df_sheet_list
|
1803
|
+
#
|
1804
|
+
#
|
1805
|
+
# def get_app_layout_containers(self, app_handle):
|
1806
|
+
# """
|
1807
|
+
# Retrieves a list with all app layout container metadata.
|
1808
|
+
#
|
1809
|
+
# Parameters:
|
1810
|
+
# app_handle (int): The handle of the app.
|
1811
|
+
#
|
1812
|
+
# Returns:
|
1813
|
+
# DataFrame: A table with all layout container metadata from an app.
|
1814
|
+
# """
|
1815
|
+
#
|
1816
|
+
# # Define the DataFrame structure
|
1817
|
+
# df_layout_container_list = pd.DataFrame(
|
1818
|
+
# columns=["qInfo", "qExtendsId", "qMetaDef", "qStateName", "objects", "showTitles", "title", "subtitle",
|
1819
|
+
# "footnote", "disableNavMenu", "showDetails", "showDetailsExpression", "components",
|
1820
|
+
# "constrainToContainer", "showGridLines", "gridRowCount", "gridColumnCount", "snapToGrid",
|
1821
|
+
# "visualization", "qChildListDef", "version", "extensionMeta"
|
1822
|
+
# "qChildren", "qEmbeddedSnapshotRef"])
|
1823
|
+
#
|
1824
|
+
# # Get layout container object data
|
1825
|
+
# options = self.structs.options(types=["sn-layout-container"])
|
1826
|
+
# layout_container_list = self.eaa.get_objects(app_handle=app_handle, options=options)
|
1827
|
+
#
|
1828
|
+
# for layout_container in layout_container_list:
|
1829
|
+
# # Get layout container ID
|
1830
|
+
# layout_container_id = layout_container["qInfo"]["qId"]
|
1831
|
+
# # Get layout container object
|
1832
|
+
# layout_container_obj = self.eaa.get_object(app_handle=app_handle, object_id=layout_container_id)
|
1833
|
+
# # Get layout container handle
|
1834
|
+
# layout_container_handle = self.get_handle(layout_container_obj)
|
1835
|
+
# # Get layout container full property tree
|
1836
|
+
# layout_container_full_property_tree = self.egoa.get_full_property_tree(handle=layout_container_handle)
|
1837
|
+
#
|
1838
|
+
# # Get layout container properties
|
1839
|
+
# layout_container_props = layout_container_full_property_tree["qProperty"]
|
1840
|
+
# layout_container_children = layout_container_full_property_tree["qChildren"]
|
1841
|
+
# layout_container_children_ids = [child["qProperty"]["qInfo"]["qId"] for child in layout_container_children]
|
1842
|
+
# layout_container_props["qChildren"] = layout_container_children_ids
|
1843
|
+
#
|
1844
|
+
# # Concatenate the layout container metadata to the DataFrame structure
|
1845
|
+
# df_layout_container_list.loc[len(df_layout_container_list)] = layout_container_props
|
1846
|
+
#
|
1847
|
+
#
|
1848
|
+
# # Resolve the dictionary structure of attribute "qInfo"
|
1849
|
+
# df_layout_container_list_expanded = (df_layout_container_list["qInfo"].dropna().apply(pd.Series).add_prefix("qInfo_"))
|
1850
|
+
# df_layout_container_list = df_layout_container_list.drop(columns=["qInfo"]).join(df_layout_container_list_expanded)
|
1851
|
+
#
|
1852
|
+
# # Resolve the dictionary structure of attribute "qChildListDef"
|
1853
|
+
# df_layout_container_list_expanded = (
|
1854
|
+
# df_layout_container_list["qChildListDef"].dropna().apply(pd.Series).add_prefix("qChildListDef_"))
|
1855
|
+
# df_layout_container_list = df_layout_container_list.drop(columns=["qChildListDef"]).join(
|
1856
|
+
# df_layout_container_list_expanded)
|
1857
|
+
#
|
1858
|
+
# # Resolve the dictionary structure of attribute "qChildListDef_qData"
|
1859
|
+
# df_layout_container_list_expanded = (
|
1860
|
+
# df_layout_container_list["qChildListDef_qData"].dropna().apply(pd.Series).add_prefix("qChildListDef_qData_"))
|
1861
|
+
# df_layout_container_list = df_layout_container_list.drop(columns=["qChildListDef_qData"]).join(
|
1862
|
+
# df_layout_container_list_expanded)
|
1863
|
+
#
|
1864
|
+
# return df_layout_container_list
|
1865
|
+
#
|
1866
|
+
#
|
1867
|
+
# def get_app_tabbed_containers(self, app_handle):
|
1868
|
+
# """
|
1869
|
+
# Retrieves a list with all app tabbed container metadata.
|
1870
|
+
#
|
1871
|
+
# Parameters:
|
1872
|
+
# app_handle (int): The handle of the app.
|
1873
|
+
#
|
1874
|
+
# Returns:
|
1875
|
+
# DataFrame: A table with all tabbed container metadata from an app.
|
1876
|
+
# """
|
1877
|
+
#
|
1878
|
+
# # Define the DataFrame structure
|
1879
|
+
# df_tabbed_container_list = pd.DataFrame(
|
1880
|
+
# columns=["qInfo", "qExtendsId", "qMetaDef", "qStateName", "objects", "showTitles", "title", "subtitle",
|
1881
|
+
# "footnote", "disableNavMenu", "showDetails", "showDetailsExpression", "showTabs", "useDropdown",
|
1882
|
+
# "useScrollButton", "showIcons", "orientation", "defaultTabId", "visualization", "qChildListDef",
|
1883
|
+
# "components", "fontsUsed", "qChildren", "qEmbeddedSnapshotRef"])
|
1884
|
+
#
|
1885
|
+
# # Get tabbed container object data
|
1886
|
+
# options = self.structs.options(types=["sn-tabbed-container"])
|
1887
|
+
# tabbed_container_list = self.eaa.get_objects(app_handle=app_handle, options=options)
|
1888
|
+
#
|
1889
|
+
# for tabbed_container in tabbed_container_list:
|
1890
|
+
# # Get tabbed container ID
|
1891
|
+
# tabbed_container_id = tabbed_container["qInfo"]["qId"]
|
1892
|
+
# # Get tabbed container object
|
1893
|
+
# tabbed_container_obj = self.eaa.get_object(app_handle=app_handle, object_id=tabbed_container_id)
|
1894
|
+
# # Get tabbed container handle
|
1895
|
+
# tabbed_container_handle = self.get_handle(tabbed_container_obj)
|
1896
|
+
# # Get tabbed container full property tree
|
1897
|
+
# tabbed_container_full_property_tree = self.egoa.get_full_property_tree(handle=tabbed_container_handle)
|
1898
|
+
#
|
1899
|
+
# # Get tabbed container properties
|
1900
|
+
# tabbed_container_props = tabbed_container_full_property_tree["qProperty"]
|
1901
|
+
# tabbed_container_children = tabbed_container_full_property_tree["qChildren"]
|
1902
|
+
# tabbed_container_children_ids = [child["qProperty"]["qInfo"]["qId"] for child in tabbed_container_children]
|
1903
|
+
# tabbed_container_props["qChildren"] = tabbed_container_children_ids
|
1904
|
+
#
|
1905
|
+
# # Concatenate the tabbed container metadata to the DataFrame structure
|
1906
|
+
# df_tabbed_container_list.loc[len(df_tabbed_container_list)] = tabbed_container_props
|
1907
|
+
#
|
1908
|
+
#
|
1909
|
+
# # Resolve the dictionary structure of attribute "qInfo"
|
1910
|
+
# df_tabbed_container_list_expanded = (df_tabbed_container_list["qInfo"].dropna().apply(pd.Series).add_prefix("qInfo_"))
|
1911
|
+
# df_tabbed_container_list = df_tabbed_container_list.drop(columns=["qInfo"]).join(df_tabbed_container_list_expanded)
|
1912
|
+
#
|
1913
|
+
# # Resolve the dictionary structure of attribute "qChildListDef"
|
1914
|
+
# df_tabbed_container_list_expanded = (
|
1915
|
+
# df_tabbed_container_list["qChildListDef"].dropna().apply(pd.Series).add_prefix("qChildListDef_"))
|
1916
|
+
# df_tabbed_container_list = df_tabbed_container_list.drop(columns=["qChildListDef"]).join(
|
1917
|
+
# df_tabbed_container_list_expanded)
|
1918
|
+
#
|
1919
|
+
# # Resolve the dictionary structure of attribute "qChildListDef"
|
1920
|
+
# df_tabbed_container_list_expanded = (
|
1921
|
+
# df_tabbed_container_list["qChildListDef_qData"].dropna().apply(pd.Series).add_prefix("qChildListDef_qData_"))
|
1922
|
+
# df_tabbed_container_list = df_tabbed_container_list.drop(columns=["qChildListDef_qData"]).join(
|
1923
|
+
# df_tabbed_container_list_expanded)
|
1924
|
+
#
|
1925
|
+
# return df_tabbed_container_list
|
1926
|
+
#
|
1927
|
+
#
|
1928
|
+
# def get_app_containers(self, app_handle):
|
1929
|
+
# """
|
1930
|
+
# Retrieves a list with all app container metadata.
|
1931
|
+
#
|
1932
|
+
# Parameters:
|
1933
|
+
# app_handle (int): The handle of the app.
|
1934
|
+
#
|
1935
|
+
# Returns:
|
1936
|
+
# DataFrame: A table with all container metadata from an app.
|
1937
|
+
# """
|
1938
|
+
#
|
1939
|
+
# # Define the DataFrame structure
|
1940
|
+
# df_container_list = pd.DataFrame(
|
1941
|
+
# columns=["qInfo", "qExtendsId", "qMetaDef", "qStateName", "children", "showTitles", "title", "subtitle",
|
1942
|
+
# "footnote", "disableNavMenu", "showDetails", "showDetailsExpression", "borders", "showTabs", "useDropdown",
|
1943
|
+
# "useScrollButton", "showIcons", "activeTab", "defaultTab", "visualization", "qChildListDef",
|
1944
|
+
# "supportRefresh", "hasExternalChildren", "qChildren", "qEmbeddedSnapshotRef"])
|
1945
|
+
#
|
1946
|
+
# # Get container object data
|
1947
|
+
# options = self.structs.options(types=["container"])
|
1948
|
+
# container_list = self.eaa.get_objects(app_handle=app_handle, options=options)
|
1949
|
+
#
|
1950
|
+
# for container in container_list:
|
1951
|
+
# # Get container ID
|
1952
|
+
# container_id = container["qInfo"]["qId"]
|
1953
|
+
# # Get container object
|
1954
|
+
# container_obj = self.eaa.get_object(app_handle=app_handle, object_id=container_id)
|
1955
|
+
# # Get container handle
|
1956
|
+
# container_handle = self.get_handle(container_obj)
|
1957
|
+
# # Get container full property tree
|
1958
|
+
# container_full_property_tree = self.egoa.get_full_property_tree(handle=container_handle)
|
1959
|
+
#
|
1960
|
+
# # Get container properties
|
1961
|
+
# container_props = container_full_property_tree["qProperty"]
|
1962
|
+
# container_children = container_full_property_tree["qChildren"]
|
1963
|
+
# container_children_ids = [child["qProperty"]["qInfo"]["qId"] for child in container_children]
|
1964
|
+
# container_props["qChildren"] = container_children_ids
|
1965
|
+
#
|
1966
|
+
# # Concatenate the container metadata to the DataFrame structure
|
1967
|
+
# df_container_list.loc[len(df_container_list)] = container_props
|
1968
|
+
#
|
1969
|
+
#
|
1970
|
+
# # Resolve the dictionary structure of attribute "qInfo"
|
1971
|
+
# df_container_list_expanded = (df_container_list["qInfo"].dropna().apply(pd.Series).add_prefix("qInfo_"))
|
1972
|
+
# df_container_list = df_container_list.drop(columns=["qInfo"]).join(df_container_list_expanded)
|
1973
|
+
#
|
1974
|
+
# # Resolve the dictionary structure of attribute "qChildListDef"
|
1975
|
+
# df_container_list_expanded = (
|
1976
|
+
# df_container_list["qChildListDef"].dropna().apply(pd.Series).add_prefix("qChildListDef_"))
|
1977
|
+
# df_container_list = df_container_list.drop(columns=["qChildListDef"]).join(
|
1978
|
+
# df_container_list_expanded)
|
1979
|
+
#
|
1980
|
+
# # Resolve the dictionary structure of attribute "qChildListDef"
|
1981
|
+
# df_container_list_expanded = (
|
1982
|
+
# df_container_list["qChildListDef_qData"].dropna().apply(pd.Series).add_prefix("qChildListDef_qData_"))
|
1983
|
+
# df_container_list = df_container_list.drop(columns=["qChildListDef_qData"]).join(
|
1984
|
+
# df_container_list_expanded)
|
1985
|
+
#
|
1986
|
+
# return df_container_list
|
1987
|
+
#
|
1988
|
+
#
|
1989
|
+
# def get_app_filterpanes(self, app_handle):
|
1990
|
+
# """
|
1991
|
+
# Retrieves a list with all app filterpane metadata.
|
1992
|
+
#
|
1993
|
+
# Parameters:
|
1994
|
+
# app_handle (int): The handle of the app.
|
1995
|
+
#
|
1996
|
+
# Returns:
|
1997
|
+
# DataFrame: A table with all filterpane metadata from an app.
|
1998
|
+
# """
|
1999
|
+
#
|
2000
|
+
# # Define the DataFrame structure
|
2001
|
+
# df_filterpane_list = pd.DataFrame(
|
2002
|
+
# columns=["qInfo", "qExtendsId", "qMetaDef", "qStateName", "showTitles", "title", "subtitle", "footnote",
|
2003
|
+
# "disableNavMenu", "showDetails", "showDetailsExpression", "visualization", "version", "qChildren"])
|
2004
|
+
#
|
2005
|
+
# # Get filterpane object data
|
2006
|
+
# options = self.structs.options(types=["filterpane"])
|
2007
|
+
# filterpane_list = self.eaa.get_objects(app_handle=app_handle, options=options)
|
2008
|
+
#
|
2009
|
+
# for filterpane in filterpane_list:
|
2010
|
+
# # Get filterpane ID
|
2011
|
+
# filterpane_id = filterpane["qInfo"]["qId"]
|
2012
|
+
# # Get filterpane object
|
2013
|
+
# filterpane_obj = self.eaa.get_object(app_handle=app_handle, object_id=filterpane_id)
|
2014
|
+
# # Get filterpane handle
|
2015
|
+
# filterpane_handle = self.get_handle(filterpane_obj)
|
2016
|
+
# # Get filterpane full property tree
|
2017
|
+
# filterpane_full_property_tree = self.egoa.get_full_property_tree(handle=filterpane_handle)
|
2018
|
+
#
|
2019
|
+
# # Get filterpane properties
|
2020
|
+
# filterpane_props = filterpane_full_property_tree["qProperty"]
|
2021
|
+
# filterpane_children = filterpane_full_property_tree["qChildren"]
|
2022
|
+
# filterpane_children_ids = [child["qProperty"]["qInfo"]["qId"] for child in filterpane_children]
|
2023
|
+
# filterpane_props["qChildren"] = filterpane_children_ids
|
2024
|
+
#
|
2025
|
+
# # Concatenate the filterpane metadata to the DataFrame structure
|
2026
|
+
# df_filterpane_list.loc[len(df_filterpane_list)] = filterpane_props
|
2027
|
+
#
|
2028
|
+
#
|
2029
|
+
# # Resolve the dictionary structure of attribute "qInfo"
|
2030
|
+
# df_filterpane_list_expanded = (df_filterpane_list["qInfo"].dropna().apply(pd.Series).add_prefix("qInfo_"))
|
2031
|
+
# df_filterpane_list = df_filterpane_list.drop(columns=["qInfo"]).join(df_filterpane_list_expanded)
|
2032
|
+
#
|
2033
|
+
# return df_filterpane_list
|
2034
|
+
#
|
2035
|
+
#
|
2036
|
+
# def get_app_listboxes(self, app_handle):
|
2037
|
+
# """
|
2038
|
+
# Retrieves a list with all app listbox metadata.
|
2039
|
+
#
|
2040
|
+
# Parameters:
|
2041
|
+
# app_handle (int): The handle of the app.
|
2042
|
+
#
|
2043
|
+
# Returns:
|
2044
|
+
# DataFrame: A table with all listbox metadata from an app.
|
2045
|
+
# """
|
2046
|
+
#
|
2047
|
+
# # Define the DataFrame structure
|
2048
|
+
# df_listbox_list = pd.DataFrame(
|
2049
|
+
# columns=["qInfo", "qExtendsId", "qMetaDef", "qStateName", "qListObjectDef", "showTitles", "title", "subtitle", "footnote",
|
2050
|
+
# "disableNavMenu", "showDetails", "showDetailsExpression", "visualization", "qChildren"])
|
2051
|
+
#
|
2052
|
+
# # Get listbox object data
|
2053
|
+
# options = self.structs.options(types=["listbox"])
|
2054
|
+
# listbox_list = self.eaa.get_objects(app_handle=app_handle, options=options)
|
2055
|
+
#
|
2056
|
+
# for listbox in listbox_list:
|
2057
|
+
# # Get listbox ID
|
2058
|
+
# listbox_id = listbox["qInfo"]["qId"]
|
2059
|
+
# # Get listbox object
|
2060
|
+
# listbox_obj = self.eaa.get_object(app_handle=app_handle, object_id=listbox_id)
|
2061
|
+
# # Get listbox handle
|
2062
|
+
# listbox_handle = self.get_handle(listbox_obj)
|
2063
|
+
# # Get listbox full property tree
|
2064
|
+
# listbox_full_property_tree = self.egoa.get_full_property_tree(handle=listbox_handle)
|
2065
|
+
#
|
2066
|
+
# # Get listbox properties
|
2067
|
+
# listbox_props = listbox_full_property_tree["qProperty"]
|
2068
|
+
# listbox_children = listbox_full_property_tree["qChildren"]
|
2069
|
+
# listbox_children_ids = [child["qProperty"]["qInfo"]["qId"] for child in listbox_children]
|
2070
|
+
# listbox_props["qChildren"] = listbox_children_ids
|
2071
|
+
#
|
2072
|
+
# # Concatenate the listbox metadata to the DataFrame structure
|
2073
|
+
# df_listbox_list.loc[len(df_listbox_list)] = listbox_props
|
2074
|
+
#
|
2075
|
+
#
|
2076
|
+
# # Resolve the dictionary structure of attribute "qInfo"
|
2077
|
+
# df_listbox_list_expanded = (df_listbox_list["qInfo"].dropna().apply(pd.Series).add_prefix("qInfo_"))
|
2078
|
+
# df_listbox_list = df_listbox_list.drop(columns=["qInfo"]).join(df_listbox_list_expanded)
|
2079
|
+
#
|
2080
|
+
# # Resolve the dictionary structure of attribute "qListObjectDef"
|
2081
|
+
# df_listbox_list_expanded = (df_listbox_list["qListObjectDef"].dropna().apply(pd.Series).add_prefix("qListObjectDef_"))
|
2082
|
+
# df_listbox_list = df_listbox_list.drop(columns=["qListObjectDef"]).join(df_listbox_list_expanded)
|
2083
|
+
#
|
2084
|
+
# # Resolve the dictionary structure of attribute "qListObjectDef_qDef"
|
2085
|
+
# df_listbox_list_expanded = (
|
2086
|
+
# df_listbox_list["qListObjectDef_qDef"].dropna().apply(pd.Series).add_prefix("qListObjectDef_qDef_"))
|
2087
|
+
# df_listbox_list = df_listbox_list.drop(columns=["qListObjectDef_qDef"]).join(df_listbox_list_expanded)
|
2088
|
+
#
|
2089
|
+
# return df_listbox_list
|
2090
|
+
#
|
2091
|
+
#
|
2092
|
+
# def get_app_tables(self, app_handle):
|
2093
|
+
# """
|
2094
|
+
# Retrieves a list with all app table metadata.
|
2095
|
+
#
|
2096
|
+
# Parameters:
|
2097
|
+
# app_handle (int): The handle of the app.
|
2098
|
+
#
|
2099
|
+
# Returns:
|
2100
|
+
# DataFrame: A table with all table metadata from an app.
|
2101
|
+
# """
|
2102
|
+
#
|
2103
|
+
# # Define the DataFrame structure
|
2104
|
+
# df_table_list = pd.DataFrame(
|
2105
|
+
# columns=["qInfo", "qExtendsId", "qMetaDef", "qStateName", "qHyperCubeDef", "script", "filter", "search",
|
2106
|
+
# "showTitles", "title", "subtitle", "footnote", "disableNavMenu", "showDetails",
|
2107
|
+
# "showDetailsExpression", "totals", "scrolling", "multiline", "visualization", "qChildren",
|
2108
|
+
# "qEmbeddedSnapshotRef"])
|
2109
|
+
#
|
2110
|
+
# # Get table object data
|
2111
|
+
# options = self.structs.options(types=["table"])
|
2112
|
+
# table_list = self.eaa.get_objects(app_handle=app_handle, options=options)
|
2113
|
+
#
|
2114
|
+
# for table in table_list:
|
2115
|
+
# # Get table ID
|
2116
|
+
# table_id = table["qInfo"]["qId"]
|
2117
|
+
# # Get table object
|
2118
|
+
# table_obj = self.eaa.get_object(app_handle=app_handle, object_id=table_id)
|
2119
|
+
# # Get table handle
|
2120
|
+
# table_handle = self.get_handle(table_obj)
|
2121
|
+
# # Get table full property tree
|
2122
|
+
# table_full_property_tree = self.egoa.get_full_property_tree(handle=table_handle)
|
2123
|
+
#
|
2124
|
+
# # Get table properties
|
2125
|
+
# table_props = table_full_property_tree["qProperty"]
|
2126
|
+
# table_children = table_full_property_tree["qChildren"]
|
2127
|
+
# table_children_ids = [child["qProperty"]["qInfo"]["qId"] for child in table_children]
|
2128
|
+
# table_props["qChildren"] = table_children_ids
|
2129
|
+
#
|
2130
|
+
# # Concatenate the table metadata to the DataFrame structure
|
2131
|
+
# df_table_list.loc[len(df_table_list)] = table_props
|
2132
|
+
#
|
2133
|
+
#
|
2134
|
+
# # Resolve the dictionary structure of attribute "qInfo"
|
2135
|
+
# df_table_list_expanded = (df_table_list["qInfo"].dropna().apply(pd.Series).add_prefix("qInfo_"))
|
2136
|
+
# df_table_list = df_table_list.drop(columns=["qInfo"]).join(df_table_list_expanded)
|
2137
|
+
#
|
2138
|
+
# # Resolve the dictionary structure of attribute "qHyperCubeDef"
|
2139
|
+
# df_table_list_expanded = (df_table_list["qHyperCubeDef"].dropna().apply(pd.Series).add_prefix("qHyperCubeDef_"))
|
2140
|
+
# df_table_list = df_table_list.drop(columns=["qHyperCubeDef"]).join(df_table_list_expanded)
|
2141
|
+
#
|
2142
|
+
# # Resolve the dictionary structure of attribute "search"
|
2143
|
+
# df_table_list_expanded = (df_table_list["search"].dropna().apply(pd.Series).add_prefix("search_"))
|
2144
|
+
# df_table_list = df_table_list.drop(columns=["search"]).join(df_table_list_expanded)
|
2145
|
+
#
|
2146
|
+
# # Resolve the dictionary structure of attribute "totals"
|
2147
|
+
# df_table_list_expanded = (df_table_list["totals"].dropna().apply(pd.Series).add_prefix("totals_"))
|
2148
|
+
# df_table_list = df_table_list.drop(columns=["totals"]).join(df_table_list_expanded)
|
2149
|
+
#
|
2150
|
+
# # Resolve the dictionary structure of attribute "scrolling"
|
2151
|
+
# df_table_list_expanded = (df_table_list["scrolling"].dropna().apply(pd.Series).add_prefix("scrolling_"))
|
2152
|
+
# df_table_list = df_table_list.drop(columns=["scrolling"]).join(df_table_list_expanded)
|
2153
|
+
#
|
2154
|
+
# # Resolve the dictionary structure of attribute "multiline"
|
2155
|
+
# df_table_list_expanded = (df_table_list["multiline"].dropna().apply(pd.Series).add_prefix("multiline_"))
|
2156
|
+
# df_table_list = df_table_list.drop(columns=["multiline"]).join(df_table_list_expanded)
|
2157
|
+
#
|
2158
|
+
# return df_table_list
|
2159
|
+
#
|
2160
|
+
#
|
2161
|
+
# def get_app_pivot_tables(self, app_handle):
|
2162
|
+
# """
|
2163
|
+
# Retrieves a list with all app pivot table metadata.
|
2164
|
+
#
|
2165
|
+
# Parameters:
|
2166
|
+
# app_handle (int): The handle of the app.
|
2167
|
+
#
|
2168
|
+
# Returns:
|
2169
|
+
# DataFrame: A table with all pivot table metadata from an app.
|
2170
|
+
# """
|
2171
|
+
#
|
2172
|
+
# # Define the DataFrame structure
|
2173
|
+
# df_pivot_table_list = pd.DataFrame(
|
2174
|
+
# columns=["qInfo", "qExtendsId", "qMetaDef", "qStateName", "qHyperCubeDef", "search", "showTitles", "title",
|
2175
|
+
# "subtitle", "footnote", "disableNavMenu", "showDetails", "showDetailsExpression", "visualization",
|
2176
|
+
# "qLayoutExclude", "components", "containerChildId", "qChildren", "qEmbeddedSnapshotRef"])
|
2177
|
+
#
|
2178
|
+
# # Get table object data
|
2179
|
+
# options = self.structs.options(types=["pivot-table"])
|
2180
|
+
# pivot_table_list = self.eaa.get_objects(app_handle=app_handle, options=options)
|
2181
|
+
#
|
2182
|
+
# for pivot_table in pivot_table_list:
|
2183
|
+
# # Get table ID
|
2184
|
+
# pivot_table_id = pivot_table["qInfo"]["qId"]
|
2185
|
+
# # Get table object
|
2186
|
+
# pivot_table_obj = self.eaa.get_object(app_handle=app_handle, object_id=pivot_table_id)
|
2187
|
+
# # Get table handle
|
2188
|
+
# pivot_table_handle = self.get_handle(pivot_table_obj)
|
2189
|
+
# # Get table full property tree
|
2190
|
+
# pivot_table_full_property_tree = self.egoa.get_full_property_tree(handle=pivot_table_handle)
|
2191
|
+
#
|
2192
|
+
# # Get table properties
|
2193
|
+
# pivot_table_props = pivot_table_full_property_tree["qProperty"]
|
2194
|
+
# pivot_table_children = pivot_table_full_property_tree["qChildren"]
|
2195
|
+
# pivot_table_children_ids = [child["qProperty"]["qInfo"]["qId"] for child in pivot_table_children]
|
2196
|
+
# pivot_table_props["qChildren"] = pivot_table_children_ids
|
2197
|
+
#
|
2198
|
+
# # Concatenate the table metadata to the DataFrame structure
|
2199
|
+
# df_pivot_table_list.loc[len(df_pivot_table_list)] = pivot_table_props
|
2200
|
+
#
|
2201
|
+
#
|
2202
|
+
# # Resolve the dictionary structure of attribute "qInfo"
|
2203
|
+
# df_pivot_table_list_expanded = (df_pivot_table_list["qInfo"].dropna().apply(pd.Series).add_prefix("qInfo_"))
|
2204
|
+
# df_pivot_table_list = df_pivot_table_list.drop(columns=["qInfo"]).join(df_pivot_table_list_expanded)
|
2205
|
+
#
|
2206
|
+
# # Resolve the dictionary structure of attribute "qHyperCubeDef"
|
2207
|
+
# df_pivot_table_list_expanded = (df_pivot_table_list["qHyperCubeDef"].dropna().apply(pd.Series).add_prefix("qHyperCubeDef_"))
|
2208
|
+
# df_pivot_table_list = df_pivot_table_list.drop(columns=["qHyperCubeDef"]).join(df_pivot_table_list_expanded)
|
2209
|
+
#
|
2210
|
+
# # Resolve the dictionary structure of attribute "search"
|
2211
|
+
# df_pivot_table_list_expanded = (
|
2212
|
+
# df_pivot_table_list["search"].dropna().apply(pd.Series).add_prefix("search_"))
|
2213
|
+
# df_pivot_table_list = df_pivot_table_list.drop(columns=["search"]).join(df_pivot_table_list_expanded)
|
2214
|
+
#
|
2215
|
+
# # Resolve the dictionary structure of attribute "qLayoutExclude"
|
2216
|
+
# df_pivot_table_list_expanded = (
|
2217
|
+
# df_pivot_table_list["qLayoutExclude"].dropna().apply(pd.Series).add_prefix("qLayoutExclude_"))
|
2218
|
+
# df_pivot_table_list = df_pivot_table_list.drop(columns=["qLayoutExclude"]).join(df_pivot_table_list_expanded)
|
2219
|
+
#
|
2220
|
+
# return df_pivot_table_list
|
2221
|
+
#
|
2222
|
+
#
|
2223
|
+
# def get_app_straight_tables(self, app_handle):
|
2224
|
+
# """
|
2225
|
+
# Retrieves a list with all app straight table metadata.
|
2226
|
+
#
|
2227
|
+
# Parameters:
|
2228
|
+
# app_handle (int): The handle of the app.
|
2229
|
+
#
|
2230
|
+
# Returns:
|
2231
|
+
# DataFrame: A table with all straight table metadata from an app.
|
2232
|
+
# """
|
2233
|
+
#
|
2234
|
+
# # Define the DataFrame structure
|
2235
|
+
# df_straight_table_list = pd.DataFrame(
|
2236
|
+
# columns=["qInfo", "qExtendsId", "qMetaDef", "qStateName", "qHyperCubeDef", "showTitles", "title",
|
2237
|
+
# "subtitle", "footnote", "disableNavMenu", "showDetails", "showDetailsExpression", "components",
|
2238
|
+
# "totals", "usePagination", "enableChartExploration", "chartExploration", "visualization",
|
2239
|
+
# "version", "qLayoutExclude", "extensionMeta", "containerChildId", "insideContainer", "childRefId",
|
2240
|
+
# "nullValueRepresentation", "qChildren", "qEmbeddedSnapshotRef"])
|
2241
|
+
#
|
2242
|
+
# # Get table object data
|
2243
|
+
# options = self.structs.options(types=["sn-table"])
|
2244
|
+
# straight_table_list = self.eaa.get_objects(app_handle=app_handle, options=options)
|
2245
|
+
#
|
2246
|
+
# for straight_table in straight_table_list:
|
2247
|
+
# # Get table ID
|
2248
|
+
# straight_table_id = straight_table["qInfo"]["qId"]
|
2249
|
+
# # Get table object
|
2250
|
+
# straight_table_obj = self.eaa.get_object(app_handle=app_handle, object_id=straight_table_id)
|
2251
|
+
# # Get table handle
|
2252
|
+
# straight_table_handle = self.get_handle(straight_table_obj)
|
2253
|
+
# # Get table full property tree
|
2254
|
+
# straight_table_full_property_tree = self.egoa.get_full_property_tree(handle=straight_table_handle)
|
2255
|
+
#
|
2256
|
+
# # Get table properties
|
2257
|
+
# straight_table_props = straight_table_full_property_tree["qProperty"]
|
2258
|
+
# straight_table_children = straight_table_full_property_tree["qChildren"]
|
2259
|
+
# straight_table_children_ids = [child["qProperty"]["qInfo"]["qId"] for child in straight_table_children]
|
2260
|
+
# straight_table_props["qChildren"] = straight_table_children_ids
|
2261
|
+
#
|
2262
|
+
# # Concatenate the table metadata to the DataFrame structure
|
2263
|
+
# df_straight_table_list.loc[len(df_straight_table_list)] = straight_table_props
|
2264
|
+
#
|
2265
|
+
#
|
2266
|
+
# # Resolve the dictionary structure of attribute "qInfo"
|
2267
|
+
# df_straight_table_list_expanded = (df_straight_table_list["qInfo"].dropna().apply(pd.Series).add_prefix("qInfo_"))
|
2268
|
+
# df_straight_table_list = df_straight_table_list.drop(columns=["qInfo"]).join(df_straight_table_list_expanded)
|
2269
|
+
#
|
2270
|
+
# # Resolve the dictionary structure of attribute "qHyperCubeDef"
|
2271
|
+
# df_straight_table_list_expanded = (df_straight_table_list["qHyperCubeDef"].dropna().apply(pd.Series).add_prefix("qHyperCubeDef_"))
|
2272
|
+
# df_straight_table_list = df_straight_table_list.drop(columns=["qHyperCubeDef"]).join(df_straight_table_list_expanded)
|
2273
|
+
#
|
2274
|
+
# # Resolve the dictionary structure of attribute "footnote"
|
2275
|
+
# df_straight_table_list_expanded = (df_straight_table_list["footnote"].dropna().apply(pd.Series).add_prefix("footnote_"))
|
2276
|
+
# df_straight_table_list = df_straight_table_list.drop(columns=["footnote"]).join(df_straight_table_list_expanded)
|
2277
|
+
#
|
2278
|
+
# # Resolve the dictionary structure of attribute "totals"
|
2279
|
+
# df_straight_table_list_expanded = (
|
2280
|
+
# df_straight_table_list["totals"].dropna().apply(pd.Series).add_prefix("totals_"))
|
2281
|
+
# df_straight_table_list = df_straight_table_list.drop(columns=["totals"]).join(df_straight_table_list_expanded)
|
2282
|
+
#
|
2283
|
+
# # Resolve the dictionary structure of attribute "chartExploration"
|
2284
|
+
# df_straight_table_list_expanded = (
|
2285
|
+
# df_straight_table_list["chartExploration"].dropna().apply(pd.Series).add_prefix("chartExploration_"))
|
2286
|
+
# df_straight_table_list = df_straight_table_list.drop(columns=["chartExploration"]).join(df_straight_table_list_expanded)
|
2287
|
+
#
|
2288
|
+
# # Resolve the dictionary structure of attribute "qLayoutExclude"
|
2289
|
+
# df_straight_table_list_expanded = (df_straight_table_list["qLayoutExclude"].dropna().apply(pd.Series).add_prefix("qLayoutExclude_"))
|
2290
|
+
# df_straight_table_list = df_straight_table_list.drop(columns=["qLayoutExclude"]).join(df_straight_table_list_expanded)
|
2291
|
+
#
|
2292
|
+
# # Resolve the dictionary structure of attribute "extensionMeta"
|
2293
|
+
# df_straight_table_list_expanded = (
|
2294
|
+
# df_straight_table_list["extensionMeta"].dropna().apply(pd.Series).add_prefix("extensionMeta_"))
|
2295
|
+
# df_straight_table_list = df_straight_table_list.drop(columns=["extensionMeta"]).join(
|
2296
|
+
# df_straight_table_list_expanded)
|
2297
|
+
#
|
2298
|
+
# return df_straight_table_list
|
2299
|
+
#
|
2300
|
+
#
|
2301
|
+
# def get_app_new_pivot_tables(self, app_handle):
|
2302
|
+
# """
|
2303
|
+
# Retrieves a list with all app new pivot table metadata.
|
2304
|
+
#
|
2305
|
+
# Parameters:
|
2306
|
+
# app_handle (int): The handle of the app.
|
2307
|
+
#
|
2308
|
+
# Returns:
|
2309
|
+
# DataFrame: A table with all new pivot table metadata from an app.
|
2310
|
+
# """
|
2311
|
+
#
|
2312
|
+
# # Define the DataFrame structure
|
2313
|
+
# df_new_pivot_table_list = pd.DataFrame(
|
2314
|
+
# columns=["qInfo", "qExtendsId", "qMetaDef", "qStateName", "qHyperCubeDef", "search", "showTitles", "title",
|
2315
|
+
# "subtitle", "footnote", "disableNavMenu", "showDetails", "showDetailsExpression", "visualization",
|
2316
|
+
# "qLayoutExclude", "components", "nullValueRepresentation", "version", "extensionMeta",
|
2317
|
+
# "containerChildId", "qChildren", "qEmbeddedSnapshotRef"])
|
2318
|
+
#
|
2319
|
+
# # Get table object data
|
2320
|
+
# options = self.structs.options(types=["sn-pivot-table"])
|
2321
|
+
# new_pivot_table_list = self.eaa.get_objects(app_handle=app_handle, options=options)
|
2322
|
+
#
|
2323
|
+
# for new_pivot_table in new_pivot_table_list:
|
2324
|
+
# # Get table ID
|
2325
|
+
# new_pivot_table_id = new_pivot_table["qInfo"]["qId"]
|
2326
|
+
# # Get table object
|
2327
|
+
# new_pivot_table_obj = self.eaa.get_object(app_handle=app_handle, object_id=new_pivot_table_id)
|
2328
|
+
# # Get table handle
|
2329
|
+
# new_pivot_table_handle = self.get_handle(new_pivot_table_obj)
|
2330
|
+
# # Get table full property tree
|
2331
|
+
# new_pivot_table_full_property_tree = self.egoa.get_full_property_tree(handle=new_pivot_table_handle)
|
2332
|
+
#
|
2333
|
+
# # Get table properties
|
2334
|
+
# new_pivot_table_props = new_pivot_table_full_property_tree["qProperty"]
|
2335
|
+
# new_pivot_table_children = new_pivot_table_full_property_tree["qChildren"]
|
2336
|
+
# new_pivot_table_children_ids = [child["qProperty"]["qInfo"]["qId"] for child in new_pivot_table_children]
|
2337
|
+
# new_pivot_table_props["qChildren"] = new_pivot_table_children_ids
|
2338
|
+
#
|
2339
|
+
# # Concatenate the table metadata to the DataFrame structure
|
2340
|
+
# df_new_pivot_table_list.loc[len(df_new_pivot_table_list)] = new_pivot_table_props
|
2341
|
+
#
|
2342
|
+
#
|
2343
|
+
# # Resolve the dictionary structure of attribute "qInfo"
|
2344
|
+
# df_new_pivot_table_list_expanded = (df_new_pivot_table_list["qInfo"].dropna().apply(pd.Series).add_prefix("qInfo_"))
|
2345
|
+
# df_new_pivot_table_list = df_new_pivot_table_list.drop(columns=["qInfo"]).join(df_new_pivot_table_list_expanded)
|
2346
|
+
#
|
2347
|
+
# # Resolve the dictionary structure of attribute "qHyperCubeDef"
|
2348
|
+
# df_new_pivot_table_list_expanded = (
|
2349
|
+
# df_new_pivot_table_list["qHyperCubeDef"].dropna().apply(pd.Series).add_prefix("qHyperCubeDef_"))
|
2350
|
+
# df_new_pivot_table_list = df_new_pivot_table_list.drop(columns=["qHyperCubeDef"]).join(df_new_pivot_table_list_expanded)
|
2351
|
+
#
|
2352
|
+
# # Resolve the dictionary structure of attribute "footnote"
|
2353
|
+
# df_new_pivot_table_list_expanded = (
|
2354
|
+
# df_new_pivot_table_list["footnote"].dropna().apply(pd.Series).add_prefix("footnote_"))
|
2355
|
+
# df_new_pivot_table_list = df_new_pivot_table_list.drop(columns=["footnote"]).join(
|
2356
|
+
# df_new_pivot_table_list_expanded)
|
2357
|
+
#
|
2358
|
+
# # Resolve the dictionary structure of attribute "footnote_qStringExpression"
|
2359
|
+
# df_new_pivot_table_list_expanded = (
|
2360
|
+
# df_new_pivot_table_list["footnote_qStringExpression"].dropna().apply(pd.Series).add_prefix("footnote_qStringExpression_"))
|
2361
|
+
# df_new_pivot_table_list = df_new_pivot_table_list.drop(columns=["footnote_qStringExpression"]).join(
|
2362
|
+
# df_new_pivot_table_list_expanded)
|
2363
|
+
#
|
2364
|
+
# # Resolve the dictionary structure of attribute "qLayoutExclude"
|
2365
|
+
# df_new_pivot_table_list_expanded = (
|
2366
|
+
# df_new_pivot_table_list["qLayoutExclude"].dropna().apply(pd.Series).add_prefix(
|
2367
|
+
# "qLayoutExclude_"))
|
2368
|
+
# df_new_pivot_table_list = df_new_pivot_table_list.drop(columns=["qLayoutExclude"]).join(
|
2369
|
+
# df_new_pivot_table_list_expanded)
|
2370
|
+
#
|
2371
|
+
# # Resolve the dictionary structure of attribute "nullValueRepresentation"
|
2372
|
+
# df_new_pivot_table_list_expanded = (
|
2373
|
+
# df_new_pivot_table_list["nullValueRepresentation"].dropna().apply(pd.Series).add_prefix(
|
2374
|
+
# "nullValueRepresentation_"))
|
2375
|
+
# df_new_pivot_table_list = df_new_pivot_table_list.drop(columns=["nullValueRepresentation"]).join(
|
2376
|
+
# df_new_pivot_table_list_expanded)
|
2377
|
+
#
|
2378
|
+
# # Resolve the dictionary structure of attribute "extensionMeta"
|
2379
|
+
# df_new_pivot_table_list_expanded = (
|
2380
|
+
# df_new_pivot_table_list["extensionMeta"].dropna().apply(pd.Series).add_prefix(
|
2381
|
+
# "extensionMeta_"))
|
2382
|
+
# df_new_pivot_table_list = df_new_pivot_table_list.drop(columns=["extensionMeta"]).join(
|
2383
|
+
# df_new_pivot_table_list_expanded)
|
2384
|
+
#
|
2385
|
+
# return df_new_pivot_table_list
|
2386
|
+
|
2387
|
+
|
1141
2388
|
def get_app_variables(self, app_handle):
|
1142
2389
|
"""
|
1143
2390
|
Retrieves a list with all app variables containing metadata.
|