1st commit
This commit is contained in:
117
seeder.py
Normal file
117
seeder.py
Normal file
@@ -0,0 +1,117 @@
|
||||
from polls.models import Choice, Poll, Vote
|
||||
from django.contrib.auth.models import User
|
||||
import datetime
|
||||
import random
|
||||
import time
|
||||
from faker import Faker
|
||||
fake = Faker()
|
||||
|
||||
|
||||
def seed_users(num_entries=10, overwrite=False):
|
||||
"""
|
||||
Creates num_entries worth a new users
|
||||
"""
|
||||
if overwrite:
|
||||
print("Overwriting Users")
|
||||
User.objects.all().delete()
|
||||
count = 0
|
||||
for _ in range(num_entries):
|
||||
first_name = fake.first_name()
|
||||
last_name = fake.last_name()
|
||||
u = User.objects.create_user(
|
||||
first_name=first_name,
|
||||
last_name=last_name,
|
||||
email=first_name + "." + last_name + "@fakermail.com",
|
||||
username=first_name + last_name,
|
||||
password="password"
|
||||
)
|
||||
count += 1
|
||||
percent_complete = count / num_entries * 100
|
||||
print(
|
||||
"Adding {} new Users: {:.2f}%".format(
|
||||
num_entries, percent_complete),
|
||||
end='\r',
|
||||
flush=True
|
||||
)
|
||||
print()
|
||||
|
||||
|
||||
def seed_polls(num_entries=10, choice_min=2, choice_max=5, overwrite=False):
|
||||
"""
|
||||
Seeds num_entries poll with random users as owners
|
||||
Each poll will be seeded with # choices from choice_min to choice_max
|
||||
"""
|
||||
if overwrite:
|
||||
print('Overwriting polls')
|
||||
Poll.objects.all().delete()
|
||||
users = list(User.objects.all())
|
||||
count = 0
|
||||
for _ in range(num_entries):
|
||||
p = Poll(
|
||||
owner=random.choice(users),
|
||||
text=fake.paragraph(),
|
||||
pub_date=datetime.datetime.now()
|
||||
)
|
||||
p.save()
|
||||
num_choices = random.randrange(choice_min, choice_max + 1)
|
||||
for _ in range(num_choices):
|
||||
c = Choice(
|
||||
poll=p,
|
||||
choice_text=fake.sentence()
|
||||
).save()
|
||||
count += 1
|
||||
percent_complete = count / num_entries * 100
|
||||
print(
|
||||
"Adding {} new Polls: {:.2f}%".format(
|
||||
num_entries, percent_complete),
|
||||
end='\r',
|
||||
flush=True
|
||||
)
|
||||
print()
|
||||
|
||||
|
||||
def seed_votes():
|
||||
"""
|
||||
Creates a new vote on every poll for every user
|
||||
Voted for choice is selected random.
|
||||
Deletes all votes prior to adding new ones
|
||||
"""
|
||||
Vote.objects.all().delete()
|
||||
users = User.objects.all()
|
||||
polls = Poll.objects.all()
|
||||
count = 0
|
||||
number_of_new_votes = users.count() * polls.count()
|
||||
for poll in polls:
|
||||
choices = list(poll.choice_set.all())
|
||||
for user in users:
|
||||
v = Vote(
|
||||
user=user,
|
||||
poll=poll,
|
||||
choice=random.choice(choices)
|
||||
).save()
|
||||
count += 1
|
||||
percent_complete = count / number_of_new_votes * 100
|
||||
print(
|
||||
"Adding {} new votes: {:.2f}%".format(
|
||||
number_of_new_votes, percent_complete),
|
||||
end='\r',
|
||||
flush=True
|
||||
)
|
||||
print()
|
||||
|
||||
|
||||
def seed_all(num_entries=10, overwrite=False):
|
||||
"""
|
||||
Runs all seeder functions. Passes value of overwrite to all
|
||||
seeder function calls.
|
||||
"""
|
||||
start_time = time.time()
|
||||
# run seeds
|
||||
seed_users(num_entries=num_entries, overwrite=overwrite)
|
||||
seed_polls(num_entries=num_entries, overwrite=overwrite)
|
||||
seed_votes()
|
||||
# get time
|
||||
elapsed_time = time.time() - start_time
|
||||
minutes = int(elapsed_time // 60)
|
||||
seconds = int(elapsed_time % 60)
|
||||
print("Script Execution took: {} minutes {} seconds".format(minutes, seconds))
|
||||
Reference in New Issue
Block a user