mybuddy/babyblotter/management/commands/fake.py

114 lines
3.4 KiB
Python

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from random import randint, choice
from datetime import timedelta
from decimal import Decimal
from django.core.management.base import BaseCommand
from django.utils import timezone
from faker import Factory
from core.models import Child, DiaperChange, Feeding, Sleep, TummyTime
class Command(BaseCommand):
help = 'Generates fake children and related entries.'
def __init__(self, *args, **kwargs):
super(Command, self).__init__(*args, **kwargs)
self.faker = Factory.create()
def add_arguments(self, parser):
parser.add_argument(
'--children',
dest='children',
default=1,
help='The number of fake children to create.'
)
def handle(self, *args, **kwargs):
verbosity = kwargs['verbosity'] or 1
children = kwargs['children'] or 1
for i in range(0, children):
child = Child.objects.create(
first_name=self.faker.first_name(),
last_name=self.faker.last_name(),
birth_date=self.faker.date()
)
child.save()
for j in range(1, 6):
date = timezone.now() - timedelta(days=j)
self._add_child_data(child, date)
if verbosity > 0:
self.stdout.write(
self.style.SUCCESS('Successfully added fake data.')
)
def _add_child_data(self, child, date):
for i in (range(0, randint(5, 20))):
solid = choice([True, False])
if solid:
wet = False
color = choice(
DiaperChange._meta.get_field('color').choices)[0]
else:
wet = True
color = ''
DiaperChange.objects.create(
child=child,
time=date + timedelta(seconds=randint(-86400, 86400)),
wet=wet,
solid=solid,
color=color
).save()
for i in (range(0, randint(5, 20))):
start = date + timedelta(seconds=randint(-86400, 86400))
method = choice(Feeding._meta.get_field('method').choices)[0]
if method is 'bottle':
amount = Decimal('%d.%d' % (randint(0, 6), randint(0, 9)))
else:
amount = None
Feeding.objects.create(
child=child,
start=start,
end=start + timedelta(minutes=randint(5, 60)),
type=choice(Feeding._meta.get_field('type').choices)[0],
method=method,
amount=amount
).save()
for i in (range(0, randint(2, 10))):
start = date + timedelta(seconds=randint(-86400, 86400))
Sleep.objects.create(
child=child,
start=start,
end=start + timedelta(minutes=randint(5, 120))
).save()
for i in (range(0, randint(2, 10))):
start = date + timedelta(seconds=randint(-86400, 86400))
if choice([True, False]):
milestone = self.faker.sentence()
else:
milestone = ''
TummyTime.objects.create(
child=child,
start=start,
end=start + timedelta(minutes=randint(1, 10)),
milestone=milestone
).save()