1- import enum
1+ from typing import List , Dict
22import pydantic
33import httpx
4- from typing import List
4+ import enum
55
6+ from cs_tools .util .swagger import to_array
67from cs_tools .settings import APIParameters
78from cs_tools .models import TSPrivate
89
910
11+ import logging
12+ log = logging .getLogger (__name__ )
13+
14+
1015class ObjectType (enum .Enum ):
16+ LOGICAL_COLUMN = "LOGICAL_COLUMN" # table-, worksheet-, view-columns
1117 LOGICAL_TABLE = "LOGICAL_TABLE" # tables, worksheets, views
1218 QUESTION_ANSWER_BOOK = "QUESTION_ANSWER_BOOK" # answer
1319 PINBOARD_ANSWER_BOOK = "PINBOARD_ANSWER_BOOK" # pinboard
1420
1521
16- class SharePermission (str , enum .Enum ):
22+ class SharePermission (enum .Enum ):
1723 MODIFY = "MODIFY"
1824 NO_ACCESS = "NO_ACCESS"
1925 READ_ONLY = "READ_ONLY"
@@ -23,27 +29,51 @@ def __str__(self):
2329
2430
2531class ShareParameters (APIParameters ):
32+ # NOTE: FORMAT OF .permission
33+ #
34+ # {
35+ # 'permissions': {
36+ # guid: {
37+ # 'shareMode': permission
38+ # }
39+ # }
40+ # }
41+ #
2642 type : ObjectType = None
2743 id : str = None
28- # permission: Dict[str, Dict[str, Dict[str, SharePermission]]] = {}
29- permission : str = ""
44+ permission : Dict [str , Dict [str , Dict [str , SharePermission ]]]
45+ # permission: str = ""
3046 emailshares : List [pydantic .EmailStr ] = []
3147 notify : bool = True
3248 message : str = ""
3349
34- # TODO is it possible to use util.to_array()?
3550 @pydantic .validator ('id' , pre = True )
36- def _flatten_id_list (cls , v ):
37- if not isinstance (id , str ):
38- v = "," .join (v )
39- return f"[{ v } ]"
51+ def stringify_the_array (cls , v ) -> str :
52+ return to_array (v )
4053
4154 @pydantic .validator ('permission' , pre = True )
42- def _inject_share_mode (cls , v ):
55+ def inject_share_mode (cls , v ):
56+ if 'permissions' in v :
57+ v = v ['permissions' ]
58+
4359 new_v = {}
44- for group_id , permission in v .items ():
45- new_v [group_id ] = {'shareMode' : str (permission )}
46- return str ({'permissions' : new_v })
60+
61+ for group_guid , permission in v .items ():
62+ if 'shareMode' not in permission :
63+ permission = {'shareMode' : permission }
64+
65+ new_v [group_guid ] = permission
66+
67+ return {'permissions' : new_v }
68+
69+
70+ class DefinedPermissionParameters (APIParameters ):
71+ type : str
72+ id : str
73+
74+ @pydantic .validator ('id' , pre = True )
75+ def stringify_the_array (cls , v ):
76+ return to_array (v )
4777
4878
4979class _Security (TSPrivate ):
@@ -63,5 +93,14 @@ def share(self, **parameters) -> httpx.Response:
6393 List of metadata objects in the repository.
6494 """
6595 p = ShareParameters (** parameters )
96+ # print(p.json())
6697 r = self .post (f'{ self .base_url } /share' , data = p .json ())
6798 return r
99+
100+ def defined_permission (self , ** parameters ) -> httpx .Response :
101+ """
102+ Get defined permissions information for a given list of objects
103+ """
104+ p = DefinedPermissionParameters (** parameters )
105+ r = self .post (f'{ self .base_url } /definedpermission' , data = p .json ())
106+ return r
0 commit comments