Projet

Général

Profil

Development #6867

Amélioration à la méthode SMSGatewayMixin.clean_numbers()

Ajouté par Benjamin Dauvergne il y a environ 9 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
31 mars 2015
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Oui
Planning:

Fichiers

Révisions associées

Révision 14abe6ef (diff)
Ajouté par Benjamin Dauvergne il y a environ 7 ans

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

Historique

#1

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).

#2

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.

#3

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 :)

#4

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.

#5

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)".

#6

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

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'.

#7

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

  • Statut changé de Nouveau à En cours
#9

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.

#10

Mis à jour par Benjamin Dauvergne il y a environ 7 ans

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

#11

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" ?

#12

Mis à jour par Benjamin Dauvergne il y a environ 7 ans

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" ?

#13

Mis à jour par Frédéric Péters il y a environ 7 ans

Ack.

#14

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
#15

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF