add support for translation when used as a django app (#43082)
This commit is contained in:
parent
b35d048030
commit
6fe18d4d58
|
@ -5,6 +5,7 @@ Maintainer: Frederic Peters <fpeters@debian.org>
|
|||
Build-Depends: debhelper (>= 9),
|
||||
python-all (>= 2.6),
|
||||
python-crypto,
|
||||
python-django-common,
|
||||
python-requests,
|
||||
python-setuptools (>= 0.6b3),
|
||||
python-six,
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
import os.path
|
||||
import os
|
||||
import random
|
||||
import sys
|
||||
import logging
|
||||
from datetime import date
|
||||
from decimal import ROUND_DOWN, Decimal
|
||||
|
@ -28,6 +29,16 @@ if six.PY3:
|
|||
else:
|
||||
import cgi
|
||||
|
||||
|
||||
from gettext import gettext as _
|
||||
|
||||
try:
|
||||
if 'django' in sys.modules:
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
|
||||
__all__ = ['PaymentCommon', 'URL', 'HTML', 'RANDOM', 'RECEIVED', 'ACCEPTED',
|
||||
'PAID', 'ERROR', 'WAITING']
|
||||
|
||||
|
|
|
@ -26,16 +26,13 @@ from .common import (
|
|||
ResponseError,
|
||||
URL,
|
||||
PAID, ERROR, WAITING,
|
||||
force_text
|
||||
force_text,
|
||||
_
|
||||
)
|
||||
|
||||
__all__ = ['Payment']
|
||||
|
||||
|
||||
def N_(message):
|
||||
return message
|
||||
|
||||
|
||||
SERVICE_URL = 'http://dummy-payment.demo.entrouvert.com/'
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
@ -65,31 +62,31 @@ class Payment(PaymentCommon):
|
|||
'parameters': [
|
||||
{
|
||||
'name': 'normal_return_url',
|
||||
'caption': N_('Normal return URL'),
|
||||
'caption': _('Normal return URL'),
|
||||
'default': '',
|
||||
'required': True,
|
||||
},
|
||||
{
|
||||
'name': 'automatic_return_url',
|
||||
'caption': N_('Automatic return URL'),
|
||||
'caption': _('Automatic return URL'),
|
||||
'required': False,
|
||||
},
|
||||
{
|
||||
'name': 'dummy_service_url',
|
||||
'caption': 'URL of the dummy payment service',
|
||||
'caption': _('URL of the dummy payment service'),
|
||||
'default': SERVICE_URL,
|
||||
'type': str,
|
||||
},
|
||||
{
|
||||
'name': 'origin',
|
||||
'caption': 'name of the requesting service, '
|
||||
'to present in the user interface',
|
||||
'caption': _('name of the requesting service, '
|
||||
'to present in the user interface'),
|
||||
'type': str,
|
||||
'default': 'origin',
|
||||
},
|
||||
{
|
||||
'name': 'consider_all_response_signed',
|
||||
'caption': (
|
||||
'caption': _(
|
||||
'All response will be considered as signed '
|
||||
'(to test payment locally for example, as you '
|
||||
'cannot received the signed callback)'
|
||||
|
@ -115,13 +112,13 @@ class Payment(PaymentCommon):
|
|||
},
|
||||
{
|
||||
'name': 'direct_notification_url',
|
||||
'caption': 'direct notification url (replaced by automatic_return_url)',
|
||||
'caption': _('direct notification url (replaced by automatic_return_url)'),
|
||||
'type': str,
|
||||
'deprecated': True,
|
||||
},
|
||||
{
|
||||
'name': 'next_url (replaced by normal_return_url)',
|
||||
'caption': 'Return URL for the user',
|
||||
'caption': _('Return URL for the user'),
|
||||
'type': str,
|
||||
'deprecated': True,
|
||||
},
|
||||
|
|
|
@ -14,13 +14,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 gettext import gettext as _
|
||||
|
||||
import requests
|
||||
from six.moves.urllib.parse import parse_qs, urljoin
|
||||
|
||||
from .common import (CANCELLED, ERROR, PAID, URL, WAITING, PaymentCommon,
|
||||
PaymentException, PaymentResponse, ResponseError)
|
||||
PaymentException, PaymentResponse, ResponseError, _)
|
||||
|
||||
__all__ = ['Payment']
|
||||
|
||||
|
@ -30,7 +28,7 @@ class Payment(PaymentCommon):
|
|||
service_url = 'https://api.online.emspay.eu/v1/'
|
||||
|
||||
description = {
|
||||
'caption': 'Keyware payment backend',
|
||||
'caption': _('Keyware payment backend'),
|
||||
'parameters': [
|
||||
{
|
||||
'name': 'normal_return_url',
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
# 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 gettext import gettext as _
|
||||
from .common import _
|
||||
|
||||
import requests
|
||||
from six.moves.urllib.parse import parse_qs, urljoin
|
||||
|
|
|
@ -24,13 +24,10 @@ from decimal import Decimal, ROUND_HALF_UP
|
|||
from .common import (
|
||||
PaymentCommon, PaymentResponse, FORM, CANCELLED, PAID,
|
||||
ERROR, Form, DENIED, ACCEPTED, ORDERID_TRANSACTION_SEPARATOR,
|
||||
WAITING, ResponseError, force_byte, force_text
|
||||
WAITING, ResponseError, force_byte, force_text, _
|
||||
)
|
||||
|
||||
|
||||
def N_(message):
|
||||
return message
|
||||
|
||||
ENVIRONMENT_TEST = 'TEST'
|
||||
ENVIRONMENT_TEST_URL = 'https://secure.ogone.com/ncol/test/orderstandard.asp'
|
||||
ENVIRONMENT_PROD = 'PROD'
|
||||
|
@ -434,54 +431,54 @@ VC
|
|||
class Payment(PaymentCommon):
|
||||
# See http://payment-services.ingenico.com/fr/fr/ogone/support/guides/integration%20guides/e-commerce
|
||||
description = {
|
||||
'caption': N_('Système de paiement Ogone / Ingenico Payment System e-Commerce'),
|
||||
'caption': _('Ogone / Ingenico Payment System e-Commerce'),
|
||||
'parameters': [
|
||||
{
|
||||
'name': 'normal_return_url',
|
||||
'caption': N_('Normal return URL'),
|
||||
'caption': _('Normal return URL'),
|
||||
'default': '',
|
||||
'required': True,
|
||||
},
|
||||
{
|
||||
'name': 'automatic_return_url',
|
||||
'caption': N_('Automatic return URL (ignored, must be set in Ogone backoffice)'),
|
||||
'caption': _('Automatic return URL (ignored, must be set in Ogone backoffice)'),
|
||||
'required': False,
|
||||
},
|
||||
{
|
||||
'name': 'environment',
|
||||
'default': ENVIRONMENT_TEST,
|
||||
'caption': N_(u'Environnement'),
|
||||
'caption': 'Environnement',
|
||||
'choices': ENVIRONMENT,
|
||||
},
|
||||
{
|
||||
'name': 'pspid',
|
||||
'caption': N_(u"Nom d'affiliation dans le système"),
|
||||
'caption': "Nom d'affiliation dans le système",
|
||||
'required': True,
|
||||
},
|
||||
{
|
||||
'name': 'language',
|
||||
'caption': N_(u'Langage'),
|
||||
'caption': _(u'Language'),
|
||||
'default': 'fr_FR',
|
||||
'choices': (('fr_FR', N_('français')),),
|
||||
'choices': (('fr_FR', 'français'),),
|
||||
},
|
||||
{
|
||||
'name': 'hash_algorithm',
|
||||
'caption': N_(u'Algorithme de hachage'),
|
||||
'caption': 'Algorithme de hachage',
|
||||
'default': 'sha1',
|
||||
},
|
||||
{
|
||||
'name': 'sha_in',
|
||||
'caption': N_(u'Clé SHA-IN'),
|
||||
'caption': 'Clé SHA-IN',
|
||||
'required': True,
|
||||
},
|
||||
{
|
||||
'name': 'sha_out',
|
||||
'caption': N_(u'Clé SHA-OUT'),
|
||||
'caption': 'Clé SHA-OUT',
|
||||
'required': True,
|
||||
},
|
||||
{
|
||||
'name': 'currency',
|
||||
'caption': N_(u'Monnaie'),
|
||||
'caption': 'Monnaie',
|
||||
'default': 'EUR',
|
||||
'choices': ('EUR',),
|
||||
},
|
||||
|
|
|
@ -36,12 +36,11 @@ from six.moves.urllib import parse as urlparse
|
|||
from six.moves.urllib import parse as urllib
|
||||
|
||||
import base64
|
||||
from gettext import gettext as _
|
||||
import warnings
|
||||
|
||||
from .common import (PaymentCommon, PaymentResponse, FORM, PAID, CANCELLED,
|
||||
DENIED, ERROR, Form, ResponseError, force_text,
|
||||
force_byte)
|
||||
force_byte, _)
|
||||
from . import cb
|
||||
|
||||
__all__ = ['sign', 'Payment']
|
||||
|
@ -214,7 +213,7 @@ class Payment(PaymentCommon):
|
|||
},
|
||||
{
|
||||
'name': 'platform',
|
||||
'caption': _('Plateforme cible'),
|
||||
'caption': 'Plateforme cible',
|
||||
'default': 'test',
|
||||
'choices': (
|
||||
('test', 'Test'),
|
||||
|
@ -224,7 +223,7 @@ class Payment(PaymentCommon):
|
|||
},
|
||||
{
|
||||
'name': 'site',
|
||||
'caption': _('Numéro de site'),
|
||||
'caption': 'Numéro de site',
|
||||
'required': True,
|
||||
'validation': lambda x: isinstance(x, six.string_types)
|
||||
and x.isdigit() and len(x) == 7,
|
||||
|
@ -237,28 +236,28 @@ class Payment(PaymentCommon):
|
|||
},
|
||||
{
|
||||
'name': 'rang',
|
||||
'caption': _('Numéro de rang'),
|
||||
'caption': 'Numéro de rang',
|
||||
'required': True,
|
||||
'validation': lambda x: isinstance(x, six.string_types)
|
||||
and x.isdigit() and len(x) == 3,
|
||||
},
|
||||
{
|
||||
'name': 'identifiant',
|
||||
'caption': _('Identifiant'),
|
||||
'caption': 'Identifiant',
|
||||
'required': True,
|
||||
'validation': lambda x: isinstance(x, six.string_types)
|
||||
and x.isdigit() and (0 < len(x) < 10),
|
||||
},
|
||||
{
|
||||
'name': 'shared_secret',
|
||||
'caption': _('Secret partagé (clé HMAC)'),
|
||||
'caption': 'Secret partagé (clé HMAC)',
|
||||
'validation': lambda x: isinstance(x, str)
|
||||
and all(a.lower() in '0123456789abcdef' for a in x),
|
||||
'required': True,
|
||||
},
|
||||
{
|
||||
'name': 'devise',
|
||||
'caption': _('Devise'),
|
||||
'caption': 'Devise',
|
||||
'default': '978',
|
||||
'choices': (
|
||||
('978', 'Euro'),
|
||||
|
@ -271,7 +270,7 @@ class Payment(PaymentCommon):
|
|||
},
|
||||
{
|
||||
'name': 'capture_day',
|
||||
'caption': _('Nombre de jours pour un paiement différé'),
|
||||
'caption': 'Nombre de jours pour un paiement différé',
|
||||
'default': '',
|
||||
'required': False,
|
||||
'validation': lambda x: isinstance(x, six.string_types)
|
||||
|
|
|
@ -25,8 +25,6 @@ import re
|
|||
import unicodedata
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
from gettext import gettext as _
|
||||
|
||||
import pytz
|
||||
|
||||
import six
|
||||
|
@ -38,7 +36,7 @@ import zeep.exceptions
|
|||
from .systempayv2 import isonow
|
||||
from .common import (PaymentCommon, PaymentResponse, URL, PAID, DENIED,
|
||||
CANCELLED, ERROR, ResponseError, PaymentException,
|
||||
WAITING, EXPIRED, force_text)
|
||||
WAITING, EXPIRED, force_text, _)
|
||||
|
||||
WSDL_URL = 'https://www.tipi.budget.gouv.fr/tpa/services/mas_securite/contrat_paiement_securise/PaiementSecuriseService?wsdl' # noqa: E501
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import datetime
|
||||
from gettext import gettext as _
|
||||
import collections
|
||||
import hashlib
|
||||
import hmac
|
||||
|
@ -31,7 +30,7 @@ import requests
|
|||
import pytz
|
||||
|
||||
from .common import (PaymentCommon, FORM, Form, PaymentResponse, PAID, ERROR,
|
||||
CANCELED, ResponseError, force_text)
|
||||
CANCELED, ResponseError, force_text, _)
|
||||
|
||||
__all__ = ['Payment']
|
||||
|
||||
|
|
|
@ -26,10 +26,9 @@ import string
|
|||
import six
|
||||
from six.moves.urllib import parse as urlparse
|
||||
import warnings
|
||||
from gettext import gettext as _
|
||||
|
||||
from .common import (PaymentCommon, PaymentResponse, PAID, DENIED, CANCELLED,
|
||||
ERROR, FORM, Form, ResponseError, force_text, force_byte)
|
||||
ERROR, FORM, Form, ResponseError, force_text, force_byte, _)
|
||||
from .cb import translate_cb_error_code
|
||||
|
||||
__all__ = ['Payment']
|
||||
|
@ -135,20 +134,20 @@ PARAMETERS = [
|
|||
Parameter('vads_language', 'a', 12, length=2, default='fr'),
|
||||
Parameter('vads_order_id', 'an-', 13, max_length=32),
|
||||
Parameter('vads_order_info', 'an', 14, max_length=255,
|
||||
description=_(u"Complément d'information 1")),
|
||||
description="Complément d'information 1"),
|
||||
Parameter('vads_order_info2', 'an', 14, max_length=255,
|
||||
description=_(u"Complément d'information 2")),
|
||||
description="Complément d'information 2"),
|
||||
Parameter('vads_order_info3', 'an', 14, max_length=255,
|
||||
description=_(u"Complément d'information 3")),
|
||||
description="Complément d'information 3"),
|
||||
Parameter('vads_page_action', None, 46, needed=True, default='PAYMENT',
|
||||
choices=('PAYMENT',)),
|
||||
Parameter('vads_payment_cards', 'an;', 8, max_length=127, default='',
|
||||
description=_(u'Liste des cartes de paiement acceptées'),
|
||||
help_text=_(u'vide ou des valeurs sépareés par un point-virgule '
|
||||
'parmi AMEX, AURORE-MULTI, BUYSTER, CB, COFINOGA, '
|
||||
'E-CARTEBLEUE, MASTERCARD, JCB, MAESTRO, ONEY, '
|
||||
'ONEY_SANDBOX, PAYPAL, PAYPAL_SB, PAYSAFECARD, '
|
||||
'VISA')),
|
||||
description='Liste des cartes de paiement acceptées',
|
||||
help_text='vide ou des valeurs sépareés par un point-virgule '
|
||||
'parmi AMEX, AURORE-MULTI, BUYSTER, CB, COFINOGA, '
|
||||
'E-CARTEBLEUE, MASTERCARD, JCB, MAESTRO, ONEY, '
|
||||
'ONEY_SANDBOX, PAYPAL, PAYPAL_SB, PAYSAFECARD, '
|
||||
'VISA'),
|
||||
# must be SINGLE or MULTI with parameters
|
||||
Parameter('vads_payment_config', '', 7, default='SINGLE',
|
||||
choices=('SINGLE', 'MULTI'), needed=True),
|
||||
|
@ -156,7 +155,7 @@ PARAMETERS = [
|
|||
choices=('', 'NONE', 'POST', 'GET')),
|
||||
Parameter('signature', 'an', None, length=40),
|
||||
Parameter('vads_site_id', 'n', 2, length=8, needed=True,
|
||||
description=_(u'Identifiant de la boutique')),
|
||||
description='Identifiant de la boutique'),
|
||||
Parameter('vads_theme_config', 'ans', 32, max_length=255),
|
||||
Parameter(VADS_TRANS_DATE, 'n', 4, length=14, needed=True,
|
||||
default=isonow),
|
||||
|
@ -244,19 +243,19 @@ class Payment(PaymentCommon):
|
|||
},
|
||||
{'name': 'service_url',
|
||||
'default': service_url,
|
||||
'caption': _(u'URL du service de paiment'),
|
||||
'help_text': _(u'ne pas modifier si vous ne savez pas'),
|
||||
'caption': 'URL du service de paiment',
|
||||
'help_text': 'ne pas modifier si vous ne savez pas',
|
||||
'validation': lambda x: x.startswith('http'),
|
||||
'required': True, },
|
||||
{'name': 'secret_test',
|
||||
'caption': _(u'Secret pour la configuration de TEST'),
|
||||
'caption': 'Secret pour la configuration de TEST',
|
||||
'validation': lambda value: str.isalnum(value),
|
||||
'required': True, },
|
||||
{'name': 'secret_production',
|
||||
'caption': _(u'Secret pour la configuration de PRODUCTION'),
|
||||
'caption': 'Secret pour la configuration de PRODUCTION',
|
||||
'validation': lambda value: str.isalnum(value), },
|
||||
{'name': 'signature_algo',
|
||||
'caption': _(u'Algorithme de signature'),
|
||||
'caption': 'Algorithme de signature',
|
||||
'default': 'sha1',
|
||||
'choices': (
|
||||
('sha1', 'SHA-1'),
|
||||
|
|
|
@ -21,10 +21,9 @@ import random
|
|||
import pytz
|
||||
|
||||
from .common import (PaymentCommon, PaymentResponse, URL, PAID, DENIED,
|
||||
CANCELLED, ERROR, ResponseError)
|
||||
CANCELLED, ERROR, ResponseError, _)
|
||||
from six.moves.urllib.parse import urlencode, parse_qs
|
||||
|
||||
from gettext import gettext as _
|
||||
import logging
|
||||
import warnings
|
||||
|
||||
|
|
37
setup.py
37
setup.py
|
@ -6,10 +6,17 @@ Setup script for eopayment
|
|||
|
||||
import io
|
||||
import subprocess
|
||||
|
||||
import distutils
|
||||
import distutils.core
|
||||
from distutils.command.build import build as _build
|
||||
from distutils.cmd import Command
|
||||
from distutils.spawn import find_executable
|
||||
|
||||
import setuptools
|
||||
from setuptools.command.sdist import sdist
|
||||
from setuptools.command.install_lib import install_lib as _install_lib
|
||||
|
||||
from glob import glob
|
||||
from os.path import splitext, basename, join as pjoin
|
||||
import os
|
||||
|
@ -91,6 +98,33 @@ def get_version():
|
|||
|
||||
return '0.0.0'
|
||||
|
||||
|
||||
class compile_translations(Command):
|
||||
description = 'compile message catalogs to MO files via django compilemessages'
|
||||
user_options = []
|
||||
|
||||
def initialize_options(self):
|
||||
pass
|
||||
|
||||
def finalize_options(self):
|
||||
pass
|
||||
|
||||
def run(self):
|
||||
django_admin = find_executable('django-admin')
|
||||
if django_admin:
|
||||
subprocess.check_call([django_admin, 'compilemessages'])
|
||||
|
||||
|
||||
class build(_build):
|
||||
sub_commands = [('compile_translations', None)] + _build.sub_commands
|
||||
|
||||
|
||||
class install_lib(_install_lib):
|
||||
def run(self):
|
||||
self.run_command('compile_translations')
|
||||
_install_lib.run(self)
|
||||
|
||||
|
||||
setuptools.setup(
|
||||
name='eopayment',
|
||||
version=get_version(),
|
||||
|
@ -128,6 +162,9 @@ setuptools.setup(
|
|||
'zeep >= 2.5',
|
||||
],
|
||||
cmdclass={
|
||||
'build': build,
|
||||
'compile_translations': compile_translations,
|
||||
'install_lib': install_lib,
|
||||
'sdist': eo_sdist,
|
||||
}
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue