gooddata-pandas 1.74.1.dev1__tar.gz → 1.74.1.dev2__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.74.1.dev2/AGENTS.md +93 -0
- gooddata_pandas-1.74.1.dev2/CLAUDE.md +1 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/PKG-INFO +3 -3
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/docs/requirements.txt +1 -1
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/pyproject.toml +9 -9
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/.gitignore +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/.readthedocs.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/LICENSE.txt +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/MANIFEST.in +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/Makefile +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/README.md +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/docs/_static/empty_file +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/docs/_templates/class-template.rst +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/docs/_templates/module-template.rst +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/docs/api.rst +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/docs/conf.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/docs/examples.rst +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/docs/index.rst +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/docs/installation.rst +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/__init__.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/_version.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/arrow_convertor.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/arrow_types.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/data_access.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/dataframe.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/good_pandas.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/py.typed +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/result_convertor.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/series.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/utils.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/__init__.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/conftest.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/__init__.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/conftest.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_m_c/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_m_c/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_m_c/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_m_cs/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_m_cs/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_m_cs/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_m_csy/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_m_csy/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_m_csy/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_r_cm/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_r_cm/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_r_cm/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_r_csm/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_r_csm/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_r_csm/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_r_csym/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_r_csym/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_r_csym/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_r_m/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_r_m/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_r_m/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_rc_m/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_rc_m/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_rc_m/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_rcs_m/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_rcs_m/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_rcs_m/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_rcs_ym/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_rcs_ym/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_rcs_ym/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_rs_cm/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_rs_cm/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_rs_cm/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_rs_cym/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_rs_cym/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/dim_rs_cym/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/flat_attrs_and_metrics/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/flat_attrs_and_metrics/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/flat_attrs_and_metrics/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/manifest.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/metrics_only/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/metrics_only/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/metrics_only/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/single_metric_many_rows/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/single_metric_many_rows/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/single_metric_many_rows/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0_grand/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0_grand/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0_grand/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0_sub/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0_sub/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0_sub/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0_sub_grand/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0_sub_grand/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0_sub_grand/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0grand_d1grand/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0grand_d1grand/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0grand_d1grand/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0grand_d1sub/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0grand_d1sub/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0grand_d1sub/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0sub_d1sub/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0sub_d1sub/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d0sub_d1sub/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d1_grand/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d1_grand/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d1_grand/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d1_sub/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d1_sub/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d1_sub/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d1_sub_grand/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d1_sub_grand/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/tot_d1_sub_grand/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_both_dims/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_both_dims/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_both_dims/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_grand_col_sum/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_grand_col_sum/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_grand_col_sum/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_grand_col_two_row_labels/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_grand_col_two_row_labels/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_grand_col_two_row_labels/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_grand_row_sum/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_grand_row_sum/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_grand_row_sum/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_multi_agg/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_multi_agg/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_multi_agg/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_subtotal_col/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_subtotal_col/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_subtotal_col/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_subtotal_row/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_subtotal_row/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/totals_subtotal_row/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/dataframe.parquet +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/meta.json +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/result.arrow +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_exec_def_bytes_limits_failure.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_exec_def_dimensions_limits_failure.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim1.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim2.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_exec_def_totals1.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_exec_def_totals2.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_exec_def_totals3.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_exec_def_totals4.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim1.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim2.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim3.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_items.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_items_no_index.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_visualization.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_visualization_date.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/dataframe_for_visualization_no_index.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/empty_indexed_dataframe.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/empty_not_indexed_dataframe.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/filtered_empty_df.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label_reuse.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/multi_index_metrics.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/multi_index_metrics_and_label.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/not_indexed_filtered_metrics_and_labels.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/not_indexed_metrics.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/not_indexed_metrics_and_labels.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/simple_index_filtered_metrics_and_label.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/simple_index_metrics.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/simple_index_metrics_and_label.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/fixtures/simple_index_metrics_no_duplicate.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/analytical_dashboards/b2f2d436-9831-4fe0-81df-8c59fd33242b.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/filter_contexts/4717b786-2c2e-4596-adb5-4f8b0ab0e19a.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/filter_contexts/9f2b1f37-befa-450e-a6cc-dc576845c412.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/amount_of_active_customers.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/amount_of_orders.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/amount_of_top_customers.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/amount_of_valid_orders.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/campaign_spend.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/order_amount.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_customers.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_percent_customers.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_percent_products.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_products.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_in_category.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_per_product.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/revenue-clothing.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/revenue-electronic.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/revenue-home.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/revenue-outdoor.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/revenue.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/revenue_per_customer.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/revenue_per_dollar_spent.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/revenue_top_10.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/revenue_top_10_percent.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/total_revenue-no_filters.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/metrics/total_revenue.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/visualization_objects/campaign_spend.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/visualization_objects/customers_trend.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/visualization_objects/percent_revenue_per_product_by_customer_and_category.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/visualization_objects/percentage_of_customers_by_region.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/visualization_objects/product_breakdown.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/visualization_objects/product_categories_pie_chart.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/visualization_objects/product_revenue_comparison-over_previous_period.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/visualization_objects/product_saleability.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_and_quantity_by_product_and_category.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_by_category_trend.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_by_product.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_per_usd_vs_spend_by_campaign.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_trend.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/visualization_objects/top_10_customers.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/analytics_model/visualization_objects/top_10_products.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/ldm/datasets/campaign_channels.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/ldm/datasets/campaigns.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/ldm/datasets/customers.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/ldm/datasets/order_lines.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/ldm/datasets/products.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/load/ai/ldm/date_instances/date.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/test_dataframe_for_created_visualization.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/test_dataframe_for_exec_def.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/test_dataframe_for_exec_def_arrow.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/test_dataframe_for_insight.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/test_dataframe_for_items.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/test_indexed_dataframe.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/dataframe/test_not_indexed_dataframe.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/gd_test_config.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/good_pandas/__init__.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/good_pandas/profiles/profiles.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/good_pandas/test_good_pandas.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/overview.md +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/series/__init__.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/series/conftest.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/series/fixtures/multi_index_filtered_series.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/series/fixtures/multi_index_metric_series.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/series/fixtures/not_indexed_filtered_metric_series.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/series/fixtures/not_indexed_label_series.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/series/fixtures/not_indexed_label_series_with_granularity.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/series/fixtures/not_indexed_metric_series.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/series/fixtures/not_indexed_metric_series_with_granularity.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/series/fixtures/simple_index_filtered_series.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/series/fixtures/simple_index_label_series.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/series/fixtures/simple_index_metric_series.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/series/test_indexed_series.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/series/test_not_indexed_series.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/utils/__init__.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/utils/fixtures/test_get_catalog_attributes_for_extract.yaml +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tests/utils/test_utils.py +0 -0
- {gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/tox.ini +0 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# gooddata-pandas
|
|
2
|
+
|
|
3
|
+
A thin adapter layer over `gooddata-sdk` that turns GoodData executions into pandas
|
|
4
|
+
`Series` and `DataFrame` objects. `GoodPandas` wraps an SDK client and, per workspace,
|
|
5
|
+
hands out two factories: `SeriesFactory` and `DataFrameFactory`. Underneath, an execution
|
|
6
|
+
definition is built from user-friendly column and index specs, and the result is converted
|
|
7
|
+
to pandas either by paging through JSON or — with the optional `arrow` extra — by pulling a
|
|
8
|
+
single Arrow IPC table.
|
|
9
|
+
|
|
10
|
+
## Owns
|
|
11
|
+
|
|
12
|
+
- Creating pandas `Series` and `DataFrame` objects from GoodData data
|
|
13
|
+
- Translating user-friendly column/index specs into an SDK `ExecutionDefinition`
|
|
14
|
+
- Converting execution results (JSON-paged or Arrow) into pandas structures, including
|
|
15
|
+
grand-total and subtotal handling
|
|
16
|
+
|
|
17
|
+
## Does NOT Own
|
|
18
|
+
|
|
19
|
+
- Core SDK behavior → `gooddata-sdk`
|
|
20
|
+
- Raw generated endpoints → `gooddata-api-client`
|
|
21
|
+
|
|
22
|
+
## Architecture
|
|
23
|
+
|
|
24
|
+
| Module | Role |
|
|
25
|
+
|---|---|
|
|
26
|
+
| `good_pandas.py` | `GoodPandas` entry point; hands out the two factories |
|
|
27
|
+
| `series.py` | `SeriesFactory` |
|
|
28
|
+
| `dataframe.py` | `DataFrameFactory` |
|
|
29
|
+
| `data_access.py` | `ExecutionDefinitionBuilder`; spec → execution, JSON paging |
|
|
30
|
+
| `result_convertor.py` | paged JSON result → pandas |
|
|
31
|
+
| `arrow_convertor.py`, `arrow_types.py` | Arrow table → pandas |
|
|
32
|
+
| `utils.py` | index construction, column naming |
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
from gooddata_pandas import GoodPandas
|
|
36
|
+
|
|
37
|
+
gp = GoodPandas(host="https://example.gooddata.com", token="...")
|
|
38
|
+
df = gp.data_frames(workspace_id="demo").for_visualization(visualization_id="...")
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
`GoodPandas.create_from_profile()` is an alternative constructor reading a profile file.
|
|
42
|
+
|
|
43
|
+
### The two factories are not symmetric
|
|
44
|
+
|
|
45
|
+
`data_frames(workspace_id)` and `series(workspace_id)` both return factories, but they
|
|
46
|
+
expose different method sets:
|
|
47
|
+
|
|
48
|
+
- **`SeriesFactory`** — `indexed`, `not_indexed`. That is all. There is no series
|
|
49
|
+
equivalent of `for_visualization` or `for_exec_def`; reaching for one gets an
|
|
50
|
+
`AttributeError`.
|
|
51
|
+
- **`DataFrameFactory`** — `indexed`, `not_indexed`, `for_items`, `for_visualization`,
|
|
52
|
+
`for_created_visualization`, `for_exec_def`, `for_exec_def_arrow`, `for_arrow_table`,
|
|
53
|
+
`for_exec_result_id`, `result_cache_metadata_for_exec_result_id`.
|
|
54
|
+
|
|
55
|
+
### `indexed` vs `not_indexed`
|
|
56
|
+
|
|
57
|
+
`indexed()` builds a pandas `Index` or `MultiIndex` from one or more labels and returns the
|
|
58
|
+
remaining columns as data. `not_indexed()` returns a default integer-indexed frame in which
|
|
59
|
+
the requested attribute labels appear as ordinary columns alongside the metrics.
|
|
60
|
+
`for_items()` and `for_visualization()` choose between the two automatically via
|
|
61
|
+
`auto_index`, depending on whether both attributes and measures are present.
|
|
62
|
+
|
|
63
|
+
## Gotchas
|
|
64
|
+
|
|
65
|
+
**Return types differ by method family.** `indexed`, `not_indexed`, `for_items` and
|
|
66
|
+
`for_visualization` return a bare `pandas.DataFrame`. `for_exec_def`, `for_exec_def_arrow`,
|
|
67
|
+
`for_arrow_table`, `for_exec_result_id` and `for_created_visualization` return a
|
|
68
|
+
`(DataFrame, DataFrameMetadata)` tuple, where the metadata carries totals-row indexes, the
|
|
69
|
+
execution response and primary-label info. `df = factory.for_exec_def(...)` gets you a
|
|
70
|
+
tuple, not a frame.
|
|
71
|
+
|
|
72
|
+
**The Arrow path is a second, opt-in execution path.** `GoodPandas(use_arrow=True,
|
|
73
|
+
arrow_config=ArrowConfig(...))`, the `use_arrow` flag on the factory methods, and
|
|
74
|
+
`for_exec_def_arrow` / `for_arrow_table` all route through `arrow_convertor.py` instead of
|
|
75
|
+
the JSON pager. It requires the `arrow` extra (`gooddata-pandas[arrow]`, which pulls
|
|
76
|
+
`pyarrow` and `orjson`). Several parameters — `result_page_len`, `page_size`,
|
|
77
|
+
`result_size_dimensions_limits`, `optimized` — are ignored or warned about under
|
|
78
|
+
`use_arrow=True`, so a caller tuning them there is tuning nothing.
|
|
79
|
+
|
|
80
|
+
**Two independent pagination knobs with different defaults.** `indexed`, `not_indexed`,
|
|
81
|
+
`for_items`, `for_visualization` and the `SeriesFactory` methods page via `result_page_len`
|
|
82
|
+
(default 1000, in `data_access.py`). `for_exec_def` and `for_exec_result_id` page via
|
|
83
|
+
`page_size` (default 100, in `result_convertor.py`). These are separate mechanisms — do not
|
|
84
|
+
assume one unified default.
|
|
85
|
+
|
|
86
|
+
**`index_by` cannot reference a metric.** `ExecutionDefinitionBuilder` raises `ValueError`
|
|
87
|
+
if you try. Index specs take labels; metrics are data.
|
|
88
|
+
|
|
89
|
+
## Testing
|
|
90
|
+
|
|
91
|
+
Uses VCR cassettes under `tests/dataframe/fixtures/` and `tests/series/fixtures/` — the
|
|
92
|
+
second-largest cassette set in the repo (91 files, behind `gooddata-sdk`'s 689). See the
|
|
93
|
+
root `AGENTS.md` for the recording procedure.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gooddata-pandas
|
|
3
|
-
Version: 1.74.1.
|
|
3
|
+
Version: 1.74.1.dev2
|
|
4
4
|
Summary: GoodData Cloud to pandas
|
|
5
|
-
Project-URL: Documentation, https://gooddata-pandas.readthedocs.io/en/v1.74.1.
|
|
5
|
+
Project-URL: Documentation, https://gooddata-pandas.readthedocs.io/en/v1.74.1.dev2
|
|
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.74.1.
|
|
23
|
+
Requires-Dist: gooddata-sdk~=1.74.1.dev2
|
|
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.74.1.
|
|
4
|
+
version = "1.74.1.dev2"
|
|
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.74.1.
|
|
32
|
+
"gooddata-sdk~=1.74.1.dev2",
|
|
33
33
|
"pandas>=2.0.0,<3.0.0",
|
|
34
34
|
]
|
|
35
35
|
classifiers = [
|
|
@@ -50,19 +50,19 @@ 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.74.1.
|
|
53
|
+
Documentation = "https://gooddata-pandas.readthedocs.io/en/v1.74.1.dev2"
|
|
54
54
|
Source = "https://github.com/gooddata/gooddata-python-sdk"
|
|
55
55
|
|
|
56
56
|
[dependency-groups]
|
|
57
57
|
test = [
|
|
58
|
-
"pytest~=
|
|
59
|
-
"pytest-cov~=
|
|
58
|
+
"pytest~=9.1.1",
|
|
59
|
+
"pytest-cov~=7.1.0",
|
|
60
60
|
"pytest-json-report==1.5.0",
|
|
61
61
|
"pytest-snapshot==0.9.0",
|
|
62
|
-
"pytest-order~=1.
|
|
63
|
-
"vcrpy~=8.
|
|
64
|
-
"urllib3~=2.
|
|
65
|
-
"python-dotenv~=1.
|
|
62
|
+
"pytest-order~=1.5.0",
|
|
63
|
+
"vcrpy~=8.3.0",
|
|
64
|
+
"urllib3~=2.7.0",
|
|
65
|
+
"python-dotenv~=1.2.3",
|
|
66
66
|
"pyyaml",
|
|
67
67
|
"tests_support",
|
|
68
68
|
"pyarrow>=23.0.1",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/docs/_templates/class-template.rst
RENAMED
|
File without changes
|
{gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/docs/_templates/module-template.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/arrow_convertor.py
RENAMED
|
File without changes
|
{gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/arrow_types.py
RENAMED
|
File without changes
|
{gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/data_access.py
RENAMED
|
File without changes
|
{gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/dataframe.py
RENAMED
|
File without changes
|
{gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/good_pandas.py
RENAMED
|
File without changes
|
|
File without changes
|
{gooddata_pandas-1.74.1.dev1 → gooddata_pandas-1.74.1.dev2}/src/gooddata_pandas/result_convertor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|