gooddata-flexconnect 1.62.0__tar.gz → 1.62.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_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/PKG-INFO +4 -4
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/json_schemas/execution-context/filter.json +38 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/pyproject.toml +4 -4
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/src/gooddata_flexconnect/__init__.py +1 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/src/gooddata_flexconnect/function/execution_context.py +42 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/json_schemas/test_filter_schema.py +15 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/.gitignore +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/.readthedocs.yaml +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/LICENSE.txt +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/Makefile +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/README.md +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/json_schemas/execution-context/attribute.json +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/json_schemas/execution-context/date-granularity.json +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/json_schemas/execution-context/execution-context.json +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/json_schemas/execution-context/label-elements/depends-on-date-filter.json +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/json_schemas/execution-context/label-elements/depends-on.json +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/json_schemas/execution-context/label-elements/execution-request.json +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/src/gooddata_flexconnect/function/__init__.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/src/gooddata_flexconnect/function/data_source_messages.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/src/gooddata_flexconnect/function/flight_methods.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/src/gooddata_flexconnect/function/function.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/src/gooddata_flexconnect/function/function_invocation.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/src/gooddata_flexconnect/function/function_registry.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/src/gooddata_flexconnect/function/function_task.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/src/gooddata_flexconnect/py.typed +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/__init__.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/assert_error_info.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/function/__init__.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/function/conftest.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/function/test_data_source_messages.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/function/test_flex_fun_execution_context.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/function/test_registry.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/function/testing_funs.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/json_schemas/__init__.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/json_schemas/conftest.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/json_schemas/test_attribute_schema.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/json_schemas/test_depends_on_date_filter_schema.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/json_schemas/test_depends_on_schema.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/json_schemas/test_execution_context_schema.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/json_schemas/test_label_elements_execution_request_schema.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/__init__.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/conftest.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/funs/__init__.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/funs/fun1.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/funs/fun2.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/funs/fun3.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/funs/fun4.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/test_flexconnect_server.py +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/tls/ca-cert.pem +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/tls/client-cert.pem +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/tls/client-key.pem +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/tls/server-cert.pem +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/tls/server-key.pem +0 -0
- {gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tox.ini +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gooddata-flexconnect
|
|
3
|
-
Version: 1.62.
|
|
3
|
+
Version: 1.62.1.dev2
|
|
4
4
|
Summary: Build your own data source for GoodData Cloud and GoodData Cloud Native.
|
|
5
|
-
Project-URL: Documentation, https://gooddata-flexconnect.readthedocs.io/en/v1.62.
|
|
5
|
+
Project-URL: Documentation, https://gooddata-flexconnect.readthedocs.io/en/v1.62.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
|
|
@@ -21,8 +21,8 @@ Classifier: Topic :: Software Development
|
|
|
21
21
|
Classifier: Typing :: Typed
|
|
22
22
|
Requires-Python: >=3.10
|
|
23
23
|
Requires-Dist: dynaconf<4.0.0,>=3.1.11
|
|
24
|
-
Requires-Dist: gooddata-flight-server~=1.62.
|
|
25
|
-
Requires-Dist: gooddata-sdk~=1.62.
|
|
24
|
+
Requires-Dist: gooddata-flight-server~=1.62.1.dev2
|
|
25
|
+
Requires-Dist: gooddata-sdk~=1.62.1.dev2
|
|
26
26
|
Requires-Dist: orjson<4.0.0,>=3.9.15
|
|
27
27
|
Requires-Dist: pyarrow>=16.1.0
|
|
28
28
|
Requires-Dist: structlog<25.0.0,>=24.0.0
|
|
@@ -59,6 +59,44 @@
|
|
|
59
59
|
"values"
|
|
60
60
|
]
|
|
61
61
|
},
|
|
62
|
+
{
|
|
63
|
+
"type": "object",
|
|
64
|
+
"description": "Filter for matching label values using a literal string pattern.",
|
|
65
|
+
"properties": {
|
|
66
|
+
"filterType": {
|
|
67
|
+
"const": "matchAttributeFilter"
|
|
68
|
+
},
|
|
69
|
+
"labelIdentifier": {
|
|
70
|
+
"type": "string",
|
|
71
|
+
"description": "Identifier of the label used."
|
|
72
|
+
},
|
|
73
|
+
"matchType": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"enum": ["CONTAINS", "STARTS_WITH", "ENDS_WITH"],
|
|
76
|
+
"description": "The type of string match to apply."
|
|
77
|
+
},
|
|
78
|
+
"literal": {
|
|
79
|
+
"type": "string",
|
|
80
|
+
"description": "The literal value to match against."
|
|
81
|
+
},
|
|
82
|
+
"negate": {
|
|
83
|
+
"type": "boolean",
|
|
84
|
+
"default": false,
|
|
85
|
+
"description": "Whether to negate the match."
|
|
86
|
+
},
|
|
87
|
+
"caseSensitive": {
|
|
88
|
+
"type": "boolean",
|
|
89
|
+
"default": false,
|
|
90
|
+
"description": "Whether the match is case-sensitive."
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"required": [
|
|
94
|
+
"filterType",
|
|
95
|
+
"labelIdentifier",
|
|
96
|
+
"matchType",
|
|
97
|
+
"literal"
|
|
98
|
+
]
|
|
99
|
+
},
|
|
62
100
|
{
|
|
63
101
|
"type": "object",
|
|
64
102
|
"description": "Filter for relative date ranges.",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# (C) 2025 GoodData Corporation
|
|
2
2
|
[project]
|
|
3
3
|
name = "gooddata-flexconnect"
|
|
4
|
-
version = "1.62.
|
|
4
|
+
version = "1.62.1.dev2"
|
|
5
5
|
description = "Build your own data source for GoodData Cloud and GoodData Cloud Native."
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
license = "MIT"
|
|
@@ -29,8 +29,8 @@ keywords = [
|
|
|
29
29
|
requires-python = ">=3.10"
|
|
30
30
|
dependencies = [
|
|
31
31
|
"dynaconf>=3.1.11,<4.0.0",
|
|
32
|
-
"gooddata-flight-server~=1.62.
|
|
33
|
-
"gooddata-sdk~=1.62.
|
|
32
|
+
"gooddata-flight-server~=1.62.1.dev2",
|
|
33
|
+
"gooddata-sdk~=1.62.1.dev2",
|
|
34
34
|
"orjson>=3.9.15,<4.0.0",
|
|
35
35
|
"pyarrow>=16.1.0",
|
|
36
36
|
"structlog>=24.0.0,<25.0.0",
|
|
@@ -50,7 +50,7 @@ classifiers = [
|
|
|
50
50
|
]
|
|
51
51
|
|
|
52
52
|
[project.urls]
|
|
53
|
-
Documentation = "https://gooddata-flexconnect.readthedocs.io/en/v1.62.
|
|
53
|
+
Documentation = "https://gooddata-flexconnect.readthedocs.io/en/v1.62.1.dev2"
|
|
54
54
|
Source = "https://github.com/gooddata/gooddata-python-sdk"
|
|
55
55
|
|
|
56
56
|
[dependency-groups]
|
|
@@ -11,6 +11,7 @@ from gooddata_flexconnect.function.execution_context import (
|
|
|
11
11
|
ExecutionContextAttribute,
|
|
12
12
|
ExecutionContextAttributeSorting,
|
|
13
13
|
ExecutionContextFilter,
|
|
14
|
+
ExecutionContextMatchAttributeFilter,
|
|
14
15
|
ExecutionContextNegativeAttributeFilter,
|
|
15
16
|
ExecutionContextPositiveAttributeFilter,
|
|
16
17
|
ExecutionContextRelativeDateFilter,
|
|
@@ -176,6 +176,38 @@ class ExecutionContextNegativeAttributeFilter:
|
|
|
176
176
|
"""
|
|
177
177
|
|
|
178
178
|
|
|
179
|
+
@dataclass
|
|
180
|
+
class ExecutionContextMatchAttributeFilter:
|
|
181
|
+
"""
|
|
182
|
+
Information about the match attribute filter.
|
|
183
|
+
"""
|
|
184
|
+
|
|
185
|
+
label_identifier: str
|
|
186
|
+
"""
|
|
187
|
+
Identifier of the label used.
|
|
188
|
+
"""
|
|
189
|
+
|
|
190
|
+
literal: str
|
|
191
|
+
"""
|
|
192
|
+
Value to filter by.
|
|
193
|
+
"""
|
|
194
|
+
|
|
195
|
+
match_type: str
|
|
196
|
+
"""
|
|
197
|
+
Match type of the filter.
|
|
198
|
+
"""
|
|
199
|
+
|
|
200
|
+
negate: bool
|
|
201
|
+
"""
|
|
202
|
+
Whether the filter should keep values NOT matching the literal.
|
|
203
|
+
"""
|
|
204
|
+
|
|
205
|
+
case_sensitive: bool
|
|
206
|
+
"""
|
|
207
|
+
Whether the matching should be made in a case-sensitive way.
|
|
208
|
+
"""
|
|
209
|
+
|
|
210
|
+
|
|
179
211
|
@dataclass
|
|
180
212
|
class ExecutionContextRelativeDateFilter:
|
|
181
213
|
"""
|
|
@@ -228,6 +260,7 @@ class ExecutionContextAbsoluteDateFilter:
|
|
|
228
260
|
ExecutionContextFilter: TypeAlias = Union[
|
|
229
261
|
ExecutionContextPositiveAttributeFilter,
|
|
230
262
|
ExecutionContextNegativeAttributeFilter,
|
|
263
|
+
ExecutionContextMatchAttributeFilter,
|
|
231
264
|
ExecutionContextRelativeDateFilter,
|
|
232
265
|
ExecutionContextAbsoluteDateFilter,
|
|
233
266
|
]
|
|
@@ -564,6 +597,15 @@ def _dict_to_filter(d: dict) -> ExecutionContextFilter:
|
|
|
564
597
|
if filter_type == "negativeAttributeFilter":
|
|
565
598
|
return ExecutionContextNegativeAttributeFilter(label_identifier=d["labelIdentifier"], values=d["values"])
|
|
566
599
|
|
|
600
|
+
if filter_type == "matchAttributeFilter":
|
|
601
|
+
return ExecutionContextMatchAttributeFilter(
|
|
602
|
+
label_identifier=d["labelIdentifier"],
|
|
603
|
+
literal=d["literal"],
|
|
604
|
+
match_type=d["matchType"],
|
|
605
|
+
negate=d.get("negate", False),
|
|
606
|
+
case_sensitive=d.get("caseSensitive", False),
|
|
607
|
+
)
|
|
608
|
+
|
|
567
609
|
if filter_type == "relativeDateFilter":
|
|
568
610
|
return ExecutionContextRelativeDateFilter(
|
|
569
611
|
dataset_identifier=d["datasetIdentifier"],
|
|
@@ -16,6 +16,12 @@ from jsonschema.exceptions import ValidationError
|
|
|
16
16
|
"labelIdentifier": "attribute1",
|
|
17
17
|
"values": ["id1", "id2", "id3", None],
|
|
18
18
|
},
|
|
19
|
+
{
|
|
20
|
+
"filterType": "matchAttributeFilter",
|
|
21
|
+
"labelIdentifier": "attribute1",
|
|
22
|
+
"literal": "foo",
|
|
23
|
+
"matchType": "CONTAINS",
|
|
24
|
+
},
|
|
19
25
|
{
|
|
20
26
|
"filterType": "relativeDateFilter",
|
|
21
27
|
"from": -5,
|
|
@@ -42,6 +48,15 @@ def test_valid_filter_schema(value, get_validator):
|
|
|
42
48
|
{"filterType": "negativeAttributeFilter", "labelIdentifier": "attribute1"}, # missing values
|
|
43
49
|
{"filterType": "relativeDateFilter", "from": -5, "to": 0, "granularity": "DAY"}, # missing datasetIdentifier
|
|
44
50
|
{"filterType": "absoluteDateFilter", "from": "2021-01-01", "to": "2021-12-31"}, # missing datasetIdentifier
|
|
51
|
+
# missing match type
|
|
52
|
+
{"filterType": "matchAttributeFilter", "labelIdentifier": "attribute1", "literal": "foo"},
|
|
53
|
+
# invalid match type
|
|
54
|
+
{
|
|
55
|
+
"filterType": "matchAttributeFilter",
|
|
56
|
+
"labelIdentifier": "attribute1",
|
|
57
|
+
"literal": "foo",
|
|
58
|
+
"matchType": "INVALID",
|
|
59
|
+
},
|
|
45
60
|
],
|
|
46
61
|
)
|
|
47
62
|
def test_invalid_filter_schema(value, get_validator):
|
|
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
|
{gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/src/gooddata_flexconnect/py.typed
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/function/test_registry.py
RENAMED
|
File without changes
|
{gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/function/testing_funs.py
RENAMED
|
File without changes
|
{gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/json_schemas/__init__.py
RENAMED
|
File without changes
|
{gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/json_schemas/conftest.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
|
{gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/funs/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/tls/ca-cert.pem
RENAMED
|
File without changes
|
{gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/tls/client-cert.pem
RENAMED
|
File without changes
|
{gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/tls/client-key.pem
RENAMED
|
File without changes
|
{gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/tls/server-cert.pem
RENAMED
|
File without changes
|
{gooddata_flexconnect-1.62.0 → gooddata_flexconnect-1.62.1.dev2}/tests/server/tls/server-key.pem
RENAMED
|
File without changes
|
|
File without changes
|