diff options
Diffstat (limited to 'app/dispatch/management/commands/insert_fake_data.py')
| -rw-r--r-- | app/dispatch/management/commands/insert_fake_data.py | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/app/dispatch/management/commands/insert_fake_data.py b/app/dispatch/management/commands/insert_fake_data.py new file mode 100644 index 0000000..9e8793e --- /dev/null +++ b/app/dispatch/management/commands/insert_fake_data.py @@ -0,0 +1,105 @@ +from django.core.management.base import BaseCommand, CommandError +from django.contrib.auth import get_user_model +from dispatch.models import Company, Load +from faker import Faker +from datetime import date, timedelta +import random + +# import yaml + +User = get_user_model() + +class Command(BaseCommand): + help = """Generate fake data.\n + Example usage: \n + ./manage.py insert_fake_data --companies 4 --users 3 --loads 800 --start-date='-16w' --end-date '+16w' + """ + + fake = Faker() + end_date="" + start_date="" + + def add_arguments(self, parser): + # parser.add_argument('--file', type=str, dest='filename') + parser.add_argument('--companies', type=int, dest='companies', default='0') + parser.add_argument('--users', type=int, dest='users', default='0') + parser.add_argument('--loads', type=int, dest='loads', default='0') + parser.add_argument('--start-date', type=str, dest='startdate', default='-2w') + parser.add_argument('--end-date', type=str, dest='enddate', default='+2w') + + + def handle(self, *args, **options): + + # Create the Fake drivers and their loads + # for i in range(0, options['companies']): + # co = self.fake_company() + # for i in range(0, options['users']): + # u = self.fake_user() + # for i in range(0, options['loads']): + # l = self.fake_load(u, co) + + self.end_date=options['enddate'] + self.start_date=options['startdate'] + + company_ids = [] + user_ids = [] + + for i in range(0, options['companies']): + co = self.fake_company() + + # We're going to hold the model IDs in memory to access randomly + # later on + company_ids.append(co.pk) + + for i in range(0, options['users']): + u = self.fake_user() + + user_ids.append(u.pk) + + for i in range(0, options['loads']): + co_id = company_ids[random.randint(0, len(company_ids)-1)] + co = Company.objects.get(pk=co_id) + + u_id = user_ids[random.randint(0, len(user_ids)-1)] + u = User.objects.get(pk=u_id) + + l = self.fake_load(u, co) + + + def fake_company(self): + new_company = Company( + name = self.fake.company(), + address = self.fake.address(), + phone_number = self.fake.msisdn(), + email_address = self.fake.company_email(), + contact_name = self.fake.name(), + ) + new_company.save() + return new_company + + def fake_load(self, usr, co): + new_load = Load( + user=usr, + # Because that's going to be random enough + load_number=self.fake.license_plate(), + description=self.fake.sentence(nb_words=6), + company=co, + amount=random.randint(150,2500) + ) + # Set the date to something random between last week and next week + new_load.date=self.fake.date_between(start_date=self.start_date, end_date=self.end_date) + new_load.save() + return new_load + + + def fake_user(self): + new_user = User( + first_name=self.fake.first_name(), + last_name=self.fake.last_name(), + email=self.fake.email(), + username=self.fake.user_name(), + is_active=True + ) + new_user.save() + return new_user + |
