canaille-globuzma/canaille/populate.py

65 lines
2 KiB
Python

import random
import faker
import ldap
from canaille.i18n import available_language_codes
from canaille.models import Group
from canaille.models import User
from faker.config import AVAILABLE_LOCALES
def faker_generator(locales=None):
locales = locales or list(set(available_language_codes()) & set(AVAILABLE_LOCALES))
return [faker.Faker(locale) for locale in locales]
def fake_users(nb=1):
fakes = faker_generator()
users = list()
for _ in range(nb):
try:
fake = random.choice(fakes)
name = fake.unique.name()
user = User(
cn=name,
givenName=name.split(" ")[0],
sn=name.split(" ")[1],
uid=fake.unique.user_name(),
mail=fake.unique.email(),
telephoneNumber=fake.unique.ssn(),
labeledURI=fake.unique.uri(),
postalAddress=fake.unique.address(),
street=fake.street_name(),
postalCode=fake.postcode(),
l=fake.city(),
st=fake.state(),
employeeNumber=str(fake.unique.random_number()),
departmentNumber=fake.word(),
title=fake.job(),
userPassword=fake.password(),
preferredLanguage=fake._locales[0],
)
user.save()
users.append(user)
except ldap.ALREADY_EXISTS: # pragma: no cover
pass
return users
def fake_groups(nb=1, nb_users_max=1):
fake = faker_generator(["en_US"])[0]
users = User.query()
groups = list()
for _ in range(nb):
try:
group = Group(
cn=fake.unique.word(),
description=fake.sentence(),
)
nb_users = random.randrange(1, nb_users_max + 1)
group.member = list({random.choice(users) for _ in range(nb_users)})
group.save()
groups.append(group)
except ldap.ALREADY_EXISTS: # pragma: no cover
pass
return groups