Projet

Général

Profil

0005-misc-add-phone-representation-utilities-69838.patch

Paul Marillonnet, 16 novembre 2022 13:50

Télécharger (3,21 ko)

Voir les différences:

Subject: [PATCH 5/8] misc: add phone representation utilities (#69838)

 tests/test_misc.py | 27 +++++++++++++++++++++++++++
 wcs/qommon/misc.py | 31 +++++++++++++++++++++++++++++++
 2 files changed, 58 insertions(+)
tests/test_misc.py
25 25
    ellipsize,
26 26
    format_time,
27 27
    get_as_datetime,
28
    get_local_number,
28 29
    json_loads,
29 30
    normalize_geolocation,
30 31
    parse_isotime,
......
37 38
from .utilities import clean_temporary_pub, create_temporary_pub, get_app
38 39

  
39 40

  
41
@pytest.fixture
42
def pub():
43
    pub = create_temporary_pub()
44

  
45
    req = HTTPRequest(None, {'SCRIPT_NAME': '/', 'SERVER_NAME': 'example.net'})
46
    pub.set_app_dir(req)
47
    pub.cfg['identification'] = {'methods': ['password']}
48
    pub.cfg['language'] = {'language': 'en'}
49
    pub.write_cfg()
50

  
51
    return pub
52

  
53

  
40 54
def setup_module(module):
41 55
    cleanup()
42 56

  
......
646 660

  
647 661
    assert all(validate_phone_fr(pn) for pn in valid)
648 662
    assert all(not validate_phone_fr(pn) for pn in invalid)
663

  
664

  
665
def test_get_local_number(pub):
666
    pub.load_site_options()
667
    if not pub.site_options.has_section('options'):
668
        pub.site_options.add_section('options')
669
    pub.site_options.set('options', 'default-country-code', 'FR')
670
    with open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w') as fd:
671
        pub.site_options.write(fd)
672

  
673
    assert get_local_number('+33123456789') == '01 23 45 67 89'
674
    assert get_local_number('+590690000102') == '0690 00 01 02'
675
    assert get_local_number('+32123456789') is None
wcs/qommon/misc.py
1249 1249
        formdef_slug = match[15:]
1250 1250
        formdef_slug = formdef_slug[:-1]
1251 1251
        yield FormDef.get_by_slug(formdef_slug, ignore_errors=True)
1252

  
1253

  
1254
def get_local_number(phone, country_code=None):
1255
    return get_formatted_phone(phone, number_format='local', country_code=country_code)
1256

  
1257

  
1258
def get_formatted_phone(phone, number_format=None, country_code=None):
1259
    pn = None
1260

  
1261
    if not country_code:
1262
        if not get_publisher().get_site_option('default-country-code'):
1263
            return None
1264
        country_code = get_publisher().get_site_option('default-country-code')
1265

  
1266
    if number_format == 'local':
1267
        pn_format = phonenumbers.PhoneNumberFormat.NATIONAL
1268
    elif number_format == 'international':
1269
        pn_format = phonenumbers.PhoneNumberFormat.E164
1270
    else:
1271
        return None
1272

  
1273
    try:
1274
        pn = phonenumbers.parse(phone)
1275
    except phonenumbers.NumberParseException:
1276
        try:
1277
            pn = phonenumbers.parse(phone, country_code)
1278
        except phonenumbers.NumberParseException:
1279
            return None
1280
    if phonenumbers.is_valid_number(pn):
1281
        return phonenumbers.format_number(pn, pn_format)
1282
    return None
1252
-