99
1010logger = logging .getLogger (__name__ )
1111
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+
1228
1329class _DefaultPermissionsEndpoint (Endpoint ):
1430 """Adds default-permission model to another endpoint
@@ -19,15 +35,17 @@ class _DefaultPermissionsEndpoint(Endpoint):
1935 has these supported endpoints
2036 """
2137
22- def __init__ (self , parent_srv , owner_baseurl ) :
38+ def __init__ (self , parent_srv : "Server" , owner_baseurl : Callable [[], str ]) -> None :
2339 super (_DefaultPermissionsEndpoint , self ).__init__ (parent_srv )
2440
2541 # owner_baseurl is the baseurl of the parent. The MUST be a lambda
2642 # since we don't know the full site URL until we sign in. If
2743 # populated without, we will get a sign-in error
2844 self .owner_baseurl = owner_baseurl
2945
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 ]:
3149 url = "{0}/{1}/default-permissions/{2}" .format (self .owner_baseurl (), resource .id , content_type + "s" )
3250 update_req = RequestFactory .Permission .add_req (permissions )
3351 response = self .put_request (url , update_req )
@@ -36,7 +54,7 @@ def update_default_permissions(self, resource, permissions, content_type):
3654
3755 return permissions
3856
39- def delete_default_permission (self , resource , rule , content_type ) :
57+ def delete_default_permission (self , resource : "TableauItem" , rule : PermissionsRule , content_type : str ) -> None :
4058 for capability , mode in rule .capabilities .items ():
4159 # Made readability better but line is too long, will make this look better
4260 url = (
@@ -60,18 +78,20 @@ def delete_default_permission(self, resource, rule, content_type):
6078 "Deleted permission for {0} {1} item {2}" .format (rule .grantee .tag_name , rule .grantee .id , resource .id )
6179 )
6280
63- def populate_default_permissions (self , item , content_type ) :
81+ def populate_default_permissions (self , item : "ProjectItem" , content_type : str ) -> None :
6482 if not item .id :
6583 error = "Server item is missing ID. Item must be retrieved from server first."
6684 raise MissingRequiredFieldError (error )
6785
68- def permission_fetcher ():
86+ def permission_fetcher () -> List [ PermissionsRule ] :
6987 return self ._get_default_permissions (item , content_type )
7088
7189 item ._set_default_permissions (permission_fetcher , content_type )
7290 logger .info ("Populated {0} permissions for item (ID: {1})" .format (item .id , content_type ))
7391
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 ]:
7595 url = "{0}/{1}/default-permissions/{2}" .format (self .owner_baseurl (), item .id , content_type + "s" )
7696 server_response = self .get_request (url , req_options )
7797 permissions = PermissionsRule .from_response (server_response .content , self .parent_srv .namespace )
0 commit comments