Skip to content

Commit e3df0dc

Browse files
committed
Implemented cancel_payment. Remove extraneous semicolons which came from
switching between Python and JavaScript development too often. Restructured where to_primitive() is called (again) to better fit cancel_payment which requires a list of Operation objects.
1 parent cdcf3a3 commit e3df0dc

3 files changed

Lines changed: 26 additions & 9 deletions

File tree

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
setup(
1111
name='swish',
12-
version='1.4',
12+
version='1.5',
1313
packages=find_packages(),
1414
include_package_data=True,
1515
license='MIT',

swish/client.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from .environment import Environment
66
from .exceptions import SwishError
7-
from .models import Payment, Refund, CommerceQRCodeRequest
7+
from .models import Payment, Refund, CommerceQRCodeRequest, Operation
88

99
try:
1010
from requests.packages.urllib3.contrib import pyopenssl
@@ -26,21 +26,27 @@ def __post(self, endpoint, payload):
2626
else:
2727
base_url = self.environment.base_url
2828
url = base_url + endpoint
29-
return requests.post(url=url, json=payload.to_primitive(), headers={'Content-Type': 'application/json'},
29+
return requests.post(url=url, json=payload, headers={'Content-Type': 'application/json'},
3030
cert=self.cert, verify=self.verify)
3131

3232
def post(self, endpoint, payload):
33-
warnings.warn("You shouldn't be calling this method. It will be private in a future version.", DeprecationWarning);
33+
warnings.warn("You shouldn't be calling this method. It will be private in a future version.", DeprecationWarning)
3434
self.__post(endpoint, payload)
3535

3636
def __get(self, endpoint, parameter):
3737
url = self.environment.base_url + endpoint + '/' + str(parameter)
38-
return requests.get(url, cert=self.cert, verify=self.verify)
38+
return requests.get(url=url, cert=self.cert, verify=self.verify)
3939

4040
def get(self, endpoint, parameter):
41-
warnings.warn("You shouldn't be calling this method. It will be private in a future version.", DeprecationWarning);
41+
warnings.warn("You shouldn't be calling this method. It will be private in a future version.", DeprecationWarning)
4242
self.__get(endpoint, parameter)
4343

44+
def __patch(self, endpoint, parameter, payload):
45+
url = self.environment.base_url + endpoint + '/' + str(parameter)
46+
return requests.patch(url=url, json=payload, headers={'Content-Type': 'application/json-patch+json'},
47+
cert=self.cert, verify=self.verify)
48+
49+
4450
def create_payment(self, amount, currency, callback_url, payee_payment_reference=None, message=None,
4551
payer_alias=None):
4652
payment_request = Payment({
@@ -53,7 +59,7 @@ def create_payment(self, amount, currency, callback_url, payee_payment_reference
5359
'payer_alias': payer_alias
5460
})
5561

56-
response = self.__post('paymentrequests', payment_request)
62+
response = self.__post('paymentrequests', payment_request.to_primitive())
5763
if response.status_code == 422:
5864
raise SwishError(response.json())
5965
response.raise_for_status()
@@ -67,6 +73,12 @@ def get_payment(self, payment_request_id):
6773
response.raise_for_status()
6874
return Payment(response.json())
6975

76+
def cancel_payment(self, payment_request_id):
77+
operation = Operation()
78+
response = self.__patch('paymentrequests', payment_request_id, [operation.to_primitive()])
79+
response.raise_for_status()
80+
return Payment(response.json())
81+
7082
def create_refund(self, original_payment_reference, amount, currency, callback_url, payer_payment_reference=None,
7183
payment_reference=None, payee_alias=None, message=None):
7284
refund_request = Refund({
@@ -81,7 +93,7 @@ def create_refund(self, original_payment_reference, amount, currency, callback_u
8193
'message': message
8294
})
8395

84-
response = self.__post('refunds', refund_request)
96+
response = self.__post('refunds', refund_request.to_primitive())
8597
if response.status_code == 422:
8698
raise SwishError(response.json())
8799
response.raise_for_status()
@@ -104,6 +116,6 @@ def commerce_qr_code(self, token, format, size=None, border=None, transparent=No
104116
'transparent': transparent
105117
})
106118

107-
response = self.__post('commerce', commerce_qr_code_request)
119+
response = self.__post('commerce', commerce_qr_code_request.to_primitive())
108120
response.raise_for_status()
109121
return response.content

swish/models.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,8 @@ class CommerceQRCodeRequest(models.Model):
5656

5757
class Options:
5858
serialize_when_none = False
59+
60+
class Operation(models.Model):
61+
op = types.StringType(required=True, choices=('replace',), default='replace'),
62+
path = types.StringType(required=True, choices=('/status',), default='/status'),
63+
value = types.StringType(required=True, choices=('cancelled',), default='cancelled')

0 commit comments

Comments
 (0)