def parse(self): self.parse_area_code() # Check for country code if self._phone.country_code != 62: raise phonenumbers.NumberParseException( phonenumbers.NumberParseException.INVALID_COUNTRY_CODE, "Number is not Indonesian number") number_length = len(self.local_number) # Check if this is a fixed CDMA number if number_length == 10 or number_length == 11: self.carrier = MOBILE_CDMA_PREFIXES.get(self.local_number[:3]) # GSM if self.carrier is None and number_length in (9, 10, 11, 12): self.carrier = GSM_PREFIXES.get(self.local_number[:3]) # Try to check CDMA prefix, always have 8 number length if self.carrier is None and number_length == 8: self.carrier = CDMA_PREFIXES.get(self.local_number[:2]) \ or CDMA_PREFIXES.get(self.local_number[:1]) if self.carrier: self.is_mobile = True
def check_phone(form, field): number = form.phone.data try: if not phonenumbers.is_valid_number(phonenumbers.parse(number, 'RU')): raise phonenumbers.NumberParseException(None, None) except phonenumbers.NumberParseException: raise ValidationError( 'Пожалуйста укажите номер телефона полностью (+7ХХХХХХХХХХ)')
def validate_phone(phone): phone_parsed = phonenumbers.parse(phone, region="DE") if not ( phonenumbers.is_possible_number(phone_parsed) and phonenumbers.is_valid_number(phone_parsed) ): raise phonenumbers.NumberParseException( "NOT_A_NUMBER", "Invalid or impossible number" )
def validate_phone(self, value): try: phone_number = phonenumbers.parse(value, region="AZ") if not phonenumbers.is_valid_number(phone_number): raise phonenumbers.NumberParseException("error", "error") return value except phonenumbers.NumberParseException: raise serializers.ValidationError("Telefon Nömrə yanlışdı")
def validate(self, value): if not self.required and not value: return None error_msg = 'Phone number is not valid. Please use the international format like +16505551234' try: number = PhoneField._parse(value) if self._strict_validation and not phonenumbers.is_valid_number(number): raise phonenumbers.NumberParseException(phonenumbers.NumberParseException.NOT_A_NUMBER, error_msg) except phonenumbers.NumberParseException: self.error(error_msg)
def convert_to_e164(raw_phone): if not raw_phone: raise phonenumbers.NumberParseException( phonenumbers.NumberParseException.TOO_SHORT_NSN, 'Emtpy number!') if raw_phone[0] == '+': # Phone number may already be in E.164 format. parse_type = None else: # If no country code information present, assume it's a US number parse_type = "US" phone_representation = phonenumbers.parse(raw_phone, parse_type) return phonenumbers.format_number(phone_representation, phonenumbers.PhoneNumberFormat.E164)
def __split_phone_number(phone_number: str) -> Tuple[str, str]: """ A function that splits phone number into country code and national number. :param phone_number: phone number in international format. :return: a tuple consisting of country code and national number. :raises: phonenumbers.NumberParseException: thrown when the attempt to parse the phone number failed. :raises: ValueError: thrown when the provided phone number is invalid. """ try: pn: PhoneNumber = phonenumbers.parse(phone_number) except phonenumbers.NumberParseException as err_parse: raise phonenumbers.NumberParseException( error_type=phonenumbers.NumberParseException.NOT_A_NUMBER, msg="Invalid phone number!", ) from err_parse if not phonenumbers.is_valid_number(pn): raise ValueError("Invalid phone number!") return "+" + str(pn.country_code), str(pn.national_number)
def test_number_parse_exception(self, mock_parse): mock_parse.side_effect = phonenumbers.NumberParseException( 'Test error', 'Test error') phone1 = 'blahblah' phone2 = format_for_display(phone1, 'AU') self.assertEqual(phone1, phone2)