Files
Django-Poll-App/seeder.py
2026-05-25 19:45:43 -03:00

118 lines
3.4 KiB
Python

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))