trivial: apply pyupgrade (#58937)

This commit is contained in:
Serghei Mihai 2021-11-26 11:38:58 +01:00
parent 19ab05d59e
commit caa40e7e77
20 changed files with 147 additions and 165 deletions

View File

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# eopayment - online payment library
# Copyright (C) 2011-2020 Entr'ouvert
#
@ -64,10 +63,10 @@ def get_backends():
'Dummy payment backend'
'''
return dict((backend, get_backend(backend)) for backend in __BACKENDS)
return {backend: get_backend(backend) for backend in __BACKENDS}
class Payment(object):
class Payment:
'''
Interface to credit card online payment servers of French banks. The
only use case supported for now is a unique automatic payment.
@ -132,7 +131,7 @@ class Payment(object):
- the third is the URL or the HTML form to contact the payment
server, which must be sent to the customer browser.
'''
logger.debug(u'%r' % kwargs)
logger.debug('%r' % kwargs)
if 'capture_date' in kwargs:
capture_date = kwargs.pop('capture_date')

View File

@ -14,7 +14,6 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function
import configparser
import decimal

View File

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# eopayment - online payment library
# Copyright (C) 2011-2020 Entr'ouvert
#

View File

@ -61,18 +61,18 @@ ORDERID_TRANSACTION_SEPARATOR = '!'
def force_text(s, encoding='utf-8'):
if issubclass(type(s), six.text_type):
if issubclass(type(s), str):
return s
try:
if not issubclass(type(s), six.string_types):
if not issubclass(type(s), str):
if isinstance(s, bytes):
s = six.text_type(s, encoding)
s = str(s, encoding)
else:
s = six.text_type(s)
s = str(s)
else:
s = s.decode(encoding)
except UnicodeDecodeError:
return six.text_type(s, encoding, 'ignore')
return str(s, encoding, 'ignore')
return s
@ -93,7 +93,7 @@ class ResponseError(PaymentException):
pass
class PaymentResponse(object):
class PaymentResponse:
'''Holds a generic view on the result of payment transaction response.
result -- holds the declarative result of the transaction, does not use
@ -143,7 +143,7 @@ class PaymentResponse(object):
return self.result == ERROR
class PaymentCommon(object):
class PaymentCommon:
has_free_transaction_id = False
PATH = '/tmp'
@ -189,7 +189,7 @@ class PaymentCommon(object):
return str(amount)
class Form(object):
class Form:
def __init__(self, url, method, fields, encoding='utf-8',
submit_name='Submit', submit_value='Submit'):
self.url = url

View File

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# eopayment - online payment library
# Copyright (C) 2011-2020 Entr'ouvert
#
@ -456,7 +455,7 @@ class Payment(PaymentCommon):
},
{
'name': 'language',
'caption': _(u'Language'),
'caption': _('Language'),
'default': 'fr_FR',
'choices': (('fr_FR', 'français'),),
},
@ -496,14 +495,14 @@ class Payment(PaymentCommon):
def __init__(self, options, logger=None):
# retro-compatibility with old default of latin1
options.setdefault('encoding', 'iso-8859-1')
super(Payment, self).__init__(options, logger=logger)
super().__init__(options, logger=logger)
def sha_sign(self, algo, key, params, keep, encoding='iso-8859-1'):
'''Ogone signature algorithm of query string'''
values = params.items()
values = [(a.upper(), b) for a, b in values]
values = sorted(values)
values = [u'%s=%s' % (a, b) for a, b in values if a in keep and b]
values = ['%s=%s' % (a, b) for a, b in values if a in keep and b]
tosign = key.join(values)
tosign += key
tosign = force_byte(tosign, encoding=encoding)
@ -578,8 +577,8 @@ class Payment(PaymentCommon):
def response(self, query_string, **kwargs):
params = urlparse.parse_qs(query_string, True, encoding=self.encoding)
params = dict((key.upper(), params[key][0]) for key in params)
if not set(params) >= set(['ORDERID', 'PAYID', 'STATUS', 'NCERROR']):
params = {key.upper(): params[key][0] for key in params}
if not set(params) >= {'ORDERID', 'PAYID', 'STATUS', 'NCERROR'}:
raise ResponseError('missing ORDERID, PAYID, STATUS or NCERROR')
# py2: decode binary strings in query-string

View File

@ -1,4 +1,3 @@
# -*- coding: utf-8
# eopayment - online payment library
# Copyright (C) 2011-2020 Entr'ouvert
#
@ -224,7 +223,7 @@ class Payment(PaymentCommon):
'name': 'site',
'caption': 'Numéro de site',
'required': True,
'validation': lambda x: isinstance(x, six.string_types)
'validation': lambda x: isinstance(x, str)
and x.isdigit() and len(x) == 7,
},
{
@ -232,20 +231,20 @@ class Payment(PaymentCommon):
'caption': 'Clé',
'help_text': 'Uniquement nécessaire pour l\'annulation / remboursement / encaissement (PayBox Direct)',
'required': False,
'validation': lambda x: isinstance(x, six.string_types),
'validation': lambda x: isinstance(x, str),
},
{
'name': 'rang',
'caption': 'Numéro de rang',
'required': True,
'validation': lambda x: isinstance(x, six.string_types)
'validation': lambda x: isinstance(x, str)
and x.isdigit() and len(x) == 3,
},
{
'name': 'identifiant',
'caption': 'Identifiant',
'required': True,
'validation': lambda x: isinstance(x, six.string_types)
'validation': lambda x: isinstance(x, str)
and x.isdigit() and (0 < len(x) < 10),
},
{
@ -273,7 +272,7 @@ class Payment(PaymentCommon):
'caption': 'Nombre de jours pour un paiement différé',
'default': '',
'required': False,
'validation': lambda x: isinstance(x, six.string_types)
'validation': lambda x: isinstance(x, str)
and x.isdigit() and (1 <= len(x) <= 2)
},
{
@ -358,17 +357,17 @@ class Payment(PaymentCommon):
fields = []
for k, v in d:
fields.append({
'type': u'hidden',
'type': 'hidden',
'name': force_text(k),
'value': force_text(v),
})
form = Form(url, 'POST', fields, submit_name=None,
submit_value=u'Envoyer', encoding='utf-8')
submit_value='Envoyer', encoding='utf-8')
return transaction_id, FORM, form
def response(self, query_string, callback=False, **kwargs):
d = urlparse.parse_qs(query_string, True, False)
if not set(d) >= set(['erreur', 'reference']):
if not set(d) >= {'erreur', 'reference'}:
raise ResponseError('missing erreur or reference')
signed = False
if 'signature' in d:

View File

@ -14,7 +14,6 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function, unicode_literals
import copy
import decimal
@ -85,10 +84,10 @@ class PayFiPError(PaymentException):
args = [code, message]
if origin:
args.append(origin)
super(PayFiPError, self).__init__(*args)
super().__init__(*args)
class PayFiP(object):
class PayFiP:
'''Encapsulate SOAP web-services of PayFiP'''
def __init__(self, wsdl_url=None, service_url=None, zeep_client_kwargs=None, use_local_wsdl=True):
@ -177,8 +176,8 @@ class Payment(PaymentCommon):
'parameters': [
{
'name': 'numcli',
'caption': _(u'Client number'),
'help_text': _(u'6 digits number provided by DGFIP'),
'caption': _('Client number'),
'help_text': _('6 digits number provided by DGFIP'),
'validation': lambda s: str.isdigit(s) and len(s) == 6,
'required': True,
},
@ -211,7 +210,7 @@ class Payment(PaymentCommon):
maximal_amount = decimal.Decimal('100000.0')
def __init__(self, *args, **kwargs):
super(Payment, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.payfip = PayFiP()
def _generate_refdet(self):
@ -382,7 +381,7 @@ if __name__ == '__main__':
ctx.obj = PayFiP(wsdl_url=wsdl_url, service_url=service_url)
def numcli(ctx, param, value):
if not isinstance(value, six.string_types) or len(value) != 6 or not value.isdigit():
if not isinstance(value, str) or len(value) != 6 or not value.isdigit():
raise click.BadParameter('numcli must a 6 digits number')
return value

View File

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# eopayment - online payment library
# Copyright (C) 2011-2020 Entr'ouvert
#
@ -15,7 +14,6 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import unicode_literals, print_function
import functools
@ -35,7 +33,7 @@ class SagaError(PaymentException):
pass
class Saga(object):
class Saga:
def __init__(self, wsdl_url, service_url=None, zeep_client_kwargs=None):
self.wsdl_url = wsdl_url
kwargs = (zeep_client_kwargs or {}).copy()

View File

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# eopayment - online payment library
# Copyright (C) 2011-2020 Entr'ouvert
#
@ -165,7 +164,7 @@ class Payment(PaymentCommon):
}
def encode_data(self, data):
return u'|'.join(u'%s=%s' % (force_text(key), force_text(value))
return '|'.join('%s=%s' % (force_text(key), force_text(value))
for key, value in data.items())
def seal_data(self, data):
@ -256,7 +255,7 @@ class Payment(PaymentCommon):
def response(self, query_string, **kwargs):
form = urlparse.parse_qs(query_string)
if not set(form) >= set(['Data', 'Seal', 'InterfaceVersion']):
if not set(form) >= {'Data', 'Seal', 'InterfaceVersion'}:
raise ResponseError('missing Data, Seal or InterfaceVersion')
self.logger.debug('received query string %r', form)
data = self.decode_data(form['Data'][0])
@ -283,7 +282,7 @@ class Payment(PaymentCommon):
bank_data=data,
order_id=transaction_id,
transaction_id=data.get('authorisationId'),
bank_status=self.RESPONSE_CODES.get(response_code, u'unknown code - ' + response_code),
bank_status=self.RESPONSE_CODES.get(response_code, 'unknown code - ' + response_code),
test=test,
transaction_date=transaction_date)
@ -293,7 +292,7 @@ class Payment(PaymentCommon):
if key in ('keyVersion', 'sealAlgorithm', 'seal'):
continue
data_to_send.append(force_text(data[key]))
data_to_send_str = u''.join(data_to_send).encode('utf-8')
data_to_send_str = ''.join(data_to_send).encode('utf-8')
return hmac.new(force_text(self.secret_key).encode('utf-8'), data_to_send_str, hashlib.sha256).hexdigest()
def perform_cash_management_operation(self, endpoint, data):

View File

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# eopayment - online payment library
# Copyright (C) 2011-2020 Entr'ouvert
#
@ -175,8 +174,8 @@ PARAMETERS = [
Parameter(VADS_CUST_FIRST_NAME, 'ans', 104, max_length=63),
Parameter(VADS_CUST_LAST_NAME, 'ans', 104, max_length=63),
]
PARAMETER_MAP = dict(((parameter.name,
parameter) for parameter in PARAMETERS))
PARAMETER_MAP = {parameter.name:
parameter for parameter in PARAMETERS}
def add_vads(kwargs):
@ -290,7 +289,7 @@ class Payment(PaymentCommon):
description['parameters'].append(x)
def __init__(self, options, logger=None):
super(Payment, self).__init__(options, logger=logger)
super().__init__(options, logger=logger)
options = add_vads(options)
self.options = options
@ -396,7 +395,7 @@ class Payment(PaymentCommon):
method='POST',
fields=[
{
'type': u'hidden',
'type': 'hidden',
'name': force_text(field_name),
'value': force_text(field_value),
}
@ -471,7 +470,7 @@ class Payment(PaymentCommon):
def response(self, query_string, **kwargs):
fields = urlparse.parse_qs(query_string, True)
if not set(fields) >= set([SIGNATURE, VADS_CTX_MODE, VADS_AUTH_RESULT]):
if not set(fields) >= {SIGNATURE, VADS_CTX_MODE, VADS_AUTH_RESULT}:
raise ResponseError('missing %s, %s or %s' % (SIGNATURE, VADS_CTX_MODE,
VADS_AUTH_RESULT))
for key, value in fields.items():
@ -524,14 +523,14 @@ class Payment(PaymentCommon):
def signature(self, fields):
self.logger.debug('got fields %s to sign' % fields)
ordered_keys = sorted(
[key for key in fields.keys() if key.startswith('vads_')])
key for key in fields.keys() if key.startswith('vads_'))
self.logger.debug('ordered keys %s' % ordered_keys)
ordered_fields = [force_byte(fields[key]) for key in ordered_keys]
secret = force_byte(getattr(self, 'secret_%s' % fields['vads_ctx_mode'].lower()))
signed_data = b'+'.join(ordered_fields)
signed_data = b'%s+%s' % (signed_data, secret)
self.logger.debug(u'generating signature on «%s»', signed_data)
self.logger.debug('generating signature on «%s»', signed_data)
sign_method = getattr(self, '%s_sign' % self.signature_algo)
sign = sign_method(secret, signed_data)
self.logger.debug(u'signature «%s»', sign)
self.logger.debug('signature «%s»', sign)
return force_text(sign)

View File

@ -45,8 +45,8 @@ class Payment(PaymentCommon):
'parameters': [
{
'name': 'numcli',
'caption': _(u'Client number'),
'help_text': _(u'6 digits number provided by DGFIP'),
'caption': _('Client number'),
'help_text': _('6 digits number provided by DGFIP'),
'validation': lambda s: str.isdigit(s) and (0 < int(s) < 1000000),
'required': True,
},
@ -158,7 +158,7 @@ class Payment(PaymentCommon):
def response(self, query_string, **kwargs):
fields = parse_qs(query_string, True)
if not set(fields) >= set(['refdet', 'resultrans']):
if not set(fields) >= {'refdet', 'resultrans'}:
raise ResponseError('missing refdet or resultrans')
for key, value in fields.items():
fields[key] = value[0]

View File

@ -73,7 +73,7 @@ def get_version():
tag exists, take 0.0.0- and add the length of the commit log.
'''
if os.path.exists('VERSION'):
with open('VERSION', 'r') as v:
with open('VERSION') as v:
return v.read()
if os.path.exists('.git'):
p = subprocess.Popen(['git', 'describe', '--dirty',
@ -134,7 +134,7 @@ setuptools.setup(
description='Common API to use all French online payment credit card '
'processing services',
include_package_data=True,
long_description=io.open(
long_description=open(
os.path.join(
os.path.dirname(__file__),
'README.txt'), encoding='utf-8').read(),

View File

@ -33,10 +33,10 @@ def pytest_addoption(parser):
class LoggingAdapter(HTTPAdapter):
def __init__(self, *args, **kwargs):
self.history = []
super(LoggingAdapter, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
def send(self, request, *args, **kwargs):
response = super(LoggingAdapter, self).send(request, *args, **kwargs)
response = super().send(request, *args, **kwargs)
self.history.append((request, response))
return response

View File

@ -16,7 +16,7 @@
from datetime import date, datetime, timedelta
import mock
from unittest import mock
import pytest
import eopayment
@ -64,7 +64,7 @@ def test_deferred_payment(monkeypatch):
capture_date = (datetime.now().date() + timedelta(days=3))
payment.request(amount=12.2, capture_date=capture_date)
mock_backend.request.assert_called_with(12.2, **{'capture_day': u'3'})
mock_backend.request.assert_called_with(12.2, **{'capture_day': '3'})
# capture date can't be inferior to the transaction date
capture_date = (datetime.now().date() - timedelta(days=3))

View File

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# eopayment - online payment library
# Copyright (C) 2011-2020 Entr'ouvert
#
@ -24,7 +23,7 @@ import eopayment
import eopayment.ogone as ogone
from eopayment import ResponseError
PSPID = u'2352566ö'
PSPID = '2352566ö'
@pytest.fixture(params=[None, 'iso-8859-1', 'utf-8'])
@ -32,9 +31,9 @@ def params(request):
params = {
'environment': ogone.ENVIRONMENT_TEST,
'pspid': PSPID,
'sha_in': u'sécret',
'sha_out': u'sécret',
'automatic_return_url': u'http://example.com/autömatic_réturn_url'
'sha_in': 'sécret',
'sha_out': 'sécret',
'automatic_return_url': 'http://example.com/autömatic_réturn_url'
}
encoding = request.param
if encoding:
@ -45,7 +44,7 @@ def params(request):
def test_request(params):
ogone_backend = eopayment.Payment('ogone', params)
amount = '42.42'
order_id = u'my ordér'
order_id = 'my ordér'
reference, kind, what = ogone_backend.request(
amount=amount,
orderid=order_id,
@ -56,7 +55,7 @@ def test_request(params):
assert root.attrib['method'] == 'POST'
assert root.attrib['action'] == ogone.ENVIRONMENT_TEST_URL
values = {
'CURRENCY': u'EUR',
'CURRENCY': 'EUR',
'ORDERID': order_id,
'PSPID': PSPID,
'EMAIL': 'foo@example.com',
@ -67,7 +66,7 @@ def test_request(params):
values.update({'SHASIGN': ogone_backend.backend.sha_sign_in(values)})
for node in root:
assert node.attrib['type'] in ('hidden', 'submit')
assert set(node.attrib.keys()), set(['type', 'name' == 'value'])
assert set(node.attrib.keys()), {'type', 'name' == 'value'}
name = node.attrib['name']
if node.attrib['type'] == 'hidden':
assert name in values
@ -77,10 +76,10 @@ def test_request(params):
def test_response(params):
ogone_backend = eopayment.Payment('ogone', params)
order_id = 'myorder'
data = {'orderid': u'myorder', 'status': u'9', 'payid': u'3011229363',
'cn': u'Usér', 'ncerror': u'0',
'trxdate': u'10/24/16', 'acceptance': u'test123',
'currency': u'eur', 'amount': u'7.5'}
data = {'orderid': 'myorder', 'status': '9', 'payid': '3011229363',
'cn': 'Usér', 'ncerror': '0',
'trxdate': '10/24/16', 'acceptance': 'test123',
'currency': 'eur', 'amount': '7.5'}
data['shasign'] = ogone_backend.backend.sha_sign_out(
data, encoding=params.get('encoding', 'iso-8859-1'))
# uniformize to utf-8 first
@ -95,9 +94,9 @@ def test_iso_8859_1_response():
params = {
'environment': ogone.ENVIRONMENT_TEST,
'pspid': PSPID,
'sha_in': u'sécret',
'sha_out': u'sécret',
'automatic_return_url': u'http://example.com/autömatic_réturn_url'
'sha_in': 'sécret',
'sha_out': 'sécret',
'automatic_return_url': 'http://example.com/autömatic_réturn_url'
}
ogone_backend = eopayment.Payment('ogone', params)
order_id = 'lRXK4Rl1N2yIR3R5z7Kc'
@ -124,17 +123,17 @@ def test_bad_response(params):
def test_bank_transfer_response(params):
ogone_backend = eopayment.Payment('ogone', params)
data = {
'orderid': u'myorder',
'status': u'41',
'payid': u'3011229363',
'cn': u'User',
'ncerror': u'0',
'trxdate': u'10/24/16',
'orderid': 'myorder',
'status': '41',
'payid': '3011229363',
'cn': 'User',
'ncerror': '0',
'trxdate': '10/24/16',
'brand': 'Bank transfer',
'pm': 'bank transfer',
'currency': u'eur',
'amount': u'7.5',
'shasign': u'944CBD1E010BA4945415AE4B16CC40FD533F6CE2',
'currency': 'eur',
'amount': '7.5',
'shasign': '944CBD1E010BA4945415AE4B16CC40FD533F6CE2',
}
# uniformize to expected encoding
for k in data:

View File

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# eopayment - online payment library
# Copyright (C) 2011-2020 Entr'ouvert
#
@ -20,7 +19,7 @@ import codecs
from unittest import TestCase
from decimal import Decimal
import base64
import mock
from unittest import mock
from six.moves.urllib import parse as urllib
from xml.etree import ElementTree as ET
@ -31,17 +30,17 @@ import eopayment
BACKEND_PARAMS = {
'platform': u'test',
'site': u'12345678',
'rang': u'001',
'identifiant': u'12345678',
'platform': 'test',
'site': '12345678',
'rang': '001',
'identifiant': '12345678',
'shared_secret': (
u'0123456789ABCDEF0123456789ABCDEF01234'
u'56789ABCDEF0123456789ABCDEF0123456789'
u'ABCDEF0123456789ABCDEF0123456789ABCDE'
u'F0123456789ABCDEF'
'0123456789ABCDEF0123456789ABCDEF01234'
'56789ABCDEF0123456789ABCDEF0123456789'
'ABCDEF0123456789ABCDEF0123456789ABCDE'
'F0123456789ABCDEF'
),
'automatic_return_url': u'http://example.com/callback',
'automatic_return_url': 'http://example.com/callback',
}
@ -54,16 +53,16 @@ class PayboxTests(TestCase):
b'EF')
key = codecs.decode(key, 'hex')
d = dict(paybox.sign([
['PBX_SITE', u'12345678'],
['PBX_RANG', u'32'],
['PBX_IDENTIFIANT', u'12345678'],
['PBX_TOTAL', u'999'],
['PBX_DEVISE', u'978'],
['PBX_CMD', u'appel à Paybox'],
['PBX_PORTEUR', u'test@paybox.com'],
['PBX_RETOUR', u'Mt:M;Ref:R;Auto:A;Erreur:E'],
['PBX_HASH', u'SHA512'],
['PBX_TIME', u'2015-06-08T16:21:16+02:00'],
['PBX_SITE', '12345678'],
['PBX_RANG', '32'],
['PBX_IDENTIFIANT', '12345678'],
['PBX_TOTAL', '999'],
['PBX_DEVISE', '978'],
['PBX_CMD', 'appel à Paybox'],
['PBX_PORTEUR', 'test@paybox.com'],
['PBX_RETOUR', 'Mt:M;Ref:R;Auto:A;Erreur:E'],
['PBX_HASH', 'SHA512'],
['PBX_TIME', '2015-06-08T16:21:16+02:00'],
], key))
result = (
'7E74D8E9A0DBB65AAE51C5C50C2668FD98FC99AED'
@ -119,9 +118,9 @@ class PayboxTests(TestCase):
for node in root:
self.assertIn(node.attrib['type'], ('hidden', 'submit'))
if node.attrib['type'] == 'submit':
self.assertEqual(set(node.attrib.keys()), set(['type', 'value']))
self.assertEqual(set(node.attrib.keys()), {'type', 'value'})
if node.attrib['type'] == 'hidden':
self.assertEqual(set(node.attrib.keys()), set(['type', 'name', 'value']))
self.assertEqual(set(node.attrib.keys()), {'type', 'name', 'value'})
name = node.attrib['name']
form_params[name] = node.attrib['value']
assert form_params == expected_form_values
@ -142,8 +141,8 @@ class PayboxTests(TestCase):
transaction_id=transaction, time=time)
root = ET.fromstring(str(what))
form_params = dict(
((node.attrib['name'], node.attrib['value']) for node in root if node.attrib['type'] == 'hidden'))
form_params = {
node.attrib['name']: node.attrib['value'] for node in root if node.attrib['type'] == 'hidden'}
self.assertIn('PBX_DIFF', form_params)
self.assertEqual(form_params['PBX_DIFF'], '07')
@ -155,9 +154,9 @@ class PayboxTests(TestCase):
transaction_id=transaction, time=time, capture_day='2')
root = ET.fromstring(str(what))
form_params = dict(((
node.attrib['name'], node.attrib['value']) for node in root
if node.attrib['type'] == 'hidden'))
form_params = {
node.attrib['name']: node.attrib['value'] for node in root
if node.attrib['type'] == 'hidden'}
self.assertIn('PBX_DIFF', form_params)
self.assertEqual(form_params['PBX_DIFF'], '02')
@ -171,9 +170,9 @@ class PayboxTests(TestCase):
transaction_id=transaction, time=time, capture_day='2')
root = ET.fromstring(str(what))
form_params = dict(((
node.attrib['name'], node.attrib['value']) for node in root
if node.attrib['type'] == 'hidden'))
form_params = {
node.attrib['name']: node.attrib['value'] for node in root
if node.attrib['type'] == 'hidden'}
self.assertIn('PBX_DIFF', form_params)
self.assertEqual(form_params['PBX_DIFF'], '02')
@ -192,8 +191,8 @@ class PayboxTests(TestCase):
transaction_id=transaction, time=time)
root = ET.fromstring(str(what))
form_params = dict(
((node.attrib['name'], node.attrib['value']) for node in root if node.attrib['type'] == 'hidden'))
form_params = {
node.attrib['name']: node.attrib['value'] for node in root if node.attrib['type'] == 'hidden'}
self.assertEqual(form_params['PBX_AUTOSEULE'], 'O')
def test_response(self):
@ -228,16 +227,16 @@ class PayboxTests(TestCase):
'reference': ['830657461681'],
}
backend_raw_response = (
u'NUMTRANS=0013989865&NUMAPPEL=0030378572&NUMQUESTION=0013989862'
u'&SITE=1999888&RANG=32&AUTORISATION=XXXXXX&CODEREPONSE=00000'
u'&COMMENTAIRE=Demande traitée avec succès&REFABONNE=&PORTEUR='
'NUMTRANS=0013989865&NUMAPPEL=0030378572&NUMQUESTION=0013989862'
'&SITE=1999888&RANG=32&AUTORISATION=XXXXXX&CODEREPONSE=00000'
'&COMMENTAIRE=Demande traitée avec succès&REFABONNE=&PORTEUR='
)
backend_expected_response = {"CODEREPONSE": "00000",
"RANG": "32",
"AUTORISATION": "XXXXXX",
"NUMTRANS": "0013989865",
"PORTEUR": "",
"COMMENTAIRE": u"Demande traitée avec succès",
"COMMENTAIRE": "Demande traitée avec succès",
"SITE": "1999888",
"NUMAPPEL": "0030378572",
"REFABONNE": "",
@ -278,7 +277,7 @@ class PayboxTests(TestCase):
self.assertEqual(requests_post.call_args[0][0], 'https://ppps.paybox.com/PPPS.php')
with mock.patch('eopayment.paybox.requests.post') as requests_post:
error_response = u"""CODEREPONSE=00015&COMMENTAIRE=PAYBOX : Transaction non trouvée"""
error_response = """CODEREPONSE=00015&COMMENTAIRE=PAYBOX : Transaction non trouvée"""
response = mock.Mock(status_code=200, text=error_response)
requests_post.return_value = response
self.assertRaisesRegex(
@ -298,9 +297,9 @@ class PayboxTests(TestCase):
'reference': ['830657461681']
}
backend_raw_response = (
u'NUMTRANS=0013989865&NUMAPPEL=0030378572&NUMQUESTION=0013989862'
u'&SITE=1999888&RANG=32&AUTORISATION=XXXXXX&CODEREPONSE=00000'
u'&COMMENTAIRE=Demande traitée avec succès&REFABONNE=&PORTEUR='
'NUMTRANS=0013989865&NUMAPPEL=0030378572&NUMQUESTION=0013989862'
'&SITE=1999888&RANG=32&AUTORISATION=XXXXXX&CODEREPONSE=00000'
'&COMMENTAIRE=Demande traitée avec succès&REFABONNE=&PORTEUR='
)
with mock.patch('eopayment.paybox.requests.post') as requests_post:
@ -338,9 +337,9 @@ FBFKOZhgBJnkC+l6+XhT4aYWKaQ4ocmOMV92yjeXTE4='''
transaction_id=transaction,
time=time)
root = ET.fromstring(str(what))
form_params = dict((
(node.attrib['name'], node.attrib['value']) for node in root
if node.attrib['type'] == 'hidden'))
form_params = {
node.attrib['name']: node.attrib['value'] for node in root
if node.attrib['type'] == 'hidden'}
self.assertIn('PBX_AUTOSEULE', form_params)
self.assertEqual(form_params['PBX_AUTOSEULE'], 'N')
@ -352,9 +351,9 @@ FBFKOZhgBJnkC+l6+XhT4aYWKaQ4ocmOMV92yjeXTE4='''
time=time,
manual_validation=True)
root = ET.fromstring(str(what))
form_params = dict((
(node.attrib['name'], node.attrib['value']) for node in root
if node.attrib['type'] == 'hidden'))
form_params = {
node.attrib['name']: node.attrib['value'] for node in root
if node.attrib['type'] == 'hidden'}
self.assertIn('PBX_AUTOSEULE', form_params)
self.assertEqual(form_params['PBX_AUTOSEULE'], 'O')

View File

@ -1,4 +1,3 @@
# coding: utf-8
#
# eopayment - online payment library
# Copyright (C) 2011-2020 Entr'ouvert
@ -16,12 +15,11 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function, unicode_literals
import datetime
import json
import lxml.etree as ET
import mock
from unittest import mock
import pytz
@ -56,7 +54,7 @@ def freezer(freezer):
return freezer
class PayFiPHTTMock(object):
class PayFiPHTTMock:
def __init__(self, history_name):
history_path = 'tests/data/payfip-%s.json' % history_name
with open(history_path) as fd:

View File

@ -1,4 +1,3 @@
# coding: utf-8
#
# eopayment - online payment library
# Copyright (C) 2011-2020 Entr'ouvert
@ -16,7 +15,6 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function, unicode_literals
import json

View File

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# eopayment - online payment library
# Copyright (C) 2011-2020 Entr'ouvert
#
@ -22,26 +21,26 @@ import pytest
def test_build_request():
backend = eopayment.Payment('sips2', {})
transaction, f, form = backend.request(amount=u'12', last_name=u'Foo',
first_name=u'Félix000000')
transaction, f, form = backend.request(amount='12', last_name='Foo',
first_name='Félix000000')
data = [f for f in form.fields if f['name'] == 'Data']
assert u'lix000000' not in data[0]['value']
assert 'lix000000' not in data[0]['value']
transaction, f, form = backend.request(amount=u'12')
transaction, f, form = backend.request(amount='12')
data = [f for f in form.fields if f['name'] == 'Data']
assert 'statementReference=%s' % transaction in data[0]['value']
transaction, f, form = backend.request(amount=u'12', info1='foobar')
transaction, f, form = backend.request(amount='12', info1='foobar')
data = [f for f in form.fields if f['name'] == 'Data']
assert 'statementReference=foobar' in data[0]['value']
transaction, f, form = backend.request(amount=u'12', info1='foobar', capture_day=u'1')
transaction, f, form = backend.request(amount='12', info1='foobar', capture_day='1')
data = [f for f in form.fields if f['name'] == 'Data']
assert 'captureDay=1' in data[0]['value']
def test_options():
payment = eopayment.Payment('sips2', {'capture_mode': u'VALIDATION'})
payment = eopayment.Payment('sips2', {'capture_mode': 'VALIDATION'})
assert payment.backend.get_data()['captureMode'] == 'VALIDATION'
payment = eopayment.Payment('sips2', {})

View File

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# eopayment - online payment library
# Copyright (C) 2011-2020 Entr'ouvert
#
@ -27,10 +26,10 @@ from eopayment.systempayv2 import Payment, VADS_CUST_FIRST_NAME, \
from eopayment import ResponseError
PARAMS = {
'secret_test': u'1122334455667788',
'vads_site_id': u'12345678',
'vads_ctx_mode': u'TEST',
'vads_trans_date': u'20090501193530',
'secret_test': '1122334455667788',
'vads_site_id': '12345678',
'vads_ctx_mode': 'TEST',
'vads_trans_date': '20090501193530',
'signature_algo': 'sha1'
}
@ -52,8 +51,8 @@ def test_systempayv2(caplog):
data = {
'amount': 15.24,
'orderid': '654321',
'first_name': u'Jean Michél',
'last_name': u'Mihaï'
'first_name': 'Jean Michél',
'last_name': 'Mihaï'
}
qs = (
'vads_version=V2&vads_page_action=PAYMENT&vads_action_mode=INTERACTIV'
@ -70,7 +69,7 @@ def test_systempayv2(caplog):
# check that user first and last names are unicode
for field in form.fields:
if field['name'] in (VADS_CUST_FIRST_NAME, VADS_CUST_LAST_NAME):
assert field['value'] in (u'Jean Michél', u'Mihaï')
assert field['value'] in ('Jean Michél', 'Mihaï')
response_qs = 'vads_amount=1042&vads_auth_mode=FULL&vads_auth_number=3feadf' \
'&vads_auth_result=00&vads_capture_delay=0&vads_card_brand=CB' \
@ -112,13 +111,13 @@ def test_systempayv2(caplog):
def test_systempayv2_deferred_payment():
default_params = {
'secret_test': u'1122334455667788',
'vads_site_id': u'12345678',
'vads_ctx_mode': u'TEST',
'secret_test': '1122334455667788',
'vads_site_id': '12345678',
'vads_ctx_mode': 'TEST',
}
default_data = {
'amount': 15.24, 'orderid': '654321', 'first_name': u'John',
'last_name': u'Doe'
'amount': 15.24, 'orderid': '654321', 'first_name': 'John',
'last_name': 'Doe'
}
# default vads_capture_delay used
@ -152,13 +151,13 @@ def test_systempayv2_deferred_payment():
def test_manual_validation():
params = {
'secret_test': u'1122334455667788',
'vads_site_id': u'12345678',
'vads_ctx_mode': u'TEST',
'secret_test': '1122334455667788',
'vads_site_id': '12345678',
'vads_ctx_mode': 'TEST',
}
data = {
'amount': 15.24, 'orderid': '654321', 'first_name': u'John',
'last_name': u'Doe'
'amount': 15.24, 'orderid': '654321', 'first_name': 'John',
'last_name': 'Doe'
}
backend = eopayment.Payment('systempayv2', params)