Skip to content

Commit 9f3ce0a

Browse files
committed
update: full load provisioning logic of users and groups
1 parent c913f43 commit 9f3ce0a

27 files changed

+823
-411
lines changed

gooddata-pipelines/gooddata_pipelines/__init__.py

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,42 @@
22

33
from ._version import __version__
44
from .provisioning.entities.user_data_filters.models.udf_models import (
5-
UserDataFilter,
5+
UserDataFilterFullLoad,
66
)
77
from .provisioning.entities.user_data_filters.user_data_filters import (
88
UserDataFilterProvisioner,
99
)
10-
from .provisioning.entities.users.models import Permission, User, UserGroup
10+
from .provisioning.entities.users.models.permissions import (
11+
PermissionFullLoad,
12+
PermissionIncrementalLoad,
13+
)
14+
from .provisioning.entities.users.models.user_groups import (
15+
UserGroupFullLoad,
16+
UserGroupIncrementalLoad,
17+
)
18+
from .provisioning.entities.users.models.users import (
19+
UserFullLoad,
20+
UserIncrementalLoad,
21+
)
1122
from .provisioning.entities.users.permissions import PermissionProvisioner
1223
from .provisioning.entities.users.user_groups import UserGroupProvisioner
1324
from .provisioning.entities.users.users import UserProvisioner
14-
from .provisioning.entities.workspaces.models import Workspace
25+
from .provisioning.entities.workspaces.models import WorkspaceFullLoad
1526
from .provisioning.entities.workspaces.workspace import WorkspaceProvisioner
1627

1728
__all__ = [
18-
"Workspace",
29+
"WorkspaceFullLoad",
1930
"WorkspaceProvisioner",
20-
"User",
21-
"UserGroup",
22-
"Permission",
31+
"UserIncrementalLoad",
32+
"UserGroupIncrementalLoad",
33+
"PermissionFullLoad",
34+
"PermissionIncrementalLoad",
35+
"UserFullLoad",
36+
"UserGroupFullLoad",
2337
"UserProvisioner",
2438
"UserGroupProvisioner",
2539
"PermissionProvisioner",
2640
"UserDataFilterProvisioner",
27-
"UserDataFilter",
41+
"UserDataFilterFullLoad",
2842
"__version__",
2943
]

gooddata-pipelines/gooddata_pipelines/api/gooddata_api.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -216,17 +216,22 @@ def post_workspace_data_filter(
216216
endpoint = f"/entities/workspaces/{workspace_id}/workspaceDataFilters"
217217
return self._post(endpoint, data, self.headers)
218218

219-
def _get(self, endpoint: str) -> requests.Response:
219+
def _get(
220+
self, endpoint: str, headers: dict[str, str] | None = None
221+
) -> requests.Response:
220222
"""Sends a GET request to the server.
221223
222224
Args:
223225
endpoint (str): The API endpoint to send the GET request to.
226+
headers (dict[str, str] | None): Headers to include in the request.
227+
If no headers are provided, the default headers will be used.
224228
Returns:
225229
requests.Response: The response from the server.
226230
"""
227231
url = self._get_url(endpoint)
232+
request_headers = headers if headers else self.headers
228233

229-
return requests.get(url, headers=self.headers, timeout=TIMEOUT)
234+
return requests.get(url, headers=request_headers, timeout=TIMEOUT)
230235

231236
def _post(
232237
self,
@@ -239,7 +244,8 @@ def _post(
239244
Args:
240245
endpoint (str): The API endpoint to send the POST request to.
241246
data (Any): The JSON data to send in the request body.
242-
headers (dict | None): Optional headers to include in the request.
247+
headers (dict | None): Headers to include in the request.
248+
If no headers are provided, the default headers will be used.
243249
Returns:
244250
requests.Response: The response from the server.
245251
"""
@@ -262,7 +268,8 @@ def _put(
262268
Args:
263269
endpoint (str): The API endpoint to send the PUT request to.
264270
data (Any): The JSON data to send in the request body.
265-
headers (dict | None): Optional headers to include in the request.
271+
headers (dict | None): Headers to include in the request.
272+
If no headers are provided, the default headers will be used.
266273
Returns:
267274
requests.Response: The response from the server.
268275
"""

gooddata-pipelines/gooddata_pipelines/api/gooddata_sdk.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,15 @@ def list_user_groups(self) -> list[CatalogUserGroup]:
246246
"""
247247
return self._sdk.catalog_user.list_user_groups()
248248

249+
@raise_with_context()
250+
def list_users(self) -> list[CatalogUser]:
251+
"""Calls GoodData Python SDK to retrieve all users.
252+
253+
Returns:
254+
list[CatalogUser]: A list of all users in the domain.
255+
"""
256+
return self._sdk.catalog_user.list_users()
257+
249258
@raise_with_context()
250259
def create_or_update_user_group(
251260
self, catalog_user_group: CatalogUserGroup, **_: str

gooddata-pipelines/gooddata_pipelines/provisioning/__init__.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,30 @@
11
# (C) 2025 GoodData Corporation
22

3-
from .entities.users.models import Permission, User, UserGroup
3+
from .entities.users.models.permissions import (
4+
PermissionFullLoad,
5+
PermissionIncrementalLoad,
6+
)
7+
from .entities.users.models.user_groups import (
8+
UserGroupFullLoad,
9+
UserGroupIncrementalLoad,
10+
)
11+
from .entities.users.models.users import (
12+
UserFullLoad,
13+
UserIncrementalLoad,
14+
)
415
from .entities.users.permissions import PermissionProvisioner
516
from .entities.users.user_groups import UserGroupProvisioner
617
from .entities.users.users import UserProvisioner
718
from .entities.workspaces.workspace import WorkspaceProvisioner
819

920
__all__ = [
10-
"Permission",
21+
"PermissionFullLoad",
22+
"PermissionIncrementalLoad",
1123
"PermissionProvisioner",
12-
"User",
13-
"UserGroup",
24+
"UserFullLoad",
25+
"UserGroupFullLoad",
26+
"UserIncrementalLoad",
27+
"UserGroupIncrementalLoad",
1428
"UserGroupProvisioner",
1529
"UserProvisioner",
1630
"WorkspaceProvisioner",

gooddata-pipelines/gooddata_pipelines/provisioning/entities/user_data_filters/models/udf_models.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@ class WorkspaceUserDataFilters:
1818

1919

2020
@dataclass
21-
class UserDataFilter:
21+
class UserDataFilterFullLoad:
2222
workspace_id: str
2323
udf_id: str
2424
udf_value: str
25+
26+
27+
@dataclass
28+
class UserDataFilterIncrementalLoad(UserDataFilterFullLoad):
29+
is_active: bool

gooddata-pipelines/gooddata_pipelines/provisioning/entities/user_data_filters/user_data_filters.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,18 @@
1616
)
1717

1818
from gooddata_pipelines.provisioning.entities.user_data_filters.models.udf_models import (
19-
UserDataFilter,
19+
UserDataFilterFullLoad,
2020
UserDataFilterGroup,
21+
UserDataFilterIncrementalLoad,
2122
WorkspaceUserDataFilters,
2223
)
2324
from gooddata_pipelines.provisioning.provisioning import Provisioning
2425
from gooddata_pipelines.provisioning.utils.exceptions import ContextException
2526

2627

27-
class UserDataFilterProvisioner(Provisioning[UserDataFilter]):
28+
class UserDataFilterProvisioner(
29+
Provisioning[UserDataFilterFullLoad, UserDataFilterIncrementalLoad]
30+
):
2831
"""Provisioning class for user data filters in GoodData workspaces.
2932
3033
This class handles the creation, update, and deletion of user data filters
@@ -42,7 +45,8 @@ class UserDataFilterProvisioner(Provisioning[UserDataFilter]):
4245
```
4346
"""
4447

45-
source_group: list[UserDataFilter]
48+
source_group_full: list[UserDataFilterFullLoad]
49+
source_group_incremental: list[UserDataFilterIncrementalLoad]
4650
ldm_column_name: str = ""
4751
maql_column_name: str = ""
4852

@@ -64,7 +68,7 @@ def set_maql_column_name(self, maql_column_name: str) -> None:
6468

6569
@staticmethod
6670
def _group_db_user_data_filters_by_ws_id(
67-
user_data_filters: list[UserDataFilter],
71+
user_data_filters: list[UserDataFilterFullLoad],
6872
) -> list[WorkspaceUserDataFilters]:
6973
"""Group user data filters by workspace ID and user ID."""
7074
ws_map: dict[str, dict[str, set[str]]] = {}
@@ -193,11 +197,8 @@ def _delete_user_data_filters(
193197
f"Failed to delete user data filters: {e}"
194198
) from e
195199

196-
def _provision(self) -> None:
200+
def _provision_full_load(self) -> None:
197201
"""Provision user data filters in GoodData workspaces."""
198-
grouped_db_user_data_filters = (
199-
self._group_db_user_data_filters_by_ws_id(self.source_group)
200-
)
201202

202203
if not self.maql_column_name:
203204
raise ContextException(
@@ -208,6 +209,13 @@ def _provision(self) -> None:
208209
"LDM column name is not set. Please set it before provisioning."
209210
)
210211

212+
grouped_db_user_data_filters = (
213+
self._group_db_user_data_filters_by_ws_id(self.source_group_full)
214+
)
211215
self._create_user_data_filters(grouped_db_user_data_filters)
212216

213217
self.logger.info("User data filters provisioning completed")
218+
219+
def _provision_incremental_load(self) -> None:
220+
"""Provision user data filters in GoodData workspaces."""
221+
raise NotImplementedError("Not implemented yet.")
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# (C) 2025 GoodData Corporation

0 commit comments

Comments
 (0)