datatracker/ietf/person/factories.py
2016-06-09 21:51:46 +00:00

83 lines
2.8 KiB
Python

import os
import factory
import faker
import shutil
from unidecode import unidecode
from django.conf import settings
from django.contrib.auth.models import User
from ietf.person.models import Person, Alias, Email
fake = faker.Factory.create()
class UserFactory(factory.DjangoModelFactory):
class Meta:
model = User
django_get_or_create = ('username',)
first_name = factory.Faker('first_name')
last_name = factory.Faker('last_name')
email = factory.LazyAttributeSequence(lambda u, n: '%s.%s_%d@%s'%(u.first_name,u.last_name,n,fake.domain_name()))
username = factory.LazyAttribute(lambda u: u.email)
@factory.post_generation
def set_password(self, create, extracted, **kwargs):
self.set_password( '%s+password' % self.username )
class PersonFactory(factory.DjangoModelFactory):
class Meta:
model = Person
user = factory.SubFactory(UserFactory)
name = factory.LazyAttribute(lambda p: '%s %s'%(p.user.first_name,p.user.last_name))
ascii = factory.LazyAttribute(lambda p: unidecode(p.name))
class Params:
with_bio = factory.Trait(
biography = u"\n\n".join(fake.paragraphs()),
)
@factory.post_generation
def default_aliases(self, create, extracted, **kwargs):
make_alias = getattr(AliasFactory, 'create' if create else 'build')
make_alias(person=self,name=self.name)
make_alias(person=self,name=self.ascii)
@factory.post_generation
def default_emails(self, create, extracted, **kwargs):
make_email = getattr(EmailFactory, 'create' if create else 'build')
make_email(person=self,address=self.user.email)
@factory.post_generation
def default_photo(self, create, extracted, **kwargs):
import atexit
if self.biography:
photo_name = self.photo_name()
media_name = u"%s/%s.jpg" % (settings.PHOTOS_DIRNAME, photo_name)
self.photo = media_name
self.photo_thumb = media_name
photosrc = os.path.join(settings.TEST_DATA_DIR, "profile-default.jpg")
photodst = os.path.join(settings.PHOTOS_DIR, photo_name + '.jpg')
if not os.path.exists(photodst):
shutil.copy(photosrc, photodst)
def delete_file(file):
os.unlink(file)
atexit.register(delete_file, photodst)
class AliasFactory(factory.DjangoModelFactory):
class Meta:
model = Alias
django_get_or_create = ('name',)
name = factory.Faker('name')
class EmailFactory(factory.DjangoModelFactory):
class Meta:
model = Email
django_get_or_create = ('address',)
address = factory.Sequence(lambda n:'%s.%s_%d@%s' % (fake.first_name(),fake.last_name(),n,fake.domain_name()))
active = True
primary = False