9
9
10
10
logger = logging .getLogger (__name__ )
11
11
12
+ from typing import TYPE_CHECKING , Callable , List , Optional , Sequence , Union
13
+
14
+ if TYPE_CHECKING :
15
+ from ...models import (
16
+ DatasourceItem ,
17
+ FlowItem ,
18
+ ProjectItem ,
19
+ ViewItem ,
20
+ WorkbookItem ,
21
+ )
22
+
23
+ from ..server import Server
24
+ from ..request_options import RequestOptions
25
+
26
+ TableauItem = Union [DatasourceItem , FlowItem , ProjectItem , ViewItem , WorkbookItem ]
27
+
12
28
13
29
class _DefaultPermissionsEndpoint (Endpoint ):
14
30
"""Adds default-permission model to another endpoint
@@ -19,15 +35,17 @@ class _DefaultPermissionsEndpoint(Endpoint):
19
35
has these supported endpoints
20
36
"""
21
37
22
- def __init__ (self , parent_srv , owner_baseurl ) :
38
+ def __init__ (self , parent_srv : "Server" , owner_baseurl : Callable [[], str ]) -> None :
23
39
super (_DefaultPermissionsEndpoint , self ).__init__ (parent_srv )
24
40
25
41
# owner_baseurl is the baseurl of the parent. The MUST be a lambda
26
42
# since we don't know the full site URL until we sign in. If
27
43
# populated without, we will get a sign-in error
28
44
self .owner_baseurl = owner_baseurl
29
45
30
- def update_default_permissions (self , resource , permissions , content_type ):
46
+ def update_default_permissions (
47
+ self , resource : "TableauItem" , permissions : Sequence [PermissionsRule ], content_type : str
48
+ ) -> List [PermissionsRule ]:
31
49
url = "{0}/{1}/default-permissions/{2}" .format (self .owner_baseurl (), resource .id , content_type + "s" )
32
50
update_req = RequestFactory .Permission .add_req (permissions )
33
51
response = self .put_request (url , update_req )
@@ -36,7 +54,7 @@ def update_default_permissions(self, resource, permissions, content_type):
36
54
37
55
return permissions
38
56
39
- def delete_default_permission (self , resource , rule , content_type ) :
57
+ def delete_default_permission (self , resource : "TableauItem" , rule : PermissionsRule , content_type : str ) -> None :
40
58
for capability , mode in rule .capabilities .items ():
41
59
# Made readability better but line is too long, will make this look better
42
60
url = (
@@ -60,18 +78,20 @@ def delete_default_permission(self, resource, rule, content_type):
60
78
"Deleted permission for {0} {1} item {2}" .format (rule .grantee .tag_name , rule .grantee .id , resource .id )
61
79
)
62
80
63
- def populate_default_permissions (self , item , content_type ) :
81
+ def populate_default_permissions (self , item : "ProjectItem" , content_type : str ) -> None :
64
82
if not item .id :
65
83
error = "Server item is missing ID. Item must be retrieved from server first."
66
84
raise MissingRequiredFieldError (error )
67
85
68
- def permission_fetcher ():
86
+ def permission_fetcher () -> List [ PermissionsRule ] :
69
87
return self ._get_default_permissions (item , content_type )
70
88
71
89
item ._set_default_permissions (permission_fetcher , content_type )
72
90
logger .info ("Populated {0} permissions for item (ID: {1})" .format (item .id , content_type ))
73
91
74
- def _get_default_permissions (self , item , content_type , req_options = None ):
92
+ def _get_default_permissions (
93
+ self , item : "TableauItem" , content_type : str , req_options : Optional ["RequestOptions" ] = None
94
+ ) -> List [PermissionsRule ]:
75
95
url = "{0}/{1}/default-permissions/{2}" .format (self .owner_baseurl (), item .id , content_type + "s" )
76
96
server_response = self .get_request (url , req_options )
77
97
permissions = PermissionsRule .from_response (server_response .content , self .parent_srv .namespace )