cuenca 1.0.2__tar.gz → 1.0.3.dev1__tar.gz

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.
Files changed (109) hide show
  1. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/PKG-INFO +1 -1
  2. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/api_keys.py +4 -5
  3. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/arpc.py +2 -2
  4. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/base.py +39 -50
  5. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/card_activations.py +1 -3
  6. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/cards.py +4 -5
  7. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/clabes.py +2 -2
  8. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/curp_validations.py +2 -5
  9. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/endpoints.py +3 -4
  10. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/file_batches.py +2 -2
  11. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/files.py +2 -8
  12. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/kyc_validations.py +2 -4
  13. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/kyc_verifications.py +3 -3
  14. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/limited_wallets.py +2 -2
  15. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/login_tokens.py +2 -2
  16. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/platforms.py +2 -2
  17. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/questionnaires.py +2 -4
  18. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/resources.py +2 -2
  19. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/savings.py +3 -3
  20. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/sessions.py +2 -2
  21. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/transfers.py +1 -1
  22. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/user_credentials.py +3 -8
  23. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/user_lists_validation.py +2 -5
  24. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/user_logins.py +2 -2
  25. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/users.py +3 -6
  26. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/verifications.py +3 -6
  27. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/wallet_transactions.py +1 -1
  28. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/version.py +1 -1
  29. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca.egg-info/PKG-INFO +1 -1
  30. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_api_keys.py +1 -1
  31. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/LICENSE +0 -0
  32. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/README.md +0 -0
  33. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/__init__.py +0 -0
  34. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/exc.py +0 -0
  35. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/http/__init__.py +0 -0
  36. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/http/client.py +0 -0
  37. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/jwt.py +0 -0
  38. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/py.typed +0 -0
  39. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/__init__.py +0 -0
  40. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/accounts.py +0 -0
  41. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/balance_entries.py +0 -0
  42. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/bill_payments.py +0 -0
  43. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/card_transactions.py +0 -0
  44. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/card_validations.py +0 -0
  45. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/cash_references.py +0 -0
  46. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/commissions.py +0 -0
  47. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/deposits.py +0 -0
  48. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/identities.py +0 -0
  49. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/identity_events.py +0 -0
  50. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/otps.py +0 -0
  51. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/service_providers.py +0 -0
  52. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/statements.py +0 -0
  53. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/user_events.py +0 -0
  54. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/webhooks.py +0 -0
  55. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca/resources/whatsapp_transfers.py +0 -0
  56. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca.egg-info/SOURCES.txt +0 -0
  57. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca.egg-info/dependency_links.txt +0 -0
  58. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca.egg-info/requires.txt +0 -0
  59. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/cuenca.egg-info/top_level.txt +0 -0
  60. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/setup.cfg +0 -0
  61. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/setup.py +0 -0
  62. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/__init__.py +0 -0
  63. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/conftest.py +0 -0
  64. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/http/__init__.py +0 -0
  65. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/http/conftest.py +0 -0
  66. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/http/test_client.py +0 -0
  67. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/__init__.py +0 -0
  68. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_accounts.py +0 -0
  69. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_arpc.py +0 -0
  70. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_balance_entries.py +0 -0
  71. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_bill_payments.py +0 -0
  72. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_card_activations.py +0 -0
  73. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_card_transactions.py +0 -0
  74. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_card_validations.py +0 -0
  75. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_cards.py +0 -0
  76. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_cash_references.py +0 -0
  77. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_clabes.py +0 -0
  78. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_commissions.py +0 -0
  79. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_curp_validations.py +0 -0
  80. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_deposits.py +0 -0
  81. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_endpoints.py +0 -0
  82. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_file_batches.py +0 -0
  83. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_files.py +0 -0
  84. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_identities.py +0 -0
  85. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_identity_events.py +0 -0
  86. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_kyc_validations.py +0 -0
  87. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_kyc_verifications.py +0 -0
  88. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_limited_wallets.py +0 -0
  89. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_login_tokens.py +0 -0
  90. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_otps.py +0 -0
  91. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_platforms.py +0 -0
  92. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_questionnaires.py +0 -0
  93. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_resources.py +0 -0
  94. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_savings.py +0 -0
  95. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_service_providers.py +0 -0
  96. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_sessions.py +0 -0
  97. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_statements.py +0 -0
  98. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_transfers.py +0 -0
  99. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_user_credentials.py +0 -0
  100. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_user_events.py +0 -0
  101. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_user_lists_validation.py +0 -0
  102. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_user_logins.py +0 -0
  103. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_users.py +0 -0
  104. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_verifications.py +0 -0
  105. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_wallet_transactions.py +0 -0
  106. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_webhooks.py +0 -0
  107. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/resources/test_whatsapp_transfers.py +0 -0
  108. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/test_cuenca.py +0 -0
  109. {cuenca-1.0.2 → cuenca-1.0.3.dev1}/tests/test_jwt.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cuenca
3
- Version: 1.0.2
3
+ Version: 1.0.3.dev1
4
4
  Summary: Cuenca API Client
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-python
6
6
  Author: Cuenca
@@ -1,5 +1,5 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, Optional, cast
2
+ from typing import ClassVar, Optional
3
3
 
4
4
  from cuenca_validations.types import ApiKeyQuery, ApiKeyUpdateRequest
5
5
 
@@ -36,7 +36,7 @@ class ApiKey(Creatable, Queryable, Retrievable, Updateable):
36
36
 
37
37
  @classmethod
38
38
  def create(cls, *, session: Session = global_session) -> 'ApiKey':
39
- return cast('ApiKey', cls._create(session=session))
39
+ return cls._create(session=session)
40
40
 
41
41
  @classmethod
42
42
  def deactivate(
@@ -55,7 +55,7 @@ class ApiKey(Creatable, Queryable, Retrievable, Updateable):
55
55
  """
56
56
  url = cls._resource + f'/{api_key_id}'
57
57
  resp = session.delete(url, dict(minutes=minutes))
58
- return cast('ApiKey', cls._from_dict(resp))
58
+ return cls(**resp)
59
59
 
60
60
  @classmethod
61
61
  def update(
@@ -74,5 +74,4 @@ class ApiKey(Creatable, Queryable, Retrievable, Updateable):
74
74
  req = ApiKeyUpdateRequest(
75
75
  metadata=metadata, user_id=user_id, platform_id=platform_id
76
76
  )
77
- resp = cls._update(api_key_id, **req.dict(), session=session)
78
- return cast('ApiKey', resp)
77
+ return cls._update(api_key_id, **req.dict(), session=session)
@@ -1,5 +1,5 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, Optional, cast
2
+ from typing import ClassVar, Optional
3
3
 
4
4
  from cuenca_validations.types.requests import ARPCRequest
5
5
 
@@ -52,4 +52,4 @@ class Arpc(Creatable):
52
52
  unique_number=unique_number,
53
53
  track_data_method=track_data_method,
54
54
  )
55
- return cast('Arpc', cls._create(session=session, **req.dict()))
55
+ return cls._create(session=session, **req.dict())
@@ -2,7 +2,7 @@ import base64
2
2
  import datetime as dt
3
3
  import json
4
4
  from io import BytesIO
5
- from typing import ClassVar, Dict, Generator, Optional, Union
5
+ from typing import ClassVar, Generator, Optional, Type, TypeVar, cast
6
6
  from urllib.parse import urlencode
7
7
 
8
8
  from cuenca_validations.types import (
@@ -12,34 +12,21 @@ from cuenca_validations.types import (
12
12
  TransactionQuery,
13
13
  TransactionStatus,
14
14
  )
15
- from pydantic import BaseModel
15
+ from pydantic import BaseModel, Extra
16
16
 
17
17
  from ..exc import MultipleResultsFound, NoResultFound
18
18
  from ..http import Session, session as global_session
19
19
 
20
+ R_co = TypeVar('R_co', bound='Resource', covariant=True)
21
+
20
22
 
21
23
  class Resource(BaseModel):
22
24
  _resource: ClassVar[str]
23
25
 
24
26
  id: str
25
27
 
26
- @classmethod
27
- def _from_dict(cls, obj_dict: Dict[str, Union[str, int]]) -> 'Resource':
28
- cls._filter_excess_fields(obj_dict)
29
- return cls(**obj_dict)
30
-
31
- @classmethod
32
- def _filter_excess_fields(cls, obj_dict):
33
- """
34
- dataclasses don't allow __init__ to be called with excess fields. This
35
- method allows the API to add fields in the response body without
36
- breaking the client
37
- """
38
- excess = set(obj_dict.keys()) - set(
39
- cls.schema().get("properties").keys()
40
- )
41
- for f in excess:
42
- del obj_dict[f]
28
+ class Config:
29
+ extra = Extra.ignore
43
30
 
44
31
  def to_dict(self):
45
32
  return SantizedDict(self.dict())
@@ -48,12 +35,12 @@ class Resource(BaseModel):
48
35
  class Retrievable(Resource):
49
36
  @classmethod
50
37
  def retrieve(
51
- cls, id: str, *, session: Session = global_session
52
- ) -> Resource:
38
+ cls: Type[R_co], id: str, *, session: Session = global_session
39
+ ) -> R_co:
53
40
  resp = session.get(f'/{cls._resource}/{id}')
54
- return cls._from_dict(resp)
41
+ return cls(**resp)
55
42
 
56
- def refresh(self, *, session: Session = global_session):
43
+ def refresh(self, *, session: Session = global_session) -> None:
57
44
  new = self.retrieve(self.id, session=session)
58
45
  for attr, value in new.__dict__.items():
59
46
  setattr(self, attr, value)
@@ -61,9 +48,11 @@ class Retrievable(Resource):
61
48
 
62
49
  class Creatable(Resource):
63
50
  @classmethod
64
- def _create(cls, *, session: Session = global_session, **data) -> Resource:
51
+ def _create(
52
+ cls: Type[R_co], *, session: Session = global_session, **data
53
+ ) -> R_co:
65
54
  resp = session.post(cls._resource, data)
66
- return cls._from_dict(resp)
55
+ return cls(**resp)
67
56
 
68
57
 
69
58
  class Updateable(Resource):
@@ -72,10 +61,10 @@ class Updateable(Resource):
72
61
 
73
62
  @classmethod
74
63
  def _update(
75
- cls, id: str, *, session: Session = global_session, **data
76
- ) -> Resource:
64
+ cls: Type[R_co], id: str, *, session: Session = global_session, **data
65
+ ) -> R_co:
77
66
  resp = session.patch(f'/{cls._resource}/{id}', data)
78
- return cls._from_dict(resp)
67
+ return cls(**resp)
79
68
 
80
69
 
81
70
  class Deactivable(Resource):
@@ -83,20 +72,20 @@ class Deactivable(Resource):
83
72
 
84
73
  @classmethod
85
74
  def deactivate(
86
- cls, id: str, *, session: Session = global_session, **data
87
- ) -> Resource:
75
+ cls: Type[R_co], id: str, *, session: Session = global_session, **data
76
+ ) -> R_co:
88
77
  resp = session.delete(f'/{cls._resource}/{id}', data)
89
- return cls._from_dict(resp)
78
+ return cls(**resp)
90
79
 
91
80
  @property
92
- def is_active(self):
81
+ def is_active(self) -> bool:
93
82
  return not self.deactivated_at
94
83
 
95
84
 
96
85
  class Downloadable(Resource):
97
86
  @classmethod
98
87
  def download(
99
- cls,
88
+ cls: Type[R_co],
100
89
  id: str,
101
90
  file_format: FileFormat = FileFormat.any,
102
91
  *,
@@ -121,13 +110,13 @@ class Downloadable(Resource):
121
110
  class Uploadable(Resource):
122
111
  @classmethod
123
112
  def _upload(
124
- cls,
113
+ cls: Type[R_co],
125
114
  file: bytes,
126
115
  user_id: str,
127
116
  *,
128
117
  session: Session = global_session,
129
118
  **data,
130
- ) -> Resource:
119
+ ) -> R_co:
131
120
  encoded_file = base64.b64encode(file)
132
121
  resp = session.request(
133
122
  'post',
@@ -138,7 +127,7 @@ class Uploadable(Resource):
138
127
  **{k: (None, v) for k, v in data.items()},
139
128
  ),
140
129
  )
141
- return cls._from_dict(json.loads(resp))
130
+ return cls(**json.loads(resp))
142
131
 
143
132
 
144
133
  class Queryable(Resource):
@@ -148,9 +137,9 @@ class Queryable(Resource):
148
137
 
149
138
  @classmethod
150
139
  def one(
151
- cls, *, session: Session = global_session, **query_params
152
- ) -> Resource:
153
- q = cls._query_params(limit=2, **query_params)
140
+ cls: Type[R_co], *, session: Session = global_session, **query_params
141
+ ) -> R_co:
142
+ q = cast(Queryable, cls)._query_params(limit=2, **query_params)
154
143
  resp = session.get(cls._resource, q.dict())
155
144
  items = resp['items']
156
145
  len_items = len(items)
@@ -158,40 +147,40 @@ class Queryable(Resource):
158
147
  raise NoResultFound
159
148
  if len_items > 1:
160
149
  raise MultipleResultsFound
161
- return cls._from_dict(items[0])
150
+ return cls(**items[0])
162
151
 
163
152
  @classmethod
164
153
  def first(
165
- cls, *, session: Session = global_session, **query_params
166
- ) -> Optional[Resource]:
167
- q = cls._query_params(limit=1, **query_params)
154
+ cls: Type[R_co], *, session: Session = global_session, **query_params
155
+ ) -> Optional[R_co]:
156
+ q = cast(Queryable, cls)._query_params(limit=1, **query_params)
168
157
  resp = session.get(cls._resource, q.dict())
169
158
  try:
170
159
  item = resp['items'][0]
171
160
  except IndexError:
172
161
  rv = None
173
162
  else:
174
- rv = cls._from_dict(item)
163
+ rv = cls(**item)
175
164
  return rv
176
165
 
177
166
  @classmethod
178
167
  def count(
179
- cls, *, session: Session = global_session, **query_params
168
+ cls: Type[R_co], *, session: Session = global_session, **query_params
180
169
  ) -> int:
181
- q = cls._query_params(count=True, **query_params)
170
+ q = cast(Queryable, cls)._query_params(count=True, **query_params)
182
171
  resp = session.get(cls._resource, q.dict())
183
172
  return resp['count']
184
173
 
185
174
  @classmethod
186
175
  def all(
187
- cls, *, session: Session = global_session, **query_params
188
- ) -> Generator[Resource, None, None]:
176
+ cls: Type[R_co], *, session: Session = global_session, **query_params
177
+ ) -> Generator[R_co, None, None]:
189
178
  session = session or global_session
190
- q = cls._query_params(**query_params)
179
+ q = cast(Queryable, cls)._query_params(**query_params)
191
180
  next_page_uri = f'{cls._resource}?{urlencode(q.dict())}'
192
181
  while next_page_uri:
193
182
  page = session.get(next_page_uri)
194
- yield from (cls._from_dict(item) for item in page['items'])
183
+ yield from (cls(**item) for item in page['items'])
195
184
  next_page_uri = page['next_page_uri']
196
185
 
197
186
 
@@ -42,9 +42,7 @@ class CardActivation(Creatable):
42
42
  exp_year=exp_year,
43
43
  cvv2=cvv2,
44
44
  )
45
- return cast(
46
- 'CardActivation', cls._create(session=session, **req.dict())
47
- )
45
+ return cls._create(session=session, **req.dict())
48
46
 
49
47
  @property
50
48
  def card(self) -> Optional[Card]:
@@ -1,5 +1,5 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, Optional, cast
2
+ from typing import ClassVar, Optional
3
3
 
4
4
  from cuenca_validations.types import (
5
5
  CardFundingType,
@@ -81,7 +81,7 @@ class Card(Retrievable, Queryable, Creatable, Updateable):
81
81
  card_holder_user_id=card_holder_user_id,
82
82
  is_dynamic_cvv=is_dynamic_cvv,
83
83
  )
84
- return cast('Card', cls._create(session=session, **req.dict()))
84
+ return cls._create(session=session, **req.dict())
85
85
 
86
86
  @classmethod
87
87
  def update(
@@ -106,8 +106,7 @@ class Card(Retrievable, Queryable, Creatable, Updateable):
106
106
  req = CardUpdateRequest(
107
107
  status=status, pin_block=pin_block, is_dynamic_cvv=is_dynamic_cvv
108
108
  )
109
- resp = cls._update(card_id, session=session, **req.dict())
110
- return cast('Card', resp)
109
+ return cls._update(card_id, session=session, **req.dict())
111
110
 
112
111
  @classmethod
113
112
  def deactivate(
@@ -118,4 +117,4 @@ class Card(Retrievable, Queryable, Creatable, Updateable):
118
117
  """
119
118
  url = f'{cls._resource}/{card_id}'
120
119
  resp = session.delete(url)
121
- return cast('Card', cls._from_dict(resp))
120
+ return cls(**resp)
@@ -1,4 +1,4 @@
1
- from typing import ClassVar, cast
1
+ from typing import ClassVar
2
2
 
3
3
  from ..http import Session, session as global_session
4
4
  from .base import Creatable, Queryable, Retrievable
@@ -11,4 +11,4 @@ class Clabe(Creatable, Queryable, Retrievable):
11
11
 
12
12
  @classmethod
13
13
  def create(cls, session: Session = global_session):
14
- return cast('Clabe', cls._create(session=session))
14
+ return cls._create(session=session)
@@ -1,5 +1,5 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, Optional, cast
2
+ from typing import ClassVar, Optional
3
3
 
4
4
  from cuenca_validations.types import (
5
5
  Country,
@@ -98,7 +98,4 @@ class CurpValidation(Creatable, Retrievable):
98
98
  gender=gender,
99
99
  manual_curp=manual_curp,
100
100
  )
101
- return cast(
102
- 'CurpValidation',
103
- cls._create(session=session, **req.dict()),
104
- )
101
+ return cls._create(session=session, **req.dict())
@@ -1,4 +1,4 @@
1
- from typing import ClassVar, List, Optional, cast
1
+ from typing import ClassVar, List, Optional
2
2
 
3
3
  from cuenca_validations.types.enums import WebhookEvent
4
4
  from cuenca_validations.types.requests import (
@@ -72,7 +72,7 @@ class Endpoint(Creatable, Deactivable, Retrievable, Queryable, Updateable):
72
72
  :return: New active endpoint
73
73
  """
74
74
  req = EndpointRequest(url=url, events=events)
75
- return cast('Endpoint', cls._create(session=session, **req.dict()))
75
+ return cls._create(session=session, **req.dict())
76
76
 
77
77
  @classmethod
78
78
  def update(
@@ -96,5 +96,4 @@ class Endpoint(Creatable, Deactivable, Retrievable, Queryable, Updateable):
96
96
  req = EndpointUpdateRequest(
97
97
  url=url, is_enable=is_enable, events=events
98
98
  )
99
- resp = cls._update(endpoint_id, session=session, **req.dict())
100
- return cast('Endpoint', resp)
99
+ return cls._update(endpoint_id, session=session, **req.dict())
@@ -1,4 +1,4 @@
1
- from typing import ClassVar, Dict, List, cast
1
+ from typing import ClassVar, Dict, List
2
2
 
3
3
  from cuenca_validations.types import BatchFileMetadata, FileBatchUploadRequest
4
4
 
@@ -22,4 +22,4 @@ class FileBatch(Creatable, Queryable):
22
22
  session: Session = global_session,
23
23
  ) -> 'FileBatch':
24
24
  req = FileBatchUploadRequest(files=files, user_id=user_id)
25
- return cast('FileBatch', cls._create(session=session, **req.dict()))
25
+ return cls._create(session=session, **req.dict())
@@ -1,5 +1,5 @@
1
1
  from io import BytesIO
2
- from typing import ClassVar, Optional, cast
2
+ from typing import ClassVar, Optional
3
3
 
4
4
  from cuenca_validations.types import FileQuery, FileUploadRequest, KYCFileType
5
5
  from pydantic import HttpUrl
@@ -44,13 +44,7 @@ class File(Downloadable, Queryable, Uploadable):
44
44
  is_back=is_back,
45
45
  user_id=user_id,
46
46
  )
47
- return cast(
48
- 'File',
49
- cls._upload(
50
- session=session,
51
- **req.dict(),
52
- ),
53
- )
47
+ return cls._upload(session=session, **req.dict())
54
48
 
55
49
  @property
56
50
  def file(self) -> bytes:
@@ -1,4 +1,4 @@
1
- from typing import ClassVar, List, Optional, cast
1
+ from typing import ClassVar, List, Optional
2
2
 
3
3
  from cuenca_validations.types import KYCFile, KYCValidationRequest
4
4
 
@@ -38,6 +38,4 @@ class KYCValidation(Creatable, Retrievable, Queryable):
38
38
  force=force,
39
39
  documents=documents,
40
40
  )
41
- return cast(
42
- 'KYCValidation', cls._create(**req.dict(), session=session)
43
- )
41
+ return cls._create(**req.dict(), session=session)
@@ -1,5 +1,5 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, Optional, cast
2
+ from typing import ClassVar, Optional
3
3
 
4
4
  from cuenca_validations.types import (
5
5
  Address,
@@ -39,7 +39,7 @@ class KYCVerification(Creatable, Retrievable, Updateable):
39
39
 
40
40
  @classmethod
41
41
  def create(cls, session: Session = global_session) -> 'KYCVerification':
42
- return cast('KYCVerification', cls._create(session=session))
42
+ return cls._create(session=session)
43
43
 
44
44
  @classmethod
45
45
  def update(
@@ -48,4 +48,4 @@ class KYCVerification(Creatable, Retrievable, Updateable):
48
48
  curp: Optional[CurpField] = None,
49
49
  ) -> 'KYCVerification':
50
50
  req = KYCVerificationUpdateRequest(curp=curp)
51
- return cast('KYCVerification', cls._update(id=kyc_id, **req.dict()))
51
+ return cls._update(id=kyc_id, **req.dict())
@@ -1,4 +1,4 @@
1
- from typing import ClassVar, Optional, cast
1
+ from typing import ClassVar, Optional
2
2
 
3
3
  from clabe import Clabe
4
4
  from cuenca_validations.types import (
@@ -37,4 +37,4 @@ class LimitedWallet(Wallet):
37
37
  allowed_curp=allowed_curp,
38
38
  allowed_rfc=allowed_rfc,
39
39
  )
40
- return cast('LimitedWallet', cls._create(**request.dict()))
40
+ return cls._create(**request.dict())
@@ -1,4 +1,4 @@
1
- from typing import ClassVar, cast
1
+ from typing import ClassVar
2
2
 
3
3
  from ..http import Session, session as global_session
4
4
  from .base import Creatable
@@ -17,4 +17,4 @@ class LoginToken(Creatable):
17
17
  Make sure to store this token in a safe place
18
18
  :return: Token that you can use in cuenca.configure
19
19
  """
20
- return cast('LoginToken', cls._create(session=session))
20
+ return cls._create(session=session)
@@ -1,5 +1,5 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, Optional, cast
2
+ from typing import ClassVar, Optional
3
3
 
4
4
  from cuenca_validations.types import Country, PlatformRequest, State
5
5
 
@@ -76,4 +76,4 @@ class Platform(Creatable):
76
76
  phone_number=phone_number,
77
77
  email_address=email_address,
78
78
  )
79
- return cast('Platform', cls._create(session=session, **req.dict()))
79
+ return cls._create(session=session, **req.dict())
@@ -1,5 +1,5 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, cast
2
+ from typing import ClassVar
3
3
 
4
4
  from cuenca_validations.types import QuestionnairesRequest
5
5
 
@@ -38,6 +38,4 @@ class Questionnaires(Creatable, Retrievable):
38
38
  token=token,
39
39
  form_id=form_id,
40
40
  )
41
- return cast(
42
- 'Questionnaires', cls._create(session=session, **req.dict())
43
- )
41
+ return cls._create(session=session, **req.dict())
@@ -1,6 +1,6 @@
1
1
  import re
2
2
  from concurrent.futures import ThreadPoolExecutor
3
- from typing import Dict, List, cast
3
+ from typing import Dict, List
4
4
 
5
5
  from .base import Retrievable
6
6
 
@@ -13,7 +13,7 @@ def retrieve_uri(uri: str) -> Retrievable:
13
13
  if not m:
14
14
  raise ValueError(f'uri is not a valid format: {uri}')
15
15
  resource, id_ = m.groups()
16
- return cast(Retrievable, RESOURCES[resource].retrieve(id_))
16
+ return RESOURCES[resource].retrieve(id_)
17
17
 
18
18
 
19
19
  def retrieve_uris(uris: List[str]) -> List[Retrievable]:
@@ -1,5 +1,5 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, Optional, cast
2
+ from typing import ClassVar, Optional
3
3
 
4
4
  from cuenca_validations.types import (
5
5
  SavingCategory,
@@ -34,7 +34,7 @@ class Saving(Wallet, Updateable):
34
34
  goal_amount=goal_amount,
35
35
  goal_date=goal_date,
36
36
  )
37
- return cast('Saving', cls._create(**request.dict()))
37
+ return cls._create(**request.dict())
38
38
 
39
39
  @classmethod
40
40
  def update(
@@ -51,4 +51,4 @@ class Saving(Wallet, Updateable):
51
51
  goal_amount=goal_amount,
52
52
  goal_date=goal_date,
53
53
  )
54
- return cast('Saving', cls._update(id=saving_id, **request.dict()))
54
+ return cls._update(id=saving_id, **request.dict())
@@ -1,5 +1,5 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, Optional, cast
2
+ from typing import ClassVar, Optional
3
3
 
4
4
  from cuenca_validations.types import SessionRequest, SessionType
5
5
  from pydantic import AnyUrl
@@ -50,4 +50,4 @@ class Session(Creatable, Retrievable, Queryable):
50
50
  success_url=success_url,
51
51
  failure_url=failure_url,
52
52
  )
53
- return cast('Session', cls._create(session=session, **req.dict()))
53
+ return cls._create(session=session, **req.dict())
@@ -69,7 +69,7 @@ class Transfer(Transaction, Creatable):
69
69
  idempotency_key=idempotency_key,
70
70
  user_id=user_id,
71
71
  )
72
- return cast('Transfer', cls._create(**req.dict()))
72
+ return cls._create(**req.dict())
73
73
 
74
74
  @classmethod
75
75
  def create_many(cls, requests: List[TransferRequest]) -> DictStrAny:
@@ -1,5 +1,5 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, Optional, cast
2
+ from typing import ClassVar, Optional
3
3
 
4
4
  from cuenca_validations.types.requests import (
5
5
  UserCredentialRequest,
@@ -25,9 +25,7 @@ class UserCredential(Creatable, Updateable):
25
25
  session: Session = global_session,
26
26
  ) -> 'UserCredential':
27
27
  req = UserCredentialRequest(password=password, user_id=user_id)
28
- return cast(
29
- 'UserCredential', cls._create(**req.dict(), session=session)
30
- )
28
+ return cls._create(**req.dict(), session=session)
31
29
 
32
30
  @classmethod
33
31
  def update(
@@ -42,7 +40,4 @@ class UserCredential(Creatable, Updateable):
42
40
  is_active=is_active,
43
41
  password=password,
44
42
  )
45
- return cast(
46
- 'UserCredential',
47
- cls._update(id=user_id, **req.dict(), session=session),
48
- )
43
+ return cls._update(id=user_id, **req.dict(), session=session)
@@ -1,5 +1,5 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, Optional, cast
2
+ from typing import ClassVar, Optional
3
3
 
4
4
  from cuenca_validations.types import UserListsRequest, VerificationStatus
5
5
  from cuenca_validations.types.identities import CurpField
@@ -36,7 +36,4 @@ class UserListsValidation(Creatable, Retrievable):
36
36
  curp=curp,
37
37
  account_number=account_number,
38
38
  )
39
- return cast(
40
- 'UserListsValidation',
41
- cls._create(session=session, **req.dict()),
42
- )
39
+ return cls._create(session=session, **req.dict())
@@ -1,5 +1,5 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, Optional, cast
2
+ from typing import ClassVar, Optional
3
3
 
4
4
  from cuenca_validations.types.requests import UserLoginRequest
5
5
 
@@ -31,7 +31,7 @@ class UserLogin(Creatable):
31
31
  session: Session = global_session,
32
32
  ) -> 'UserLogin':
33
33
  req = UserLoginRequest(password=password, user_id=user_id)
34
- login = cast('UserLogin', cls._create(session=session, **req.dict()))
34
+ login = cls._create(session=session, **req.dict())
35
35
  if login.success:
36
36
  session.headers['X-Cuenca-LoginId'] = login.id
37
37
  return login
@@ -59,7 +59,7 @@ class User(Creatable, Retrievable, Updateable, Queryable):
59
59
 
60
60
  @property
61
61
  def balance(self) -> int:
62
- be = cast(BalanceEntry, BalanceEntry.first(user_id=self.id))
62
+ be = BalanceEntry.first(user_id=self.id)
63
63
  return be.rolling_balance if be else 0
64
64
 
65
65
  class Config:
@@ -135,7 +135,7 @@ class User(Creatable, Retrievable, Updateable, Queryable):
135
135
  status=status,
136
136
  terms_of_service=terms_of_service,
137
137
  )
138
- return cast('User', cls._create(session=session, **req.dict()))
138
+ return cls._create(session=session, **req.dict())
139
139
 
140
140
  @classmethod
141
141
  def update(
@@ -174,10 +174,7 @@ class User(Creatable, Retrievable, Updateable, Queryable):
174
174
  curp_document=curp_document,
175
175
  status=status,
176
176
  )
177
- return cast(
178
- 'User',
179
- cls._update(id=user_id, **request.dict(), session=session),
180
- )
177
+ return cls._update(id=user_id, **request.dict(), session=session)
181
178
 
182
179
  @property
183
180
  def identity(self) -> Identity:
@@ -1,5 +1,5 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, Optional, Union, cast
2
+ from typing import ClassVar, Optional, Union
3
3
 
4
4
  from cuenca_validations.types import (
5
5
  VerificationAttemptRequest,
@@ -44,7 +44,7 @@ class Verification(Creatable, Updateable):
44
44
  req = VerificationRequest(
45
45
  recipient=recipient, type=type, platform_id=platform_id
46
46
  )
47
- return cast('Verification', cls._create(**req.dict(), session=session))
47
+ return cls._create(**req.dict(), session=session)
48
48
 
49
49
  @classmethod
50
50
  def verify(
@@ -54,7 +54,4 @@ class Verification(Creatable, Updateable):
54
54
  session: Session = global_session,
55
55
  ) -> 'Verification':
56
56
  req = VerificationAttemptRequest(code=code)
57
- return cast(
58
- 'Verification',
59
- cls._update(id=id, **req.dict(), session=session),
60
- )
57
+ return cls._update(id=id, **req.dict(), session=session)
@@ -35,4 +35,4 @@ class WalletTransaction(Transaction, Creatable):
35
35
  transaction_type=transaction_type,
36
36
  amount=amount,
37
37
  )
38
- return cast('WalletTransaction', cls._create(**request.dict()))
38
+ return cls._create(**request.dict())
@@ -1,3 +1,3 @@
1
- __version__ = '1.0.2'
1
+ __version__ = '1.0.3.dev1'
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: 1.0.2
3
+ Version: 1.0.3.dev1
4
4
  Summary: Cuenca API Client
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-python
6
6
  Author: Cuenca
@@ -84,7 +84,7 @@ def test_api_key_from_dict():
84
84
  metadata=None,
85
85
  user_id=None,
86
86
  )
87
- api_key = ApiKey._from_dict(api_keys_dict)
87
+ api_key = ApiKey(**api_keys_dict)
88
88
  assert not hasattr(api_key, 'extra_field_1')
89
89
  assert not hasattr(api_key, 'extra_field_2')
90
90
  assert api_key.id is not None
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes