There will be maintenance performed on,,, and starting at 9am PDT on Tuesday 18th August 2020. There will be an extremely small period of downtime at the start of the maintenance window as various services are restarted. Please address any comments, questions, or concerns to

Commit d0342e36 authored by Tanner Prestegard's avatar Tanner Prestegard Committed by GraceDB

Enhancements and bugfix for PhoneNumberField

parent 11f5bcfa
import phonenumbers
from django.db import models
from .validators import validate_phone
class PhoneNumberField(models.CharField):
validators = [validate_phone]
def __init__(self, *args, **kwargs):
# Get format and check values
self.format = kwargs.pop('format', 'E164')
if self.format not in PHONE_NUMBER_FORMATS:
raise ValueError('Phone number format must be one of {fmt}'.format(
fmt=", ".join(PHONE_NUMBER_FORMATS)))
# super __init__
super(PhoneNumberField, self).__init__(*args, **kwargs)
def get_prep_value(self, value):
value = super(PhoneNumberField, self).get_prep_value(value)
# Handle blank values
if value is None or value == '':
return value
# Return phone number as a formatted string
phone = phonenumbers.parse(value, 'US')
return phonenumbers.format_number(phone,
getattr(phonenumbers.PhoneNumberFormat, self.format))
......@@ -13,7 +13,3 @@ def validate_phone(value):
# Validate phone number
if not phonenumbers.is_valid_number(phone):
raise ValidationError('Not a valid phone number: {0}'.format(value))
# Return phone number as a formatted string
return phonenumbers.format_number(phone,
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment