HiLo/homepage/models.py
Rushil Umaretiya 06f4bb5186 reformat
2020-09-30 01:58:36 -04:00

185 lines
6.9 KiB
Python
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.db import models
import os
from django.utils import timezone
import pytz
from django.core.files import File
from django.conf import settings
from django.templatetags.static import static
from django.utils.text import slugify
from PIL import Image, ImageDraw, ImageFont
# Create your models here.
class Location (models.Model):
name = models.CharField(max_length=20, blank=True, null=True)
insta = models.CharField(max_length=20, blank=True, null=True)
slug = models.CharField(max_length=20, blank=True, null=True)
hero = models.ImageField(default="hero.png", upload_to='heros')
hero_mobile = models.ImageField(default="hero-mobile.png", upload_to='heros')
results = models.ImageField(default="results.png", upload_to='results')
results_mobile = models.ImageField(default="results-mobile.png", upload_to='results')
def __str__(self):
return self.name
def save(self, *args, **kwargs):
def drawPic (input, output, font, x, y, text):
img = Image.open(input)
draw = ImageDraw.Draw(img)
draw.text((x,y), text, font=font, fill=(255,255,255))
img.save(output)
def add_margin(pil_img, top, right, bottom, left, color):
width, height = pil_img.size
new_width = width + right + left
new_height = height + top + bottom
result = Image.new(pil_img.mode, (new_width, new_height), color)
result.paste(pil_img, (left, top))
return result
self.slug = slugify(self.name)
self.hero = f'heros/hero-{self.slug}.png'
self.hero_mobile = f'heros/hero-{self.slug}-mobile.png'
if self.insta != None and self.insta != '' and self.insta[0] != '@':
self.insta = '@' + self.insta
self.results = f'results/results-{self.slug}.png'
self.results_mobile = f'results/results-{self.slug}-mobile.png'
super().save(*args, **kwargs)
output = f'{settings.PROJECT_PATH}/media/heros/hero-{self.slug}.png'
mobile_output = f'{settings.PROJECT_PATH}/media/heros/hero-{self.slug}-mobile.png'
font = ImageFont.truetype(settings.PROJECT_PATH + static("css/fonts/Hanson-Bold.ttf"), 42)
drawPic(settings.PROJECT_PATH + static("css/res/hero.png"), output, font, 945, 140, self.slug.upper())
drawPic(output, output, font, 945, 210, self.slug.upper())
drawPic(output, output, font, 945, 270, self.slug.upper())
drawPic(output, output, font, 625, 762, self.slug.upper())
drawPic(output, output, font, 625, 825, self.slug.upper())
drawPic(output, output, font, 625, 895, self.slug.upper())
font = ImageFont.truetype(settings.PROJECT_PATH + static("css/fonts/Hanson-Bold.ttf"), 65)
drawPic(settings.PROJECT_PATH + static("css/res/hero-mobile.png"), mobile_output, font, 600, 290, self.slug.upper())
drawPic(mobile_output, mobile_output, font, 600, 390, self.slug.upper())
drawPic(mobile_output, mobile_output, font, 600, 490, self.slug.upper())
drawPic(mobile_output, mobile_output, font, 100, 1370, self.slug.upper())
drawPic(mobile_output, mobile_output, font, 100, 1470, self.slug.upper())
drawPic(mobile_output, mobile_output, font, 100, 1570, self.slug.upper())
mobile_img = Image.open(mobile_output)
mobile_img = mobile_img.resize((1080, 1920))
mobile_img.save(mobile_output)
output = f'{settings.PROJECT_PATH}/media/results/results-{self.slug}.png'
mobile_output = f'{settings.PROJECT_PATH}/media/results/results-{self.slug}-mobile.png'
font = ImageFont.truetype(settings.PROJECT_PATH + static("css/fonts/FuturaPTMedium.otf"), 60)
if self.insta != None and self.insta != '':
drawPic (settings.PROJECT_PATH + static("css/res/results.png"), output, font, 735, 805, self.insta)
drawPic (settings.PROJECT_PATH + static("css/res/results-mobile.png"), mobile_output, font, 360, 1380, self.insta)
else:
img = Image.open(settings.PROJECT_PATH + static("css/res/results-noinsta.png"))
img.save(output)
img = Image.open(settings.PROJECT_PATH + static("css/res/results-mobile-noinsta.png"))
img.save(mobile_output)
class Poll (models.Model):
location = models.OneToOneField(Location, on_delete=models.CASCADE)
ask_hi = models.BooleanField(default=True)
hi_text = models.CharField(max_length=100, blank=True, null=True, default='What was the <span class="hi">Hi</span> of this week?')
ask_lo = models.BooleanField(default=True)
lo_text = models.CharField(max_length=100, blank=True, null=True, default='What was the <span class="lo">Lo</span> of this week?')
ask_emotion = models.BooleanField(default=False)
emotion_text = models.CharField(max_length=100, blank=True, null=True, default="how are you feeling today?")
ask_name = models.BooleanField(default=False)
name_text = models.CharField(max_length=100, blank=True, null=True, default="what's your name?")
ask_place = models.BooleanField(default=True)
place_text = models.CharField(max_length=100, blank=True, null=True, default="fill it out by writing #HiLo and finishing it with where youre from (Ex. #HiLoArlington, #HiLoDC)")
ask_question = models.BooleanField(default=False)
question_text = models.CharField(max_length=100, blank=True, null=True)
pub_date = models.DateTimeField('date published', blank=True, null=True)
def __str__(self):
return f"{self.location.name}'s Poll"
def save(self, *args, **kwargs):
# print("ok....")
self.pub_date = timezone.now()
# if self.ask_hi != True:
# self.hi_text = None
# if self.ask_lo != True:
# self.lo_text = None
# print("whatfaskdfjksadkfasd")
# if self.ask_name != True:
# print("bruh thatsakjjktsltjlkslktjlksatlkljkaslk")
# self.name_text = None
# if self.ask_place != True:
# self.place_text = None
# if self.ask_question != True:
# self.question_text = None
super().save(self, *args, **kwargs)
EMOTION_CHOICES= [
('happy', 'Happy'),
('meh', 'Meh'),
('sad', 'Sad'),
]
class Answer (models.Model):
poll = models.ForeignKey(Poll, on_delete=models.CASCADE)
hi = models.CharField(max_length=200, blank=True, null=True)
lo = models.CharField(max_length=200, blank=True, null=True)
emotion = models.CharField(max_length=8, default='meh', choices=EMOTION_CHOICES, blank=True, null=True)
name = models.CharField(max_length=100, blank=True, null=True)
place = models.CharField(max_length=100, blank=True, null=True)
current_question = models.CharField(max_length=100, blank=True, null=True)
question = models.CharField(max_length=200, blank=True, null=True)
time = models.DateTimeField('time answered', blank=True, null=True)
def save(self, *args, **kwargs):
self.time = timezone.now()
if self.hi == '':
self.hi = "Not stated"
if self.lo == '':
self.lo = "Not stated"
if self.name == '':
self.name = "Anonymous"
if self.place == '':
self.place = "Somewhere"
if self.question == '':
self.question = "Not stated"
if self.current_question == '':
self.current_question = self.poll.question_text
super().save(self, *args, **kwargs)
def __str__(self):
return f"{self.name}'s response on {self.poll.location.name} at {self.time.strftime('%m/%d/%Y, %H:%M:%S')}"