gooddata-pandas 1.53.0__tar.gz → 1.53.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.

Potentially problematic release.


This version of gooddata-pandas might be problematic. Click here for more details.

Files changed (146) hide show
  1. gooddata_pandas-1.53.1.dev1/.gitignore +67 -0
  2. gooddata_pandas-1.53.1.dev1/.readthedocs.yaml +19 -0
  3. gooddata_pandas-1.53.1.dev1/Makefile +6 -0
  4. {gooddata_pandas-1.53.0/gooddata_pandas.egg-info → gooddata_pandas-1.53.1.dev1}/PKG-INFO +8 -21
  5. gooddata_pandas-1.53.1.dev1/docs/_static/empty_file +1 -0
  6. gooddata_pandas-1.53.1.dev1/docs/_templates/class-template.rst +32 -0
  7. gooddata_pandas-1.53.1.dev1/docs/_templates/module-template.rst +66 -0
  8. gooddata_pandas-1.53.1.dev1/docs/api.rst +9 -0
  9. gooddata_pandas-1.53.1.dev1/docs/conf.py +70 -0
  10. gooddata_pandas-1.53.1.dev1/docs/examples.rst +111 -0
  11. gooddata_pandas-1.53.1.dev1/docs/index.rst +13 -0
  12. gooddata_pandas-1.53.1.dev1/docs/installation.rst +17 -0
  13. gooddata_pandas-1.53.1.dev1/docs/requirements.txt +7 -0
  14. gooddata_pandas-1.53.1.dev1/mypy.ini +17 -0
  15. gooddata_pandas-1.53.1.dev1/pyproject.toml +79 -0
  16. gooddata_pandas-1.53.1.dev1/tests/__init__.py +51 -0
  17. gooddata_pandas-1.53.1.dev1/tests/conftest.py +24 -0
  18. gooddata_pandas-1.53.1.dev1/tests/dataframe/__init__.py +1 -0
  19. gooddata_pandas-1.53.1.dev1/tests/dataframe/conftest.py +9 -0
  20. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_created_visualization.yaml +2500 -0
  21. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_exec_def_bytes_limits_failure.yaml +1171 -0
  22. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_exec_def_dimensions_limits_failure.yaml +1171 -0
  23. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim1.yaml +9448 -0
  24. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim2.yaml +10016 -0
  25. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_exec_def_totals1.yaml +3521 -0
  26. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_exec_def_totals2.yaml +5625 -0
  27. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_exec_def_totals3.yaml +3521 -0
  28. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_exec_def_totals4.yaml +5625 -0
  29. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim1.yaml +3145 -0
  30. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim2.yaml +4936 -0
  31. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim3.yaml +3062 -0
  32. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_items.yaml +576 -0
  33. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_items_no_index.yaml +576 -0
  34. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_visualization.yaml +919 -0
  35. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_visualization_date.yaml +640 -0
  36. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/dataframe_for_visualization_no_index.yaml +919 -0
  37. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/empty_indexed_dataframe.yaml +360 -0
  38. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/empty_not_indexed_dataframe.yaml +360 -0
  39. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/filtered_empty_df.yaml +198 -0
  40. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label.yaml +565 -0
  41. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label_reuse.yaml +481 -0
  42. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/multi_index_metrics.yaml +577 -0
  43. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/multi_index_metrics_and_label.yaml +2521 -0
  44. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/not_indexed_filtered_metrics_and_labels.yaml +377 -0
  45. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/not_indexed_metrics.yaml +208 -0
  46. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/not_indexed_metrics_and_labels.yaml +389 -0
  47. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/simple_index_filtered_metrics_and_label.yaml +484 -0
  48. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/simple_index_metrics.yaml +545 -0
  49. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/simple_index_metrics_and_label.yaml +387 -0
  50. gooddata_pandas-1.53.1.dev1/tests/dataframe/fixtures/simple_index_metrics_no_duplicate.yaml +387 -0
  51. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/analytical_dashboards/b2f2d436-9831-4fe0-81df-8c59fd33242b.yaml +194 -0
  52. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/filter_contexts/4717b786-2c2e-4596-adb5-4f8b0ab0e19a.yaml +22 -0
  53. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/filter_contexts/9f2b1f37-befa-450e-a6cc-dc576845c412.yaml +12 -0
  54. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/amount_of_active_customers.yaml +7 -0
  55. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/amount_of_orders.yaml +7 -0
  56. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/amount_of_top_customers.yaml +8 -0
  57. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/amount_of_valid_orders.yaml +8 -0
  58. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/campaign_spend.yaml +7 -0
  59. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/order_amount.yaml +7 -0
  60. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue.yaml +7 -0
  61. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_customers.yaml +8 -0
  62. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_percent_customers.yaml +8 -0
  63. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_percent_products.yaml +8 -0
  64. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_products.yaml +8 -0
  65. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_in_category.yaml +8 -0
  66. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_per_product.yaml +7 -0
  67. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/revenue-clothing.yaml +7 -0
  68. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/revenue-electronic.yaml +7 -0
  69. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/revenue-home.yaml +7 -0
  70. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/revenue-outdoor.yaml +7 -0
  71. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/revenue.yaml +8 -0
  72. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/revenue_per_customer.yaml +7 -0
  73. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/revenue_per_dollar_spent.yaml +7 -0
  74. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/revenue_top_10.yaml +7 -0
  75. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/revenue_top_10_percent.yaml +7 -0
  76. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/total_revenue-no_filters.yaml +7 -0
  77. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/metrics/total_revenue.yaml +7 -0
  78. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/visualization_objects/campaign_spend.yaml +62 -0
  79. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/visualization_objects/customers_trend.yaml +74 -0
  80. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/visualization_objects/percent_revenue_per_product_by_customer_and_category.yaml +77 -0
  81. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/visualization_objects/percentage_of_customers_by_region.yaml +57 -0
  82. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/visualization_objects/product_breakdown.yaml +55 -0
  83. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/visualization_objects/product_categories_pie_chart.yaml +50 -0
  84. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/visualization_objects/product_revenue_comparison-over_previous_period.yaml +73 -0
  85. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/visualization_objects/product_saleability.yaml +55 -0
  86. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_and_quantity_by_product_and_category.yaml +97 -0
  87. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_by_category_trend.yaml +54 -0
  88. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_by_product.yaml +37 -0
  89. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_per_usd_vs_spend_by_campaign.yaml +54 -0
  90. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_trend.yaml +66 -0
  91. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/visualization_objects/top_10_customers.yaml +55 -0
  92. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/analytics_model/visualization_objects/top_10_products.yaml +55 -0
  93. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/ldm/datasets/campaign_channels.yaml +67 -0
  94. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/ldm/datasets/campaigns.yaml +35 -0
  95. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/ldm/datasets/customers.yaml +58 -0
  96. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/ldm/datasets/order_lines.yaml +108 -0
  97. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/ldm/datasets/products.yaml +43 -0
  98. gooddata_pandas-1.53.1.dev1/tests/dataframe/load/ai/ldm/date_instances/date.yaml +15 -0
  99. gooddata_pandas-1.53.1.dev1/tests/dataframe/test_dataframe_for_created_visualization.py +66 -0
  100. gooddata_pandas-1.53.1.dev1/tests/dataframe/test_dataframe_for_exec_def.py +436 -0
  101. gooddata_pandas-1.53.1.dev1/tests/dataframe/test_dataframe_for_insight.py +51 -0
  102. gooddata_pandas-1.53.1.dev1/tests/dataframe/test_dataframe_for_items.py +47 -0
  103. gooddata_pandas-1.53.1.dev1/tests/dataframe/test_indexed_dataframe.py +213 -0
  104. gooddata_pandas-1.53.1.dev1/tests/dataframe/test_not_indexed_dataframe.py +91 -0
  105. gooddata_pandas-1.53.1.dev1/tests/gd_test_config.yaml +6 -0
  106. gooddata_pandas-1.53.1.dev1/tests/good_pandas/__init__.py +1 -0
  107. gooddata_pandas-1.53.1.dev1/tests/good_pandas/profiles/profiles.yaml +34 -0
  108. gooddata_pandas-1.53.1.dev1/tests/good_pandas/test_good_pandas.py +47 -0
  109. gooddata_pandas-1.53.1.dev1/tests/overview.md +6 -0
  110. gooddata_pandas-1.53.1.dev1/tests/series/__init__.py +1 -0
  111. gooddata_pandas-1.53.1.dev1/tests/series/conftest.py +9 -0
  112. gooddata_pandas-1.53.1.dev1/tests/series/fixtures/multi_index_filtered_series.yaml +469 -0
  113. gooddata_pandas-1.53.1.dev1/tests/series/fixtures/multi_index_metric_series.yaml +545 -0
  114. gooddata_pandas-1.53.1.dev1/tests/series/fixtures/not_indexed_filtered_metric_series.yaml +388 -0
  115. gooddata_pandas-1.53.1.dev1/tests/series/fixtures/not_indexed_label_series.yaml +340 -0
  116. gooddata_pandas-1.53.1.dev1/tests/series/fixtures/not_indexed_label_series_with_granularity.yaml +504 -0
  117. gooddata_pandas-1.53.1.dev1/tests/series/fixtures/not_indexed_metric_series.yaml +192 -0
  118. gooddata_pandas-1.53.1.dev1/tests/series/fixtures/not_indexed_metric_series_with_granularity.yaml +369 -0
  119. gooddata_pandas-1.53.1.dev1/tests/series/fixtures/simple_index_filtered_series.yaml +424 -0
  120. gooddata_pandas-1.53.1.dev1/tests/series/fixtures/simple_index_label_series.yaml +340 -0
  121. gooddata_pandas-1.53.1.dev1/tests/series/fixtures/simple_index_metric_series.yaml +369 -0
  122. gooddata_pandas-1.53.1.dev1/tests/series/test_indexed_series.py +85 -0
  123. gooddata_pandas-1.53.1.dev1/tests/series/test_not_indexed_series.py +69 -0
  124. gooddata_pandas-1.53.1.dev1/tests/utils/__init__.py +1 -0
  125. gooddata_pandas-1.53.1.dev1/tests/utils/fixtures/test_get_catalog_attributes_for_extract.yaml +260 -0
  126. gooddata_pandas-1.53.1.dev1/tests/utils/test_utils.py +24 -0
  127. gooddata_pandas-1.53.1.dev1/tox.ini +34 -0
  128. gooddata_pandas-1.53.0/PKG-INFO +0 -93
  129. gooddata_pandas-1.53.0/gooddata_pandas.egg-info/SOURCES.txt +0 -18
  130. gooddata_pandas-1.53.0/gooddata_pandas.egg-info/dependency_links.txt +0 -1
  131. gooddata_pandas-1.53.0/gooddata_pandas.egg-info/requires.txt +0 -2
  132. gooddata_pandas-1.53.0/gooddata_pandas.egg-info/top_level.txt +0 -1
  133. gooddata_pandas-1.53.0/setup.cfg +0 -4
  134. gooddata_pandas-1.53.0/setup.py +0 -65
  135. {gooddata_pandas-1.53.0 → gooddata_pandas-1.53.1.dev1}/LICENSE.txt +0 -0
  136. {gooddata_pandas-1.53.0 → gooddata_pandas-1.53.1.dev1}/MANIFEST.in +0 -0
  137. {gooddata_pandas-1.53.0 → gooddata_pandas-1.53.1.dev1}/README.md +0 -0
  138. {gooddata_pandas-1.53.0 → gooddata_pandas-1.53.1.dev1/src}/gooddata_pandas/__init__.py +0 -0
  139. {gooddata_pandas-1.53.0 → gooddata_pandas-1.53.1.dev1/src}/gooddata_pandas/_version.py +0 -0
  140. {gooddata_pandas-1.53.0 → gooddata_pandas-1.53.1.dev1/src}/gooddata_pandas/data_access.py +0 -0
  141. {gooddata_pandas-1.53.0 → gooddata_pandas-1.53.1.dev1/src}/gooddata_pandas/dataframe.py +0 -0
  142. {gooddata_pandas-1.53.0 → gooddata_pandas-1.53.1.dev1/src}/gooddata_pandas/good_pandas.py +0 -0
  143. {gooddata_pandas-1.53.0 → gooddata_pandas-1.53.1.dev1/src}/gooddata_pandas/py.typed +0 -0
  144. {gooddata_pandas-1.53.0 → gooddata_pandas-1.53.1.dev1/src}/gooddata_pandas/result_convertor.py +0 -0
  145. {gooddata_pandas-1.53.0 → gooddata_pandas-1.53.1.dev1/src}/gooddata_pandas/series.py +0 -0
  146. {gooddata_pandas-1.53.0 → gooddata_pandas-1.53.1.dev1/src}/gooddata_pandas/utils.py +0 -0
@@ -0,0 +1,67 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ env/
12
+ build/
13
+ develop-eggs/
14
+ dist/
15
+ downloads/
16
+ eggs/
17
+ .eggs/
18
+ lib/
19
+ lib64/
20
+ parts/
21
+ sdist/
22
+ var/
23
+ *.egg-info/
24
+ .installed.cfg
25
+ *.egg
26
+
27
+ # PyInstaller
28
+ # Usually these files are written by a python script from a template
29
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
30
+ *.manifest
31
+ *.spec
32
+
33
+ # Installer logs
34
+ pip-log.txt
35
+ pip-delete-this-directory.txt
36
+
37
+ # Unit test / coverage reports
38
+ htmlcov/
39
+ .tox/
40
+ .coverage
41
+ .coverage.*
42
+ .cache
43
+ nosetests.xml
44
+ coverage.xml
45
+ *,cover
46
+ .hypothesis/
47
+ venv/
48
+ .venv/
49
+ .python-version
50
+ .pytest_cache
51
+
52
+ # Translations
53
+ *.mo
54
+ *.pot
55
+
56
+ # Django stuff:
57
+ *.log
58
+
59
+ # Sphinx documentation
60
+ docs/_build/
61
+ docs/_autosummary/
62
+
63
+ # PyBuilder
64
+ target/
65
+
66
+ #Ipython Notebook
67
+ .ipynb_checkpoints
@@ -0,0 +1,19 @@
1
+ # (C) 2023 GoodData Corporation
2
+ # Read the Docs configuration file for Sphinx projects
3
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
4
+
5
+ # Required
6
+ version: 2
7
+
8
+ # Set the OS, Python version and other tools you might need
9
+ build:
10
+ os: ubuntu-22.04
11
+ tools:
12
+ python: "3.13"
13
+
14
+ sphinx:
15
+ configuration: gooddata-pandas/docs/conf.py
16
+
17
+ python:
18
+ install:
19
+ - requirements: gooddata-pandas/docs/requirements.txt
@@ -0,0 +1,6 @@
1
+ # (C) 2021 GoodData Corporation
2
+ include ../../project_common.mk
3
+
4
+ .PHONY: docs
5
+ docs:
6
+ tox $(TOX_FLAGS) -e docs
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gooddata-pandas
3
- Version: 1.53.0
3
+ Version: 1.53.1.dev1
4
4
  Summary: GoodData Cloud to pandas
5
- Author: GoodData
6
- Author-email: support@gooddata.com
7
- License: MIT
8
- Project-URL: Documentation, https://gooddata-pandas.readthedocs.io/en/v1.53.0
5
+ Project-URL: Documentation, https://gooddata-pandas.readthedocs.io/en/v1.53.1.dev1
9
6
  Project-URL: Source, https://github.com/gooddata/gooddata-python-sdk
10
- Keywords: gooddata,pandas,series,data,frame,data_frame,analytics,headless,business,intelligence,headless-bi,cloud,native,semantic,layer,sql,metrics
7
+ Author-email: GoodData <support@gooddata.com>
8
+ License: MIT
9
+ License-File: LICENSE.txt
10
+ Keywords: analytics,business,cloud,data,data_frame,frame,gooddata,headless,headless-bi,intelligence,layer,metrics,native,pandas,semantic,series,sql
11
11
  Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: Environment :: Console
13
13
  Classifier: License :: OSI Approved :: MIT License
@@ -21,22 +21,9 @@ Classifier: Topic :: Scientific/Engineering
21
21
  Classifier: Topic :: Software Development
22
22
  Classifier: Typing :: Typed
23
23
  Requires-Python: >=3.9.0
24
- Description-Content-Type: text/markdown
25
- License-File: LICENSE.txt
26
- Requires-Dist: gooddata-sdk~=1.53.0
24
+ Requires-Dist: gooddata-sdk~=1.53.1.dev1
27
25
  Requires-Dist: pandas<3.0.0,>=2.0.0
28
- Dynamic: author
29
- Dynamic: author-email
30
- Dynamic: classifier
31
- Dynamic: description
32
- Dynamic: description-content-type
33
- Dynamic: keywords
34
- Dynamic: license
35
- Dynamic: license-file
36
- Dynamic: project-url
37
- Dynamic: requires-dist
38
- Dynamic: requires-python
39
- Dynamic: summary
26
+ Description-Content-Type: text/markdown
40
27
 
41
28
  # GoodData Pandas
42
29
 
@@ -0,0 +1 @@
1
+ # (C) 2022 GoodData Corporation
@@ -0,0 +1,32 @@
1
+ {{ fullname | escape | underline}}
2
+
3
+ .. currentmodule:: {{ module }}
4
+
5
+ .. autoclass:: {{ objname }}
6
+ :members:
7
+ :show-inheritance:
8
+ :inherited-members:
9
+
10
+ {% block methods %}
11
+ .. automethod:: __init__
12
+
13
+ {% if methods %}
14
+ .. rubric:: {{ _('Methods') }}
15
+
16
+ .. autosummary::
17
+ {% for item in methods %}
18
+ ~{{ name }}.{{ item }}
19
+ {%- endfor %}
20
+ {% endif %}
21
+ {% endblock %}
22
+
23
+ {% block attributes %}
24
+ {% if attributes %}
25
+ .. rubric:: {{ _('Attributes') }}
26
+
27
+ .. autosummary::
28
+ {% for item in attributes %}
29
+ ~{{ name }}.{{ item }}
30
+ {%- endfor %}
31
+ {% endif %}
32
+ {% endblock %}
@@ -0,0 +1,66 @@
1
+ {{ fullname | escape | underline}}
2
+
3
+ .. automodule:: {{ fullname }}
4
+
5
+ {% block attributes %}
6
+ {% if attributes %}
7
+ .. rubric:: Module Attributes
8
+
9
+ .. autosummary::
10
+ :toctree:
11
+ {% for item in attributes %}
12
+ {{ item }}
13
+ {%- endfor %}
14
+ {% endif %}
15
+ {% endblock %}
16
+
17
+ {% block functions %}
18
+ {% if functions %}
19
+ .. rubric:: {{ _('Functions') }}
20
+
21
+ .. autosummary::
22
+ :toctree:
23
+ {% for item in functions %}
24
+ {{ item }}
25
+ {%- endfor %}
26
+ {% endif %}
27
+ {% endblock %}
28
+
29
+ {% block classes %}
30
+ {% if classes %}
31
+ .. rubric:: {{ _('Classes') }}
32
+
33
+ .. autosummary::
34
+ :toctree:
35
+ :template: class-template.rst
36
+ {% for item in classes %}
37
+ {{ item }}
38
+ {%- endfor %}
39
+ {% endif %}
40
+ {% endblock %}
41
+
42
+ {% block exceptions %}
43
+ {% if exceptions %}
44
+ .. rubric:: {{ _('Exceptions') }}
45
+
46
+ .. autosummary::
47
+ :toctree:
48
+ {% for item in exceptions %}
49
+ {{ item }}
50
+ {%- endfor %}
51
+ {% endif %}
52
+ {% endblock %}
53
+
54
+ {% block modules %}
55
+ {% if modules %}
56
+ .. rubric:: Modules
57
+
58
+ .. autosummary::
59
+ :toctree:
60
+ :template: module-template.rst
61
+ :recursive:
62
+ {% for item in modules %}
63
+ {{ item }}
64
+ {%- endfor %}
65
+ {% endif %}
66
+ {% endblock %}
@@ -0,0 +1,9 @@
1
+ API
2
+ ===
3
+
4
+ .. autosummary::
5
+ :toctree: _autosummary
6
+ :template: module-template.rst
7
+ :recursive:
8
+
9
+ gooddata_pandas
@@ -0,0 +1,70 @@
1
+ # (C) 2022 GoodData Corporation
2
+ # Configuration file for the Sphinx documentation builder.
3
+ #
4
+ # This file only contains a selection of the most common options. For a full
5
+ # list see the documentation:
6
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html
7
+
8
+ # -- Path setup --------------------------------------------------------------
9
+
10
+ # If extensions (or modules to document with autodoc) are in another directory,
11
+ # add these directories to sys.path here. If the directory is relative to the
12
+ # documentation root, use os.path.abspath to make it absolute, like shown here.
13
+ #
14
+ import os
15
+ import sys
16
+
17
+ import gooddata_pandas
18
+
19
+ sys.path.insert(0, os.path.abspath(".."))
20
+ print(f"sys.path = {sys.path}")
21
+ print(f"os.getcwd() = {os.getcwd()}")
22
+
23
+ project = "GoodData Pandas"
24
+ copyright = "2021-2022, GoodData Corporation"
25
+ author = "GoodData Corporation"
26
+
27
+ # The full version, including alpha/beta/rc tags
28
+ release = gooddata_pandas.__version__
29
+
30
+
31
+ # -- General configuration ---------------------------------------------------
32
+
33
+ # Add any Sphinx extension module names here, as strings. They can be
34
+ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
35
+ # ones.
36
+ extensions = [
37
+ "pallets_sphinx_themes",
38
+ "sphinx.ext.autodoc",
39
+ "sphinx.ext.autosummary",
40
+ "sphinx.ext.intersphinx",
41
+ ]
42
+
43
+ # Add any paths that contain templates here, relative to this directory.
44
+ templates_path = ["_templates"]
45
+
46
+ # List of patterns, relative to source directory, that match files and
47
+ # directories to ignore when looking for source files.
48
+ # This pattern also affects html_static_path and html_extra_path.
49
+ exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
50
+
51
+
52
+ # -- Options for HTML output -------------------------------------------------
53
+
54
+ # The theme to use for HTML and HTML Help pages. See the documentation for
55
+ # a list of builtin themes.
56
+ #
57
+ html_theme = "sphinx_rtd_theme"
58
+
59
+ # Add any paths that contain custom static files (such as style sheets) here,
60
+ # relative to this directory. They are copied after the builtin static files,
61
+ # so a file named "default.css" will overwrite the builtin "default.css".
62
+ html_static_path = ["_static"]
63
+
64
+ source_suffix = {
65
+ ".rst": "restructuredtext",
66
+ }
67
+
68
+ # intersphinx_mapping = {
69
+ # "gooddata_sdk": ("", None)
70
+ # }
@@ -0,0 +1,111 @@
1
+
2
+ Examples
3
+ ********
4
+
5
+ Here are a couple of introductory examples how to create indexed and not-indexed series and data frames:
6
+
7
+ Series
8
+ ======
9
+
10
+ .. code-block:: python
11
+
12
+ from gooddata_pandas import GoodPandas
13
+
14
+ # GoodData.CN host in the form of uri eg. "http://localhost:3000"
15
+ host = "http://localhost:3000"
16
+ # GoodData.CN user token
17
+ token = "some_user_token"
18
+ # initialize the adapter to work on top of GD.CN host and use the provided authentication token
19
+ gp = GoodPandas(host, token)
20
+
21
+ workspace_id = "demo"
22
+ series = gp.series(workspace_id)
23
+
24
+ # create indexed series
25
+ indexed_series = series.indexed(index_by="label/label_id", data_by="fact/measure_id")
26
+
27
+ # create non-indexed series containing just the values of measure sliced by elements of the label
28
+ non_indexed = series.not_indexed(data_by="fact/measure_id", granularity="label/label_id")
29
+
30
+ Data Frames
31
+ ===========
32
+
33
+ .. code-block:: python
34
+
35
+ from gooddata_pandas import GoodPandas
36
+
37
+ # GoodData.CN host in the form of uri eg. "http://localhost:3000"
38
+ host = "http://localhost:3000"
39
+ # GoodData.CN user token
40
+ token = "some_user_token"
41
+ # initialize the adapter to work on top of GD.CN host and use the provided authentication token
42
+ gp = GoodPandas(host, token)
43
+
44
+ workspace_id = "demo"
45
+ frames = gp.data_frames(workspace_id)
46
+
47
+ # create indexed data frame
48
+ indexed_df = frames.indexed(
49
+ index_by="label/label_id",
50
+ columns=dict(
51
+ first_label='label/first_label_id',
52
+ second_label='label/second_label_id',
53
+ first_metric='metric/first_metric_id',
54
+ second_metric='fact/fact_id'
55
+ )
56
+ )
57
+
58
+ # create data frame with hierarchical index
59
+ indexed_df = frames.indexed(
60
+ index_by=dict(first_label='label/first_label_id', second_label='label/second_label_id'),
61
+ columns=dict(first_metric='metric/first_metric_id', second_metric='fact/fact_id')
62
+ )
63
+
64
+ # create non-indexed data frame
65
+ non_indexed_df = frames.not_indexed(
66
+ columns=dict(
67
+ first_label='label/first_label_id',
68
+ second_label='label/second_label_id',
69
+ first_metric='metric/first_metric_id',
70
+ second_metric='fact/fact_id'
71
+ )
72
+ )
73
+
74
+ # create data frame based on the contents of the visualization. if the visualization contains labels and
75
+ # measures, the data frame will contain index or hierarchical index.
76
+ visualization_df = frames.for_visualization('visualization_id')
77
+
78
+ # create data frame based on the content of the items dict. if the dict contains both labels
79
+ # and measures, the frame will contain index or hierarchical index.
80
+ df = frames.for_items(
81
+ items=dict(
82
+ first_label='label/first_label_id',
83
+ second_label='label/second_label_id',
84
+ first_metric='metric/first_metric_id',
85
+ second_metric='fact/fact_id'
86
+ )
87
+ )
88
+
89
+ # create data frame from custom execution definition
90
+ exec_def = ExecutionDefinition(
91
+ attributes=[
92
+ Attribute(local_id="region", label="region"),
93
+ Attribute(local_id="state", label="state"),
94
+ Attribute(local_id="product_category", label="products.category"),
95
+ ],
96
+ metrics=[
97
+ SimpleMetric(local_id="price", item=ObjId(id="price", type="fact")),
98
+ SimpleMetric(local_id="order_amount", item=ObjId(id="order_amount", type="metric")),
99
+ ],
100
+ filters=[],
101
+ dimensions=[
102
+ TableDimension(item_ids=["state", "region"]),
103
+ TableDimension(item_ids=["product_category", "measureGroup"]),
104
+ ],
105
+ )
106
+ df, df_metadata = frames.for_exec_def(exec_def=exec_def)
107
+
108
+ # use result ID from computation above and generate dataframe just from it
109
+ df_from_result_id, df_metadata_from_result_id = frames.for_exec_result_id(
110
+ result_id=df_metadata.execution_response.result_id,
111
+ )
@@ -0,0 +1,13 @@
1
+ GoodData Pandas Documentation
2
+ *****************************
3
+
4
+ GoodData Pandas contains a thin layer that utilizes GoodData Python SDK and allows you to conveniently create pandas series and
5
+ data frames from the computations done against semantic model in your GoodData.CN workspace.
6
+
7
+ .. toctree::
8
+ :maxdepth: 2
9
+ :caption: Contents:
10
+
11
+ installation
12
+ examples
13
+ api
@@ -0,0 +1,17 @@
1
+ Installation
2
+ ************
3
+
4
+ Requirements
5
+ =============
6
+
7
+ - Python 3.7 or newer
8
+ - GoodData.CN or GoodData Cloud
9
+
10
+ Installation
11
+ ============
12
+
13
+ Run the following command to install the ``gooddata-pandas`` package on your system:
14
+
15
+ .. code-block:: shell
16
+
17
+ pip install gooddata-pandas
@@ -0,0 +1,7 @@
1
+ Sphinx~=5.1.1
2
+ pallets-sphinx-themes
3
+ sphinx-rtd-theme
4
+ # Dependencies to the other projects in the repository
5
+ -e ../gooddata-api-client
6
+ -e ../gooddata-sdk
7
+ -e ../gooddata-pandas
@@ -0,0 +1,17 @@
1
+ # (C) 2021 GoodData Corporation
2
+ [mypy]
3
+ plugins = pydantic.mypy
4
+ disallow_untyped_defs = True
5
+ warn_redundant_casts = True
6
+ strict_equality = True
7
+ no_implicit_optional = True
8
+ python_version = 3.9
9
+
10
+ [mypy-gooddata_api_client.*]
11
+ ignore_missing_imports = True
12
+
13
+ [mypy-gooddata_sdk.*]
14
+ ignore_missing_imports = True
15
+
16
+ [mypy-pandas.*]
17
+ ignore_missing_imports = True
@@ -0,0 +1,79 @@
1
+ # (C) 2025 GoodData Corporation
2
+ [project]
3
+ name = "gooddata-pandas"
4
+ version = "1.53.1.dev1"
5
+ description = "GoodData Cloud to pandas"
6
+ readme = "README.md"
7
+ license = {text = "MIT"}
8
+ authors = [
9
+ {name = "GoodData", email = "support@gooddata.com"}
10
+ ]
11
+ keywords = [
12
+ "gooddata",
13
+ "pandas",
14
+ "series",
15
+ "data",
16
+ "frame",
17
+ "data_frame",
18
+ "analytics",
19
+ "headless",
20
+ "business",
21
+ "intelligence",
22
+ "headless-bi",
23
+ "cloud",
24
+ "native",
25
+ "semantic",
26
+ "layer",
27
+ "sql",
28
+ "metrics",
29
+ ]
30
+ requires-python = ">=3.9.0"
31
+ dependencies = [
32
+ "gooddata-sdk~=1.53.1.dev1",
33
+ "pandas>=2.0.0,<3.0.0",
34
+ ]
35
+
36
+ classifiers = [
37
+ "Development Status :: 5 - Production/Stable",
38
+ "Environment :: Console",
39
+ "License :: OSI Approved :: MIT License",
40
+ "Programming Language :: Python :: 3.9",
41
+ "Programming Language :: Python :: 3.10",
42
+ "Programming Language :: Python :: 3.11",
43
+ "Programming Language :: Python :: 3.12",
44
+ "Programming Language :: Python :: 3.13",
45
+ "Topic :: Database",
46
+ "Topic :: Scientific/Engineering",
47
+ "Topic :: Software Development",
48
+ "Typing :: Typed",
49
+ ]
50
+
51
+ [tool.uv.sources]
52
+ gooddata-sdk = { workspace = true }
53
+
54
+ [project.urls]
55
+ Documentation = "https://gooddata-pandas.readthedocs.io/en/v1.53.1.dev1"
56
+ Source = "https://github.com/gooddata/gooddata-python-sdk"
57
+
58
+ [dependency-groups]
59
+ test = [
60
+ "pytest~=8.3.4",
61
+ "pytest-cov~=6.0.0",
62
+ "pytest-snapshot==0.9.0",
63
+ "pytest-order~=1.3.0",
64
+ "vcrpy~=7.0.0",
65
+ "urllib3==1.26.9",
66
+ "python-dotenv~=1.0.0",
67
+ "pyyaml"
68
+ ]
69
+ type = [
70
+ "mypy~=1.11.2",
71
+ "pydantic~=2.9.2"
72
+ ]
73
+
74
+ [tool.hatch.build.targets.wheel]
75
+ packages = ["src/gooddata_pandas"]
76
+
77
+ [build-system]
78
+ requires = ["hatchling"]
79
+ build-backend = "hatchling.build"
@@ -0,0 +1,51 @@
1
+ # (C) 2021 GoodData Corporation
2
+ from __future__ import annotations
3
+
4
+ from dotenv import dotenv_values, find_dotenv
5
+
6
+
7
+ def _load_test_env():
8
+ try:
9
+ test_env = find_dotenv(".env.test", raise_error_if_not_found=True)
10
+
11
+ return dotenv_values(test_env)
12
+ except OSError:
13
+ return dict()
14
+
15
+
16
+ def get_test_token():
17
+ config = _load_test_env()
18
+
19
+ if "TEST_TOKEN" not in config:
20
+ # returning bogus token so that tests that use vcr recordings have something to use
21
+ return "test-token-undefined"
22
+
23
+ return config["TEST_TOKEN"]
24
+
25
+
26
+ TEST_DATA_REGIONS = [
27
+ "Aargau",
28
+ "Basel-Landschaft",
29
+ "Basel-Stadt",
30
+ "Bern",
31
+ "Fribourg",
32
+ "Geneva",
33
+ "Glarus",
34
+ "Graubünden",
35
+ "Jura",
36
+ "Lucerne",
37
+ "Neuchâtel",
38
+ "Nidwalden",
39
+ "Obwalden",
40
+ "Schaffhausen",
41
+ "Schwyz",
42
+ "Solothurn",
43
+ "St. Gallen",
44
+ "Thurgau",
45
+ "Ticino",
46
+ "Uri",
47
+ "Valais",
48
+ "Vaud",
49
+ "Zug",
50
+ "Zürich",
51
+ ]
@@ -0,0 +1,24 @@
1
+ # (C) 2021 GoodData Corporation
2
+ from pathlib import Path
3
+
4
+ import pytest
5
+ import yaml
6
+
7
+
8
+ def pytest_addoption(parser):
9
+ default_config_path = Path(__file__).parent / "gd_test_config.yaml"
10
+ parser.addoption(
11
+ "--gd-test-config",
12
+ action="store",
13
+ default=str(default_config_path),
14
+ help="Absolut path to test configuration",
15
+ )
16
+
17
+
18
+ @pytest.fixture(scope="session")
19
+ def test_config(request):
20
+ config_path = Path(request.config.getoption("--gd-test-config"))
21
+ with open(config_path) as f:
22
+ config = yaml.safe_load(f)
23
+
24
+ return config
@@ -0,0 +1 @@
1
+ # (C) 2021 GoodData Corporation
@@ -0,0 +1,9 @@
1
+ # (C) 2021 GoodData Corporation
2
+ import pytest
3
+ from gooddata_pandas import DataFrameFactory, GoodPandas
4
+
5
+
6
+ @pytest.fixture
7
+ def gdf(test_config) -> DataFrameFactory:
8
+ gdpd = GoodPandas(host=test_config["host"], token=test_config["token"])
9
+ return gdpd.data_frames(test_config["workspace"])