gooddata-flight-server 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.
Files changed (88) hide show
  1. gooddata_flight_server-1.74.1.dev2/AGENTS.md +88 -0
  2. gooddata_flight_server-1.74.1.dev2/CLAUDE.md +1 -0
  3. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/PKG-INFO +4 -4
  4. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/pyproject.toml +6 -6
  5. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/.gitignore +0 -0
  6. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/.readthedocs.yaml +0 -0
  7. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/LICENSE.txt +0 -0
  8. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/MANIFEST.in +0 -0
  9. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/Makefile +0 -0
  10. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/README.md +0 -0
  11. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/bin/gooddata-flight-server +0 -0
  12. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/sample-config.toml +0 -0
  13. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/__init__.py +0 -0
  14. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/_version.py +0 -0
  15. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/cli.py +0 -0
  16. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/config/__init__.py +0 -0
  17. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/config/config.py +0 -0
  18. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/errors/__init__.py +0 -0
  19. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/errors/error_code.py +0 -0
  20. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/errors/error_info.py +0 -0
  21. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/exceptions.py +0 -0
  22. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/health/__init__.py +0 -0
  23. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/health/health_check_http_server.py +0 -0
  24. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/health/server_health_monitor.py +0 -0
  25. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/metrics.py +0 -0
  26. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/py.typed +0 -0
  27. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/server/__init__.py +0 -0
  28. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/server/auth/__init__.py +0 -0
  29. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/server/auth/auth_middleware.py +0 -0
  30. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/server/auth/token_verifier.py +0 -0
  31. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/server/auth/token_verifier_factory.py +0 -0
  32. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/server/auth/token_verifier_impl.py +0 -0
  33. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/server/base.py +0 -0
  34. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/server/default.logging.ini +0 -0
  35. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/server/flight_rpc/__init__.py +0 -0
  36. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/server/flight_rpc/flight_middleware.py +0 -0
  37. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/server/flight_rpc/flight_server.py +0 -0
  38. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/server/flight_rpc/flight_service.py +0 -0
  39. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/server/flight_rpc/server_methods.py +0 -0
  40. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/server/server_base.py +0 -0
  41. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/server/server_main.py +0 -0
  42. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/tasks/__init__.py +0 -0
  43. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/tasks/base.py +0 -0
  44. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/tasks/metrics.py +0 -0
  45. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/tasks/task.py +0 -0
  46. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/tasks/task_error.py +0 -0
  47. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/tasks/task_executor.py +0 -0
  48. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/tasks/task_result.py +0 -0
  49. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/tasks/temporal_container.py +0 -0
  50. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/tasks/thread_task_executor.py +0 -0
  51. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/utils/__init__.py +0 -0
  52. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/utils/libc_utils.py +0 -0
  53. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/utils/logging.py +0 -0
  54. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/utils/methods_discovery.py +0 -0
  55. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/src/gooddata_flight_server/utils/otel_tracing.py +0 -0
  56. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/__init__.py +0 -0
  57. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/assert_error_info.py +0 -0
  58. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/config/__init__.py +0 -0
  59. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/config/auth-config.toml +0 -0
  60. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/config/empty-config.toml +0 -0
  61. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/config/private_key.pem +0 -0
  62. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/config/sample-config.toml +0 -0
  63. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/config/test_config.py +0 -0
  64. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/config/tls-config.toml +0 -0
  65. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/errors/__init__.py +0 -0
  66. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/errors/error_info.py +0 -0
  67. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/server/__init__.py +0 -0
  68. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/server/conftest.py +0 -0
  69. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/server/test_server.py +0 -0
  70. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/server/testing_token_verifier.py +0 -0
  71. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/server/tls/ca-cert.pem +0 -0
  72. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/server/tls/client-cert.pem +0 -0
  73. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/server/tls/client-key.pem +0 -0
  74. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/server/tls/server-cert.pem +0 -0
  75. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/server/tls/server-key.pem +0 -0
  76. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/tasks/__init__.py +0 -0
  77. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/tasks/test_task_executor.py +0 -0
  78. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/tasks/test_temporal_container.py +0 -0
  79. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/utils/invalid_methods_module/__init__.py +0 -0
  80. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/utils/invalid_methods_module/mock_methods.py +0 -0
  81. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/utils/multiple_methods_module/__init__.py +0 -0
  82. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/utils/multiple_methods_module/mock_methods.py +0 -0
  83. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/utils/no_methods_module/__init__.py +0 -0
  84. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/utils/no_methods_module/mock_methods.py +0 -0
  85. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/utils/test_methods_discovery.py +0 -0
  86. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/utils/valid_methods_module/__init__.py +0 -0
  87. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tests/utils/valid_methods_module/mock_methods.py +0 -0
  88. {gooddata_flight_server-1.74.1.dev1 → gooddata_flight_server-1.74.1.dev2}/tox.ini +0 -0
@@ -0,0 +1,88 @@
1
+ # gooddata-flight-server
2
+
3
+ A batteries-included Arrow Flight RPC server framework built on `pyarrow.flight`. It owns
4
+ everything around the RPC methods themselves — process bootstrap, graceful start/stop
5
+ lifecycle, layered configuration, structured logging, Prometheus metrics, OpenTelemetry
6
+ tracing, health endpoints and pluggable token authentication — so that a downstream service
7
+ only has to implement the Flight methods and point the CLI at them.
8
+
9
+ Consumed as a framework, including by projects outside this repo, so its public surface is
10
+ an external contract.
11
+
12
+ ## Owns
13
+
14
+ - The Flight RPC server runtime and its `gooddata-flight-server` CLI
15
+ - Server bootstrap, lifecycle, health monitoring, observability and auth integration
16
+ - `TaskExecutor` and the task model for long-running Flight data generation
17
+ - Configuration patterns for hosting custom Flight method providers
18
+
19
+ ## Does NOT Own
20
+
21
+ - Core GoodData Cloud domain, catalog and compute APIs → `gooddata-sdk`. This package has
22
+ **no dependency on `gooddata-sdk`** and is generic Flight infrastructure.
23
+ - Product-specific data source functions and semantic model mapping → `gooddata-flexconnect`
24
+ - Lifecycle provisioning and backup workflows → `gooddata-pipelines`
25
+
26
+ ## Architecture
27
+
28
+ **Entry point**: `gooddata_flight_server.cli:server_cli`.
29
+
30
+ **Key stack**: `pyarrow.flight` for transport, `dynaconf` for configuration,
31
+ `opentelemetry-api`/`-sdk` and `prometheus-client` for telemetry, `structlog` for logging,
32
+ `readerwriterlock` and `orjson` internally.
33
+
34
+ ### The methods-provider contract
35
+
36
+ A hosting module must contain **exactly one** function decorated with
37
+ `@flight_server_methods`, with the signature `(ctx: ServerContext) -> FlightServerMethods`.
38
+ The CLI's `--methods-provider <dotted.module>` resolves it: the module is imported and
39
+ scanned, and zero or multiple decorated functions raise `FlightMethodsModuleError`. The
40
+ `ServerContext` handed in carries the settings, the health monitor and the `TaskExecutor`.
41
+
42
+ ### Lifecycle is a template method
43
+
44
+ `ServerBase` drives `start()`, `stop()`, `abort()`, `wait_for_start()` and
45
+ `wait_for_stop()` on a dedicated main thread with condition-variable handshakes, and
46
+ defines the extension points subclasses implement: `_startup_services()`,
47
+ `_shutdown_services()`, `_abort_services()`, plus an optional `_pre_startup()` hook.
48
+ `GoodDataFlightServer` is the concrete implementation the CLI uses. New startup or shutdown
49
+ behavior belongs in those hooks, not in an ad hoc code path.
50
+
51
+ ## Public API surface
52
+
53
+ The re-exports in `src/gooddata_flight_server/__init__.py` **are** the contract — roughly
54
+ 36 names, including `ServerConfig`, `ServerContext`, `FlightServerMethods`,
55
+ `FlightServerMethodsFactory`, `create_server`, `GoodDataFlightServer`, `Task`, `TaskResult`,
56
+ `TaskExecutor`, `TaskError`, `ArrowData`, `TokenVerificationStrategy`,
57
+ `TokenAuthMiddleware`, `ErrorInfo`, `ErrorCode`, `RetryInfo`, `ServerHealthMonitor`,
58
+ `CallInfo`, `CallFinalizer` and `flight_server_methods`.
59
+
60
+ Everything else under `server/`, `tasks/`, `config/`, `health/` and `utils/` is internal
61
+ and freely refactorable. Changing or removing anything reachable as `gf.<name>` is a
62
+ breaking change for out-of-repo consumers, so treat that file as the thing to check before
63
+ renaming.
64
+
65
+ ## Configuration
66
+
67
+ `--config` takes an ordered list of TOML files handed to Dynaconf with
68
+ `envvar_prefix="GOODDATA_FLIGHT"` and `environments=False`. Environment overrides follow
69
+ `GOODDATA_FLIGHT_{SECTION}__{SETTING}`. The `[server]` section is validated against a fixed
70
+ schema; any other section passes through untouched into `ctx.settings` for service-specific
71
+ config — which is how `gooddata-flexconnect` gets its own keys.
72
+
73
+ ## Authentication
74
+
75
+ `authentication_method` is `none` or `token`. Under `token`, `token_verification` names
76
+ either the built-in `EnumeratedTokenVerification` or a dotted module path; the loader takes
77
+ the first class in that module subclassing `TokenVerificationStrategy` and instantiates it
78
+ via its `create(ctx)` classmethod. The token arrives as `Bearer <token>` in the
79
+ `authorization` Flight call header.
80
+
81
+ ## Testing
82
+
83
+ Package-local pytest suites under `tests/`.
84
+
85
+ The suite uses **checked-in** certificates at `tests/server/tls/*.pem`, loaded by
86
+ `tests/server/conftest.py`. `make dev-certs` is *not* a prerequisite for running tests — it
87
+ writes a fresh CA/server/client chain into the gitignored `test_data/`, which nothing in the
88
+ test suite reads, and exists for driving the server by hand with TLS or mTLS enabled.
@@ -0,0 +1 @@
1
+ @AGENTS.md
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gooddata-flight-server
3
- Version: 1.74.1.dev1
3
+ Version: 1.74.1.dev2
4
4
  Summary: Flight RPC server to host custom functions
5
- Project-URL: Documentation, https://gooddata-flight-server.readthedocs.io/en/v1.74.1.dev1
5
+ Project-URL: Documentation, https://gooddata-flight-server.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
@@ -24,10 +24,10 @@ Requires-Dist: dynaconf<4.0.0,>=3.1.11
24
24
  Requires-Dist: opentelemetry-api<=2.0.0,>=1.24.0
25
25
  Requires-Dist: opentelemetry-sdk<=2.0.0,>=1.24.0
26
26
  Requires-Dist: orjson<4.0.0,>=3.8.5
27
- Requires-Dist: prometheus-client~=0.20.0
27
+ Requires-Dist: prometheus-client~=0.26.0
28
28
  Requires-Dist: pyarrow>=16.1.0
29
29
  Requires-Dist: readerwriterlock~=1.0.9
30
- Requires-Dist: structlog<25.0.0,>=24.0.0
30
+ Requires-Dist: structlog<=26.1.0,>=24.0.0
31
31
  Description-Content-Type: text/markdown
32
32
 
33
33
  # GoodData Flight Server
@@ -1,7 +1,7 @@
1
1
  # (C) 2025 GoodData Corporation
2
2
  [project]
3
3
  name = "gooddata-flight-server"
4
- version = "1.74.1.dev1"
4
+ version = "1.74.1.dev2"
5
5
  description = "Flight RPC server to host custom functions"
6
6
  readme = "README.md"
7
7
  license = "MIT"
@@ -32,10 +32,10 @@ dependencies = [
32
32
  "opentelemetry-api>=1.24.0,<=2.0.0",
33
33
  "opentelemetry-sdk>=1.24.0,<=2.0.0",
34
34
  "orjson>=3.8.5,<4.0.0",
35
- "prometheus-client~=0.20.0",
35
+ "prometheus-client~=0.26.0",
36
36
  "pyarrow>=16.1.0",
37
37
  "readerwriterlock~=1.0.9",
38
- "structlog>=24.0.0,<25.0.0",
38
+ "structlog>=24.0.0,<=26.1.0",
39
39
  ]
40
40
  classifiers = [
41
41
  "Development Status :: 4 - Beta",
@@ -52,7 +52,7 @@ classifiers = [
52
52
  ]
53
53
 
54
54
  [project.urls]
55
- Documentation = "https://gooddata-flight-server.readthedocs.io/en/v1.74.1.dev1"
55
+ Documentation = "https://gooddata-flight-server.readthedocs.io/en/v1.74.1.dev2"
56
56
  Source = "https://github.com/gooddata/gooddata-python-sdk"
57
57
 
58
58
  [project.scripts]
@@ -60,8 +60,8 @@ gooddata-flight-server = "gooddata_flight_server.cli:server_cli"
60
60
 
61
61
  [dependency-groups]
62
62
  test = [
63
- "pytest~=8.3.4",
64
- "pytest-cov~=6.0.0",
63
+ "pytest~=9.1.1",
64
+ "pytest-cov~=7.1.0",
65
65
  "pytest-json-report==1.5.0",
66
66
  ]
67
67