Skip to content

Commit 8264ede

Browse files
author
Roman Hartig
committed
XSH-837: Allow returning local ids of header labels
1 parent e4e36d7 commit 8264ede

2 files changed

Lines changed: 41 additions & 12 deletions

File tree

gooddata-pandas/gooddata_pandas/dataframe.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,7 @@ def for_exec_result_id(
305305
result_cache_metadata: Optional[ResultCacheMetadata] = None,
306306
result_size_dimensions_limits: ResultSizeDimensions = (),
307307
result_size_bytes_limit: Optional[int] = None,
308+
use_local_ids_in_headers: bool = False,
308309
) -> pandas.DataFrame:
309310
"""
310311
Creates a data frame using an execution result's metadata identified by result_id. The data frame will respect
@@ -335,6 +336,7 @@ def for_exec_result_id(
335336
:param result_cache_metadata: Metadata for the corresponding exec result. Optional.
336337
:param result_size_dimensions_limits: A tuple containing maximum size of result dimensions. Optional.
337338
:param result_size_bytes_limits: Maximum size of result in bytes. Optional.
339+
:param use_local_ids_in_headers: Use local identifiers of header attributes and metrics. Optional.
338340
339341
:return: a new dataframe
340342
"""
@@ -356,4 +358,5 @@ def for_exec_result_id(
356358
label_overrides=label_overrides,
357359
result_size_dimensions_limits=result_size_dimensions_limits,
358360
result_size_bytes_limit=result_size_bytes_limit,
361+
use_local_ids_in_headers=use_local_ids_in_headers,
359362
)

gooddata-pandas/gooddata_pandas/result_convertor.py

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -197,14 +197,19 @@ def _read_complete_execution_result(
197197

198198

199199
def _create_header_mapper(
200-
response: BareExecutionResponse, dim: int, label_overrides: Optional[LabelOverrides] = None
200+
response: BareExecutionResponse,
201+
dim: int,
202+
label_overrides: Optional[LabelOverrides] = None,
203+
use_local_ids_in_headers: bool = False,
201204
) -> Callable[[Any, Optional[int]], str]:
202205
"""
203206
Prepares header mapper function which is doing header structures translations into appropriate label used
204207
in a dataframe
205208
:param response: Response structure to gather dimension header details
206209
:param dim: dimension id
207210
:param label_overrides: label overrides
211+
:param use_local_ids_in_headers: Use local identifiers of header attributes and metrics. Optional.
212+
208213
:return: Mapper function
209214
"""
210215
if label_overrides is None:
@@ -223,20 +228,26 @@ def _mapper(header: Any, header_idx: Optional[int]) -> str:
223228
label = header["attributeHeader"]["labelValue"]
224229
elif "labelName" in header["attributeHeader"]:
225230
attr_local_id = header["attributeHeader"]["localIdentifier"]
226-
if attr_local_id in attribute_labels:
227-
label = attribute_labels[attr_local_id]["title"]
231+
if use_local_ids_in_headers:
232+
label = attr_local_id
228233
else:
229-
label = header["attributeHeader"]["labelName"]
234+
if attr_local_id in attribute_labels:
235+
label = attribute_labels[attr_local_id]["title"]
236+
else:
237+
label = header["attributeHeader"]["labelName"]
230238
elif "measureHeader" in header and header_idx is not None:
231239
measure_idx = header["measureHeader"]["measureIndex"]
232240
measure_descriptor = dim_descriptor["headers"][header_idx]["measureGroupHeaders"][measure_idx]
233241

234-
if measure_descriptor["localIdentifier"] in measure_labels:
235-
label = measure_labels[measure_descriptor["localIdentifier"]]["title"]
236-
elif "name" in measure_descriptor:
237-
label = measure_descriptor["name"]
238-
else:
242+
if use_local_ids_in_headers:
239243
label = measure_descriptor["localIdentifier"]
244+
else:
245+
if measure_descriptor["localIdentifier"] in measure_labels:
246+
label = measure_labels[measure_descriptor["localIdentifier"]]["title"]
247+
elif "name" in measure_descriptor:
248+
label = measure_descriptor["name"]
249+
else:
250+
label = measure_descriptor["localIdentifier"]
240251
elif "totalHeader" in header:
241252
label = header["totalHeader"]["function"]
242253
return label
@@ -249,11 +260,17 @@ def _headers_to_index(
249260
headers: Tuple[_DataHeaders, Optional[_DataHeaders]],
250261
response: BareExecutionResponse,
251262
label_overrides: LabelOverrides,
263+
use_local_ids_in_headers: bool = False,
252264
) -> Optional[pandas.Index]:
253265
if len(response.dimensions) <= dim_idx or not len(response.dimensions[dim_idx]["headers"]):
254266
return None
255267

256-
mapper = _create_header_mapper(response=response, dim=dim_idx, label_overrides=label_overrides)
268+
mapper = _create_header_mapper(
269+
response=response,
270+
dim=dim_idx,
271+
label_overrides=label_overrides,
272+
use_local_ids_in_headers=use_local_ids_in_headers,
273+
)
257274

258275
return pandas.MultiIndex.from_arrays(
259276
[
@@ -309,6 +326,7 @@ def convert_execution_response_to_dataframe(
309326
label_overrides: LabelOverrides,
310327
result_size_dimensions_limits: ResultSizeDimensions,
311328
result_size_bytes_limit: Optional[int] = None,
329+
use_local_ids_in_headers: bool = False,
312330
) -> pandas.DataFrame:
313331
"""
314332
Converts execution result to a pandas dataframe, maintaining the dimensionality of the result.
@@ -332,9 +350,17 @@ def convert_execution_response_to_dataframe(
332350
return pandas.DataFrame(
333351
data=full_data,
334352
index=_headers_to_index(
335-
dim_idx=0, headers=full_headers, response=execution_response, label_overrides=label_overrides
353+
dim_idx=0,
354+
headers=full_headers,
355+
response=execution_response,
356+
label_overrides=label_overrides,
357+
use_local_ids_in_headers=use_local_ids_in_headers,
336358
),
337359
columns=_headers_to_index(
338-
dim_idx=1, headers=full_headers, response=execution_response, label_overrides=label_overrides
360+
dim_idx=1,
361+
headers=full_headers,
362+
response=execution_response,
363+
label_overrides=label_overrides,
364+
use_local_ids_in_headers=use_local_ids_in_headers,
339365
),
340366
)

0 commit comments

Comments
 (0)