Skip to content

Commit

Permalink
Merge pull request #42 from Edvinas9/feature/CTD-16-redirect-handler
Browse files Browse the repository at this point in the history
CTD-16 Fix payment schemas/models and update_payment_intent method
  • Loading branch information
tomrutherford-livestyled committed Sep 24, 2021
2 parents f0f1a21 + b0fb771 commit 3991f06
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 38 deletions.
21 changes: 21 additions & 0 deletions livestyled/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,27 @@ def _api_patch(
response.raise_for_status()
return response.json()

def _api_put(
self,
endpoint: str,
data: dict
) -> Dict:
response = requests.put(
'https://{}/{}'.format(
self._api_domain,
endpoint,
),
headers={
'Content-Type': CONTENT_TYPE,
'x-api-key': self._api_key
},
data=json.dumps(data)
)
if response.status_code >= 400:
print(response.content)
response.raise_for_status()
return response.json()

def _api_post(
self,
endpoint: str,
Expand Down
66 changes: 34 additions & 32 deletions livestyled/models/payment.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,17 @@ class PaymentCustomer:
def __init__(
self,
id: int,
user: str or None,
external_ids: dict,
payment_sources: [],
payment_sources: [] or None = [],
external_ids: dict or None = None,
user: str or None = None,
created_at: datetime or None = None,
updated_at: datetime or None = None
):
if isinstance(user, (str, int)):
user = User.placeholder(id=user)

self.id = id
self.user = User.placeholder(id=user)
self.user = user
self.external_ids = external_ids
self.payment_sources = payment_sources
self.created_at = created_at
Expand Down Expand Up @@ -45,10 +48,7 @@ def placeholder(
id
):
return cls(
id=id,
user=None,
external_ids=None,
payment_sources=[]
id=id
)

def diff(self, other):
Expand All @@ -65,10 +65,6 @@ def diff(self, other):
def user_id(self):
return self.user.id

@property
def user(self):
return self.user


class PaymentGateway:
def __init__(
Expand Down Expand Up @@ -141,9 +137,12 @@ def __init__(
created_at: datetime or None = None,
updated_at: datetime or None = None
):
if isinstance(payment_customer, (str, int)):
payment_customer = PaymentCustomer.placeholder(id=payment_customer)

self.id = id
self.status = status
self.payment_customer = PaymentCustomer.placeholder(id=payment_customer)
self.payment_customer = payment_customer
self.token_provider = token_provider
self.external_id = external_id
self.type = type
Expand Down Expand Up @@ -198,6 +197,7 @@ def placeholder(
default=None,
billing_details=None,
card=None,
psp=None,
psp_tokens=[]
)

Expand All @@ -215,32 +215,36 @@ def diff(self, other):
def payment_customer_id(self):
return self.payment_customer.id

@property
def payment_customer(self):
return self.payment_customer


class PaymentIntent:
def __init__(
self,
id: int,
external_id: str or None,
payment_source: str or None,
payment_customer: str or None,
status: str,
amount: int,
currency: str,
last_payment_error: str or None,
live_mode: bool,
save_payment_source: bool,
next_action: dict,
order_type: str,
order: str or None,
next_action: dict or None = None,
created_at: datetime or None = None,
updated_at: datetime or None = None
):
if isinstance(payment_source, (str, int)):
payment_source = PaymentSource.placeholder(id=payment_source)

if isinstance(payment_customer, (str, int)):
payment_customer = PaymentCustomer.placeholder(id=payment_customer)

self.id = id
self.external_id = external_id
self.payment_customer = PaymentCustomer.placeholder(id=payment_customer)
self.payment_source = payment_source
self.payment_customer = payment_customer
self.status = status
self.amount = amount
self.currency = currency
Expand All @@ -257,17 +261,21 @@ def __init__(
def create_new(
cls,
external_id: str or None,
payment_source: str,
payment_customer: str,
status: str,
amount: int,
currency: str,
last_payment_error: str or None,
live_mode: bool,
save_payment_source: bool,
next_action: dict,
next_action: dict or None,
order_type: str,
order: str
):
if isinstance(payment_source, (str, int)):
payment_source = PaymentSource.placeholder(id=payment_source)

if isinstance(payment_customer, (str, int)):
payment_customer = PaymentCustomer.placeholder(id=payment_customer)

Expand All @@ -277,6 +285,7 @@ def create_new(
return PaymentIntent(
id=None,
external_id=external_id,
payment_source=payment_source,
payment_customer=payment_customer,
status=status,
amount=amount,
Expand All @@ -297,22 +306,23 @@ def placeholder(
return cls(
id=id,
external_id=None,
payment_source=None,
payment_customer=None,
status=None,
amount=None,
currency=None,
last_payment_error=None,
live_mode=None,
save_payment_source=None,
next_action={},
next_action=None,
order_type=None,
order=None
)

def diff(self, other):
differences = {}
fields = (
'external_id', 'payment_customer', 'status', 'amount', 'currency', 'last_payment_error', 'live_mode', 'save_payment_source', 'next_action', 'order_type', 'order'
'external_id', 'payment_source', 'payment_customer', 'status', 'amount', 'currency', 'last_payment_error', 'live_mode', 'save_payment_source', 'next_action', 'order_type', 'order'
)
for field in fields:
if getattr(self, field) != getattr(other, field):
Expand All @@ -324,17 +334,13 @@ def payment_customer_id(self):
return self.payment_customer.id

@property
def payment_customer(self):
return self.payment_customer
def payment_source_id(self):
return self.payment_source.id

@property
def order_id(self):
return self.order.id

@property
def order(self):
return self.order


class MerchantAccount:
def __init__(
Expand Down Expand Up @@ -405,7 +411,3 @@ def diff(self, other):
@property
def payment_gateway_id(self):
return self.payment_gateway.id

@property
def payment_gateway(self):
return self.payment_gateway
12 changes: 10 additions & 2 deletions livestyled/resource_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,14 @@ def _update_resource(
)
return schema.Meta.model(**schema().load(updated_resource))

def _replace_resource(self, schema: Type[Schema], resource_id: int, model_instance):
payload = schema().dump(model_instance)
updated_resource = self._api_put(
'v4/{}/{}'.format(schema.Meta.url, resource_id),
payload
)
return schema.Meta.model(**schema().load(updated_resource))

def _update_resource_by_composite_id(
self,
schema: Type[Schema],
Expand Down Expand Up @@ -1394,8 +1402,8 @@ def get_payment_intent(self, id: int or str) -> Generator[Dict, None, None]:
def get_payment_intents(self, filters: dict or None) -> Generator[Dict, None, None]:
return self._get_resource_list(PaymentIntentSchema, filters=filters)

def update_payment_intent(self, payment_intent: PaymentIntent, attributes: Dict) -> PaymentIntent:
return self._update_resource(PaymentIntentSchema, payment_intent.id, attributes)
def update_payment_intent(self, payment_intent: PaymentIntent) -> PaymentIntent:
return self._replace_resource(PaymentIntentSchema, payment_intent.id, payment_intent)

def get_payment_customer(self, id: int or str) -> Generator[Dict, None, None]:
return self._get_resource(
Expand Down
9 changes: 5 additions & 4 deletions livestyled/schemas/payment.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class Meta:

id = fields.Int(missing=None)
status = fields.String()
payment_customer_id = RelatedResourceLinkField(schema=PaymentCustomerSchema, data_key='paymentCustomer', microservice_aware=True)
payment_customer = RelatedResourceLinkField(schema=PaymentCustomerSchema, data_key='paymentCustomer', microservice_aware=True, missing=None)
token_provider = fields.String(data_key='tokenProvider')
external_id = fields.String(data_key='externalId')
psp = fields.String()
Expand All @@ -62,14 +62,15 @@ class Meta:

id = fields.Int(missing=None)
external_id = fields.String(data_key='externalId', missing=None)
payment_customer_id = RelatedResourceLinkField(schema=PaymentCustomerSchema, data_key='paymentCustomer', microservice_aware=True)
payment_source = RelatedResourceLinkField(schema=PaymentSourceSchema, data_key='paymentSource', microservice_aware=True, missing=None)
payment_customer = RelatedResourceLinkField(schema=PaymentCustomerSchema, data_key='paymentCustomer', microservice_aware=True, missing=None)
status = fields.String()
amount = fields.Int()
currency = fields.String()
last_payment_error = fields.String(data_key='lastPaymentError')
last_payment_error = fields.String(data_key='lastPaymentError', missing=None)
live_mode = fields.Bool(data_key='liveMode')
save_payment_source = fields.Bool(data_key='savePaymentSource')
next_action = fields.Dict(data_key='nextAction')
next_action = fields.Dict(data_key='nextAction', missing=None, allow_none=True)
order_type = fields.String(data_key='orderType')
order = RelatedResourceLinkField(schema=OrderSchema, data_key='orderId', microservice_aware=True)

Expand Down

0 comments on commit 3991f06

Please sign in to comment.