add support for translation when used as a django app (#43082)

This commit is contained in:
Frédéric Péters 2020-11-18 20:16:46 +01:00
parent eea999db67
commit b393bb157b
12 changed files with 101 additions and 66 deletions

1
debian/control vendored
View File

@ -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,

View File

@ -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']

View File

@ -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,
},

View File

@ -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',

View File

@ -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

View File

@ -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',),
},

View File

@ -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) == 2,
},
{
'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)

View File

@ -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

View File

@ -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']

View File

@ -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'),

View File

@ -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

View File

@ -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,
}
)