Skip to content

Commit 84fad15

Browse files
authored
feat(native): Cube.py - introduce config decorator (#7131)
1 parent 5fc3b8d commit 84fad15

File tree

3 files changed

+23
-17
lines changed

3 files changed

+23
-17
lines changed

packages/cubejs-backend-native/python/cube/src/conf/__init__.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ def file_repository(path):
2121

2222
return files
2323

24+
class ConfigurationException(Exception):
25+
pass
2426

2527
class RequestContext:
2628
url: str
@@ -157,3 +159,12 @@ def set_pre_aggregations_schema(self, pre_aggregations_schema: Callable[[Request
157159

158160

159161
settings = Configuration()
162+
163+
def config(func):
164+
if not callable(func):
165+
raise ConfigurationException("@config decorator must be used with functions, actual: '%s'" % type(func).__name__)
166+
167+
if hasattr(settings, func.__name__):
168+
setattr(settings, func.__name__, func)
169+
else:
170+
raise ConfigurationException("Unknown settings property: '%s'" % func.__name__)
Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from cube.conf import (
2+
config,
23
settings,
34
file_repository
45
)
@@ -7,27 +8,22 @@
78
settings.pg_sql_port = 5555
89
settings.telemetry = False
910

11+
@config
1012
def query_rewrite(query, ctx):
1113
print('[python] query_rewrite query=', query, ' ctx=', ctx)
1214
return query
1315

14-
settings.query_rewrite = query_rewrite
15-
16+
@config
1617
async def check_auth(req, authorization):
1718
print('[python] check_auth req=', req, ' authorization=', authorization)
1819

19-
20-
settings.check_auth = check_auth
21-
20+
@config
2221
async def repository_factory(ctx):
2322
print('[python] repository_factory ctx=', ctx)
2423

2524
return file_repository(ctx['securityContext']['schemaPath'])
2625

27-
settings.repository_factory = repository_factory
28-
26+
@config
2927
async def context_to_api_scopes():
3028
print('[python] context_to_api_scopes')
3129
return ['meta', 'data', 'jobs']
32-
33-
settings.context_to_api_scopes = context_to_api_scopes

packages/cubejs-backend-native/test/scoped-config.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,26 @@
11
source_code = """
2-
from cube.conf import settings
2+
from cube.conf import (
3+
settings,
4+
config
5+
)
36
47
settings.schema_path = "models"
58
settings.pg_sql_port = 5555
69
settings.telemetry = False
710
11+
@config
812
def query_rewrite(query, ctx):
913
print('[python] query_rewrite query=', query, ' ctx=', ctx)
1014
return query
1115
12-
settings.query_rewrite = query_rewrite
13-
16+
@config
1417
async def check_auth(req, authorization):
1518
print('[python] check_auth req=', req, ' authorization=', authorization)
1619
17-
18-
settings.check_auth = check_auth
19-
20+
@config
2021
async def context_to_api_scopes():
2122
print('[python] context_to_api_scopes')
2223
return ['meta', 'data', 'jobs']
23-
24-
settings.context_to_api_scopes = context_to_api_scopes
2524
"""
2625

2726
__execution_context_globals = {}

0 commit comments

Comments
 (0)