11from uuid import uuid4
22import datetime
3-
4- import requests
5- from requests import Session
3+ from .firebase_client import FirebaseClient
64from requests .exceptions import RequestException
75
86from .exceptions import SpendeeError
97
108
11- class Spendee ( Session ):
9+ class SpendeeApi ( FirebaseClient ):
1210 def __init__ (self , email : str , password : str , base_url : str = 'https://api.spendee.com/' , google_client_id : str = 'AIzaSyCCJPDxVNVFEARQ-LxH7q2aZtdQJGGFO84' ):
13- """
14- :param email: user email to use for login
15- :param password: user password to use for login
16- :param base_url: base URL of the API
17- """
1811 self .base_url = base_url
19- self ._email = email
20- self ._password = password
21- self ._google_client_id = google_client_id
22-
23- self ._access_token = None
24- self ._device_uuid = None
25- super (Spendee , self ).__init__ ()
12+ super ().__init__ (email , password , google_client_id )
2613
2714 def _build_url (self , version : str , url : str ):
2815 """
@@ -75,19 +62,20 @@ def request(self, method, url, version: str = 'v1', headers=None, params=None, *
7562 'Spendee-Version' : 'master'
7663 }
7764
65+ # Ensure authentication
7866 if not self ._access_token and not any (i in url for i in ('user-registration' , 'googleapis' )):
79- self .user_login ()
67+ self .authenticate ()
8068
8169 if self ._access_token :
82- headers ['Authorization' ] = 'Bearer {}' . format ( self ._access_token )
70+ headers ['Authorization' ] = f 'Bearer { self ._access_token } '
8371 if self ._device_uuid :
8472 headers ['Device-Uuid' ] = self ._device_uuid
8573
8674 url = self ._build_url (version , url )
8775
8876 response = None
8977 try :
90- response = super (Spendee , self ).request (method = method , url = url , headers = headers , params = params , ** kwargs )
78+ response = super (SpendeeApi , self ).request (method = method , url = url , headers = headers , params = params , ** kwargs )
9179 response .raise_for_status ()
9280 except RequestException as e :
9381 raise SpendeeError ("Spendee returned a non-200 HTTP code." , response = response ) from e
@@ -106,6 +94,20 @@ def request(self, method, url, version: str = 'v1', headers=None, params=None, *
10694 else :
10795 return result
10896
97+ def get_device_uuid_from_login (self ):
98+ # Actually perform the login to get device_uuid
99+ url = self ._build_url ('v3' , 'auth/login' )
100+ payload = {
101+ "global_currency" : "USD" ,
102+ "default_wallet_name" : "Cash Wallet" ,
103+ "timezone" : 'Asia/Jakarta' ,
104+ "platform" : "web" ,
105+ "version" : "master" ,
106+ "credential" : None
107+ }
108+ response = super ().post (url = url , json = payload )
109+ return response .get ('device_uuid' )
110+
109111 ###
110112
111113 def user_registration (self , email : str = None , password : str = None , device_uuid : str = None ,
@@ -172,26 +174,9 @@ def user_registration(self, email: str = None, password: str = None, device_uuid
172174 "device_uuid" : device_uuid
173175 }
174176
175- return super (Spendee , self ).post (url = url , version = version , ** kwargs )
177+ return super (SpendeeApi , self ).post (url = url , version = version , ** kwargs )
176178
177- def _get_refresh_token (self , email : str = None , password : str = None , ** kwargs ):
178- kwargs ['json' ] = {
179- 'email' : email ,
180- 'password' : password ,
181- 'returnSecureToken' : True ,
182- }
183- url = 'https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key={}' .format (self ._google_client_id )
184- response = super (Spendee , self ).post (url = url , ** kwargs )
185- return response ['refreshToken' ]
186-
187- def _get_access_token (self , refresh_token : str , ** kwargs ):
188- kwargs ['json' ] = {
189- 'refresh_token' : refresh_token ,
190- 'grant_type' : 'refresh_token' ,
191- }
192- url = 'https://securetoken.googleapis.com/v1/token?key={}' .format (self ._google_client_id )
193- response = super (Spendee , self ).post (url = url , ** kwargs )
194- return response ['access_token' ]
179+ ###
195180
196181 def user_login (self , version : str = 'v3' , url : str = 'auth/login' , ** kwargs ):
197182 """
@@ -211,7 +196,7 @@ def user_login(self, version: str = 'v3', url: str = 'auth/login', **kwargs):
211196 "version" : "master" ,
212197 "credential" : None
213198 }
214- result = super (Spendee , self ).post (url = url , version = version , ** kwargs )
199+ result = super (SpendeeApi , self ).post (url = url , version = version , ** kwargs )
215200 self ._device_uuid = result ['device_uuid' ]
216201
217202 def user_logout (self , version : str = 'v1.4' , url : str = 'user-logout' , ** kwargs ):
@@ -221,7 +206,7 @@ def user_logout(self, version: str = 'v1.4', url: str = 'user-logout', **kwargs)
221206 :rtype: bool
222207 :return: returns True if logout was successful
223208 """
224- return super (Spendee , self ).post (url = url , version = version , ** kwargs )
209+ return super (SpendeeApi , self ).post (url = url , version = version , ** kwargs )
225210
226211 def user_get_profile (self , version : str = 'v1.4' , url : str = 'user-get-profile' , ** kwargs ):
227212 """
0 commit comments