cuenca 0.15.8.dev2__py3-none-any.whl → 0.15.9.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
cuenca/http/client.py CHANGED
@@ -24,18 +24,15 @@ SANDBOX_HOST = 'sandbox.cuenca.com'
24
24
  class Session:
25
25
 
26
26
  host: str = API_HOST
27
+ headers: DictStrAny = {}
27
28
  basic_auth: Tuple[str, str]
28
29
  jwt_token: Optional[Jwt] = None
29
- session: requests.Session
30
30
 
31
31
  def __init__(self):
32
- self.session = requests.Session()
33
- self.session.headers.update(
34
- {
35
- 'X-Cuenca-Api-Version': API_VERSION,
36
- 'User-Agent': f'cuenca-python/{CLIENT_VERSION}',
37
- }
38
- )
32
+ self.headers = {
33
+ 'X-Cuenca-Api-Version': API_VERSION,
34
+ 'User-Agent': f'cuenca-python/{CLIENT_VERSION}',
35
+ }
39
36
 
40
37
  # basic auth
41
38
  api_key = os.getenv('CUENCA_API_KEY', '')
@@ -75,10 +72,10 @@ class Session:
75
72
  self.jwt_token = Jwt.create(self)
76
73
 
77
74
  if login_token:
78
- self.session.headers['X-Cuenca-LoginToken'] = login_token
75
+ self.headers['X-Cuenca-LoginToken'] = login_token
79
76
 
80
77
  if session_token:
81
- self.session.headers['X-Cuenca-SessionId'] = session_token
78
+ self.headers['X-Cuenca-SessionId'] = session_token
82
79
 
83
80
  def get(
84
81
  self, endpoint: str, params: ClientRequestParams = None
@@ -105,19 +102,22 @@ class Session:
105
102
  data: OptionalDict = None,
106
103
  **kwargs,
107
104
  ) -> bytes:
108
- if self.jwt_token:
109
- if self.jwt_token.is_expired:
110
- self.jwt_token = Jwt.create(self)
111
- self.session.headers['X-Cuenca-Token'] = self.jwt_token.token
112
-
113
- resp = self.session.request(
114
- method=method,
115
- url='https://' + self.host + urljoin('/', endpoint),
116
- auth=self.auth,
117
- json=json.loads(JSONEncoder().encode(data)),
118
- params=params,
119
- **kwargs,
120
- )
105
+ resp = None
106
+ with requests.Session() as session:
107
+ session.headers = self.headers # type: ignore
108
+ if self.jwt_token:
109
+ if self.jwt_token.is_expired:
110
+ self.jwt_token = Jwt.create(self)
111
+ self.headers['X-Cuenca-Token'] = self.jwt_token.token
112
+ session.headers = self.headers # type: ignore
113
+ resp = session.request( # type: ignore
114
+ method=method,
115
+ url='https://' + self.host + urljoin('/', endpoint),
116
+ auth=self.auth,
117
+ json=json.loads(JSONEncoder().encode(data)),
118
+ params=params,
119
+ **kwargs,
120
+ )
121
121
  self._check_response(resp)
122
122
  return resp.content
123
123
 
cuenca/jwt.py CHANGED
@@ -42,7 +42,7 @@ class Jwt(BaseModel):
42
42
  @classmethod
43
43
  def create(cls, session: 'Session') -> 'Jwt':
44
44
  session.jwt_token = None
45
- session.session.headers.pop('X-Cuenca-Token', None)
45
+ session.headers.pop('X-Cuenca-Token', None)
46
46
  token = session.post('/token', dict())['token']
47
47
  expires_at = Jwt.get_expiration_date(token)
48
48
  return cls(expires_at=expires_at, token=token)
@@ -33,7 +33,7 @@ class UserLogin(Creatable):
33
33
  req = UserLoginRequest(password=password, user_id=user_id)
34
34
  login = cast('UserLogin', cls._create(session=session, **req.dict()))
35
35
  if login.success:
36
- session.session.headers['X-Cuenca-LoginId'] = login.id
36
+ session.headers['X-Cuenca-LoginId'] = login.id
37
37
  return login
38
38
 
39
39
  @classmethod
@@ -43,4 +43,4 @@ class UserLogin(Creatable):
43
43
  # Using user_id vs user_login_id to avoid needing to store
44
44
  # user_login_id or perform a query to fetch it
45
45
  session.delete(f'{cls._resource}/{user_id}', dict())
46
- session.session.headers.pop('X-Cuenca-LoginId', None)
46
+ session.headers.pop('X-Cuenca-LoginId', None)
cuenca/version.py CHANGED
@@ -1,3 +1,3 @@
1
- __version__ = '0.15.8.dev2'
1
+ __version__ = '0.15.9.dev0'
2
2
  CLIENT_VERSION = __version__
3
3
  API_VERSION = '2020-03-19'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cuenca
3
- Version: 0.15.8.dev2
3
+ Version: 0.15.9.dev0
4
4
  Summary: Cuenca API Client
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-python
6
6
  Author: Cuenca
@@ -14,9 +14,9 @@ Classifier: Operating System :: OS Independent
14
14
  Requires-Python: >=3.6
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: requests (<28,>=2.24)
18
- Requires-Dist: cuenca-validations (<0.12.0,>=0.11.3)
19
- Requires-Dist: dataclasses (>=0.7) ; python_version < "3.7"
17
+ Requires-Dist: requests <28,>=2.24
18
+ Requires-Dist: cuenca-validations <0.12.0,>=0.11.3
19
+ Requires-Dist: dataclasses >=0.7 ; python_version < "3.7"
20
20
 
21
21
  # Cuenca – Python client library
22
22
 
@@ -1,10 +1,10 @@
1
1
  cuenca/__init__.py,sha256=SBeQgpOOVkCUBb04Zz-Ye8xkfCufRWRn9VMqYcBUnZg,1745
2
2
  cuenca/exc.py,sha256=3w6vAaFD4XKTMzn1P9x-MLQriQpknJFQFD4nTwa7gcE,578
3
- cuenca/jwt.py,sha256=pRmvBhJ0BTTdcAndueyW83CM1FXMDz9lWSK9Kf2h38s,1510
3
+ cuenca/jwt.py,sha256=plB2ttHPZnL0xq3gqubw_Jjtj1QYG2E5bk99N3cn5zg,1502
4
4
  cuenca/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- cuenca/version.py,sha256=AUy29wAVXJiFGZ4QigjxqKVkXxByUispEI12jCaGo0U,84
5
+ cuenca/version.py,sha256=sZQIUKlpqQMJILKTmXN3zsdDrzgVgK_nwBgJXdXVYSI,84
6
6
  cuenca/http/__init__.py,sha256=V5TG6Ro9d3VY7umzcbtanmvHlGkv-k71H0tqrdMyH-s,49
7
- cuenca/http/client.py,sha256=Ev6K319fj_tDit5lPtTuyKVaMkbTAdm4sN0Rzyl_3kg,4039
7
+ cuenca/http/client.py,sha256=psXJiSgd3SUSJ5jwvhdBWsVMNadenG353BNVXdh7HMY,4168
8
8
  cuenca/resources/__init__.py,sha256=vtYCXa79oqS6E37DodWSxVqDdF65tFy8yWmGgWJ8fuE,2901
9
9
  cuenca/resources/accounts.py,sha256=5yfNxAHpxWFosoR4WrPrDGpBCRkaQk98V-w0wCPPXqU,345
10
10
  cuenca/resources/api_keys.py,sha256=boOBXUCxDSgSI7HMR70ylTEgfug9c_GOBozr_yzhjXQ,2554
@@ -40,14 +40,14 @@ cuenca/resources/transfers.py,sha256=D5xhYIjTHjBmMtcwo60QdhlKDQoFSdGJSmHmXeNPbO4
40
40
  cuenca/resources/user_credentials.py,sha256=Z0ppaWzxArMl7T5_FejaEPKgXhpsHUVc8EC2gMwtEbY,1264
41
41
  cuenca/resources/user_events.py,sha256=UUIiM2VoHh8aUqMUdx3YuUwUvSSNkjfSd5ayiQ_javk,673
42
42
  cuenca/resources/user_lists_validation.py,sha256=8tcltC2e3FtoEP6hgcBqjIZvpfzJJq4r2g2_1zehkCE,1354
43
- cuenca/resources/user_logins.py,sha256=0aEV5jdTgkQ5O8112h0X_lYMajanKX7ndkxHWlqOeQY,1385
43
+ cuenca/resources/user_logins.py,sha256=_rp69kJJfiI5n9YlqifViV-LjjItVZdTgNo9A12N9DM,1369
44
44
  cuenca/resources/users.py,sha256=I8KjnRJTOgWsXi4HFL9OlJw2OnAFaqO2lszVIirr7EQ,6434
45
45
  cuenca/resources/verifications.py,sha256=MHJhPEUo2cEL-cDeX8IwOVqIPYFvf2HKrtG-LCJR9tQ,1720
46
46
  cuenca/resources/wallet_transactions.py,sha256=hzGg1NZjxv6PiFN-GF2Z2eai07TQHtkoomMgHt5D1tw,1028
47
47
  cuenca/resources/webhooks.py,sha256=gF_88ewhK_koHQZhfTeShuAN5Cqv4LxJhqfSPIdiDkU,457
48
48
  cuenca/resources/whatsapp_transfers.py,sha256=Dro2wECBWawZPD4A96eerFiDcUtO6N1jSfdFnYLKjfM,874
49
49
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- tests/conftest.py,sha256=Xpk_1H6iDvBz7wiP_ImUdNBSMds6JbeyvaraSJoen_4,1563
50
+ tests/conftest.py,sha256=CASYYH0rKWkLLdO9SQS4A0H62oNRKqH29KgvUl62Gmg,1793
51
51
  tests/test_cuenca.py,sha256=aeha_utz9YiHQg6eJK2PB7g66pVUYFi9U6pYMGXDKvk,1628
52
52
  tests/test_jwt.py,sha256=dY5m4LigM-inqePyYOmdIHoOBmGx0WcfxlKnJEdsF70,1205
53
53
  tests/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -76,7 +76,7 @@ tests/resources/test_identity_events.py,sha256=BZlM2RXKtCORdTDQCemY3NAR3KWb3mPNq
76
76
  tests/resources/test_kyc_validations.py,sha256=TEyS6encW-InRpcAR4nDCfmkqqnn8yMC9AaS3iWm8Xw,420
77
77
  tests/resources/test_kyc_verifications.py,sha256=Y-ZU61o18I_3NFqMN2w4WGZTzwsIhULAtESqIXiizUY,634
78
78
  tests/resources/test_limited_wallets.py,sha256=c0zDDOip3lJk8chbcGr_nWCdkO9yuL_HbD1IikR5jH4,527
79
- tests/resources/test_login_tokens.py,sha256=THsCZvanxVLZGLTFfvsboVGz2kpajIxUVi7S9_ZHL64,562
79
+ tests/resources/test_login_tokens.py,sha256=kn0gXFOanIXjgKjbeOzfNyKsGAUkc2iKnuVmzIRaMD8,572
80
80
  tests/resources/test_platforms.py,sha256=5b6-XC3uAz8GARFkFoanH62jxE1uJIMXcdpeUhmI8Kg,211
81
81
  tests/resources/test_resources.py,sha256=rTcfjZOxujOJXjfqvOV6TPpYl8lae4bgbZj4jTAWm_o,170
82
82
  tests/resources/test_savings.py,sha256=2qlGo9Qy_bqwYfMmjf9OsPIPVWRb6zlkzaMgg5RWElk,1127
@@ -86,14 +86,15 @@ tests/resources/test_statements.py,sha256=e9S_yn5kD6M8IpfpRmIOJ0Y6aggBkYWQxynY6P
86
86
  tests/resources/test_transfers.py,sha256=06_1vHTM1pU3-LJXGupRo44VjZ21m7ICZcviJfxCYU4,4157
87
87
  tests/resources/test_user_credentials.py,sha256=WbK20aprlT3P_IEOwplvhIYnLfTgGhK3Q3Tu6Tf129c,809
88
88
  tests/resources/test_user_events.py,sha256=aPTyrEVF7jBD8-UQZeVOLbUmj9sni0JRCYgootmaQ8c,292
89
- tests/resources/test_user_logins.py,sha256=oXEspElSFyaCeALXR1njgrXYq73YqqKW8QVmihxRQ18,1012
89
+ tests/resources/test_user_lists_validation.py,sha256=4QtChGX6uejFycrxhM5cPYRc3f68SX76HI7RXImbk7Q,686
90
+ tests/resources/test_user_logins.py,sha256=YLIZiFsR9tBv1fNH-lIpIMtvGY_7NHGQpMBFVuEFj6c,988
90
91
  tests/resources/test_users.py,sha256=AkUvk4Jdg4mM3dxvYR17jlc_z3WslIH1OLDqNDoTcc4,3223
91
92
  tests/resources/test_verifications.py,sha256=yyL-bdryQU3MvqnmAgnnzGG9t7UTxWwPiVu-cDSCjl4,1647
92
93
  tests/resources/test_wallet_transactions.py,sha256=_L2hjPHT4FwwhxksUoaoVHwFFYOGWfF4ScCbk0kb7Hw,3945
93
94
  tests/resources/test_webhooks.py,sha256=nYCqAnlNJcMJKRHhgoHOWTQnFLWQHHvFyY8GVCxGTD8,328
94
95
  tests/resources/test_whatsapp_transfers.py,sha256=4Dmrsbytx7LRrLQo9M8TAL7cGKJufPStkp51UdRCnYU,1030
95
- cuenca-0.15.8.dev2.dist-info/LICENSE,sha256=aWv5PmUiAcNENEAdghcVQSeU56pXJHWexJYgklK9XLg,1063
96
- cuenca-0.15.8.dev2.dist-info/METADATA,sha256=5AZBavvPlnXJrInhigMibmsiFVqOgnWGrRUfGe-GMaE,4747
97
- cuenca-0.15.8.dev2.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
98
- cuenca-0.15.8.dev2.dist-info/top_level.txt,sha256=5h3K7XJTmJniDloPq4sIJHni_xLw-Uoc6ZJ5mcw_lZY,13
99
- cuenca-0.15.8.dev2.dist-info/RECORD,,
96
+ cuenca-0.15.9.dev0.dist-info/LICENSE,sha256=aWv5PmUiAcNENEAdghcVQSeU56pXJHWexJYgklK9XLg,1063
97
+ cuenca-0.15.9.dev0.dist-info/METADATA,sha256=3Po8Wt4p8QMk_TtQZROZ22D1xU2noLrrsMWfI4Pq_dg,4741
98
+ cuenca-0.15.9.dev0.dist-info/WHEEL,sha256=5sUXSg9e4bi7lTLOHcm6QEYwO5TIF1TNbTSVFVjcJcc,92
99
+ cuenca-0.15.9.dev0.dist-info/top_level.txt,sha256=5h3K7XJTmJniDloPq4sIJHni_xLw-Uoc6ZJ5mcw_lZY,13
100
+ cuenca-0.15.9.dev0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.38.4)
2
+ Generator: bdist_wheel (0.41.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
tests/conftest.py CHANGED
@@ -63,6 +63,17 @@ def user_request() -> Dict:
63
63
  return user_dict
64
64
 
65
65
 
66
+ @pytest.fixture
67
+ def user_lists_request() -> Dict:
68
+ user_dict = dict(
69
+ curp='LOHJ660606HDFPRS02',
70
+ names='Alejandro',
71
+ first_surname='Martinez',
72
+ second_surname='Viquez',
73
+ )
74
+ return user_dict
75
+
76
+
66
77
  @pytest.fixture
67
78
  def file() -> BytesIO:
68
79
  with open('tests/data/test_file.jpeg', 'rb') as image_file:
@@ -4,7 +4,7 @@ from cuenca import LoginToken, Transfer, UserLogin
4
4
  from cuenca.http.client import Session
5
5
 
6
6
 
7
- @pytest.fixture
7
+ @pytest.fixture(scope='function')
8
8
  def session():
9
9
  session = Session()
10
10
  session.configure(
@@ -19,6 +19,6 @@ def session():
19
19
  def test_login_token(session):
20
20
  UserLogin.create('222222', session=session)
21
21
  login_token = LoginToken.create(session=session)
22
- session.session.headers.pop('X-Cuenca-LoginId')
22
+ session.headers.pop('X-Cuenca-LoginId')
23
23
  session.configure(login_token=login_token.id)
24
24
  Transfer.count(session=session)
@@ -0,0 +1,20 @@
1
+ import pytest
2
+ from cuenca_validations.types import VerificationStatus
3
+
4
+ from cuenca.exc import CuencaResponseException
5
+ from cuenca.resources import UserListsValidation
6
+
7
+
8
+ @pytest.mark.vcr
9
+ def test_create_user_validation(user_lists_request):
10
+ user_validation = UserListsValidation.create(**user_lists_request)
11
+ assert user_validation.status == VerificationStatus.succeeded
12
+ assert user_validation.id
13
+
14
+
15
+ @pytest.mark.vcr
16
+ def test_create_user_validation_invalid_inputs():
17
+ with pytest.raises(CuencaResponseException) as exc:
18
+ UserListsValidation.create(**dict())
19
+ assert exc.status_code == 403
20
+ assert exc.json['error'] == 'There is an error with the inputs'
@@ -21,7 +21,7 @@ def test_valid_login(session: Session):
21
21
  assert login.success
22
22
  assert login.last_login_at is not None
23
23
  assert login.id is not None
24
- assert session.session.headers['X-Cuenca-LoginId'] == login.id
24
+ assert session.headers['X-Cuenca-LoginId'] == login.id
25
25
 
26
26
 
27
27
  @pytest.mark.vcr
@@ -30,11 +30,11 @@ def test_invalid_login(session: Session):
30
30
  assert not login.success
31
31
  assert login.last_login_at is None
32
32
  assert login.id is not None
33
- assert 'X-Cuenca-LoginId' not in session.session.headers
33
+ assert 'X-Cuenca-LoginId' not in session.headers
34
34
 
35
35
 
36
36
  @pytest.mark.vcr
37
37
  def test_logout(session: Session):
38
38
  UserLogin.create('222222', session=session)
39
39
  UserLogin.logout(session=session)
40
- assert 'X-Cuenca-LoginId' not in session.session.headers
40
+ assert 'X-Cuenca-LoginId' not in session.headers