Development #6867
Amélioration à la méthode SMSGatewayMixin.clean_numbers()
100%
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a environ 9 ans
Le sujet du commit est bien trop long.
- # local prefix, remove 0 and add default country code + # french local prefix, remove 0 and add default country code
Ce n'est pas spécifique à la France (https://en.wikipedia.org/wiki/Trunk_prefix).
Mis à jour par Benjamin Dauvergne il y a environ 9 ans
C'est Thomas qui m'a enduit d'erreur, pourtant il est diplômé d'une école de télécom je ne comprends pas.
Mis à jour par Benjamin Dauvergne il y a environ 9 ans
Bon après lecture de la page ce n'est pas spécifique à la France mais le 0 n'est pas non plus le préfixe de tout le monde, à moins de liste exactement tous les pays pour lesquels ça convient, je préférerai laisser le commentaire en l'état. Mais si quelqu'un de plus compétent que moi sur le sujet à une idée d'implémentation pour la normalisation des numéros ça me va bien. Thomas m'a juste dit "utilise la lib de google" qui en l'occurrence ne me convient pas :)
Mis à jour par Benjamin Dauvergne il y a environ 9 ans
En attendant un nouveau patch:
From bfdfc5d77efe99404a869104e6146af85957043f Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Tue, 31 Mar 2015 15:53:13 +0200 Subject: [PATCH] Improve SMSGatewayMixin.clean_numbers() (fixes #6867) - normalize numbers to the 00... international format, - add comment about french (and other countries) specialization --- passerelle/sms/__init__.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/passerelle/sms/__init__.py b/passerelle/sms/__init__.py index 6197d14..0f44596 100644 --- a/passerelle/sms/__init__.py +++ b/passerelle/sms/__init__.py @@ -1,25 +1,26 @@ import re from django.utils.translation import ugettext_lazy as _ class SMSGatewayMixin(object): category = _('SMS Providers') @classmethod - def clean_numbers(cls, destinations, default_country_code, prefix='+'): + def clean_numbers(cls, destinations, default_country_code): numbers = [] for dest in destinations: # most gateways needs the number prefixed by the country code, this is # really unfortunate. + dest = dest.strip() number = ''.join(re.findall('[0-9]', dest)) if dest.startswith('+'): - pass # it already is fully qualified + number = '00' + number elif number.startswith('00'): # assumes 00 is international access code, remove it - number = number[2:] + pass elif number.startswith('0'): - # local prefix, remove 0 and add default country code - number = default_country_code + number[1:] - numbers.append(prefix + number) + # french (and some other countries) local prefix, remove 0 and add default country code + number = '00' + default_country_code + number[1:] + numbers.append(number) return numbers -- 1.9.1
J'en ai profité pour corriger le cas local, je n'ajoutais pas le '00' avant le code pays.
Mis à jour par Frédéric Péters il y a environ 9 ans
C'est en gros tout le monde sauf les États-Unis (1) et la Russie (8) (et quelques pays frontières, genre le Canada et la Lituanie); ça m'irait quand même pas mal de qualifier ça autrement que par "French (and some other countries)".
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
- Fichier 0001-sms-improve-SMSGatewayMixin.clean_numbers.patch 0001-sms-improve-SMSGatewayMixin.clean_numbers.patch ajouté
Patch amélioré, ajout d'un setting default_trunk_prefix dans les backends (avec valeur par défaut 0) et modification des tests pour bien valider le nouveau format de sortie avec '00'.
Mis à jour par Benjamin Dauvergne il y a environ 7 ans
Mis à jour par Frédéric Péters il y a environ 7 ans
Je m'interrogeais sur la traduction et ça permet de noter qu'on n'a pas de libellé/traduction pour les autres champs non plus. Il faudrait.
Mis à jour par Benjamin Dauvergne il y a environ 7 ans
- Fichier 0001-sms-improve-SMSGatewayMixin.clean_numbers-fixes-6867.patch 0001-sms-improve-SMSGatewayMixin.clean_numbers-fixes-6867.patch ajouté
diff --git a/passerelle/apps/choosit/models.py b/passerelle/apps/choosit/models.py index a38e148..2db8fff 100644 --- a/passerelle/apps/choosit/models.py +++ b/passerelle/apps/choosit/models.py @@ -14,9 +14,11 @@ from .choosit import ChoositRegisterWS class ChoositSMSGateway(BaseResource, SMSGatewayMixin): - key = models.CharField(max_length=64) - default_country_code = models.CharField(max_length=3, default=u'33') - default_trunk_prefix = models.CharField(max_length=2, default=u'0') + key = models.CharField(verbose_name=_('key'), max_length=64) + default_country_code = models.CharField(verbose_name=_('default country code'), max_length=3, + default=u'33') + default_trunk_prefix = models.CharField(verbose_name=_('default trunk prefix'), max_length=2, + default=u'0') # FIXME: add regexp field, to check destination and from format TEST_DEFAULTS = { diff --git a/passerelle/apps/mobyt/models.py b/passerelle/apps/mobyt/models.py index 88fe20e..20e1652 100644 --- a/passerelle/apps/mobyt/models.py +++ b/passerelle/apps/mobyt/models.py @@ -15,12 +15,14 @@ class MobytSMSGateway(BaseResource, SMSGatewayMixin): ('ll', _('sms low-cost')), ('n', _('sms top')), ) - username = models.CharField(max_length=64) - password = models.CharField(max_length=64) + username = models.CharField(verbose_name=_('username'), max_length=64) + password = models.CharField(verbose_name=_('password'), max_length=64) quality = models.CharField(max_length=4, choices=MESSAGES_QUALITIES, default='l', verbose_name=_('message quality')) - default_country_code = models.CharField(max_length=3, default=u'33') - default_trunk_prefix = models.CharField(max_length=2, default=u'0') + default_country_code = models.CharField(verbose_name=_('default contry code'), max_length=3, + default=u'33') + default_trunk_prefix = models.CharField(verbose_name=_('default trunk prefix'), max_length=2, + default=u'0') # FIXME: add regexp field, to check destination and from format manager_view_template_name = 'passerelle/manage/messages_service_view.html' diff --git a/passerelle/apps/ovh/models.py b/passerelle/apps/ovh/models.py index 61ea6c6..6c6f5fc 100644 --- a/passerelle/apps/ovh/models.py +++ b/passerelle/apps/ovh/models.py @@ -21,15 +21,18 @@ class OVHSMSGateway(BaseResource, SMSGatewayMixin): (3, _('Messages are stored in external storage like a PDA or ' 'a PC.')), ) - account = models.CharField(max_length=64) - username = models.CharField(max_length=64) - password = models.CharField(max_length=64) + account = models.CharField(verbose_name=_('account'), max_length=64) + username = models.CharField(verbose_name=_('username'), max_length=64) + password = models.CharField(verbose_name=_('password'), max_length=64) diff --git a/passerelle/apps/choosit/models.py b/passerelle/apps/choosit/models.py index a38e148..2db8fff 100644 --- a/passerelle/apps/choosit/models.py +++ b/passerelle/apps/choosit/models.py @@ -14,9 +14,11 @@ from .choosit import ChoositRegisterWS class ChoositSMSGateway(BaseResource, SMSGatewayMixin): - key = models.CharField(max_length=64) - default_country_code = models.CharField(max_length=3, default=u'33') - default_trunk_prefix = models.CharField(max_length=2, default=u'0') + key = models.CharField(verbose_name=_('key'), max_length=64) + default_country_code = models.CharField(verbose_name=_('default country code'), max_length=3, + default=u'33') + default_trunk_prefix = models.CharField(verbose_name=_('default trunk prefix'), max_length=2, + default=u'0') # FIXME: add regexp field, to check destination and from format TEST_DEFAULTS = { diff --git a/passerelle/apps/mobyt/models.py b/passerelle/apps/mobyt/models.py index 88fe20e..20e1652 100644 --- a/passerelle/apps/mobyt/models.py +++ b/passerelle/apps/mobyt/models.py @@ -15,12 +15,14 @@ class MobytSMSGateway(BaseResource, SMSGatewayMixin): ('ll', _('sms low-cost')), ('n', _('sms top')), ) - username = models.CharField(max_length=64) - password = models.CharField(max_length=64) + username = models.CharField(verbose_name=_('username'), max_length=64) + password = models.CharField(verbose_name=_('password'), max_length=64) quality = models.CharField(max_length=4, choices=MESSAGES_QUALITIES, default='l', verbose_name=_('message quality')) - default_country_code = models.CharField(max_length=3, default=u'33') - default_trunk_prefix = models.CharField(max_length=2, default=u'0') + default_country_code = models.CharField(verbose_name=_('default contry code'), max_length=3, + default=u'33') + default_trunk_prefix = models.CharField(verbose_name=_('default trunk prefix'), max_length=2, + default=u'0') # FIXME: add regexp field, to check destination and from format
Mis à jour par Frédéric Péters il y a environ 7 ans
Il faudrait des majuscules aux libellés. Et tu traduirais comment le "default trunk prefix" ?
Mis à jour par Benjamin Dauvergne il y a environ 7 ans
- Fichier 0001-sms-improve-SMSGatewayMixin.clean_numbers-fixes-6867.patch 0001-sms-improve-SMSGatewayMixin.clean_numbers-fixes-6867.patch ajouté
diff --git a/passerelle/apps/choosit/models.py b/passerelle/apps/choosit/models.py index 2db8fff..b9e3273 100644 --- a/passerelle/apps/choosit/models.py +++ b/passerelle/apps/choosit/models.py @@ -14,10 +14,10 @@ from .choosit import ChoositRegisterWS class ChoositSMSGateway(BaseResource, SMSGatewayMixin): - key = models.CharField(verbose_name=_('key'), max_length=64) - default_country_code = models.CharField(verbose_name=_('default country code'), max_length=3, + key = models.CharField(verbose_name=_('Key'), max_length=64) + default_country_code = models.CharField(verbose_name=_('Default country code'), max_length=3, default=u'33') - default_trunk_prefix = models.CharField(verbose_name=_('default trunk prefix'), max_length=2, + default_trunk_prefix = models.CharField(verbose_name=_('Default trunk prefix'), max_length=2, default=u'0') # FIXME: add regexp field, to check destination and from format diff --git a/passerelle/apps/mobyt/models.py b/passerelle/apps/mobyt/models.py index 20e1652..8962f7f 100644 --- a/passerelle/apps/mobyt/models.py +++ b/passerelle/apps/mobyt/models.py @@ -15,13 +15,13 @@ class MobytSMSGateway(BaseResource, SMSGatewayMixin): ('ll', _('sms low-cost')), ('n', _('sms top')), ) - username = models.CharField(verbose_name=_('username'), max_length=64) - password = models.CharField(verbose_name=_('password'), max_length=64) + username = models.CharField(verbose_name=_('Username'), max_length=64) + password = models.CharField(verbose_name=_('Password'), max_length=64) quality = models.CharField(max_length=4, choices=MESSAGES_QUALITIES, default='l', - verbose_name=_('message quality')) - default_country_code = models.CharField(verbose_name=_('default contry code'), max_length=3, + verbose_name=_('Message quality')) + default_country_code = models.CharField(verbose_name=_('Default contry code'), max_length=3, default=u'33') - default_trunk_prefix = models.CharField(verbose_name=_('default trunk prefix'), max_length=2, + default_trunk_prefix = models.CharField(verbose_name=_('Default trunk prefix'), max_length=2, default=u'0') # FIXME: add regexp field, to check destination and from format diff --git a/passerelle/apps/ovh/models.py b/passerelle/apps/ovh/models.py index 6c6f5fc..a6e49dd 100644 --- a/passerelle/apps/ovh/models.py +++ b/passerelle/apps/ovh/models.py @@ -21,18 +21,18 @@ class OVHSMSGateway(BaseResource, SMSGatewayMixin): (3, _('Messages are stored in external storage like a PDA or ' 'a PC.')), ) - account = models.CharField(verbose_name=_('account'), max_length=64) - username = models.CharField(verbose_name=_('username'), max_length=64) - password = models.CharField(verbose_name=_('password'), max_length=64) + account = models.CharField(verbose_name=_('Account'), max_length=64) + username = models.CharField(verbose_name=_('Username'), max_length=64) + password = models.CharField(verbose_name=_('Password'), max_length=64) msg_class = models.IntegerField(choices=MESSAGES_CLASSES, default=1, - verbose_name=_('message class')) - credit_threshold_alert = models.PositiveIntegerField(verbose_name=_('credit alert threshold'), + verbose_name=_('Message class')) + credit_threshold_alert = models.PositiveIntegerField(verbose_name=_('Credit alert threshold'), default=100) - default_country_code = models.CharField(verbose_name=_('default country code'), max_length=3, + default_country_code = models.CharField(verbose_name=_('Default country code'), max_length=3, default=u'33') - default_trunk_prefix = models.CharField(verbose_name=_('default trunk prefix'), max_length=2, + default_trunk_prefix = models.CharField(verbose_name=_('Default trunk prefix'), max_length=2, default=u'0') - credit_left = models.PositiveIntegerField(verbose_name=_('credit left'), default=0) + credit_left = models.PositiveIntegerField(verbose_name=_('Dredit left'), default=0) # FIXME: add regexp field, to check destination and from format manager_view_template_name = 'passerelle/manage/messages_service_view.html' diff --git a/passerelle/apps/oxyd/models.py b/passerelle/apps/oxyd/models.py index 627b30d..e98e0eb 100644 --- a/passerelle/apps/oxyd/models.py +++ b/passerelle/apps/oxyd/models.py @@ -9,11 +9,11 @@ from django.utils.translation import ugettext_lazy as _ class OxydSMSGateway(BaseResource, SMSGatewayMixin): - username = models.CharField(verbose_name=_('username'), max_length=64) - password = models.CharField(verbose_name=_('password'), max_length=64) - default_country_code = models.CharField(verbose_name=_('default country code'), max_length=3, + username = models.CharField(verbose_name=_('Username'), max_length=64) + password = models.CharField(verbose_name=_('Password'), max_length=64) + default_country_code = models.CharField(verbose_name=_('Default country code'), max_length=3, default=u'33') - default_trunk_prefix = models.CharField(verbose_name=_('default trunk prefix'), max_length=2, + default_trunk_prefix = models.CharField(verbose_name=_('Default trunk prefix'), max_length=2, default=u'0') # FIXME: add regexp field, to check destination and from format
"Préfixe téléphonique local" ?
Mis à jour par Benjamin Dauvergne il y a environ 7 ans
- Statut changé de En cours à Résolu (à déployer)
- % réalisé changé de 0 à 100
Appliqué par commit 14abe6efcd54e967a3d60adeaeeeac71c3cdeaff.
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Fermé
sms: improve SMSGatewayMixin.clean_numbers() (fixes #6867)
- normalize numbers to the 00... international format
- a default_trunk_prefix setting to all sms backends
- set default_trunk_prefix and default_country_code to French ones
- modify test