canaille-globuzma/canaille/core/populate.py

67 lines
2.2 KiB
Python
Raw Normal View History

2023-02-26 21:21:55 +00:00
import random
import faker
from faker.config import AVAILABLE_LOCALES
from canaille.app import models
2023-04-09 13:52:55 +00:00
from canaille.app.i18n import available_language_codes
from canaille.backends import Backend
2023-02-26 21:21:55 +00:00
def fake_users(nb=1):
locales = list(set(available_language_codes()) & set(AVAILABLE_LOCALES))
faker_obj = faker.Faker(locales)
2023-02-26 21:21:55 +00:00
users = list()
# TODO The day faker supports unique profiles,
# we should use them so the different user values would be coherent
# https://github.com/joke2k/faker/issues/1817
2023-02-26 21:21:55 +00:00
for _ in range(nb):
try:
locale = random.choice(locales)
fake = faker_obj[locale]
name = fake.unique.name()
user = models.User(
formatted_name=name,
given_name=name.split(" ")[0],
family_name=name.split(" ")[1],
user_name=fake.unique.user_name(),
emails=[fake.unique.email()],
phone_numbers=[fake.unique.ssn()],
profile_url=fake.unique.uri(),
formatted_address=fake.unique.address(),
street=fake.street_name(),
postal_code=fake.postcode(),
locality=fake.city(),
region=fake.state(),
employee_number=str(fake.unique.random_number()),
department=fake.word(),
title=fake.job(),
password=fake.password(),
preferred_language=fake._locales[0],
)
Backend.instance.save(user)
users.append(user)
except Exception: # pragma: no cover
pass
2023-02-26 21:21:55 +00:00
return users
def fake_groups(nb=1, nb_users_max=1):
users = Backend.instance.query(models.User)
2023-02-26 21:21:55 +00:00
groups = list()
fake = faker.Faker(["en_US"])
2023-02-26 21:21:55 +00:00
for _ in range(nb):
try:
group = models.Group(
display_name=fake.unique.word(),
description=fake.sentence(),
)
nb_users = random.randrange(1, nb_users_max + 1)
group.members = list({random.choice(users) for _ in range(nb_users)})
Backend.instance.save(group)
groups.append(group)
except Exception: # pragma: no cover
pass
2023-02-26 21:21:55 +00:00
return groups