0001-fields-extend-validate_phone_fr-validation-scope-698.patch
setup.py | ||
---|---|---|
196 | 196 |
'workalendar', |
197 | 197 |
'requests', |
198 | 198 |
'setproctitle', |
199 |
'phonenumbers', |
|
199 | 200 |
], |
200 | 201 |
package_dir={'wcs': 'wcs'}, |
201 | 202 |
packages=find_packages(), |
tests/test_misc.py | ||
---|---|---|
30 | 30 |
normalize_geolocation, |
31 | 31 |
parse_isotime, |
32 | 32 |
simplify, |
33 |
validate_phone_fr, |
|
33 | 34 |
) |
34 | 35 |
from wcs.scripts import Script |
35 | 36 |
from wcs.workflows import Workflow |
... | ... | |
634 | 635 |
'GET', 'https://new.example.com/', cert=None, data=None, headers={}, proxies=None, timeout=28 |
635 | 636 |
) |
636 | 637 |
mock_request.reset_mock() |
638 | ||
639 | ||
640 |
def test_validate_phone_fr(): |
|
641 |
valid = [ |
|
642 |
'0123456789', |
|
643 |
'+33123456789', |
|
644 |
'+590690000102', |
|
645 |
] |
|
646 |
invalid = [ |
|
647 |
'1234559', |
|
648 |
'+32123456789', |
|
649 |
'01+23+45+67+89', |
|
650 |
] |
|
651 | ||
652 |
assert all(validate_phone_fr(pn) for pn in valid) |
|
653 |
assert all(not validate_phone_fr(pn) for pn in invalid) |
tests/test_templates.py | ||
---|---|---|
810 | 810 |
assert t.render({'number': '06 23 45 67 89 89'}) == 'False' |
811 | 811 |
assert t.render({'number': '06 23 45 89'}) == 'False' |
812 | 812 |
assert t.render({'number': '0 6 2 3 45 89'}) == 'False' |
813 |
assert t.render({'number': '07 23 45 67 89'}) == 'False' # invalid number |
|
813 | 814 | |
814 | 815 |
assert t.render({'number': '06 23 45 67 89'}) == 'True' |
815 |
assert t.render({'number': '07 23 45 67 89'}) == 'True'
|
|
816 |
assert t.render({'number': '07 00 55 53 25'}) == 'True'
|
|
816 | 817 |
assert t.render({'number': '06.23.45.67.89'}) == 'True' |
817 | 818 |
assert t.render({'number': '0 6 2 3 45 67 89'}) == 'True' |
818 | 819 |
wcs/qommon/misc.py | ||
---|---|---|
32 | 32 |
import xml.etree.ElementTree as ET |
33 | 33 |
from contextlib import contextmanager |
34 | 34 | |
35 |
import phonenumbers |
|
35 | 36 |
import requests |
36 | 37 |
from requests.adapters import HTTPAdapter |
37 | 38 | |
... | ... | |
831 | 832 | |
832 | 833 | |
833 | 834 |
def validate_phone_fr(string_value): |
834 |
if not re.match(r'^0[\d\.\s]+$', string_value): |
|
835 |
# leading zero, then digits, dots, or spaces |
|
835 |
french_country_codes = [33, 262, 508, 590, 594, 596] |
|
836 |
pn = None |
|
837 |
try: |
|
838 |
pn = phonenumbers.parse(string_value, 'FR') |
|
839 |
except phonenumbers.NumberParseException: |
|
836 | 840 |
return False |
837 |
return len([x for x in string_value if is_ascii_digit(x)]) == 10
|
|
841 |
return bool(phonenumbers.is_valid_number(pn) and pn.country_code in french_country_codes)
|
|
838 | 842 | |
839 | 843 | |
840 | 844 |
def validate_siren(string_value): |
841 |
- |