1
1
import json
2
+ from re import search
2
3
from os .path import isfile
4
+ from os import remove
3
5
import socket
4
6
5
7
import requests
8
10
from bunq .sdk .context import ApiEnvironmentType
9
11
from bunq .sdk .context import BunqContext
10
12
from bunq .sdk .exception import BunqException
13
+ from bunq .sdk .exception import ForbiddenException
11
14
from bunq .sdk .model .generated import endpoint
12
15
from bunq .sdk .model .generated .object_ import Pointer , Amount , NotificationFilter
13
16
@@ -41,7 +44,7 @@ def __init__(self, env):
41
44
self .setup_context ()
42
45
self .setup_current_user ()
43
46
44
- def setup_context (self ):
47
+ def setup_context (self , reset_config_if_needed = True ):
45
48
if isfile (self .determine_bunq_conf_filename ()):
46
49
pass # Config is already present
47
50
elif self .env == ApiEnvironmentType .SANDBOX :
@@ -52,18 +55,31 @@ def setup_context(self):
52
55
else :
53
56
raise BunqException (self ._ERROR_COULD_NOT_DETIRMINE_CONF )
54
57
55
- api_context = ApiContext .restore (self .determine_bunq_conf_filename ())
56
- api_context .ensure_session_active ()
57
- api_context .save (self .determine_bunq_conf_filename ())
58
+ try :
59
+ api_context = ApiContext .restore (self .determine_bunq_conf_filename ())
60
+ api_context .ensure_session_active ()
61
+ api_context .save (self .determine_bunq_conf_filename ())
58
62
59
- BunqContext .load_api_context (api_context )
63
+ BunqContext .load_api_context (api_context )
64
+ except ForbiddenException as forbidden_exception :
65
+ if reset_config_if_needed :
66
+ self .__handle_forbidden_exception (forbidden_exception )
67
+ else :
68
+ raise forbidden_exception
60
69
61
70
def determine_bunq_conf_filename (self ):
62
71
if self .env == ApiEnvironmentType .PRODUCTION :
63
72
return self ._BUNQ_CONF_PRODUCTION
64
73
else :
65
74
return self ._BUNQ_CONF_SANDBOX
66
75
76
+ def __handle_forbidden_exception (self , forbidden_exception ):
77
+ if self .env == ApiEnvironmentType .SANDBOX :
78
+ remove (self .determine_bunq_conf_filename ())
79
+ self .setup_context (False )
80
+ else :
81
+ raise forbidden_exception
82
+
67
83
def setup_current_user (self ):
68
84
user = endpoint .User .get ().value .get_referenced_object ()
69
85
if (isinstance (user , endpoint .UserPerson )
@@ -215,7 +231,7 @@ def generate_new_sandbox_user(self):
215
231
:rtype: SandboxUser
216
232
"""
217
233
218
- url = "https://sandbox.public.api.bunq.com/v1/ sandbox-user"
234
+ url = ApiEnvironmentType . SANDBOX . uri_base + " sandbox-user"
219
235
220
236
headers = {
221
237
'x-bunq-client-request-id' : "uniqueness-is-required" ,
0 commit comments