def getDataFrame(connection, appHandle, measures, dimensions, selections={}):
    engineGlobalApi = EngineGlobalApi(connection)
    # Define Dimensions of hypercube
    hc_inline_dim = Structs.nx_inline_dimension_def(dimensions)

    # Set sorting of Dimension by Measure
    hc_mes_sort = Structs.nx_sort_by()

    # Define Measure of hypercube
    hc_inline_mes = Structs.nx_inline_measure_def(measures)

    # Build hypercube from above definition
    hc_dim = Structs.nx_hypercube_dimensions(hc_inline_dim)
    hc_mes = Structs.nx_hypercube_measure(hc_mes_sort, hc_inline_mes)

    width = len(measures) + len(dimensions)
    height = int(math.floor(10000 / width))
    nx_page = Structs.nx_page(0, 0, height, width)
    hc_def = Structs.hypercube_def("$", hc_dim, hc_mes, [nx_page])

    engineAppApi = EngineAppApi(connection)
    hc_response = engineAppApi.create_object(appHandle, "CH01", "Chart",
                                             "qHyperCubeDef", hc_def)  # NOQA
    hc_handle = engineGlobalApi.get_handle(hc_response)

    engineGenericObjectApi = EngineGenericObjectApi(connection)

    engineFieldApi = EngineFieldApi(connection)

    for field in selections.keys():
        fieldHandle = engineGlobalApi.get_handle(
            engineAppApi.get_field(appHandle, field))  # NOQA
        values = []
        for selectedValue in selections[field]:
            values.append({'qText': selectedValue})

        engineFieldApi.select_values(fieldHandle, values)

    i = 0
    while i % height == 0:
        nx_page = Structs.nx_page(i, 0, height, width)
        hc_data = engineGenericObjectApi.get_hypercube_data(
            hc_handle, "/qHyperCubeDef", [nx_page])  # NOQA
        elems = hc_data["qDataPages"][0]['qMatrix']

        df = pd.DataFrame()

        for elem in elems:
            j = 0
            for dim in dimensions:
                df.set_value(i, dim, elem[j]["qText"])
                j += 1
            for meas in measures:
                df.set_value(i, meas, elem[j]["qNum"])
                j += 1

            i += 1

    return df
class TestFieldApi(unittest.TestCase):

    def setUp(self):
        url = 'ws://localhost:4848/app'
        self.conn = EngineCommunicator(url)
        self.ega = EngineGlobalApi(self.conn)
        self.eaa = EngineAppApi(self.conn)
        self.egoa = EngineGenericObjectApi(self.conn)
        self.efa = EngineFieldApi(self.conn)
        self.struct = Structs()
        self.app = self.ega.create_app("TestApp")["qAppId"]
        opened_app = self.ega.open_doc(self.app)
        self.app_handle = self.ega.get_handle(opened_app['qReturn'])
        with open('./test/test_data/ctrl00_script.qvs') as f:
            script = f.read()
        self.eaa.set_script(self.app_handle, script)
        self.eaa.do_reload_ex(self.app_handle)
        nx_page_initial = Structs.nx_page(0, 0, 26, 1)
        self.lb_def = Structs.list_object_def("$", "",
                                              ["Alpha"],
                                              None,
                                              None,
                                              [nx_page_initial])
        self.lb_param = {"qInfo": {"qId": "SLB01", "qType": "ListObject"},
                         "qListObjectDef": self.lb_def}
        self.lb_sobject = self.eaa.create_session_object(self.app_handle,
                                                         self.lb_param)
        self.lb_handle = self.ega.get_handle(self.lb_sobject["qReturn"])
        self.egoa.get_layout(self.lb_handle)
        self.lb_field = self.eaa.get_field(self.app_handle, "Alpha")
        self.fld_handle = self.ega.get_handle(self.lb_field["qReturn"])

    def test_select_values(self):
        values_to_select = [{'qText': 'A'}, {'qText': 'B'}, {'qText': 'C'}]
        sel_res = self.efa.select_values(self.fld_handle, values_to_select)
        self.assertTrue(sel_res["qReturn"] is True,
                        "Failed to perform selection")
        val_mtrx = self.egoa.get_layout(self.lb_handle)["qLayout"]["qListObject"]["qDataPages"][0]["qMatrix"]  # NOQA
        self.assertEqual(val_mtrx[0][0]["qState"],
                         "S",
                         "Failed to select first value")
        self.assertEqual(val_mtrx[4][0]["qState"],
                         "X",
                         "Failed to exclude fifth value")
        self.eaa.clear_all(self.app_handle)
        val_mtrx = self.egoa.get_layout(self.lb_handle)["qLayout"]["qListObject"]["qDataPages"][0]["qMatrix"]  # NOQA
        self.assertEqual(val_mtrx[0][0]["qState"],
                         "O",
                         "Failed to clear selection")
        self.assertEqual(val_mtrx[4][0]["qState"],
                         "O",
                         "Failed to clear selection")

    def tearDown(self):
        self.ega.delete_app(self.app)
        self.conn.close_qvengine_connection(self.conn)
Exemple #3
0
hc_inline_mes = Structs.nx_inline_measure_def(["=Sum([Sales Amount])", "=Sum([Sales Quantity])"])

### Build hypercube from above definition
hc_dim = Structs.nx_hypercube_dimensions(hc_inline_dim)
hc_mes = Structs.nx_hypercube_measure(hc_mes_sort, hc_inline_mes)
nx_page = Structs.nx_page(0, 0, 2500, 4)
hc_def = Structs.hypercube_def("$", hc_dim, hc_mes, [nx_page])
hc_response = eaa.create_object(app_handle, "CH01", "Chart", "qHyperCubeDef", hc_def)
hc_handle = ega.get_handle(hc_response)
print hc_response

### Get contents of the hypercube
egoa.get_layout(hc_handle)

### Identify field to make selection on
lb_field = eaa.get_field(app_handle, "Customer")
fld_handle = ega.get_handle(lb_field)

### Set values to select in chosen field above
values_to_select = [{'qText': 'Fins'}, {'qText': 'Bizmarts'}, {'qText': 'Benedict'}, {'qText': 'Earth'}, {'qText': 'Gate'}]
sel_res = efa.select_values(fld_handle,values_to_select)
#desel_res = eaa.clear_all(app_handle);

### Retrieve newly selected data in hypercube
hc_data = egoa.get_hypercube_data(hc_handle, "/qHyperCubeDef", [nx_page])

elems = hc_data["qDataPages"][0]['qMatrix']

print(elems)

dim1_list = []