qe-api-client 2.9.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.
@@ -134,6 +134,27 @@ class EngineAppApi:
134
134
  except KeyError:
135
135
  return response['error']
136
136
 
137
+
138
+ def get_objects(self, app_handle: int, options: dict):
139
+ """
140
+ Retrieves a specific object from the app identified by the document handle.
141
+
142
+ Parameters:
143
+ app_handle (int): The handle identifying the app document.
144
+ object_id (str): The ID of the object to retrieve.
145
+
146
+ Returns:
147
+ dict: The retrieved object (qReturn). In case of an error, returns the error information.
148
+ """
149
+ msg = json.dumps({"jsonrpc": "2.0", "id": 0, "handle": app_handle, "method": "GetObjects",
150
+ "params": {"qOptions": options}})
151
+ response = json.loads(self.engine_socket.send_call(self.engine_socket, msg))
152
+ try:
153
+ return response["result"]["qList"]
154
+ except KeyError:
155
+ return response["error"]
156
+
157
+
137
158
  def get_field(self, doc_handle: int, field_name, state_name=""):
138
159
  """
139
160
  Retrieves a specific field from the app identified by the document handle.
@@ -364,9 +385,9 @@ class EngineAppApi:
364
385
  # ### Example: The variable x contains the text string Sum(Sales). In a chart, you define the expression $(x)/12. # NOQA
365
386
  # The effect is exactly the same as having the chart expression Sum(Sales)/12. However, if you change the value of the variable x to Sum(Budget), # NOQA
366
387
  # the data in the chart are immediately recalculated with the expression interpreted as Sum(Budget)/12. # NOQA
367
- def create_session_variable(self, doc_handle: int, var_id="", var_name="", var_comment="", var_def=""):
388
+ def create_session_variable(self, app_handle: int, var_id="", var_name="", var_comment="", var_def=""):
368
389
  msg = json.dumps(
369
- {"jsonrpc": "2.0", "id": 0, "handle": doc_handle,
390
+ {"jsonrpc": "2.0", "id": 0, "handle": app_handle,
370
391
  "method": "CreateSessionVariable", "params": [{
371
392
  "qInfo": {
372
393
  "qId": var_id,
@@ -393,8 +414,8 @@ class EngineAppApi:
393
414
  # The effect is exactly the same as having the chart expression Sum(Sales)/12. # NOQA
394
415
  # However, if you change the value of the variable x to Sum(Budget),
395
416
  # the data in the chart are immediately recalculated with the expression interpreted as Sum(Budget)/12. # NOQA
396
- def create_variable(self, doc_handle: int, var_id="", var_name="", var_comment="", var_def=""):
397
- msg = json.dumps({"jsonrpc": "2.0", "id": 0, "handle": doc_handle,
417
+ def create_variable(self, app_handle: int, var_id="", var_name="", var_comment="", var_def=""):
418
+ msg = json.dumps({"jsonrpc": "2.0", "id": 0, "handle": app_handle,
398
419
  "method": "CreateVariable", "params": [{
399
420
  "qInfo": {
400
421
  "qId": var_id,
@@ -446,8 +467,8 @@ class EngineAppApi:
446
467
 
447
468
  # Evaluate method: Evaluates an expression as a string. (Actually uses EvaluateEx, which is better for giving the data type back to python) # NOQA
448
469
  # Parameters: qExpression
449
- def expr_eval(self, doc_handle: int, expr):
450
- msg = json.dumps({"jsonrpc": "2.0", "id": 0, "handle": doc_handle, "method": "EvaluateEx",
470
+ def expr_eval(self, app_handle: int, expr):
471
+ msg = json.dumps({"jsonrpc": "2.0", "id": 0, "handle": app_handle, "method": "EvaluateEx",
451
472
  "params": {"qExpression": expr}})
452
473
  response = json.loads(self.engine_socket.send_call(self.engine_socket, msg))
453
474
  try:
@@ -456,8 +477,8 @@ class EngineAppApi:
456
477
  return response['error']
457
478
 
458
479
  # GetAllInfos method: Get the identifier and the type of any generic object in an app by using the GetAllInfos method. # NOQA
459
- def get_all_infos(self, doc_handle: int):
460
- msg = json.dumps({"jsonrpc": "2.0", "id": 0, "handle": doc_handle, "method": "GetAllInfos", "params": []})
480
+ def get_all_infos(self, app_handle: int):
481
+ msg = json.dumps({"jsonrpc": "2.0", "id": 0, "handle": app_handle, "method": "GetAllInfos", "params": []})
461
482
  response = json.loads(self.engine_socket.send_call(self.engine_socket, msg))
462
483
  try:
463
484
  return response['result']['qInfos']
qe_api_client/engine.py CHANGED
@@ -454,7 +454,7 @@ class QixEngine:
454
454
 
455
455
 
456
456
  def create_snapshot(self, app_handle: int, object_id: str, snapshot_title: str = "", snapshot_description: str = "",
457
- object_width: float = 1280, object_height: float = 720, bounding_client_width: float = 1280,
457
+ show_titles: bool = True, object_width: float = 1280, object_height: float = 720, bounding_client_width: float = 1280,
458
458
  bounding_client_height: float = 720, rtl: bool = False, parent_width: float = 1280, parent_height: float = 720,
459
459
  content_width: float = 1280, content_height: float = 720, chart_data_scroll_offset_start: int = 0,
460
460
  chart_data_scroll_offset_end: int = 53, chart_data_legend_scroll_offset: int = 0, chart_data_zoom_min = 0,
@@ -467,6 +467,7 @@ class QixEngine:
467
467
  object_id (str): The id of the object.
468
468
  snapshot_title (str): The title of the snapshot.
469
469
  snapshot_description (str): The description of the snapshot.
470
+ show_titles (bool): Enables / disables chart title.
470
471
  object_width (float): The width of the snapshot object.
471
472
  object_height (float): The height of the snapshot object.
472
473
  bounding_client_width (float): The width of the bounding client.
@@ -500,6 +501,9 @@ class QixEngine:
500
501
  # Attribut "qInfo" changed
501
502
  chart_obj_layout["qInfo"] = {"qType": "snapshot"}
502
503
 
504
+ # Attribut "showTitles" changed
505
+ chart_obj_layout["showTitles"] = show_titles
506
+
503
507
  # Attribut "qMetaDef" added
504
508
  chart_obj_layout["qMetaDef"] = {"title": snapshot_title, "description": snapshot_description}
505
509
 
@@ -532,7 +536,57 @@ class QixEngine:
532
536
  chart_obj_layout["qIncludeVariables"] = True
533
537
 
534
538
  # Build the special snapshot parameters for the different chart types.
535
- if visualization in ["sn-table", "pivot-table"]:
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"]:
536
590
  # Attribut "snapshotData" added
537
591
  chart_obj_layout["snapshotData"] = {
538
592
  "object": {
@@ -544,6 +598,15 @@ class QixEngine:
544
598
  }
545
599
  },
546
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
+ },
547
610
  "parent": {
548
611
  "h": parent_height,
549
612
  "w": parent_width
@@ -1378,6 +1441,950 @@ class QixEngine:
1378
1441
  return df_sheet_list
1379
1442
 
1380
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
+
1381
2388
  def get_app_variables(self, app_handle):
1382
2389
  """
1383
2390
  Retrieves a list with all app variables containing metadata.
qe_api_client/structs.py CHANGED
@@ -664,3 +664,13 @@ def nx_get_bookmark_options(types: list, data: dict = None):
664
664
  return {
665
665
  "qTypes": types, "qData": data
666
666
  }
667
+
668
+
669
+ def options(types: list, include_session_objects: bool = False, data: dict = None):
670
+ if data is None:
671
+ data = {}
672
+ return {
673
+ "qTypes": types,
674
+ "qIncludeSessionObjects": include_session_objects,
675
+ "qData": data
676
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qe-api-client
3
- Version: 2.9.0
3
+ Version: 3.0.0
4
4
  Summary: Python client for the Qlik Engine JSON API
5
5
  Home-page: https://github.com/lr-bicc/qe-api-client
6
6
  Author: Rumen Vasilev
@@ -1,17 +1,17 @@
1
1
  qe_api_client/__init__.py,sha256=bypB4CIjpHtf5Pu_NwtJajC69zqQD7qB9jo8cCX0B54,23
2
- qe_api_client/engine.py,sha256=ErLb7KXpnH6UC7jNvZWdkW2_aeW7GCmvH8IzTcCDj0Q,68103
2
+ qe_api_client/engine.py,sha256=fgiJfVtCqHi1ui-AQRaXxLd9RYkCK0rJmsHaXy4PoPE,120634
3
3
  qe_api_client/engine_communicator.py,sha256=q6x7ix2Ev8yGmTTm7cf1vHcidOihKM0HjDXeJ-dZYjk,1133
4
- qe_api_client/structs.py,sha256=iZRy54jDyAk8ZD4rtrKxefnBcXcB1aRE0oxpOxoYcDM,28078
4
+ qe_api_client/structs.py,sha256=uk82M1neq9svTw-XVEJzwGxDxeALueGAcp1fG-LjTTA,28327
5
5
  qe_api_client/api_classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- qe_api_client/api_classes/engine_app_api.py,sha256=umVY3jtNyk4am_9XH1yAbng2BRGAF-sg_JSssbXcF5M,39962
6
+ qe_api_client/api_classes/engine_app_api.py,sha256=brTmeUs2o2J8QP2BmGdI4kLP_MVGUZVoB4PPkwAJyec,40773
7
7
  qe_api_client/api_classes/engine_field_api.py,sha256=zCLIR7rmxqwIrJYK_-uHVEhMvBcEP2qofuX8ZPygqCA,5479
8
8
  qe_api_client/api_classes/engine_generic_dimension_api.py,sha256=oSZoRT-j4hsCVnUm1OSg7XZPWXhUzFLY_53kM0KwPHs,2122
9
9
  qe_api_client/api_classes/engine_generic_measure_api.py,sha256=uj4i_ykX9F9Dtk78fOidMBhzSP8vEucEfrB6MrLwgPI,1340
10
10
  qe_api_client/api_classes/engine_generic_object_api.py,sha256=_69Pf-Tp5vRB_LX76uQr8x03DstS_OOBVVw8h-9nwlA,12345
11
11
  qe_api_client/api_classes/engine_generic_variable_api.py,sha256=sWXZpE-GLfcMijmfORnDNrJ6lmXX3x5TRHlkEu_i0BQ,2027
12
12
  qe_api_client/api_classes/engine_global_api.py,sha256=G6QQHI36WOo7W25zg4Uz__gMSLC2ptNTvbBdElPzgZI,27535
13
- qe_api_client-2.9.0.dist-info/licenses/LICENSE,sha256=2bm9uFabQZ3Ykb_SaSU_uUbAj2-htc6WJQmS_65qD00,1073
14
- qe_api_client-2.9.0.dist-info/METADATA,sha256=g4aMmiMpkgRMvNe60MHsywPsl1dT8FLmmvH-VorJ9Wk,2437
15
- qe_api_client-2.9.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
16
- qe_api_client-2.9.0.dist-info/top_level.txt,sha256=m_43YagP8UtZgJHmZEfu0vlBNwt36M01-Qby2jByMnk,14
17
- qe_api_client-2.9.0.dist-info/RECORD,,
13
+ qe_api_client-3.0.0.dist-info/licenses/LICENSE,sha256=2bm9uFabQZ3Ykb_SaSU_uUbAj2-htc6WJQmS_65qD00,1073
14
+ qe_api_client-3.0.0.dist-info/METADATA,sha256=_r4JQhzHNd-VmHfuc-wFziIySkZ9Rez7qsoA16KvsZo,2437
15
+ qe_api_client-3.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
16
+ qe_api_client-3.0.0.dist-info/top_level.txt,sha256=m_43YagP8UtZgJHmZEfu0vlBNwt36M01-Qby2jByMnk,14
17
+ qe_api_client-3.0.0.dist-info/RECORD,,