1- import logging
2- from typing import Any , Dict , List , Optional , Tuple
1+ from typing import Any , Dict , List , Optional
32import uuid
43
54from .calls import make_request , InvalidUrlSpec
6- from .data import BugoutGroup , Method
5+ from .data import (
6+ Method ,
7+ Role ,
8+ BugoutGroup ,
9+ BugoutGroupUser ,
10+ BugoutGroupMembers ,
11+ BugoutUserGroups ,
12+ )
713
8- logger = logging .getLogger (__name__ )
914
10-
11- class GroupNotFound (Exception ):
15+ class GroupInvalidParameters (ValueError ):
1216 """
13- Raised on actions that involve group which are not present in the database .
17+ Raised when operations are applied to a group but invalid parameters are provided .
1418 """
1519
1620
@@ -29,14 +33,133 @@ def _call(self, method: Method, path: str, **kwargs):
2933 result = make_request (method = method , url = url , ** kwargs )
3034 return result
3135
32- def get_group (self , group_id : uuid .UUID , token : uuid .UUID ) -> BugoutGroup :
33- get_group_path = f"groups /{ group_id } "
36+ def get_group (self , token : uuid .UUID , group_id : uuid .UUID ) -> BugoutGroup :
37+ get_group_path = f"group /{ group_id } "
3438 headers = {
3539 "Authorization" : f"Bearer { token } " ,
3640 }
3741 result = self ._call (method = Method .get , path = get_group_path , headers = headers )
38- return BugoutGroup (
39- id = result .get ("id" ),
40- name = result .get ("name" ),
41- autogenerated = result .get ("autogenerated" ),
42+ return BugoutGroup (** result )
43+
44+ def get_user_groups (self , token : uuid .UUID ) -> BugoutUserGroups :
45+ get_user_groups_path = "groups"
46+ headers = {
47+ "Authorization" : f"Bearer { token } " ,
48+ }
49+ result = self ._call (
50+ method = Method .get , path = get_user_groups_path , headers = headers
51+ )
52+ return BugoutUserGroups (** result )
53+
54+ def create_group (self , token : uuid .UUID , group_name : str ) -> BugoutGroup :
55+ create_group_path = "group"
56+ data = {
57+ "group_name" : group_name ,
58+ }
59+ headers = {
60+ "Authorization" : f"Bearer { token } " ,
61+ }
62+ result = self ._call (
63+ method = Method .post , path = create_group_path , headers = headers , data = data
64+ )
65+ return BugoutGroup (** result )
66+
67+ def set_user_group (
68+ self ,
69+ token : uuid .UUID ,
70+ group_id : uuid .UUID ,
71+ user_type : Role ,
72+ username : Optional [str ] = None ,
73+ email : Optional [str ] = None ,
74+ ) -> BugoutGroupUser :
75+ set_user_group_path = f"group/{ group_id } /role"
76+
77+ if username is None and email is None :
78+ raise GroupInvalidParameters (
79+ "In order to update group role, at least one of username, or email must be specified"
80+ )
81+
82+ data : Dict [str , Any ] = {
83+ "user_type" : user_type ,
84+ }
85+ if username is not None :
86+ data .update ({"username" : username })
87+ if email is not None :
88+ data .update ({"email" : email })
89+ headers = {
90+ "Authorization" : f"Bearer { token } " ,
91+ }
92+ result = self ._call (
93+ method = Method .post , path = set_user_group_path , headers = headers , data = data
94+ )
95+ return BugoutGroupUser (** result )
96+
97+ def delete_user_group (
98+ self ,
99+ token : uuid .UUID ,
100+ group_id : uuid .UUID ,
101+ username : Optional [str ] = None ,
102+ email : Optional [str ] = None ,
103+ ) -> BugoutGroupUser :
104+ """
105+ TODO(kompotkot): Merge with set_user_group()
106+ """
107+ delete_user_group_path = f"group/{ group_id } /role"
108+
109+ if username is None and email is None :
110+ raise GroupInvalidParameters (
111+ "In order to update group role, at least one of username, or email must be specified"
112+ )
113+
114+ data = {}
115+ if username is not None :
116+ data .update ({"username" : username })
117+ if email is not None :
118+ data .update ({"email" : email })
119+ headers = {
120+ "Authorization" : f"Bearer { token } " ,
121+ }
122+ result = self ._call (
123+ method = Method .delete ,
124+ path = delete_user_group_path ,
125+ headers = headers ,
126+ data = data ,
127+ )
128+ return BugoutGroupUser (** result )
129+
130+ def get_group_members (
131+ self , token : uuid .UUID , group_id : uuid .UUID
132+ ) -> BugoutGroupMembers :
133+ get_group_members_path = f"group/{ group_id } /users"
134+ headers = {
135+ "Authorization" : f"Bearer { token } " ,
136+ }
137+ result = self ._call (
138+ method = Method .get , path = get_group_members_path , headers = headers
139+ )
140+ return BugoutGroupMembers (** result )
141+
142+ def update_group (
143+ self , token : uuid .UUID , group_id : uuid .UUID , group_name : str
144+ ) -> BugoutGroup :
145+ update_group_path = f"group/{ group_id } /name"
146+ data = {
147+ "group_name" : group_name ,
148+ }
149+ headers = {
150+ "Authorization" : f"Bearer { token } " ,
151+ }
152+ result = self ._call (
153+ method = Method .put , path = update_group_path , headers = headers , data = data
154+ )
155+ return BugoutGroup (** result )
156+
157+ def delete_group (self , token : uuid .UUID , group_id : uuid .UUID ) -> BugoutGroup :
158+ delete_group_path = f"group/{ group_id } "
159+ headers = {
160+ "Authorization" : f"Bearer { token } " ,
161+ }
162+ result = self ._call (
163+ method = Method .delete , path = delete_group_path , headers = headers
42164 )
165+ return BugoutGroup (** result )
0 commit comments