radar/fixtures/utils.py
from datetime import date, timedelta
import difflib
import random
from radar.database import db
from radar.fixtures.constants import (
ADDRESS1,
ADDRESS2,
ADDRESS3,
FIRST_NAMES,
GENDER_FEMALE,
GENDER_MALE,
LAST_NAMES,
POSTCODES,
TITLES
)
from radar.models.users import User
from radar.utils import date_to_datetime, is_date
def add(obj):
user = User.query.filter(User.username == 'bot').first()
if hasattr(obj, 'created_user') and obj.created_user is None:
obj.created_user = user
if hasattr(obj, 'modified_user') and obj.modified_user is None:
obj.modified_user = user
db.session.add(obj)
db.session.flush()
def generate_first_name_alias(gender, first_name):
def f(x):
if first_name == x:
return 0
else:
return difflib.SequenceMatcher(None, first_name, x).ratio()
return max(FIRST_NAMES[gender], key=f)
def generate_gender():
if random.random() > 0.5:
return GENDER_MALE
else:
return GENDER_FEMALE
def generate_title(gender):
return random.choice(TITLES[gender])
def generate_first_name(gender):
return random.choice(FIRST_NAMES[gender])
def generate_last_name():
return random.choice(LAST_NAMES)
def generate_date_of_birth():
return random_date(date(1920, 1, 1), date(2000, 12, 31))
def generate_date_of_death(date_of_birth):
return random_date(date_of_birth, date(2014, 12, 31))
def random_date(start_date, end_date):
if start_date == end_date:
return start_date
days = (end_date - start_date).days
random_date = start_date + timedelta(days=random.randint(1, days))
return random_date
def random_bool():
return random.randint(0, 1) == 1
def random_datetime(start, end):
if is_date(start):
start_dt = date_to_datetime(start)
else:
start_dt = start
if is_date(end):
end_dt = date_to_datetime(end)
else:
end_dt = end
seconds = int((end_dt - start_dt).total_seconds())
return start_dt + timedelta(seconds=random.randrange(seconds))
def generate_email_address(first_name, last_name):
return '%s.%s@example.org' % (first_name.lower(), last_name.lower())
def generate_phone_number():
return '0%d%s %s' % (
random.randint(1, 2),
''.join(str(random.randint(0, 9)) for _ in range(3)),
''.join(str(random.randint(0, 9)) for _ in range(6)),
)
def generate_mobile_number():
return '07' + ''.join(str(random.randint(0, 9)) for _ in range(9))
def generate_number(prefix=''):
while True:
number = prefix + ''.join(str(random.randint(0, 9)) for _ in range(9 - len(prefix)))
check_digit = 0
for i in range(9):
check_digit += int(number[i]) * (10 - i)
check_digit = 11 - (check_digit % 11)
if check_digit == 11:
check_digit = 0
elif check_digit == 10:
continue
number += str(check_digit)
return number
def generate_nhs_no():
return generate_number('4')
def generate_chi_no():
return generate_number('01')
def generate_ukrr_no():
return str(random.randint(199900001, 201599999))
def generate_nhsbt_no():
return str(random.randint(1, 200000))
def generate_address1():
return random.choice(ADDRESS1)
def generate_address2():
return random.choice(ADDRESS2)
def generate_address3():
return random.choice(ADDRESS3)
def generate_postcode():
return random.choice(POSTCODES)