0005-misc-add-phone-representation-utilities-69838.patch
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 |
- |