Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/phonenumber_field/formfields.py: 34%

38 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2023-07-17 14:22 -0600

1import phonenumbers 

2from django.conf import settings 

3from django.core import validators 

4from django.core.exceptions import ValidationError 

5from django.forms.fields import CharField 

6from django.utils.text import format_lazy 

7from django.utils.translation import gettext_lazy as _ 

8 

9from phonenumber_field.phonenumber import to_python, validate_region 

10from phonenumber_field.validators import validate_international_phonenumber 

11from phonenumber_field.widgets import RegionalPhoneNumberWidget 

12 

13 

14class PhoneNumberField(CharField): 

15 default_validators = [validate_international_phonenumber] 

16 widget = RegionalPhoneNumberWidget 

17 

18 def __init__(self, *args, region=None, widget=None, **kwargs): 

19 """ 

20 :keyword str region: 2-letter country code as defined in ISO 3166-1. 

21 When not supplied, defaults to :setting:`PHONENUMBER_DEFAULT_REGION` 

22 :keyword django.forms.Widget widget: defaults to 

23 :class:`~phonenumber_field.widgets.RegionalPhoneNumberWidget` 

24 """ 

25 validate_region(region) 

26 self.region = region or getattr(settings, "PHONENUMBER_DEFAULT_REGION", None) 

27 

28 if widget is None: 

29 try: 

30 widget = self.widget(region=self.region) 

31 except TypeError: 

32 widget = self.widget() 

33 

34 super().__init__(*args, widget=widget, **kwargs) 

35 self.widget.input_type = "tel" 

36 

37 if "invalid" not in self.error_messages: 

38 if self.region: 

39 number = phonenumbers.example_number(self.region) 

40 example_number = to_python(number).as_national 

41 # Translators: {example_number} is a national phone number. 

42 error_message = _( 

43 "Enter a valid phone number (e.g. {example_number}) " 

44 "or a number with an international call prefix." 

45 ) 

46 else: 

47 example_number = "+12125552368" # Ghostbusters 

48 # Translators: {example_number} is an international phone number. 

49 error_message = _("Enter a valid phone number (e.g. {example_number}).") 

50 self.error_messages["invalid"] = format_lazy( 

51 error_message, example_number=example_number 

52 ) 

53 

54 def to_python(self, value): 

55 phone_number = to_python(value, region=self.region) 

56 

57 if phone_number in validators.EMPTY_VALUES: 

58 return self.empty_value 

59 

60 if phone_number and not phone_number.is_valid(): 

61 raise ValidationError(self.error_messages["invalid"]) 

62 

63 return phone_number