in phones/models.py [0:0]
def suggested_numbers(user):
try:
real_phone = RealPhone.verified_objects.get_for_user(user)
except RealPhone.DoesNotExist:
raise BadRequest(
"available_numbers: This user hasn't verified a RealPhone yet."
)
existing_number = RelayNumber.objects.filter(user=user)
if existing_number:
raise BadRequest(
"available_numbers: Another RelayNumber already exists for this user."
)
real_num = real_phone.number
client = twilio_client()
avail_nums = client.available_phone_numbers(real_phone.country_code)
# TODO: can we make multiple pattern searches in a single Twilio API request
same_prefix_options = []
# look for numbers with same area code and 3-number prefix
contains = f"{real_num[:8]}****" if real_num else ""
twilio_nums = avail_nums.local.list(contains=contains, limit=10)
same_prefix_options.extend(convert_twilio_numbers_to_dict(twilio_nums))
# look for numbers with same area code, 2-number prefix and suffix
contains = f"{real_num[:7]}***{real_num[10:]}" if real_num else ""
twilio_nums = avail_nums.local.list(contains=contains, limit=10)
same_prefix_options.extend(convert_twilio_numbers_to_dict(twilio_nums))
# look for numbers with same area code and 1-number prefix
contains = f"{real_num[:6]}******" if real_num else ""
twilio_nums = avail_nums.local.list(contains=contains, limit=10)
same_prefix_options.extend(convert_twilio_numbers_to_dict(twilio_nums))
# look for same number in other area codes
contains = f"+1***{real_num[5:]}" if real_num else ""
twilio_nums = avail_nums.local.list(contains=contains, limit=10)
other_areas_options = convert_twilio_numbers_to_dict(twilio_nums)
# look for any numbers in the area code
contains = f"{real_num[:5]}*******" if real_num else ""
twilio_nums = avail_nums.local.list(contains=contains, limit=10)
same_area_options = convert_twilio_numbers_to_dict(twilio_nums)
# look for any available numbers
twilio_nums = avail_nums.local.list(limit=10)
random_options = convert_twilio_numbers_to_dict(twilio_nums)
return {
"real_num": real_num,
"same_prefix_options": same_prefix_options,
"other_areas_options": other_areas_options,
"same_area_options": same_area_options,
"random_options": random_options,
}