gooddata-flight-server 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-flight-server might be problematic. Click here for more details.

Files changed (94) hide show
  1. gooddata_flight_server-1.53.1.dev1/.gitignore +69 -0
  2. gooddata_flight_server-1.53.1.dev1/.readthedocs.yaml +19 -0
  3. gooddata_flight_server-1.53.1.dev1/Makefile +19 -0
  4. {gooddata_flight_server-1.53.0/gooddata_flight_server.egg-info → gooddata_flight_server-1.53.1.dev1}/PKG-INFO +7 -20
  5. gooddata_flight_server-1.53.1.dev1/mypy.ini +35 -0
  6. gooddata_flight_server-1.53.1.dev1/pyproject.toml +77 -0
  7. gooddata_flight_server-1.53.1.dev1/sample-config.toml +345 -0
  8. gooddata_flight_server-1.53.1.dev1/tests/__init__.py +1 -0
  9. gooddata_flight_server-1.53.1.dev1/tests/assert_error_info.py +12 -0
  10. gooddata_flight_server-1.53.1.dev1/tests/config/__init__.py +1 -0
  11. gooddata_flight_server-1.53.1.dev1/tests/config/auth-config.toml +6 -0
  12. gooddata_flight_server-1.53.1.dev1/tests/config/empty-config.toml +5 -0
  13. gooddata_flight_server-1.53.1.dev1/tests/config/private_key.pem +1 -0
  14. gooddata_flight_server-1.53.1.dev1/tests/config/sample-config.toml +34 -0
  15. gooddata_flight_server-1.53.1.dev1/tests/config/test_config.py +80 -0
  16. gooddata_flight_server-1.53.1.dev1/tests/config/tls-config.toml +11 -0
  17. gooddata_flight_server-1.53.1.dev1/tests/errors/__init__.py +1 -0
  18. gooddata_flight_server-1.53.1.dev1/tests/errors/error_info.py +92 -0
  19. gooddata_flight_server-1.53.1.dev1/tests/server/__init__.py +1 -0
  20. gooddata_flight_server-1.53.1.dev1/tests/server/conftest.py +91 -0
  21. gooddata_flight_server-1.53.1.dev1/tests/server/test_server.py +121 -0
  22. gooddata_flight_server-1.53.1.dev1/tests/server/testing_token_verifier.py +11 -0
  23. gooddata_flight_server-1.53.1.dev1/tests/server/tls/ca-cert.pem +35 -0
  24. gooddata_flight_server-1.53.1.dev1/tests/server/tls/client-cert.pem +33 -0
  25. gooddata_flight_server-1.53.1.dev1/tests/server/tls/client-key.pem +52 -0
  26. gooddata_flight_server-1.53.1.dev1/tests/server/tls/server-cert.pem +33 -0
  27. gooddata_flight_server-1.53.1.dev1/tests/server/tls/server-key.pem +52 -0
  28. gooddata_flight_server-1.53.1.dev1/tests/tasks/__init__.py +1 -0
  29. gooddata_flight_server-1.53.1.dev1/tests/tasks/test_task_executor.py +231 -0
  30. gooddata_flight_server-1.53.1.dev1/tests/tasks/test_temporal_container.py +72 -0
  31. gooddata_flight_server-1.53.1.dev1/tests/utils/invalid_methods_module/__init__.py +2 -0
  32. gooddata_flight_server-1.53.1.dev1/tests/utils/invalid_methods_module/mock_methods.py +16 -0
  33. gooddata_flight_server-1.53.1.dev1/tests/utils/multiple_methods_module/__init__.py +5 -0
  34. gooddata_flight_server-1.53.1.dev1/tests/utils/multiple_methods_module/mock_methods.py +18 -0
  35. gooddata_flight_server-1.53.1.dev1/tests/utils/no_methods_module/__init__.py +2 -0
  36. gooddata_flight_server-1.53.1.dev1/tests/utils/no_methods_module/mock_methods.py +12 -0
  37. gooddata_flight_server-1.53.1.dev1/tests/utils/test_methods_discovery.py +49 -0
  38. gooddata_flight_server-1.53.1.dev1/tests/utils/valid_methods_module/__init__.py +2 -0
  39. gooddata_flight_server-1.53.1.dev1/tests/utils/valid_methods_module/mock_methods.py +13 -0
  40. gooddata_flight_server-1.53.1.dev1/tox.ini +29 -0
  41. gooddata_flight_server-1.53.0/PKG-INFO +0 -750
  42. gooddata_flight_server-1.53.0/gooddata_flight_server.egg-info/SOURCES.txt +0 -53
  43. gooddata_flight_server-1.53.0/gooddata_flight_server.egg-info/dependency_links.txt +0 -1
  44. gooddata_flight_server-1.53.0/gooddata_flight_server.egg-info/requires.txt +0 -8
  45. gooddata_flight_server-1.53.0/gooddata_flight_server.egg-info/top_level.txt +0 -1
  46. gooddata_flight_server-1.53.0/setup.cfg +0 -4
  47. gooddata_flight_server-1.53.0/setup.py +0 -74
  48. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1}/LICENSE.txt +0 -0
  49. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1}/MANIFEST.in +0 -0
  50. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1}/README.md +0 -0
  51. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1}/bin/gooddata-flight-server +0 -0
  52. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/__init__.py +0 -0
  53. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/_version.py +0 -0
  54. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/cli.py +0 -0
  55. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/config/__init__.py +0 -0
  56. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/config/config.py +0 -0
  57. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/errors/__init__.py +0 -0
  58. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/errors/error_code.py +0 -0
  59. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/errors/error_info.py +0 -0
  60. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/exceptions.py +0 -0
  61. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/health/__init__.py +0 -0
  62. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/health/health_check_http_server.py +0 -0
  63. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/health/server_health_monitor.py +0 -0
  64. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/metrics.py +0 -0
  65. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/py.typed +0 -0
  66. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/server/__init__.py +0 -0
  67. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/server/auth/__init__.py +0 -0
  68. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/server/auth/auth_middleware.py +0 -0
  69. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/server/auth/token_verifier.py +0 -0
  70. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/server/auth/token_verifier_factory.py +0 -0
  71. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/server/auth/token_verifier_impl.py +0 -0
  72. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/server/base.py +0 -0
  73. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/server/default.logging.ini +0 -0
  74. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/server/flight_rpc/__init__.py +0 -0
  75. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/server/flight_rpc/flight_middleware.py +0 -0
  76. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/server/flight_rpc/flight_server.py +0 -0
  77. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/server/flight_rpc/flight_service.py +0 -0
  78. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/server/flight_rpc/server_methods.py +0 -0
  79. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/server/server_base.py +0 -0
  80. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/server/server_main.py +0 -0
  81. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/tasks/__init__.py +0 -0
  82. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/tasks/base.py +0 -0
  83. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/tasks/metrics.py +0 -0
  84. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/tasks/task.py +0 -0
  85. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/tasks/task_error.py +0 -0
  86. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/tasks/task_executor.py +0 -0
  87. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/tasks/task_result.py +0 -0
  88. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/tasks/temporal_container.py +0 -0
  89. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/tasks/thread_task_executor.py +0 -0
  90. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/utils/__init__.py +0 -0
  91. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/utils/libc_utils.py +0 -0
  92. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/utils/logging.py +0 -0
  93. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/utils/methods_discovery.py +0 -0
  94. {gooddata_flight_server-1.53.0 → gooddata_flight_server-1.53.1.dev1/src}/gooddata_flight_server/utils/otel_tracing.py +0 -0
@@ -0,0 +1,69 @@
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
68
+
69
+ test_data
@@ -0,0 +1,19 @@
1
+ # (C) 2024 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.11"
13
+
14
+ sphinx:
15
+ configuration: gooddata-flight-server/docs/conf.py
16
+
17
+ python:
18
+ install:
19
+ - requirements: gooddata-flight-server/docs/requirements.txt
@@ -0,0 +1,19 @@
1
+ # (C) 2024 GoodData Corporation
2
+ include ../../project_common.mk
3
+
4
+ .PHONY: docs
5
+ docs:
6
+ tox $(TOX_FLAGS) -e docs
7
+
8
+
9
+ .PHONY: dev-certs
10
+ dev-certs:
11
+ mkdir -p test_data
12
+ # create CA with self-signed certificate > generate keys + cert requests for server and client > sign
13
+ cd test_data && \
14
+ rm -f *.pem && \
15
+ openssl req -x509 -newkey rsa:4096 -days 3650 -nodes -keyout ca-key.pem -out ca-cert.pem -subj "/C=NA/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=localhost/emailAddress=example@example.com" && \
16
+ openssl req -newkey rsa:4096 -nodes -keyout server-key.pem -out server-req.pem -subj "/C=NA/ST=Unknown/L=Unknown/O=Unknown/OU=Computer/CN=localhost/emailAddress=example@example.com" && \
17
+ openssl req -newkey rsa:4096 -nodes -keyout client-key.pem -out client-req.pem -subj "/C=NA/ST=Unknown/L=Unknown/O=Unknown/OU=Computer/CN=testClient1/emailAddress=example@example.com" && \
18
+ openssl x509 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem && \
19
+ openssl x509 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gooddata-flight-server
3
- Version: 1.53.0
3
+ Version: 1.53.1.dev1
4
4
  Summary: Flight RPC server to host custom functions
5
- Author: GoodData
6
- Author-email: support@gooddata.com
7
- License: MIT
8
- Project-URL: Documentation, https://gooddata-flight-server.readthedocs.io/en/v1.53.0
5
+ Project-URL: Documentation, https://gooddata-flight-server.readthedocs.io/en/v1.53.1.dev1
9
6
  Project-URL: Source, https://github.com/gooddata/gooddata-python-sdk
10
- Keywords: gooddata,flight,rpc,flight rpc,custom functions,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,custom functions,flight,flight rpc,gooddata,headless,headless-bi,intelligence,layer,metrics,native,rpc,semantic,sql
11
11
  Classifier: Development Status :: 4 - Beta
12
12
  Classifier: Environment :: Console
13
13
  Classifier: License :: OSI Approved :: MIT License
@@ -21,8 +21,6 @@ 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
24
  Requires-Dist: dynaconf<4.0.0,>=3.1.11
27
25
  Requires-Dist: opentelemetry-api<=2.0.0,>=1.24.0
28
26
  Requires-Dist: opentelemetry-sdk<=2.0.0,>=1.24.0
@@ -31,18 +29,7 @@ Requires-Dist: prometheus-client~=0.20.0
31
29
  Requires-Dist: pyarrow>=16.1.0
32
30
  Requires-Dist: readerwriterlock~=1.0.9
33
31
  Requires-Dist: structlog<25.0.0,>=24.0.0
34
- Dynamic: author
35
- Dynamic: author-email
36
- Dynamic: classifier
37
- Dynamic: description
38
- Dynamic: description-content-type
39
- Dynamic: keywords
40
- Dynamic: license
41
- Dynamic: license-file
42
- Dynamic: project-url
43
- Dynamic: requires-dist
44
- Dynamic: requires-python
45
- Dynamic: summary
32
+ Description-Content-Type: text/markdown
46
33
 
47
34
  # GoodData Flight Server
48
35
 
@@ -0,0 +1,35 @@
1
+ # (C) 2024 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-pyarrow.*]
17
+ ignore_missing_imports = True
18
+
19
+ [mypy-orjson.*]
20
+ ignore_missing_imports = True
21
+
22
+ [mypy-dynaconf.*]
23
+ ignore_missing_imports = True
24
+
25
+ [mypy-structlog.*]
26
+ ignore_missing_imports = True
27
+
28
+ [mypy-opentelemetry.*]
29
+ ignore_missing_imports = True
30
+
31
+ [mypy-prometheus_client.*]
32
+ ignore_missing_imports = True
33
+
34
+ [mypy-readerwriterlock.*]
35
+ ignore_missing_imports = True
@@ -0,0 +1,77 @@
1
+ # (C) 2025 GoodData Corporation
2
+ [project]
3
+ name = "gooddata-flight-server"
4
+ version = "1.53.1.dev1"
5
+ description = "Flight RPC server to host custom functions"
6
+ readme = "README.md"
7
+ license = {text = "MIT"}
8
+ authors = [
9
+ {name = "GoodData", email = "support@gooddata.com"}
10
+ ]
11
+ keywords = [
12
+ "gooddata",
13
+ "flight",
14
+ "rpc",
15
+ "flight rpc",
16
+ "custom functions",
17
+ "analytics",
18
+ "headless",
19
+ "business",
20
+ "intelligence",
21
+ "headless-bi",
22
+ "cloud",
23
+ "native",
24
+ "semantic",
25
+ "layer",
26
+ "sql",
27
+ "metrics",
28
+ ]
29
+ requires-python = ">=3.9.0"
30
+ dependencies = [
31
+ "dynaconf>=3.1.11,<4.0.0",
32
+ "opentelemetry-api>=1.24.0,<=2.0.0",
33
+ "opentelemetry-sdk>=1.24.0,<=2.0.0",
34
+ "orjson>=3.8.5,<4.0.0",
35
+ "prometheus-client~=0.20.0",
36
+ "pyarrow>=16.1.0",
37
+ "readerwriterlock~=1.0.9",
38
+ "structlog>=24.0.0,<25.0.0",
39
+ ]
40
+ classifiers = [
41
+ "Development Status :: 4 - Beta",
42
+ "Environment :: Console",
43
+ "License :: OSI Approved :: MIT License",
44
+ "Programming Language :: Python :: 3.9",
45
+ "Programming Language :: Python :: 3.10",
46
+ "Programming Language :: Python :: 3.11",
47
+ "Programming Language :: Python :: 3.12",
48
+ "Programming Language :: Python :: 3.13",
49
+ "Topic :: Database",
50
+ "Topic :: Scientific/Engineering",
51
+ "Topic :: Software Development",
52
+ "Typing :: Typed",
53
+ ]
54
+
55
+ [project.urls]
56
+ Documentation = "https://gooddata-flight-server.readthedocs.io/en/v1.53.1.dev1"
57
+ Source = "https://github.com/gooddata/gooddata-python-sdk"
58
+
59
+ [project.scripts]
60
+ gooddata-flight-server = "gooddata_flight_server.cli:main"
61
+
62
+ [dependency-groups]
63
+ test = [
64
+ "pytest~=8.3.4",
65
+ "pytest-cov~=6.0.0",
66
+ ]
67
+ type = [
68
+ "mypy~=1.11.2",
69
+ "pydantic~=2.9.2"
70
+ ]
71
+
72
+ [tool.hatch.build.targets.wheel]
73
+ packages = ["src/gooddata_flight_server"]
74
+
75
+ [build-system]
76
+ requires = ["hatchling"]
77
+ build-backend = "hatchling.build"
@@ -0,0 +1,345 @@
1
+ # (C) 2024 GoodData Corporation
2
+ [server]
3
+
4
+ #######################################################################
5
+ # Flight RPC Setup
6
+ #######################################################################
7
+
8
+ # host to bind Flight RPC server to. Default is 127.0.0.1 - listening on
9
+ # localhost only.
10
+ #
11
+ # use:
12
+ #
13
+ # - 0.0.0.0 - to bind to all addressed = reachable via network
14
+ # - 127.0.0.1 - to bind to localhost only (unreachable via outside network)
15
+ # - custom address to bind to
16
+ #
17
+ # env: GOODDATA_FLIGHT_SERVER__LISTEN_HOST
18
+ listen_host = "127.0.0.1"
19
+
20
+ # port on which the Flight RPC server should listen
21
+ #
22
+ # env: GOODDATA_FLIGHT_SERVER__LISTEN_PORT
23
+ listen_port = 17001
24
+
25
+ # host name to use when sending this server's Flight RPC location to clients.
26
+ # Defaults to current hostname.
27
+ #
28
+ # Advertising different host from the one that the server is bound to is
29
+ # often needed in Dockerized environments.
30
+ #
31
+ # ---
32
+ #
33
+ # Example: you run the server inside Docker on localhost and have port forwarding
34
+ # setup. You want to access the server from your workstation. In this setup,
35
+ # the 'listen_host' is set to "0.0.0.0" (server listens on all interfaces within
36
+ # the container) and the 'advertise_host' is set to "localhost".
37
+ #
38
+ # When you make a GetFlightInfo call to the server (running inside docker), it will
39
+ # generate a Flight accordingly and the returned Locations will again point at
40
+ # "localhost" so the subsequent DoGet call goes again to the Dockerized server.
41
+ #
42
+ # Without the 'advertise_host', the GetFlightInfo would return Location referencing
43
+ # some internal / randomly assigned hostname that is unreachable from your workstation.
44
+ #
45
+ # env: GOODDATA_FLIGHT_SERVER__ADVERTISE_HOST
46
+ advertise_host = "127.0.0.1"
47
+
48
+ # port number to use when sending this server's Flight RPC location to clients.
49
+ # Defaults to value of 'listen_port'.
50
+ #
51
+ # Advertising different port from the one that the server is listening is often
52
+ # needed in environments where port forwarding is in effect.
53
+ #
54
+ # ---
55
+ #
56
+ # Example: you run multiple servers inside Docker on localhost and have port
57
+ # forwarding setup. Each server goes to different port.
58
+ #
59
+ # Analogous to the host example (see above), the Dockerized server needs to send
60
+ # location with port number that can be reached from your workstation.
61
+ #
62
+ # env: GOODDATA_FLIGHT_SERVER__ADVERTISE_PORT
63
+ advertise_port = 17001
64
+
65
+ #######################################################################
66
+ # TLS Setup
67
+ #######################################################################
68
+
69
+ # optionally specify to use TLS; default when not specified is False
70
+ #
71
+ # IMPORTANT: when you turn on TLS, you must also specify at minimum
72
+ # the TLS certificate and TLS private key for the server to use.
73
+ # Additionally, if you use self-signed certificates, you need to
74
+ # also specify the tls_root_certificate.
75
+ #
76
+ # env: GOODDATA_FLIGHT_SERVER__USE_TLS
77
+ # use_tls = false
78
+
79
+ # if you want to use TLS (see 'use_tls' above), then you must specify
80
+ # server's certificate.
81
+ #
82
+ # This is supposed to be a PEM encoded X.509 certificate identifying
83
+ # your server.
84
+ #
85
+ # You can inline the certificate value into this setting, or you can
86
+ # specify file where the certificate resides.
87
+ #
88
+ # To specify certificate file, code the value of this setting as
89
+ # `@/absolute/path/to/cert`
90
+ #
91
+ # env: GOODDATA_FLIGHT_SERVER__TLS_CERTIFICATE
92
+ # tls_certificate = '''...'''
93
+
94
+ # if you want to use TLS (see 'use_tls' above), then you must specify
95
+ # the server's private key.
96
+ #
97
+ # This is supposed to be PEM encoded X.509 private key. Similar to
98
+ # the certificate, you can also use the `@/absolute/path/to/cert`
99
+ # notation to make server load the certificate from some file.
100
+ #
101
+ # IMPORTANT: never commit config files containing inlined secrets
102
+ # such as the private key into VCS. You can leverage the server's
103
+ # ability to combine config from multiple files: have one file
104
+ # without secrets and commit that to VCS if you so desire. The other
105
+ # config file with secrets should be outside of VCS.
106
+ #
107
+ # env: GOODDATA_FLIGHT_SERVER__TLS_PRIVATE_KEY
108
+ # tls_private_key = '''...'''
109
+
110
+ # if you use mTLS and have self-signed certificates, then you must
111
+ # also include the X.509 certificate of your CA that signed them.
112
+ #
113
+ # Again, you can inline the certificate in PEM encoding right here
114
+ # into this setting, or you can use the '@/absolute/path/to/ca-cert'
115
+ # notation.
116
+ #
117
+ # env: GOODDATA_FLIGHT_SERVER__TLS_ROOT_CERTIFICATE
118
+ # tls_root_certificate = '''...'''
119
+
120
+ #######################################################################
121
+ #
122
+ #######################################################################
123
+
124
+ # specify authentication method to use. can be one of 'none' or 'token'.
125
+ #
126
+ # if you do not include this option, then the server will not do
127
+ # any authentication. This is dangerous if your server is listening
128
+ # on interfaces that are reachable from the public network.
129
+ #
130
+ # if you specify the 'token' method, then the default strategy
131
+ # for verifying tokens is the 'EnumeratedTokenVerification'. For this
132
+ # to work, you need to specify one or more valid tokens that the
133
+ # client is expected to send. See the end of this file on how to
134
+ # do this.
135
+ #
136
+ # Alternatively, you can implement your own strategy for verifying
137
+ # tokens. See the option below.
138
+ #
139
+ # env: GOODDATA_FLIGHT_SERVER__AUTHENTICATION_METHOD
140
+ authentication_method = "none"
141
+
142
+ # Specify strategy to use for verifying tokens.
143
+ #
144
+ # The default strategy is 'EnumeratedTokenVerification' which expects
145
+ # that client sends a token that is included in a list of allowed
146
+ # tokens. See the end of this file for example how to define those
147
+ # tokens.
148
+ #
149
+ # To implement your own token verification strategy, you need to
150
+ # implement your own subclass of 'TokenVerificationStrategy' and
151
+ # then modify this setting to provide module name that contains
152
+ # that implementation.
153
+ #
154
+ # For example if the full path to class implementing your strategy
155
+ # is my_server.auth.custom.MyCustomStrategy, then the value
156
+ # of the 'token_verification' should be 'my_server.auth.custom'.
157
+ #
158
+ # Upon startup, the server will try to dynamically import and
159
+ # load your implementation of TokenVerificationStrategy from the
160
+ # specified module.
161
+ #
162
+ # env: GOODDATA_FLIGHT_SERVER__TOKEN_VERIFICATION
163
+ # token_verification = "EnumeratedTokenVerification"
164
+
165
+ # Optionally specify header name that is expected to carry the
166
+ # token.
167
+ #
168
+ # If not specified, the token is expected to come in a HTTP-like
169
+ # convention: the 'authorization' header (must be lower-case) and
170
+ # the value of 'Bearer <token>' where <token> is the value token
171
+ # itself.
172
+ #
173
+ # env: GOODDATA_FLIGHT_SERVER__TOKEN_HEADER_NAME
174
+ # token_header_name = "x-custom-header-with-token"
175
+
176
+ #######################################################################
177
+ # Task Handling
178
+ #######################################################################
179
+
180
+ # Number of threads available for tasks which generate flights or
181
+ # flight listing. Default is 32.
182
+ #
183
+ # Each GetFlightInfo request that generates a flight delegates this
184
+ # to a task. The task executes in a thread pool of this size.
185
+ #
186
+ # Default is 32.
187
+ #
188
+ # env: GOODDATA_FLIGHT_SERVER__TASK_THREADS
189
+ # task_threads = 32
190
+
191
+ # Number of threads that will be used when closing used / unneeded
192
+ # task results.
193
+ #
194
+ # Default is 2.
195
+ #
196
+ # env: GOODDATA_FLIGHT_SERVER__TASK_CLOSE_THREADS
197
+ # task_close_threads = 2
198
+
199
+ # Number of seconds a task result will be retained by the server.
200
+ #
201
+ # In other words, when GetFlightInfo uses task to generate the
202
+ # flight, the result will be kept by the server for this number
203
+ # of seconds - the client must come within this timeframe to pick
204
+ # the data using DoGet.
205
+ #
206
+ # env: GOODDATA_FLIGHT_SERVER__TASK_RESULT_TTL_SEC
207
+ # task_result_ttl_sec = 60
208
+
209
+ #######################################################################
210
+ # Server Infrastructure & Maintenance
211
+ #######################################################################
212
+
213
+ # host to bind prometheus metrics endpoint; disabled by default
214
+ #
215
+ # use:
216
+ #
217
+ # - 0.0.0.0 - to bind to all addressed
218
+ # - 127.0.0.1 - to bind to localhost only (unreachable via outside network)
219
+ # - custom address to bind to
220
+ #
221
+ # if not specified, the prometheus metrics endpoint will not be started
222
+ #
223
+ # env: GOODDATA_FLIGHT_SERVER__METRICS_HOST
224
+ # metrics_host = "0.0.0.0"
225
+
226
+ # port for prometheus metrics endpoint; default is 17101
227
+ #
228
+ # will only be used if `metrics_host` is specified
229
+ #
230
+ # env: GOODDATA_FLIGHT_SERVER__METRICS_PORT
231
+ # metrics_port = 17101
232
+
233
+ # host to bind health check endpoint; disabled by default
234
+ #
235
+ # use:
236
+ #
237
+ # - 0.0.0.0 - to bind to all addressed
238
+ # - 127.0.0.1 - to bind to localhost only (unreachable via outside network)
239
+ # - custom address to bind to
240
+ #
241
+ # if not specified, the health check endpoint will not be started
242
+ #
243
+ # env: GOODDATA_FLIGHT_SERVER__HEALTH_CHECK_HOST
244
+ # health_check_host = "0.0.0.0"
245
+
246
+ # port for health check endpoint; default is 8877
247
+ #
248
+ # will only be used if `health_check_host` is specified
249
+ #
250
+ # env: GOODDATA_FLIGHT_SERVER__HEALTH_CHECK_PORT
251
+ # health_check_port = 8877
252
+
253
+ # optionally specify interval, in seconds, of calls to malloc_trim - this
254
+ # helps to release unused memory back to the system. Default is 30 seconds.
255
+ #
256
+ # especially useful in memory constrained and memory-limited environments.
257
+ #
258
+ # env: GOODDATA_FLIGHT_SERVER__MALLOC_TRIM_INTERVAL_SEC
259
+ # malloc_trim_interval_sec = 30
260
+
261
+ # optionally specify key name under which the log event name should appear
262
+ # in the structured logs. Default is 'event'
263
+ #
264
+ # you may want to override this in case you want to align the event's key
265
+ # name with the rest of your environment
266
+ #
267
+ # env: GOODDATA_FLIGHT_SERVER__LOG_EVENT_KEY_NAME
268
+ # log_event_key_name = "event"
269
+
270
+ # optionally specify mapping for telemetry (tracing) key names that will appear
271
+ # in structured logs. by default, server writes trace information into 'trace_id',
272
+ # 'span_id' and 'parent_span_id'
273
+ #
274
+ # you may want to override these in case you want to align those logs key names
275
+ # with the rest of your enviornment
276
+ #
277
+ # env: GOODDATA_FLIGHT_SERVER__LOG_TRACE_KEYS
278
+ # log_trace_keys = { "trace_id" = "trace_id", "span_id" = "trace_id", "parent_span_id" = "parent_span_id" }
279
+
280
+ # optionally enable exports of OpenTelemetry tracing. Default is no exports
281
+ # which also means most of the tracing code and instrumentation will be noop.
282
+ #
283
+ # Allowed values are: zipkin, otlp-grpc, otlp-http or console (for debug)
284
+ #
285
+ # IMPORTANT: If you want to enable the trace exports, you must install one
286
+ # the appropriate OpenTelemetry exporter package yourself and then configure
287
+ # the exporter using the appropriate environment variables (these are typically
288
+ # documented by the exporter)
289
+ #
290
+ # env: GOODDATA_FLIGHT_SERVER__OTEL_EXPORTER_TYPE
291
+ otel_exporter_type = "none"
292
+
293
+ # optionally specify OpenTelemetry service name to associate with the server's
294
+ # resource.
295
+ #
296
+ # If you do not specify the service name, then the tracing infrastructure and
297
+ # instrumentation will be no-op.
298
+ #
299
+ # IMPORTANT: if you want to enable and export OpenTelemetry tracing, then you
300
+ # must specify both the `otel_exporter_type` and this option.
301
+ #
302
+ # env: GOODDATA_FLIGHT_SERVER__OTEL_SERVICE_NAME
303
+ # otel_service_name = "your-service-name"
304
+
305
+ # optionally specify OpenTelemetry namespace to associate with this server's resource.
306
+ #
307
+ # Default is no namespace.
308
+ #
309
+ # env: GOODDATA_FLIGHT_SERVER__OTEL_SERVICE_NAMESPACE
310
+ # otel_service_namespace = "your-namespace"
311
+
312
+ # optionally specify OpenTelemetry service instance id to associate with this server's
313
+ # resource.
314
+ #
315
+ # Usually, this is a unique identifier of the running server instance. In environments
316
+ # such as k8s, you typically want to associate the instance id to pod name. In other
317
+ # environments, it may be the hostname.
318
+ #
319
+ # Default is to use current hostname.
320
+ #
321
+ # env: GOODDATA_FLIGHT_SERVER__OTEL_SERVICE_INSTANCE_ID
322
+ # otel_service_instance_id = "your-service-instance-id"
323
+
324
+ # optionally specify whether OpenTelemetry integration within the server should look
325
+ # for, extract and use an OpenTelemetry context coming through the Flight RPC
326
+ # request headers.
327
+ #
328
+ # When this option is enabled, the code will use OpenTelemetry's context
329
+ # propagation `extract` method to obtain the context from Flight RPC request headers. This
330
+ # context will then be used when creating OpenTelemetry span representing the Flight
331
+ # RPC call.
332
+ #
333
+ # In simple words:
334
+ #
335
+ # - IF your server is configured to export traces to same backend where your server's clients
336
+ # also export their traces AND the clients inject the trace context into the Flight RPC headers AND
337
+ # you turn this option on, THEN you will be able to correlate all calls under one trace ID.
338
+ #
339
+ # - ELSE, you should keep this turned off; each Flight RPC request to your server will create
340
+ # a new trace ID.
341
+ #
342
+ # Default is false.
343
+ #
344
+ # env: GOODDATA_FLIGHT_SERVER__OTEL_EXTRACT_CONTEXT
345
+ # otel_extract_context = false
@@ -0,0 +1 @@
1
+ # (C) 2024 GoodData Corporation
@@ -0,0 +1,12 @@
1
+ # (C) 2024 GoodData Corporation
2
+ import pyarrow.flight
3
+ from gooddata_flight_server.errors.error_code import ErrorCode
4
+ from gooddata_flight_server.errors.error_info import ErrorInfo
5
+
6
+
7
+ def assert_error_code(code: int, err: pyarrow.flight.FlightError):
8
+ info = ErrorInfo.maybe_from_pyarrow_error(err)
9
+ assert info is not None, "The error does not contain the ErrorInfo."
10
+
11
+ if code != info.code:
12
+ raise AssertionError(f"Expected error code '{ErrorCode.name(code)}'. Got: '{ErrorCode.name(info.code)}'")
@@ -0,0 +1 @@
1
+ # (C) 2024 GoodData Corporation
@@ -0,0 +1,6 @@
1
+ # (C) 2024 GoodData Corporation
2
+ [server]
3
+
4
+ authentication_method = "token"
5
+ token_header_name = "x-my-header"
6
+ token_verification = "EnumeratedTokenVerification"
@@ -0,0 +1,5 @@
1
+ # (C) 2024 GoodData Corporation
2
+ [server]
3
+
4
+ # nothing here
5
+ # let's see how the defaults work out
@@ -0,0 +1 @@
1
+ The matrix has you :D
@@ -0,0 +1,34 @@
1
+ # (C) 2024 GoodData Corporation
2
+ [server]
3
+
4
+ #######################################################################
5
+ # Flight RPC Setup
6
+ #######################################################################
7
+
8
+ listen_host = "127.0.0.1"
9
+ listen_port = 17001
10
+ advertise_host = "127.0.0.1"
11
+ advertise_port = 17001
12
+
13
+ #######################################################################
14
+ # Task Handling
15
+ #######################################################################
16
+
17
+ task_threads = 32
18
+
19
+ #######################################################################
20
+ # Server Infrastructure & Maintenance
21
+ #######################################################################
22
+
23
+ metrics_host = "0.0.0.0"
24
+ metrics_port = 17101
25
+ health_check_host = "0.0.0.0"
26
+ health_check_port = 8877
27
+ malloc_trim_interval_sec = 30
28
+ log_event_key_name = "event"
29
+ log_trace_keys = { "trace_id" = "trace_id", "span_id" = "trace_id", "parent_span_id" = "parent_span_id" }
30
+ otel_exporter_type = "otlp-grpc"
31
+ otel_service_name = "your-service-name"
32
+ otel_service_namespace = "your-namespace"
33
+ otel_service_instance_id = "your-service-instance-id"
34
+ otel_extract_context = true