1+ import json
12import logging
2- from typing import Any , Dict , List , Optional , Tuple
3+ from typing import Any , Dict , List , Optional , Tuple , Union
4+ import uuid
35
46from .calls import make_request , InvalidUrlSpec
5- from .data import BugoutUser , BugoutToken , Method , TokenType
7+ from .data import Method , TokenType , BugoutUser , BugoutToken , BugoutUserTokens
68
79logger = logging .getLogger (__name__ )
810
@@ -35,33 +37,14 @@ def _call(self, method: Method, path: str, **kwargs):
3537 result = make_request (method = method , url = url , ** kwargs )
3638 return result
3739
38- def _user_model_converter (self , user_object : Dict [str , Any ]) -> BugoutUser :
39- return BugoutUser (
40- id = user_object .get ("user_id" ),
41- username = user_object .get ("username" ),
42- email = user_object .get ("email" ),
43- normalized_email = user_object .get ("normalized_email" ),
44- verified = user_object .get ("verified" ),
45- autogenerated = user_object .get ("autogenerated" ),
46- created_at = user_object .get ("created_at" ),
47- updated_at = user_object .get ("updated_at" ),
48- )
49-
50- def get_user (self , token : str ) -> Dict [str , Any ]:
51- get_user_path = "user"
52- headers = {
53- "Authorization" : f"Bearer { token } " ,
54- }
55- result = self ._call (method = Method .get , path = get_user_path , headers = headers )
56- return self ._user_model_converter (result )
57-
40+ # User module
5841 def create_user (
5942 self ,
6043 username : str ,
6144 email : str ,
6245 password : str ,
6346 autogenerated_token : Optional [str ] = None ,
64- ) -> Dict [ str , Any ] :
47+ ) -> BugoutUser :
6548 create_user_path = "user"
6649 data = {
6750 "username" : username ,
@@ -76,50 +59,98 @@ def create_user(
7659 result = self ._call (
7760 method = Method .post , path = create_user_path , headers = headers , data = data
7861 )
79- return self . _user_model_converter ( result )
62+ return BugoutUser ( ** result )
8063
64+ def get_user (self , token : uuid .UUID ) -> BugoutUser :
65+ get_user_path = "user"
66+ headers = {
67+ "Authorization" : f"Bearer { token } " ,
68+ }
69+ result = self ._call (method = Method .get , path = get_user_path , headers = headers )
70+ return BugoutUser (** result )
71+
72+ # Token module
8173 def create_token (self , username : str , password : str ) -> BugoutToken :
8274 create_token_path = "token"
8375 data = {
8476 "username" : username ,
8577 "password" : password ,
8678 }
8779 result = self ._call (method = Method .post , path = create_token_path , data = data )
88- return BugoutToken (
89- id = result .get ("access_token" ),
90- token_type = result .get ("token_type" ),
91- )
80+ return BugoutToken (** result )
9281
93- def revoke_token (self , token : str ) -> BugoutToken :
94- create_token_path = "token"
82+ def revoke_token (self , token : uuid . UUID ) -> BugoutToken :
83+ revoke_token_path = "token"
9584 headers = {
9685 "Authorization" : f"Bearer { token } " ,
9786 }
9887 result = self ._call (
99- method = Method .delete , path = create_token_path , headers = headers
88+ method = Method .delete , path = revoke_token_path , headers = headers
10089 )
101- return BugoutToken (id = result )
90+ return result
91+
92+ def revoke_token_by_id (self , token : uuid .UUID ) -> BugoutToken :
93+ revoke_token_path = f"token/{ token } "
94+ result = self ._call (method = Method .delete , path = revoke_token_path )
95+ return result
10296
10397 def update_token (
10498 self ,
105- token : str ,
106- token_type : Optional [str ] = None ,
99+ token : uuid . UUID ,
100+ token_type : Optional [TokenType ] = None ,
107101 token_note : Optional [str ] = None ,
108102 ) -> BugoutToken :
109- create_token_path = "token"
103+ update_token_path = "token"
110104
111- data = {"access_token" : token }
105+ data : Dict [ str , Any ] = {"access_token" : token }
112106 if token_type is None and token_note is None :
113107 raise TokenInvalidParameters (
114108 "In order to update token, at least one of token_type, or token_note must be specified"
115109 )
116- if token_type not in TokenType .__members__ :
117- raise TokenInvalidParameters ("Incorrect token type provided" )
110+ if token_type is not None and token_type not in TokenType .__members__ :
111+ raise TokenInvalidParameters (
112+ "Incorrect token type provided, check types at get_token_types()"
113+ )
118114
119115 if token_type is not None :
120116 data .update ({"token_type" : token_type })
121117 if token_note is not None :
122118 data .update ({"token_note" : token_note })
123119
124- result = self ._call (method = Method .put , path = create_token_path , data = data )
125- return BugoutToken (id = result , token_type = token_type , token_note = token_note )
120+ result = self ._call (method = Method .put , path = update_token_path , data = data )
121+ return BugoutToken (** result )
122+
123+ def get_token_types (self , token : uuid .UUID ) -> List [str ]:
124+ get_token_types_path = "token/types"
125+ headers = {
126+ "Authorization" : f"Bearer { token } " ,
127+ }
128+ result = self ._call (
129+ method = Method .get , path = get_token_types_path , headers = headers
130+ )
131+ return result
132+
133+ def get_user_tokens (
134+ self ,
135+ token : uuid .UUID ,
136+ active : Optional [bool ] = None ,
137+ token_type : Optional [TokenType ] = None ,
138+ ):
139+ get_user_tokens_path = "tokens"
140+ headers = {
141+ "Authorization" : f"Bearer { token } " ,
142+ }
143+ if token_type is not None and token_type not in TokenType .__members__ :
144+ raise TokenInvalidParameters (
145+ "Incorrect token type provided, check types at get_token_types()"
146+ )
147+ if active is not None and token_type is None :
148+ get_user_tokens_path += f"?active={ active } "
149+ elif active is None and token_type is not None :
150+ get_user_tokens_path += f"?token_type={ token_type } "
151+ elif active is not None and token_type is not None :
152+ get_user_tokens_path += f"?active={ active } &token_type={ token_type } "
153+ result = self ._call (
154+ method = Method .get , path = get_user_tokens_path , headers = headers
155+ )
156+ return BugoutUserTokens (** result )
0 commit comments