From b208b4640de20bb2de292c7ed94ddbb53e22365d Mon Sep 17 00:00:00 2001 From: Luis Brime Date: Mon, 2 Jan 2023 12:02:36 -0600 Subject: [PATCH 1/3] first approach for CardRequest --- cuenca/__init__.py | 2 + cuenca/resources/__init__.py | 2 + cuenca/resources/card_requests.py | 75 +++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 cuenca/resources/card_requests.py diff --git a/cuenca/__init__.py b/cuenca/__init__.py index 6bb845d0..e145cef7 100644 --- a/cuenca/__init__.py +++ b/cuenca/__init__.py @@ -7,6 +7,7 @@ 'BillPayment', 'Card', 'CardActivation', + 'CardRequest', 'CardTransaction', 'CardValidation', 'CashReference', @@ -52,6 +53,7 @@ BillPayment, Card, CardActivation, + CardRequest, CardTransaction, CardValidation, CashReference, diff --git a/cuenca/resources/__init__.py b/cuenca/resources/__init__.py index 3e4af59c..1d885341 100644 --- a/cuenca/resources/__init__.py +++ b/cuenca/resources/__init__.py @@ -6,6 +6,7 @@ 'BillPayment', 'Card', 'CardActivation', + 'CardRequest', 'CardTransaction', 'CardValidation', 'CashReference', @@ -43,6 +44,7 @@ from .balance_entries import BalanceEntry from .bill_payments import BillPayment from .card_activations import CardActivation +from .card_requests import CardRequest from .card_transactions import CardTransaction from .card_validations import CardValidation from .cards import Card diff --git a/cuenca/resources/card_requests.py b/cuenca/resources/card_requests.py new file mode 100644 index 00000000..a358c96d --- /dev/null +++ b/cuenca/resources/card_requests.py @@ -0,0 +1,75 @@ +import datetime as dt +from typing import ClassVar, Dict, Optional, cast + +from cuenca_validations.types import ( + DeliveryType, + MessengerInfo, + StatusDeliveryType, +) +from cuenca_validations.types.queries import QueryParams +from cuenca_validations.types.requests import ( # ? + CardRequestRequest, + CardRequestUpdateRequest, +) + +from ..http import Session, session as global_session +from .base import Creatable, Queryable, Retrievable, Updateable + + +class CardRequest(Creatable, Queryable, Retrievable, Updateable): + _resource: ClassVar = 'card_requests' + _query_params: ClassVar = QueryParams + + deactivated_at: Optional[dt.datetime] + user_id: str + latitude: str + longitude: str + external_number: str + internal_number: Optional[str] + street: str + city: str + colonia: str + postal_code: str + full_address: str + delivery_type: DeliveryType + status: StatusDeliveryType + phone: str + name: str + email: str + comment: Optional[str] + tracking_url: Optional[str] + provider_order_id: Optional[str] # ? + status_history: Optional[Dict] + messenger_info: Optional[MessengerInfo] + is_replacement: bool # ? + + class Config: + schema_extra = {'example': {}} + + @classmethod + def create(cls, *, session: Session = global_session) -> 'CardRequest': + req = CardRequestRequest() # ? + resp = cls._create(session=session, **req.dict()) + return cast('CardRequest', resp) + + @classmethod + def update( + cls, + card_request_id: str, + *, + session: Session = global_session, + ) -> 'CardRequest': + req = CardRequestUpdateRequest() # ? + resp = cls._update(card_request_id, session=session, **req.dict()) + return cast('CardRequest', resp) + + @classmethod + def deactivate( + cls, + card_request_id: str, + *, + session: Session = global_session, + ) -> 'CardRequest': + url = f'{cls._resource}/{card_request_id}' + resp = session.delete(url) + return cast('CardRequest', cls._from_dict(resp)) From 3fb6aa8ea5bf9345905e9c901e513a05b7396ef1 Mon Sep 17 00:00:00 2001 From: Luis Brime Date: Fri, 6 Jan 2023 14:05:37 -0600 Subject: [PATCH 2/3] card request resource --- cuenca/resources/card_requests.py | 73 +++++++++++++++++++++++++------ requirements.txt | 2 +- 2 files changed, 60 insertions(+), 15 deletions(-) diff --git a/cuenca/resources/card_requests.py b/cuenca/resources/card_requests.py index a358c96d..153b84b6 100644 --- a/cuenca/resources/card_requests.py +++ b/cuenca/resources/card_requests.py @@ -1,13 +1,9 @@ import datetime as dt from typing import ClassVar, Dict, Optional, cast -from cuenca_validations.types import ( - DeliveryType, - MessengerInfo, - StatusDeliveryType, -) +from cuenca_validations.types import DeliveryStatus, DeliveryType from cuenca_validations.types.queries import QueryParams -from cuenca_validations.types.requests import ( # ? +from cuenca_validations.types.requests import ( CardRequestRequest, CardRequestUpdateRequest, ) @@ -32,23 +28,67 @@ class CardRequest(Creatable, Queryable, Retrievable, Updateable): postal_code: str full_address: str delivery_type: DeliveryType - status: StatusDeliveryType + status: DeliveryStatus phone: str name: str email: str comment: Optional[str] tracking_url: Optional[str] - provider_order_id: Optional[str] # ? + provider_order_id: Optional[str] status_history: Optional[Dict] - messenger_info: Optional[MessengerInfo] - is_replacement: bool # ? + messenger_info: Optional[Dict] class Config: - schema_extra = {'example': {}} + schema_extra = { + 'example': { + '_id': 'CRxxne2Z5VSTKZm_w8Hzffcw', + 'created_at': '2023-01-01T22:00:00Z', + 'updated_at': '2023-01-01T22:00:00Z', + 'latitude': '19.432608', + 'longitude': '-99.133209', + 'external_number': '36', + 'street': 'C. Varsovia', + 'city': 'Ciudad de México', + 'colonia': 'Juárez', + 'postal_code': '06600', + 'full_address': 'C. Varsovia 36, Juárez, Cuauhtémoc,' + ' 06600 Ciudad de México, CDMX', + 'delivery_type': 'local_next_day', + 'status': 'created', + 'phone': '5544332211', + 'name': 'Leonora Carrington', + 'email': 'leonora@cuenca.com', + } + } @classmethod - def create(cls, *, session: Session = global_session) -> 'CardRequest': - req = CardRequestRequest() # ? + def create( + cls, + user_id: str, + delivery_type: DeliveryType, + latitude: str, + longitude: str, + external_number: str, + street: str, + city: str, + colonia: str, + postal_code: str, + internal_number: Optional[str] = None, + *, + session: Session = global_session, + ) -> 'CardRequest': + req = CardRequestRequest( # name? + user_id=user_id, + delivery_type=delivery_type, + latitude=latitude, + longitude=longitude, + external_number=external_number, + internal_number=internal_number, + street=street, + city=city, + colonia=colonia, + postal_code=postal_code, + ) resp = cls._create(session=session, **req.dict()) return cast('CardRequest', resp) @@ -56,10 +96,15 @@ def create(cls, *, session: Session = global_session) -> 'CardRequest': def update( cls, card_request_id: str, + status: Optional[DeliveryStatus] = None, + delivery_type: Optional[DeliveryType] = None, *, session: Session = global_session, ) -> 'CardRequest': - req = CardRequestUpdateRequest() # ? + req = CardRequestUpdateRequest( # name? + status=status, + delivery_type=delivery_type, + ) resp = cls._update(card_request_id, session=session, **req.dict()) return cast('CardRequest', resp) diff --git a/requirements.txt b/requirements.txt index d8dcc6bc..33fff8cd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ requests==2.27.1 -cuenca-validations==0.11.15 +cuenca-validations==0.11.17.dev1 dataclasses>=0.7;python_version<"3.7" From 99108317a3fc3407456c8c85f053c883e88abf1a Mon Sep 17 00:00:00 2001 From: Luis Brime Date: Fri, 6 Jan 2023 16:35:29 -0600 Subject: [PATCH 3/3] recipient fields --- cuenca/resources/card_requests.py | 14 +++++++++++--- requirements.txt | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cuenca/resources/card_requests.py b/cuenca/resources/card_requests.py index 153b84b6..95215c80 100644 --- a/cuenca/resources/card_requests.py +++ b/cuenca/resources/card_requests.py @@ -29,9 +29,9 @@ class CardRequest(Creatable, Queryable, Retrievable, Updateable): full_address: str delivery_type: DeliveryType status: DeliveryStatus - phone: str - name: str - email: str + recipient_phone: str + recipient_name: str + recipient_email: str comment: Optional[str] tracking_url: Optional[str] provider_order_id: Optional[str] @@ -73,6 +73,10 @@ def create( city: str, colonia: str, postal_code: str, + full_address: str, + recipient_phone: str, + recipient_name: str, + recipient_email: str, internal_number: Optional[str] = None, *, session: Session = global_session, @@ -88,6 +92,10 @@ def create( city=city, colonia=colonia, postal_code=postal_code, + full_address=full_address, + recipient_phone=recipient_phone, + recipient_name=recipient_name, + recipient_email=recipient_email, ) resp = cls._create(session=session, **req.dict()) return cast('CardRequest', resp) diff --git a/requirements.txt b/requirements.txt index 33fff8cd..4e5da104 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ requests==2.27.1 -cuenca-validations==0.11.17.dev1 +cuenca-validations==0.11.17.dev3 dataclasses>=0.7;python_version<"3.7"