diff options
Diffstat (limited to 'app/dispatch/management')
| -rw-r--r-- | app/dispatch/management/__init__.py | 0 | ||||
| -rw-r--r-- | app/dispatch/management/commands/__init__.py | 0 | ||||
| -rw-r--r-- | app/dispatch/management/commands/insert_fake_data.py | 105 | ||||
| -rw-r--r-- | app/dispatch/management/commands/insert_test_data.py | 50 |
4 files changed, 155 insertions, 0 deletions
diff --git a/app/dispatch/management/__init__.py b/app/dispatch/management/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/app/dispatch/management/__init__.py diff --git a/app/dispatch/management/commands/__init__.py b/app/dispatch/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/app/dispatch/management/commands/__init__.py 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 + diff --git a/app/dispatch/management/commands/insert_test_data.py b/app/dispatch/management/commands/insert_test_data.py new file mode 100644 index 0000000..8ca9a33 --- /dev/null +++ b/app/dispatch/management/commands/insert_test_data.py @@ -0,0 +1,50 @@ +from django.core.management.base import BaseCommand, CommandError +from django.contrib.auth import get_user_model +from dispatch.models import Company, Contact, Load + +import yaml + +User = get_user_model() + +class Command(BaseCommand): + help = "Import Objects from a YML file" + + def add_arguments(self, parser): + parser.add_argument('--file', type=str, dest='filename') + + + def handle(self, *args, **options): + + yml_data = open(options['filename']).read() + parsed = yaml.load(yml_data) + + self.parse_users(parsed['users']) + self.parse_loads(parsed['loads']) + + def parse_loads(self, loads): + for l in loads: + try: + new_user = Load( + load_number=u['load_number'], + date=u['date'], + user=u['user_email'], + user=u['user'], + ) + new_user.save() + except: + print("Error on user %s" % u['email']) + + + def parse_users(self, users): + for u in users: + try: + new_user = User( + first_name=u['firstName'], + last_name=u['lastName'], + email=u['email'], + username=u['firstName'] + is_active=u['active'] + ) + new_user.save() + except: + print("Error on user %s" % u['email']) |
