gooddata-pandas 1.63.1.dev4__tar.gz → 1.64.1.dev1__tar.gz
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.
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/PKG-INFO +3 -3
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/pyproject.toml +3 -3
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/arrow_convertor.py +96 -16
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/arrow_types.py +4 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/data_access.py +26 -9
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/dataframe.py +4 -2
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/manifest.json +85 -15
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/test_dataframe_for_exec_def_arrow.py +577 -9
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/.gitignore +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/.readthedocs.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/LICENSE.txt +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/MANIFEST.in +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/Makefile +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/README.md +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/_static/empty_file +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/_templates/class-template.rst +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/_templates/module-template.rst +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/api.rst +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/conf.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/examples.rst +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/index.rst +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/installation.rst +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/requirements.txt +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/__init__.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/_version.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/good_pandas.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/py.typed +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/result_convertor.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/series.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/utils.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/__init__.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/conftest.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/__init__.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/conftest.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_c/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_c/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_c/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_cs/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_cs/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_cs/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_csy/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_csy/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_csy/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_cm/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_cm/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_cm/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_csm/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_csm/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_csm/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_csym/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_csym/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_csym/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_m/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_m/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_m/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rc_m/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rc_m/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rc_m/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rcs_m/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rcs_m/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rcs_m/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rcs_ym/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rcs_ym/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rcs_ym/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rs_cm/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rs_cm/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rs_cm/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rs_cym/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rs_cym/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rs_cym/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/flat_attrs_and_metrics/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/flat_attrs_and_metrics/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/flat_attrs_and_metrics/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/metrics_only/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/metrics_only/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/metrics_only/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/single_metric_many_rows/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/single_metric_many_rows/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/single_metric_many_rows/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_grand/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_grand/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_grand/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_sub/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_sub/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_sub/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_sub_grand/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_sub_grand/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_sub_grand/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0grand_d1grand/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0grand_d1grand/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0grand_d1grand/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0grand_d1sub/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0grand_d1sub/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0grand_d1sub/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0sub_d1sub/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0sub_d1sub/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0sub_d1sub/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_grand/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_grand/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_grand/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_sub/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_sub/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_sub/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_sub_grand/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_sub_grand/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_sub_grand/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_both_dims/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_both_dims/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_both_dims/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_col_sum/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_col_sum/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_col_sum/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_col_two_row_labels/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_col_two_row_labels/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_col_two_row_labels/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_row_sum/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_row_sum/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_row_sum/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_multi_agg/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_multi_agg/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_multi_agg/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_subtotal_col/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_subtotal_col/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_subtotal_col/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_subtotal_row/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_subtotal_row/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_subtotal_row/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/dataframe.parquet +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/meta.json +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/result.arrow +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_bytes_limits_failure.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_dimensions_limits_failure.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim1.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim2.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_totals1.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_totals2.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_totals3.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_totals4.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim1.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim2.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim3.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_items.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_items_no_index.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_visualization.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_visualization_date.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_visualization_no_index.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/empty_indexed_dataframe.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/empty_not_indexed_dataframe.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/filtered_empty_df.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label_reuse.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/multi_index_metrics.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/multi_index_metrics_and_label.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/not_indexed_filtered_metrics_and_labels.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/not_indexed_metrics.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/not_indexed_metrics_and_labels.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/simple_index_filtered_metrics_and_label.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/simple_index_metrics.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/simple_index_metrics_and_label.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/simple_index_metrics_no_duplicate.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/analytical_dashboards/b2f2d436-9831-4fe0-81df-8c59fd33242b.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/filter_contexts/4717b786-2c2e-4596-adb5-4f8b0ab0e19a.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/filter_contexts/9f2b1f37-befa-450e-a6cc-dc576845c412.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/amount_of_active_customers.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/amount_of_orders.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/amount_of_top_customers.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/amount_of_valid_orders.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/campaign_spend.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/order_amount.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_customers.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_percent_customers.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_percent_products.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_products.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_in_category.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_per_product.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue-clothing.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue-electronic.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue-home.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue-outdoor.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue_per_customer.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue_per_dollar_spent.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue_top_10.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue_top_10_percent.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/total_revenue-no_filters.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/total_revenue.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/campaign_spend.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/customers_trend.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/percent_revenue_per_product_by_customer_and_category.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/percentage_of_customers_by_region.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/product_breakdown.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/product_categories_pie_chart.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/product_revenue_comparison-over_previous_period.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/product_saleability.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_and_quantity_by_product_and_category.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_by_category_trend.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_by_product.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_per_usd_vs_spend_by_campaign.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_trend.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/top_10_customers.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/top_10_products.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/ldm/datasets/campaign_channels.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/ldm/datasets/campaigns.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/ldm/datasets/customers.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/ldm/datasets/order_lines.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/ldm/datasets/products.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/ldm/date_instances/date.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/test_dataframe_for_created_visualization.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/test_dataframe_for_exec_def.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/test_dataframe_for_insight.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/test_dataframe_for_items.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/test_indexed_dataframe.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/test_not_indexed_dataframe.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/gd_test_config.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/good_pandas/__init__.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/good_pandas/profiles/profiles.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/good_pandas/test_good_pandas.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/overview.md +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/__init__.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/conftest.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/multi_index_filtered_series.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/multi_index_metric_series.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/not_indexed_filtered_metric_series.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/not_indexed_label_series.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/not_indexed_label_series_with_granularity.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/not_indexed_metric_series.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/not_indexed_metric_series_with_granularity.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/simple_index_filtered_series.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/simple_index_label_series.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/simple_index_metric_series.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/test_indexed_series.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/test_not_indexed_series.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/utils/__init__.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/utils/fixtures/test_get_catalog_attributes_for_extract.yaml +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/utils/test_utils.py +0 -0
- {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tox.ini +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gooddata-pandas
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.64.1.dev1
|
|
4
4
|
Summary: GoodData Cloud to pandas
|
|
5
|
-
Project-URL: Documentation, https://gooddata-pandas.readthedocs.io/en/v1.
|
|
5
|
+
Project-URL: Documentation, https://gooddata-pandas.readthedocs.io/en/v1.64.1.dev1
|
|
6
6
|
Project-URL: Source, https://github.com/gooddata/gooddata-python-sdk
|
|
7
7
|
Author-email: GoodData <support@gooddata.com>
|
|
8
8
|
License-Expression: MIT
|
|
@@ -20,7 +20,7 @@ Classifier: Topic :: Scientific/Engineering
|
|
|
20
20
|
Classifier: Topic :: Software Development
|
|
21
21
|
Classifier: Typing :: Typed
|
|
22
22
|
Requires-Python: >=3.10
|
|
23
|
-
Requires-Dist: gooddata-sdk~=1.
|
|
23
|
+
Requires-Dist: gooddata-sdk~=1.64.1.dev1
|
|
24
24
|
Requires-Dist: pandas<3.0.0,>=2.0.0
|
|
25
25
|
Provides-Extra: arrow
|
|
26
26
|
Requires-Dist: orjson>=3.11.0; extra == 'arrow'
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# (C) 2025 GoodData Corporation
|
|
2
2
|
[project]
|
|
3
3
|
name = "gooddata-pandas"
|
|
4
|
-
version = "1.
|
|
4
|
+
version = "1.64.1.dev1"
|
|
5
5
|
description = "GoodData Cloud to pandas"
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
license = "MIT"
|
|
@@ -29,7 +29,7 @@ keywords = [
|
|
|
29
29
|
]
|
|
30
30
|
requires-python = ">=3.10"
|
|
31
31
|
dependencies = [
|
|
32
|
-
"gooddata-sdk~=1.
|
|
32
|
+
"gooddata-sdk~=1.64.1.dev1",
|
|
33
33
|
"pandas>=2.0.0,<3.0.0",
|
|
34
34
|
]
|
|
35
35
|
classifiers = [
|
|
@@ -50,7 +50,7 @@ classifiers = [
|
|
|
50
50
|
arrow = ["pyarrow>=23.0.1", "orjson>=3.11.0"]
|
|
51
51
|
|
|
52
52
|
[project.urls]
|
|
53
|
-
Documentation = "https://gooddata-pandas.readthedocs.io/en/v1.
|
|
53
|
+
Documentation = "https://gooddata-pandas.readthedocs.io/en/v1.64.1.dev1"
|
|
54
54
|
Source = "https://github.com/gooddata/gooddata-python-sdk"
|
|
55
55
|
|
|
56
56
|
[dependency-groups]
|
{gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/arrow_convertor.py
RENAMED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# (C) 2026 GoodData Corporation
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
|
+
import logging
|
|
4
5
|
from typing import Callable
|
|
5
6
|
|
|
6
7
|
import orjson
|
|
7
8
|
import pandas
|
|
9
|
+
from gooddata_sdk.type_converter import AttributeConverterStore
|
|
8
10
|
|
|
9
11
|
from gooddata_pandas.arrow_types import TypesMapper
|
|
10
12
|
|
|
@@ -42,6 +44,63 @@ _GDC_TYPE_TOTAL = "total"
|
|
|
42
44
|
|
|
43
45
|
_REQUIRED_SCHEMA_KEYS = (_META_XTAB, _META_MODEL, _META_VIEW)
|
|
44
46
|
|
|
47
|
+
logger = logging.getLogger(__name__)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def read_model_labels(table: pa.Table) -> dict:
|
|
51
|
+
"""Return the ``labels`` dict from the Arrow table's ``x-gdc-model-v1`` schema metadata.
|
|
52
|
+
|
|
53
|
+
Returns an empty dict when the metadata key is absent so callers can use it
|
|
54
|
+
unconditionally without extra None-checks.
|
|
55
|
+
"""
|
|
56
|
+
if not table.schema.metadata or b"x-gdc-model-v1" not in table.schema.metadata:
|
|
57
|
+
return {}
|
|
58
|
+
return orjson.loads(table.schema.metadata[b"x-gdc-model-v1"]).get("labels", {})
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _get_date_converter_for_label(label_id: str, model_labels: dict):
|
|
62
|
+
"""Return a type Converter for date-granularity labels, or None for plain text attributes.
|
|
63
|
+
|
|
64
|
+
Reads the ``granularity`` field from Arrow model metadata (``x-gdc-model-v1``) and
|
|
65
|
+
looks up the matching converter in ``AttributeConverterStore``.
|
|
66
|
+
|
|
67
|
+
- ``DAY`` / ``MONTH`` / ``YEAR`` → ``DateConverter`` (→ ``pandas.Timestamp`` via external fn)
|
|
68
|
+
- ``WEEK`` / ``QUARTER`` → ``StringConverter`` (no-op)
|
|
69
|
+
- ``MINUTE`` / ``HOUR`` → ``DatetimeConverter``
|
|
70
|
+
- No granularity (text attrs) → ``None`` (caller skips conversion)
|
|
71
|
+
"""
|
|
72
|
+
info = model_labels.get(label_id, {})
|
|
73
|
+
granularity = info.get("granularity")
|
|
74
|
+
if not granularity:
|
|
75
|
+
return None
|
|
76
|
+
return AttributeConverterStore.find_converter("DATE", granularity.upper())
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def convert_label_values(label_id: str, values: list, model_labels: dict) -> list:
|
|
80
|
+
"""Apply date-granularity type conversion to a list of attribute values from an Arrow column.
|
|
81
|
+
|
|
82
|
+
Mirrors the non-Arrow execution path (``AttributeConverterStore`` in ``_typed_attribute_value``):
|
|
83
|
+
|
|
84
|
+
- ``DAY`` / ``MONTH`` / ``YEAR`` granularity → ``pandas.Timestamp``
|
|
85
|
+
- ``WEEK`` / ``QUARTER`` → ``str`` (unchanged)
|
|
86
|
+
- No granularity (text attributes) → values returned as the **same object**
|
|
87
|
+
|
|
88
|
+
``None`` values are passed through unchanged.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
label_id: Arrow column name / GoodData label local ID.
|
|
92
|
+
values: Raw values from ``table.column(label_id).to_pylist()``.
|
|
93
|
+
model_labels: The ``labels`` dict from ``x-gdc-model-v1`` schema metadata
|
|
94
|
+
(as returned by :func:`read_model_labels`).
|
|
95
|
+
|
|
96
|
+
Returns:
|
|
97
|
+
Converted list, or the original *values* object when no conversion is needed.
|
|
98
|
+
"""
|
|
99
|
+
converter = _get_date_converter_for_label(label_id, model_labels)
|
|
100
|
+
if converter is None:
|
|
101
|
+
return values
|
|
102
|
+
return [converter.to_external_type(v) if v is not None else None for v in values]
|
|
103
|
+
|
|
45
104
|
|
|
46
105
|
def build_metric_field_index(table: pa.Table) -> dict[int, str]:
|
|
47
106
|
"""Return {metric_dimension_index: arrow_field_name} from the table schema.
|
|
@@ -77,9 +136,14 @@ def _parse_schema_metadata(table: pa.Table) -> dict:
|
|
|
77
136
|
raise ValueError(
|
|
78
137
|
"Arrow table has no schema metadata. Expected GoodData metadata keys: " + ", ".join(_REQUIRED_SCHEMA_KEYS)
|
|
79
138
|
)
|
|
80
|
-
schema_meta = {
|
|
81
|
-
|
|
82
|
-
|
|
139
|
+
schema_meta = {}
|
|
140
|
+
for _k, _v in table.schema.metadata.items():
|
|
141
|
+
try:
|
|
142
|
+
_k_str = _k.decode()
|
|
143
|
+
except UnicodeDecodeError:
|
|
144
|
+
continue
|
|
145
|
+
if _k_str in _REQUIRED_SCHEMA_KEYS:
|
|
146
|
+
schema_meta[_k_str] = orjson.loads(_v)
|
|
83
147
|
missing = [k for k in _REQUIRED_SCHEMA_KEYS if k not in schema_meta]
|
|
84
148
|
if missing:
|
|
85
149
|
raise ValueError(
|
|
@@ -186,10 +250,15 @@ def _build_inline_index(
|
|
|
186
250
|
totals_meta = xtab_meta.get("totalsMetadata", {})
|
|
187
251
|
total_ref_vals: list = [None] * table.num_rows
|
|
188
252
|
if totals_meta:
|
|
189
|
-
for
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
253
|
+
total_ref_cols = [f.name for f in table.schema if f.name.startswith(_COL_TOTAL_REF_PREFIX)]
|
|
254
|
+
if total_ref_cols:
|
|
255
|
+
if len(total_ref_cols) > 1:
|
|
256
|
+
logger.warning(
|
|
257
|
+
"Arrow table has %d __total_ref* columns; only %r is used for aggregation names.",
|
|
258
|
+
len(total_ref_cols),
|
|
259
|
+
total_ref_cols[0],
|
|
260
|
+
)
|
|
261
|
+
total_ref_vals = table.column(total_ref_cols[0]).to_pylist()
|
|
193
262
|
|
|
194
263
|
# Precompute per-row aggregation name and kept-label set for total rows.
|
|
195
264
|
agg_for_row: list[str | None] = [None] * table.num_rows
|
|
@@ -212,16 +281,17 @@ def _build_inline_index(
|
|
|
212
281
|
values = table.column(lid).to_pylist()
|
|
213
282
|
processed = []
|
|
214
283
|
for i, v in enumerate(values):
|
|
215
|
-
if row_types[i] != 0
|
|
216
|
-
if
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
284
|
+
if row_types[i] != 0:
|
|
285
|
+
if isinstance(v, str):
|
|
286
|
+
if ref in kept_labels_for_row[i]:
|
|
287
|
+
processed.append(v)
|
|
288
|
+
elif v == "":
|
|
289
|
+
processed.append(agg_for_row[i] if agg_for_row[i] else v)
|
|
290
|
+
else:
|
|
291
|
+
processed.append(v.upper())
|
|
222
292
|
else:
|
|
223
|
-
#
|
|
224
|
-
processed.append(v
|
|
293
|
+
# Non-string value in a total row — replace with the aggregation name when available.
|
|
294
|
+
processed.append(agg_for_row[i] if agg_for_row[i] is not None else v)
|
|
225
295
|
else:
|
|
226
296
|
processed.append(v)
|
|
227
297
|
arrays.append(processed)
|
|
@@ -410,6 +480,11 @@ def compute_column_totals_indexes(table: pa.Table, execution_dims: list) -> list
|
|
|
410
480
|
(dim for dim in execution_dims if col_ref_label_ids <= _label_ids_in_dim(dim)),
|
|
411
481
|
{},
|
|
412
482
|
)
|
|
483
|
+
if not col_dim and execution_dims:
|
|
484
|
+
logger.warning(
|
|
485
|
+
"No execution dimension contains column label IDs %s; column_totals_indexes will be empty.",
|
|
486
|
+
col_ref_label_ids,
|
|
487
|
+
)
|
|
413
488
|
else:
|
|
414
489
|
col_dim = next(
|
|
415
490
|
(dim for dim in execution_dims if any("measureGroupHeaders" in h for h in dim.get("headers", []))),
|
|
@@ -486,6 +561,11 @@ def compute_row_totals_indexes(table: pa.Table, execution_dims: list) -> list[li
|
|
|
486
561
|
(dim for dim in execution_dims if ref_label_ids <= _label_ids_in_dim(dim)),
|
|
487
562
|
{},
|
|
488
563
|
)
|
|
564
|
+
if not row_dim and execution_dims:
|
|
565
|
+
logger.warning(
|
|
566
|
+
"No execution dimension contains row label IDs %s; row_totals_indexes will be empty.",
|
|
567
|
+
ref_label_ids,
|
|
568
|
+
)
|
|
489
569
|
else:
|
|
490
570
|
# Metrics-only: the dimension containing measureGroupHeaders is the output-row dim.
|
|
491
571
|
row_dim = next(
|
{gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/arrow_types.py
RENAMED
|
@@ -47,8 +47,12 @@ class ArrowConfig:
|
|
|
47
47
|
custom_mapping is not provided.
|
|
48
48
|
custom_mapping: Arrow type → pandas dtype mapping dict. Only used when
|
|
49
49
|
types_mapper=TypesMapper.CUSTOM, ignored otherwise.
|
|
50
|
+
max_bytes: Optional byte-size limit for the Arrow response body. When set,
|
|
51
|
+
``read_result_arrow`` raises ``ResultSizeBytesLimitExceeded`` if the
|
|
52
|
+
raw IPC payload exceeds this value before parsing begins.
|
|
50
53
|
"""
|
|
51
54
|
|
|
52
55
|
self_destruct: bool = False
|
|
53
56
|
types_mapper: TypesMapper = TypesMapper.DEFAULT
|
|
54
57
|
custom_mapping: dict | None = field(default=None)
|
|
58
|
+
max_bytes: int | None = field(default=None)
|
{gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/data_access.py
RENAMED
|
@@ -18,11 +18,6 @@ from gooddata_sdk import (
|
|
|
18
18
|
)
|
|
19
19
|
from gooddata_sdk.utils import IdObjType
|
|
20
20
|
|
|
21
|
-
try:
|
|
22
|
-
from gooddata_pandas.arrow_convertor import build_metric_field_index
|
|
23
|
-
except ImportError:
|
|
24
|
-
pass # Only needed when use_arrow=True; callers guard with _ARROW_AVAILABLE checks
|
|
25
|
-
|
|
26
21
|
from gooddata_pandas.utils import (
|
|
27
22
|
ColumnsDef,
|
|
28
23
|
IndexDef,
|
|
@@ -34,6 +29,12 @@ from gooddata_pandas.utils import (
|
|
|
34
29
|
get_catalog_attributes_for_extract,
|
|
35
30
|
)
|
|
36
31
|
|
|
32
|
+
_ARROW_IMPORT_ERROR: ImportError | None = None
|
|
33
|
+
try:
|
|
34
|
+
from gooddata_pandas.arrow_convertor import build_metric_field_index, convert_label_values, read_model_labels
|
|
35
|
+
except ImportError as _e: # pragma: no cover
|
|
36
|
+
_ARROW_IMPORT_ERROR = _e # pragma: no cover
|
|
37
|
+
|
|
37
38
|
|
|
38
39
|
class ExecutionDefinitionBuilder:
|
|
39
40
|
_DEFAULT_INDEX_NAME: str = "0"
|
|
@@ -429,20 +430,30 @@ def _extract_from_arrow(
|
|
|
429
430
|
col_to_attr_idx: dict[str, int],
|
|
430
431
|
col_to_metric_idx: dict[str, int],
|
|
431
432
|
index_to_attr_idx: dict[str, int],
|
|
433
|
+
max_bytes: int | None = None,
|
|
432
434
|
) -> tuple[dict, dict]:
|
|
433
435
|
"""
|
|
434
436
|
Arrow-path extraction for indexed() / not_indexed().
|
|
435
437
|
|
|
436
438
|
Reads the full result in one shot via the binary endpoint, then slices columns
|
|
437
|
-
by Arrow field name (metrics) or label id (attributes).
|
|
439
|
+
by Arrow field name (metrics) or label id (attributes).
|
|
440
|
+
|
|
441
|
+
Date-granularity attribute columns (year/month/day) are converted to
|
|
442
|
+
``pandas.Timestamp`` to match the behaviour of the non-Arrow path.
|
|
443
|
+
Week and quarter values remain as strings (same as non-Arrow).
|
|
438
444
|
"""
|
|
439
|
-
|
|
445
|
+
if _ARROW_IMPORT_ERROR is not None:
|
|
446
|
+
raise ImportError(
|
|
447
|
+
"pyarrow is required for Arrow support. Install it with: pip install gooddata-pandas[arrow]"
|
|
448
|
+
) from _ARROW_IMPORT_ERROR
|
|
449
|
+
table = execution.bare_exec_response.read_result_arrow(max_bytes=max_bytes)
|
|
440
450
|
exec_def = execution.exec_def
|
|
441
451
|
|
|
442
452
|
if table.num_rows == 0:
|
|
443
453
|
return {col: [] for col in cols}, {idx: [] for idx in index_to_attr_idx}
|
|
444
454
|
|
|
445
455
|
metric_dim_idx_to_field = build_metric_field_index(table)
|
|
456
|
+
model_labels = read_model_labels(table)
|
|
446
457
|
|
|
447
458
|
data: dict[str, list] = {}
|
|
448
459
|
for col in cols:
|
|
@@ -451,12 +462,14 @@ def _extract_from_arrow(
|
|
|
451
462
|
data[col] = table.column(field_name).to_pylist()
|
|
452
463
|
else:
|
|
453
464
|
attr = exec_def.attributes[col_to_attr_idx[col]]
|
|
454
|
-
|
|
465
|
+
label_id = attr.label.id
|
|
466
|
+
data[col] = convert_label_values(label_id, table.column(label_id).to_pylist(), model_labels)
|
|
455
467
|
|
|
456
468
|
index: dict[str, list] = {}
|
|
457
469
|
for idx_name, attr_idx in index_to_attr_idx.items():
|
|
458
470
|
attr = exec_def.attributes[attr_idx]
|
|
459
|
-
|
|
471
|
+
label_id = attr.label.id
|
|
472
|
+
index[idx_name] = convert_label_values(label_id, table.column(label_id).to_pylist(), model_labels)
|
|
460
473
|
|
|
461
474
|
return data, index
|
|
462
475
|
|
|
@@ -471,6 +484,7 @@ def compute_and_extract(
|
|
|
471
484
|
is_cancellable: bool = False,
|
|
472
485
|
result_page_len: int | None = None,
|
|
473
486
|
use_arrow: bool = False,
|
|
487
|
+
max_bytes: int | None = None,
|
|
474
488
|
) -> tuple[dict, dict]:
|
|
475
489
|
"""
|
|
476
490
|
Convenience function that computes and extracts data from the execution response.
|
|
@@ -489,6 +503,8 @@ def compute_and_extract(
|
|
|
489
503
|
Defaults to 1000. Larger values can improve performance for large result sets.
|
|
490
504
|
use_arrow (bool, optional): When True, fetches the result via the Arrow IPC binary
|
|
491
505
|
endpoint in one shot instead of paginating through JSON. Requires pyarrow.
|
|
506
|
+
max_bytes (Optional[int]): Maximum response body size in bytes for the Arrow path.
|
|
507
|
+
Raises ResultSizeBytesLimitExceeded when exceeded. Ignored when use_arrow=False.
|
|
492
508
|
|
|
493
509
|
Returns:
|
|
494
510
|
tuple: A tuple containing the following dictionaries:
|
|
@@ -522,6 +538,7 @@ def compute_and_extract(
|
|
|
522
538
|
col_to_attr_idx,
|
|
523
539
|
col_to_metric_idx,
|
|
524
540
|
index_to_attr_idx,
|
|
541
|
+
max_bytes=max_bytes,
|
|
525
542
|
)
|
|
526
543
|
elif not exec_def.has_attributes():
|
|
527
544
|
return _extract_for_metrics_only(execution, cols, col_to_metric_idx), dict()
|
{gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/dataframe.py
RENAMED
|
@@ -159,6 +159,7 @@ class DataFrameFactory:
|
|
|
159
159
|
is_cancellable=is_cancellable,
|
|
160
160
|
result_page_len=result_page_len,
|
|
161
161
|
use_arrow=use_arrow,
|
|
162
|
+
max_bytes=self._arrow_config.max_bytes if use_arrow else None,
|
|
162
163
|
)
|
|
163
164
|
|
|
164
165
|
_idx = make_pandas_index(index)
|
|
@@ -210,6 +211,7 @@ class DataFrameFactory:
|
|
|
210
211
|
is_cancellable=is_cancellable,
|
|
211
212
|
result_page_len=result_page_len,
|
|
212
213
|
use_arrow=use_arrow,
|
|
214
|
+
max_bytes=self._arrow_config.max_bytes if use_arrow else None,
|
|
213
215
|
)
|
|
214
216
|
|
|
215
217
|
return pandas.DataFrame(data=data)
|
|
@@ -539,7 +541,7 @@ class DataFrameFactory:
|
|
|
539
541
|
on_execution_submitted(execution)
|
|
540
542
|
|
|
541
543
|
exec_response = execution.bare_exec_response
|
|
542
|
-
table = exec_response.read_result_arrow()
|
|
544
|
+
table = exec_response.read_result_arrow(max_bytes=self._arrow_config.max_bytes)
|
|
543
545
|
return self._table_to_df_and_metadata(table, exec_response, label_overrides, grand_totals_position)
|
|
544
546
|
|
|
545
547
|
def for_arrow_table(
|
|
@@ -684,7 +686,7 @@ class DataFrameFactory:
|
|
|
684
686
|
result_cache_metadata.execution_response, _check_type=False
|
|
685
687
|
),
|
|
686
688
|
)
|
|
687
|
-
table = exec_response.read_result_arrow()
|
|
689
|
+
table = exec_response.read_result_arrow(max_bytes=self._arrow_config.max_bytes)
|
|
688
690
|
return self._table_to_df_and_metadata(table, exec_response, label_overrides, grand_totals_position)
|
|
689
691
|
|
|
690
692
|
return convert_execution_response_to_dataframe(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[
|
|
2
2
|
{
|
|
3
3
|
"name": "flat_attrs_and_metrics",
|
|
4
|
-
"description": "Single dim with attributes and measureGroup
|
|
4
|
+
"description": "Single dim with attributes and measureGroup — flat table",
|
|
5
5
|
"shape": [
|
|
6
6
|
96,
|
|
7
7
|
1
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
{
|
|
13
13
|
"name": "two_dim_metrics_in_rows",
|
|
14
|
-
"description": "measureGroup in dim0
|
|
14
|
+
"description": "measureGroup in dim0 → each metric is a row; attributes fan out as columns",
|
|
15
15
|
"shape": [
|
|
16
16
|
2,
|
|
17
17
|
17
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
23
|
"name": "two_dim_metrics_in_cols",
|
|
24
|
-
"description": "Attributes in dim0 (rows), measureGroup in dim1 (columns)
|
|
24
|
+
"description": "Attributes in dim0 (rows), measureGroup in dim1 (columns) — most common layout",
|
|
25
25
|
"shape": [
|
|
26
26
|
48,
|
|
27
27
|
8
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
"name": "wide_few_rows_many_cols",
|
|
34
|
-
"description": "Single attribute in dim0, multiple attributes + measureGroup in dim1
|
|
34
|
+
"description": "Single attribute in dim0, multiple attributes + measureGroup in dim1 → wide DataFrame",
|
|
35
35
|
"shape": [
|
|
36
36
|
4,
|
|
37
37
|
96
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
"name": "metrics_only",
|
|
44
|
-
"description": "No attributes
|
|
44
|
+
"description": "No attributes — single row of aggregate metric values",
|
|
45
45
|
"shape": [
|
|
46
46
|
2,
|
|
47
47
|
1
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
"name": "single_metric_many_rows",
|
|
54
|
-
"description": "Three attributes + one metric
|
|
54
|
+
"description": "Three attributes + one metric — tall narrow table",
|
|
55
55
|
"shape": [
|
|
56
56
|
182,
|
|
57
57
|
1
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
83
|
"name": "totals_grand_row_two_col_labels",
|
|
84
|
-
"description": "Grand total rows; column dim has two labels
|
|
84
|
+
"description": "Grand total rows; column dim has two labels — tests index padding",
|
|
85
85
|
"shape": [
|
|
86
86
|
96,
|
|
87
87
|
18
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
93
|
"name": "totals_grand_col_two_row_labels",
|
|
94
|
-
"description": "Grand total columns; row dim has two labels
|
|
94
|
+
"description": "Grand total columns; row dim has two labels — tests column index padding",
|
|
95
95
|
"shape": [
|
|
96
96
|
18,
|
|
97
97
|
96
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
133
|
"name": "dim_r_m",
|
|
134
|
-
"description": "dim0=[region], dim1=[measureGroup]
|
|
134
|
+
"description": "dim0=[region], dim1=[measureGroup] — 1 row attr, metrics in cols",
|
|
135
135
|
"shape": [
|
|
136
136
|
5,
|
|
137
137
|
2
|
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
"name": "dim_m_c",
|
|
164
|
-
"description": "dim0=[measureGroup], dim1=[products.category]
|
|
164
|
+
"description": "dim0=[measureGroup], dim1=[products.category] — metrics in rows, 1 col attr",
|
|
165
165
|
"shape": [
|
|
166
166
|
2,
|
|
167
167
|
4
|
|
@@ -251,7 +251,7 @@
|
|
|
251
251
|
},
|
|
252
252
|
{
|
|
253
253
|
"name": "tot_d0_sub",
|
|
254
|
-
"description": "Base A: subtotal per region (rolls up category)
|
|
254
|
+
"description": "Base A: subtotal per region (rolls up category) → extra rows in dim0",
|
|
255
255
|
"shape": [
|
|
256
256
|
44,
|
|
257
257
|
4
|
|
@@ -261,7 +261,7 @@
|
|
|
261
261
|
},
|
|
262
262
|
{
|
|
263
263
|
"name": "tot_d0_grand",
|
|
264
|
-
"description": "Base A: grand total of dim0 (all items)
|
|
264
|
+
"description": "Base A: grand total of dim0 (all items) → extra column in dim1",
|
|
265
265
|
"shape": [
|
|
266
266
|
34,
|
|
267
267
|
4
|
|
@@ -281,7 +281,7 @@
|
|
|
281
281
|
},
|
|
282
282
|
{
|
|
283
283
|
"name": "tot_d1_sub",
|
|
284
|
-
"description": "Base B: subtotal per order_status (rolls up date.year)
|
|
284
|
+
"description": "Base B: subtotal per order_status (rolls up date.year) → extra columns in dim1",
|
|
285
285
|
"shape": [
|
|
286
286
|
18,
|
|
287
287
|
36
|
|
@@ -291,7 +291,7 @@
|
|
|
291
291
|
},
|
|
292
292
|
{
|
|
293
293
|
"name": "tot_d1_grand",
|
|
294
|
-
"description": "Base B: grand total of dim1 (all items)
|
|
294
|
+
"description": "Base B: grand total of dim1 (all items) → extra row in dim0",
|
|
295
295
|
"shape": [
|
|
296
296
|
18,
|
|
297
297
|
30
|
|
@@ -321,7 +321,7 @@
|
|
|
321
321
|
},
|
|
322
322
|
{
|
|
323
323
|
"name": "tot_d0sub_d1grand",
|
|
324
|
-
"description": "Base C: row subtotals per region + grand total of dim1
|
|
324
|
+
"description": "Base C: row subtotals per region + grand total of dim1 → extra col rows + SUM row",
|
|
325
325
|
"shape": [
|
|
326
326
|
44,
|
|
327
327
|
16
|
|
@@ -358,5 +358,75 @@
|
|
|
358
358
|
],
|
|
359
359
|
"result_id": "b592a3f77e55d5e3d4450891c0d5c1fbedcac173:f9ed5a4e4b8cf21716cc409cd87664ef7da3444d4f07c4864989916d420bf85f",
|
|
360
360
|
"dir": "totals_both_dims"
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
"name": "date_year_in_rows",
|
|
364
|
+
"description": "Date attribute (YEAR granularity) in row dimension — Arrow path date→Timestamp parity",
|
|
365
|
+
"shape": [
|
|
366
|
+
3,
|
|
367
|
+
1
|
|
368
|
+
],
|
|
369
|
+
"result_id": "0000000000000000000000000000000000000000:date_year_in_rows",
|
|
370
|
+
"dir": "date_year_in_rows"
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"name": "date_month_in_rows",
|
|
374
|
+
"description": "Date attribute (MONTH granularity) in row dimension — Arrow path date→Timestamp parity",
|
|
375
|
+
"shape": [
|
|
376
|
+
3,
|
|
377
|
+
1
|
|
378
|
+
],
|
|
379
|
+
"result_id": "0000000000000000000000000000000000000000:date_month_in_rows",
|
|
380
|
+
"dir": "date_month_in_rows"
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
"name": "date_day_in_rows",
|
|
384
|
+
"description": "Date attribute (DAY granularity) in row dimension — Arrow path date→Timestamp parity",
|
|
385
|
+
"shape": [
|
|
386
|
+
2,
|
|
387
|
+
1
|
|
388
|
+
],
|
|
389
|
+
"result_id": "0000000000000000000000000000000000000000:date_day_in_rows",
|
|
390
|
+
"dir": "date_day_in_rows"
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
"name": "date_week_in_rows",
|
|
394
|
+
"description": "Date attribute (WEEK granularity) in row dimension — stays string, no Timestamp conversion",
|
|
395
|
+
"shape": [
|
|
396
|
+
2,
|
|
397
|
+
1
|
|
398
|
+
],
|
|
399
|
+
"result_id": "0000000000000000000000000000000000000000:date_week_in_rows",
|
|
400
|
+
"dir": "date_week_in_rows"
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
"name": "date_quarter_in_rows",
|
|
404
|
+
"description": "Date attribute (QUARTER granularity) in row dimension — stays string, no Timestamp conversion",
|
|
405
|
+
"shape": [
|
|
406
|
+
2,
|
|
407
|
+
1
|
|
408
|
+
],
|
|
409
|
+
"result_id": "0000000000000000000000000000000000000000:date_quarter_in_rows",
|
|
410
|
+
"dir": "date_quarter_in_rows"
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
"name": "empty_two_dim_attrs_metrics",
|
|
414
|
+
"description": "Standard two-dim layout (attr rows, metric cols), 0 data rows",
|
|
415
|
+
"shape": [
|
|
416
|
+
0,
|
|
417
|
+
2
|
|
418
|
+
],
|
|
419
|
+
"result_id": "0000000000000000000000000000000000000000:empty_two_dim_attrs_metrics",
|
|
420
|
+
"dir": "empty_two_dim_attrs_metrics"
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
"name": "empty_flat_attrs_metrics",
|
|
424
|
+
"description": "Single-dim (flat) layout, attr and metrics co-dim, 0 data rows",
|
|
425
|
+
"shape": [
|
|
426
|
+
0,
|
|
427
|
+
2
|
|
428
|
+
],
|
|
429
|
+
"result_id": "0000000000000000000000000000000000000000:empty_flat_attrs_metrics",
|
|
430
|
+
"dir": "empty_flat_attrs_metrics"
|
|
361
431
|
}
|
|
362
432
|
]
|