2021-07-31 09:41:33 +00:00
# Copyright (C) 2020 Fintic, finticofficial@gmail.com
2021-04-26 18:51:21 +00:00
#
2021-07-31 09:41:33 +00:00
# This file is part of Fintic project, developed by Neythen Treloar and Justin Dunn
2021-04-26 18:51:21 +00:00
#
# stockTicker can not be copied and/or distributed without the express
2021-07-31 09:41:33 +00:00
# permission of Fintic
2021-04-26 18:51:21 +00:00
2023-07-17 07:03:58 +00:00
import random
2021-05-01 10:39:20 +00:00
import sys , select
2021-04-26 18:51:21 +00:00
import os
import threading
2021-08-03 17:16:13 +00:00
from PIL import Image , ImageDraw , ImageFont , ImageSequence
2021-06-30 21:00:14 +00:00
Image . init ( )
2023-01-09 10:20:11 +00:00
import pytz
2021-04-26 18:51:21 +00:00
import time
import csv
2021-04-28 19:39:30 +00:00
import requests
2021-05-05 14:44:43 +00:00
import pexpect
2021-04-27 18:29:14 +00:00
from rgbmatrix import RGBMatrix , RGBMatrixOptions
2021-05-14 10:31:14 +00:00
from rgbmatrix . graphics import *
2021-05-14 12:55:43 +00:00
from multiprocessing import Process
2021-06-02 15:37:31 +00:00
import traceback
2021-06-03 20:56:25 +00:00
import json
from datetime import datetime
2021-06-21 16:39:44 +00:00
import matplotlib . colors as mcolors
2021-05-14 12:02:22 +00:00
2023-03-29 08:38:52 +00:00
ny_zone = pytz . timezone ( ' America/New_York ' )
2021-05-01 10:39:20 +00:00
def getInput ( Block = False ) :
if Block or select . select ( [ sys . stdin ] , [ ] , [ ] , 0 ) == ( [ sys . stdin ] , [ ] , [ ] ) :
msg = sys . stdin . read ( 1 )
#sys.stdin.flush()
else :
msg = ' '
return msg
2021-05-05 14:44:43 +00:00
2021-05-01 10:39:20 +00:00
2021-04-26 19:27:34 +00:00
class StockTicker ( ) :
def __init__ ( self ) :
#Define global resources
self . symbols = [ ]
2021-10-12 19:52:52 +00:00
self . delay = 0.02
2021-04-26 19:27:34 +00:00
self . greenORred = ( 255 , 255 , 255 )
2021-05-03 10:39:31 +00:00
#self.blank = Image.open('logos/blank.png')
2021-06-22 19:05:56 +00:00
self . blank = Image . new ( ' RGB ' , ( 10 , 32 ) )
2021-04-26 19:27:34 +00:00
self . running = True
2021-11-20 15:30:31 +00:00
2021-12-06 20:10:14 +00:00
settings = json . load ( open ( ' csv/general_settings.json ' , ' r ' ) )
2021-11-20 15:30:31 +00:00
2021-12-06 20:10:14 +00:00
self . brightness = settings [ ' brightness ' ] * 10
2021-11-20 15:30:31 +00:00
2021-04-27 18:29:14 +00:00
# Configuration for the matrix
options = RGBMatrixOptions ( )
2021-05-04 16:39:16 +00:00
options . rows = 32
2021-04-27 18:29:14 +00:00
options . cols = 64
2021-05-04 20:55:28 +00:00
options . chain_length = 2
2021-04-27 18:29:14 +00:00
options . parallel = 1
options . hardware_mapping = ' adafruit-hat ' # If you have an Adafruit HAT: 'adafruit-hat'
2022-04-11 15:24:59 +00:00
options . gpio_slowdown = 2
2021-11-20 15:30:31 +00:00
options . brightness = self . brightness
2021-04-27 18:29:14 +00:00
self . matrix = RGBMatrix ( options = options )
2022-04-07 17:35:38 +00:00
2021-10-25 18:42:00 +00:00
#sys.exit()
2021-05-25 18:57:34 +00:00
self . points = True # display crypto change in points or percent
2021-08-03 17:16:13 +00:00
2021-08-11 19:58:01 +00:00
self . functions = { ' Stocks ' : self . getStockImage , ' Crypto ' : self . getCryptoImage , ' Forex ' : self . getForexImage ,
2023-07-13 09:10:58 +00:00
' Daily Forecast ' : self . getDailyWeatherImage , ' Current Weather ' : self . getTodayWeatherImage , ' Jokes ' : self . getJokesImage ,
2021-08-11 19:58:01 +00:00
' Sports (Team Stats) ' : lambda : self . getLeagueTableImage ( ' premier_league ' ) , ' Sports (Past Games) ' : lambda : self . getLeagueImage ( ' NBA ' , ' past ' ) ,
' Sports (Upcoming Games) ' : lambda : self . getLeagueImage ( ' NHL ' , ' future ' ) , ' Sports (Live Games) ' : lambda : self . getLeagueImage ( ' NBA ' , ' live ' ) ,
2023-01-09 08:16:18 +00:00
' News ' : self . getNewsImage , ' Custom Messages ' : self . getUserMessages , ' Commodities ' : self . getCommoditiesImage , ' Indices ' : self . getIndicesImage , ' Movies ' : self . getMoviesImage ,
2023-06-26 09:31:31 +00:00
' Economic Calendar ' : self . getEconomicImage , ' IPO Calendar ' : self . getIpoImage , ' IPO Calendar Prof ' : self . getIpoProfessional , ' Economic Calendar Prof ' : self . getEconomicProfessional ,
2021-07-26 19:50:51 +00:00
2023-07-13 09:10:58 +00:00
' Stocks Prof ' : self . getStockProfessional , ' Crypto Prof ' : self . getCryptoProfessional , ' Forex Prof ' : self . getForexProfessional , ' Jokes Prof ' : self . getJokesProfessional ,
2022-10-31 07:42:13 +00:00
' Current Weather Prof ' : self . getTodayWeatherProfessional , ' News Prof ' : self . getNewsProfessional , ' Commodities Prof ' : self . getCommoditiesProfessional , ' Indices Prof ' : self . getIndicesProfessional ,
2022-10-31 07:47:37 +00:00
' Daily Forecast Prof ' : self . getDailyWeatherProfessional , ' Sports (Team Stats) Prof ' : lambda : self . getLeagueTableProfessional ( ' NHL ' ) , ' Sports (Upcoming Games) Prof ' : lambda : self . getLeagueProfessional ( ' NHL ' , ' future ' ) ,
2023-01-09 10:08:18 +00:00
' Sports (Past Games) Prof ' : lambda : self . getLeagueProfessional ( ' NBA ' , ' past ' ) , ' Custom Messages Prof ' : self . getUserMessagesProfessional , ' Custom Images Prof ' : self . getUserImagesProfessional , ' Movies Prof ' : self . getMoviesProfessional , ' Sports (Live Games) Prof ' : lambda : self . getLeagueProfessional ( ' NBA ' , ' live ' ) }
2021-08-11 19:58:01 +00:00
2023-07-13 09:10:58 +00:00
self . JSONs = { ' Stocks ' : ' csv/stocks_settings.json ' , ' Crypto ' : ' csv/crypto_settings.json ' , ' Forex ' : ' csv/forex_settings.json ' , ' Jokes ' : ' csv/jokes_settings.json ' ,
2022-10-06 08:33:52 +00:00
' Daily Forecast ' : ' csv/daily_weather.json ' , ' Current Weather ' : ' csv/current_weather.json ' , ' Commodities ' : ' csv/commodities_settings.json ' , ' Indices ' : ' csv/indices_settings.json ' ,
2023-06-16 14:21:31 +00:00
' Sports (Team Stats) ' : ' csv/league_tables.json ' , ' Sports (Past Games) ' : ' csv/past_games.json ' , ' IPO Calendar ' : ' csv/ipo_settings.json ' , ' Economic Calendar ' : ' csv/economic_settings.json ' ,
2023-01-09 08:16:18 +00:00
' Sports (Upcoming Games) ' : ' csv/upcoming_games.json ' , ' Sports (Live Games) ' : ' csv/live_games.json ' , ' Movies ' : ' csv/movie_settings.json ' ,
2021-10-12 19:52:52 +00:00
' News ' : ' csv/news_settings.json ' , ' Custom Images ' : ' csv/image_settings.json ' , ' Custom GIFs ' : ' csv/GIF_settings.json ' , ' Custom Messages ' : ' csv/message_settings.json ' ,
2023-07-13 09:10:58 +00:00
' Stocks Prof ' : ' csv/stocks_settings.json ' , ' Crypto Prof ' : ' csv/crypto_settings.json ' , ' Forex Prof ' : ' csv/forex_settings.json ' , ' Jokes Prof ' : ' csv/jokes_settings.json ' ,
2022-10-31 07:42:13 +00:00
' Current Weather Prof ' : ' csv/current_weather.json ' , ' News Prof ' : ' csv/news_settings.json ' , ' Commodities Prof ' : ' csv/commodities_settings.json ' , ' Indices Prof ' : ' csv/indices_settings.json ' ,
2023-06-26 09:31:31 +00:00
' Daily Forecast Prof ' : ' csv/daily_weather.json ' , ' Sports (Team Stats) Prof ' : ' csv/league_tables.json ' , ' Sports (Upcoming Games) Prof ' : ' csv/upcoming_games.json ' , ' Sports (Past Games) Prof ' : ' csv/past_games.json ' , ' Custom Messages Prof ' : ' csv/message_settings.json ' , ' Custom Images Prof ' : ' csv/image_settings.json ' , ' Movies Prof ' : ' csv/movie_settings.json ' , ' Sports (Live Games) Prof ' : ' csv/live_games.json ' , ' IPO Calendar Prof ' : ' csv/ipo_settings.json ' , ' Economic Calendar Prof ' : ' csv/economic_settings.json ' }
2021-05-05 14:44:43 +00:00
2021-04-27 18:29:14 +00:00
def openImage ( self , image_file ) :
image = Image . open ( image_file )
2021-10-11 19:16:04 +00:00
image = image . convert ( ' RGB ' )
2021-04-27 18:29:14 +00:00
# Make image fit our screen.
#image.thumbnail((self.matrix.width, self.matrix.height), Image.ANTIALIAS)
2021-06-29 20:17:52 +00:00
#image = image.convert('RGB')
2021-04-27 18:29:14 +00:00
return image
2021-06-08 20:16:08 +00:00
def degreesToCompass ( self , deg ) :
dirs = [ ' N ' , ' NE ' , ' E ' , ' SE ' , ' S ' , ' SW ' , ' W ' , ' NW ' ]
return dirs [ int ( ( deg + 22.5 ) / / 45 ) % 8 ]
2021-07-14 17:02:54 +00:00
2021-07-08 19:12:18 +00:00
def setImage ( self , image , offset_x = 0 , offset_y = 0 , unsafe = True , min_x = 0 , max_x = 128 , min_y = 0 , max_y = 32 ) :
2021-04-27 18:29:14 +00:00
if ( image . mode != " RGB " ) :
2021-06-30 19:22:14 +00:00
image = image . convert ( ' RGB ' )
2021-04-27 18:29:14 +00:00
if unsafe :
2021-05-01 10:39:20 +00:00
#In unsafe mode we directly acceshow to send commands to running python processs the underlying PIL image array
2021-04-27 18:29:14 +00:00
#in cython, which is considered unsafe pointer accecss,
#however it's super fast and seems to work fine
#https://groups.google.com/forum/#!topic/cython-users/Dc1ft5W6KM4
img_width , img_height = image . size
2021-04-28 19:39:30 +00:00
2021-04-27 18:29:14 +00:00
self . matrix . SetPixelsPillow ( offset_x , offset_y , img_width , img_height , image )
else :
# First implementation of a SetImage(). OPTIMIZE_ME: A more native
# implementation that directly reads the buffer and calls the underlying
# C functions can certainly be faster.
img_width , img_height = image . size
pixels = image . load ( )
2021-06-09 18:13:48 +00:00
for y in range ( max ( 0 , - offset_y ) , min ( img_height , self . matrix . height - offset_y ) ) :
2021-07-06 20:18:54 +00:00
for x in range ( max ( 0 , - offset_x ) , min ( img_width , self . matrix . width - offset_x ) ) :
2021-07-14 17:02:54 +00:00
2021-06-08 20:16:08 +00:00
if min_x < = x + offset_x < = max_x and min_y < = y + offset_y < = max_y :
2021-07-06 20:18:54 +00:00
( r , g , b ) = pixels [ x , y ]
2021-06-08 20:16:08 +00:00
self . matrix . SetPixel ( x + offset_x , y + offset_y , r * self . brightness , g * self . brightness , b * self . brightness )
2021-07-06 20:18:54 +00:00
2021-07-27 17:33:02 +00:00
def scrollImage ( self , image , offset_x = 0 , offset_y = 0 , frame_skip = 10 , gif = False , pause_frames = 0 ) :
2021-04-27 18:59:25 +00:00
img_width , img_height = image . size
2021-07-26 19:50:51 +00:00
kill = False
2021-07-27 17:33:02 +00:00
while offset_x > - ( img_width + 1 ) :
2021-07-28 18:55:55 +00:00
if offset_x == 0 :
while pause_frames > 0 :
if pause_frames % frame_skip == 0 :
self . incrementGIF ( image )
pause_frames - = 1
if gif :
self . double_buffer . SetImage ( image . convert ( ' RGB ' ) , offset_x , offset_y )
else :
self . double_buffer . SetImage ( image , offset_x , offset_y )
for y in range ( self . matrix . height ) :
self . matrix . SetPixel ( offset_x + img_width + 1 , y , 0 , 0 , 0 )
self . matrix . SetPixel ( offset_x + img_width , y , 0 , 0 , 0 )
self . double_buffer = self . matrix . SwapOnVSync ( self . double_buffer )
time . sleep ( self . delay )
kill = self . checkKilled ( )
if kill : break
2021-07-29 13:48:04 +00:00
if kill : break
2021-07-26 19:50:51 +00:00
# for animation in gifs
if offset_x % frame_skip == 0 :
self . incrementGIF ( image )
#image = image.convert('RGB')
2021-04-27 18:59:25 +00:00
offset_x - = 1
2021-07-26 19:50:51 +00:00
#self.setImage(image.convert('RGB'), offset_x = offset_x, offset_y = offset_y)
if gif :
2021-07-27 17:33:02 +00:00
self . double_buffer . SetImage ( image . convert ( ' RGB ' ) , offset_x , offset_y )
2021-07-26 19:50:51 +00:00
else :
2021-07-27 17:33:02 +00:00
self . double_buffer . SetImage ( image , offset_x , offset_y )
2021-07-26 19:50:51 +00:00
buff = 0
2021-06-22 19:05:56 +00:00
# remove the ppixels behind the image, to stop trailing
2021-07-27 17:33:02 +00:00
self . double_buffer = self . matrix . SwapOnVSync ( self . double_buffer )
2021-07-26 19:50:51 +00:00
for y in range ( self . matrix . height ) :
self . matrix . SetPixel ( offset_x + img_width + 1 , y , 0 , 0 , 0 )
2021-07-27 17:33:02 +00:00
self . matrix . SetPixel ( offset_x + img_width , y , 0 , 0 , 0 )
2021-07-26 19:50:51 +00:00
time . sleep ( self . delay )
kill = self . checkKilled ( )
2021-08-03 18:44:16 +00:00
2021-07-26 19:50:51 +00:00
if kill : break
return kill
2021-07-27 17:33:02 +00:00
def scrollImageY ( self , image , direction = 1 , offset_x = 0 , offset_y = 0 , frame_skip = 10 , gif = False ) :
2021-07-26 19:50:51 +00:00
kill = False
while offset_y != 0 :
2021-05-31 11:22:56 +00:00
2021-07-26 19:50:51 +00:00
# for animation in gifs
if offset_y % frame_skip == 0 :
self . incrementGIF ( image )
offset_y + = direction
if gif :
2021-07-27 17:33:02 +00:00
self . double_buffer . SetImage ( image . convert ( ' RGB ' ) , offset_x , offset_y )
2021-07-26 19:50:51 +00:00
else :
2021-07-27 17:33:02 +00:00
self . double_buffer . SetImage ( image , offset_x , offset_y )
2021-05-31 11:22:56 +00:00
2021-07-27 17:33:02 +00:00
self . double_buffer = self . matrix . SwapOnVSync ( self . double_buffer )
2021-05-31 11:22:56 +00:00
2021-05-21 13:24:37 +00:00
time . sleep ( self . delay )
2021-07-26 19:50:51 +00:00
kill = self . checkKilled ( )
if kill : break
return kill
2021-05-23 09:34:06 +00:00
2021-07-29 13:48:04 +00:00
def scrollImageTransition ( self , image_files , offset_x = 0 , offset_y = 0 , stocks = True ) :
# use two image files and switch between them with a seemless transition
current_img = 1
image1 = self . openImage ( image_files [ 0 ] ) . convert ( ' RGB ' )
image2 = self . openImage ( image_files [ 1 ] ) . convert ( ' RGB ' )
double_buffer = self . matrix . CreateFrameCanvas ( )
kill = False
while True :
if current_img == 1 :
if stocks :
update_process = Process ( target = self . getFullStockImage , args = ( 1 , ) )
update_process . start ( )
image1 = self . openImage ( image_files [ 0 ] ) . convert ( ' RGB ' )
image2 = self . openImage ( image_files [ 1 ] ) . convert ( ' RGB ' )
elif current_img == 2 :
if stocks :
update_process = Process ( target = self . getFullStockImage , args = ( 2 , ) )
update_process . start ( )
image1 = self . openImage ( image_files [ 1 ] ) . convert ( ' RGB ' )
image2 = self . openImage ( image_files [ 0 ] ) . convert ( ' RGB ' )
img_width , img_height = image1 . size
while offset_x > - img_width :
offset_x - = 1
double_buffer . SetImage ( image1 , offset_x , offset_y )
if offset_x + img_width < self . matrix . width : # if the image is ending
double_buffer . SetImage ( image2 , offset_x , offset_y )
double_buffer = self . matrix . SwapOnVSync ( double_buffer )
time . sleep ( self . delay )
kill = self . checkKilled ( )
if kill : break
if stocks :
image1 . close ( )
image2 . close ( )
if kill : break
if stocks :
update_process . join ( )
2022-02-22 20:45:42 +00:00
update_process . terminate ( )
2021-07-29 13:48:04 +00:00
if current_img == 1 :
current_img = 2
elif current_img == 2 :
current_img = 1
offset_x = 0
2022-02-22 20:45:42 +00:00
update_process . join ( )
update_process . terminate ( )
2021-07-29 13:48:04 +00:00
2021-05-23 09:34:06 +00:00
def scrollImageStacked ( self , image , offset_x = 0 , offset_y = 0 ) :
img_width , img_height = image . size
while offset_x > - img_width - 128 :
offset_x - = 1
self . setImage ( image , offset_x = offset_x + 128 , offset_y = offset_y )
2021-05-23 10:28:46 +00:00
self . setImage ( image , offset_x = offset_x , offset_y = offset_y + 20 )
2021-05-23 09:34:06 +00:00
2021-06-22 19:05:56 +00:00
kill = self . checkKilled ( )
2021-05-23 09:34:06 +00:00
time . sleep ( self . delay )
2021-06-22 19:05:56 +00:00
return kill
2021-04-27 18:59:25 +00:00
2021-06-22 19:05:56 +00:00
def updateMultiple ( self , options ) :
2022-04-07 17:35:38 +00:00
2021-06-22 19:05:56 +00:00
for option in options :
2021-08-03 17:16:13 +00:00
2021-10-11 19:16:04 +00:00
if option not in [ ' Custom GIFs ' , ' Custom Images ' , ' Custom Messages ' ] : # these images are already saved in user uploads, dodnt need to update them
img = self . functions [ option ] ( )
2021-06-30 21:00:14 +00:00
img . save ( ' ./display_images/ ' + option + ' .ppm ' )
2021-08-11 19:58:01 +00:00
2021-07-26 19:50:51 +00:00
def incrementGIF ( self , image ) :
try :
image . seek ( self . frame )
except EOFError :
self . frame = 0
image . seek ( self . frame )
self . frame + = 1
2021-06-29 20:17:52 +00:00
2021-06-22 19:05:56 +00:00
def checkKilled ( self ) :
kill = False
try :
msg = getInput ( )
if msg == ' K ' :
self . resetMatrix ( )
kill = True
self . process_msg ( msg )
except KeyboardInterrupt :
sys . stdout . flush ( )
pass
return kill
2021-10-12 19:52:52 +00:00
def set_delay ( self , speed ) :
if speed . lower ( ) == ' slow ' :
2021-10-18 17:38:24 +00:00
self . delay = 0.03
2021-10-12 19:52:52 +00:00
elif speed . lower ( ) == ' medium ' :
self . delay = 0.02
elif speed . lower ( ) == ' fast ' :
self . delay = 0.01
return self . delay
2022-02-14 18:48:27 +00:00
def scrollFunctionsAnimated ( self , options , animation = ' down ' , repeat = True ) :
2021-07-13 19:32:26 +00:00
2021-06-22 19:05:56 +00:00
# scrolls trhough all functions with animation. Updates functions and remakes images when each function not being dispplayed
2021-06-27 11:07:47 +00:00
2021-06-30 21:00:14 +00:00
self . updateMultiple ( [ options [ 0 ] ] )
2021-10-12 19:52:52 +00:00
2021-06-22 19:05:56 +00:00
kill = False
i = 0 # keep track of which image we are displaying
2021-07-27 17:33:02 +00:00
self . double_buffer = self . matrix . CreateFrameCanvas ( )
2022-02-14 18:48:27 +00:00
2021-06-22 19:05:56 +00:00
while True :
2021-05-23 09:34:06 +00:00
2021-06-27 11:07:47 +00:00
update_process = Process ( target = self . updateMultiple , args = ( [ options [ ( i + 1 ) % len ( options ) ] ] , ) )
2021-06-22 19:05:56 +00:00
update_process . start ( )
2021-06-30 19:22:14 +00:00
2022-04-07 17:35:38 +00:00
f = open ( self . JSONs [ options [ ( i ) % len ( options ) ] ] )
settings = json . load ( f )
f . close ( )
2021-10-12 19:52:52 +00:00
self . set_delay ( settings [ ' speed ' ] )
animation = settings [ ' animation ' ] . lower ( )
2021-10-11 19:16:04 +00:00
if options [ i % len ( options ) ] == ' Custom Images ' :
images = self . getUserImages ( )
elif options [ i % len ( options ) ] == ' Custom GIFs ' :
images = self . getUserGIFs ( )
elif options [ i % len ( options ) ] == ' Custom Messages ' :
images = self . getUserMessages ( )
2021-07-15 18:49:53 +00:00
2021-10-11 19:16:04 +00:00
else : #these options just have a single ppm image
2021-07-15 18:49:53 +00:00
image = self . openImage ( ' ./display_images/ ' + options [ i % len ( options ) ] + ' .ppm ' )
2021-07-13 19:32:26 +00:00
2021-10-11 19:16:04 +00:00
images = [ image ]
2021-07-26 19:50:51 +00:00
2021-10-11 19:16:04 +00:00
for image in images :
img_width , img_height = image . size
offset_x = 0
2021-12-21 17:21:04 +00:00
if animation == ' continuous ' :
2021-10-11 19:16:04 +00:00
offset_x = 128
elif animation in [ ' up ' , ' down ' ] :
offset_x = max ( 0 , 128 - img_width )
offset_y = 0
#first scroll image in from bottom
frame_skip = int ( ( 1 / 15 ) / self . delay ) #controls how fast gifs run
self . frame = 0
pause_frames = int ( 0.5 / self . delay )
if animation == ' up ' :
offset_y = 33
direction = - 1
kill = self . scrollImageY ( image , direction = direction , offset_x = offset_x , offset_y = offset_y , frame_skip = frame_skip , gif = options [ i % len ( options ) ] == ' Custom GIFs ' )
elif animation == ' down ' :
direction = 1
offset_y = - 33
kill = self . scrollImageY ( image , direction = direction , offset_x = offset_x , offset_y = offset_y , frame_skip = frame_skip , gif = options [ i % len ( options ) ] == ' Custom GIFs ' )
2021-06-22 19:05:56 +00:00
2021-10-11 19:16:04 +00:00
if kill : break
offset_y = 0
2021-07-13 19:32:26 +00:00
2021-10-11 19:16:04 +00:00
if animation in [ ' up ' , ' down ' ] :
while pause_frames > 0 :
if pause_frames % frame_skip == 0 :
self . incrementGIF ( image )
pause_frames - = 1
if options [ i % len ( options ) ] != ' Custom GIFs ' :
self . double_buffer . SetImage ( image , offset_x , offset_y )
else :
self . double_buffer . SetImage ( image . convert ( ' RGB ' ) , offset_x , offset_y )
self . double_buffer = self . matrix . SwapOnVSync ( self . double_buffer )
time . sleep ( self . delay )
kill = self . checkKilled ( )
if kill : break
2021-06-22 19:05:56 +00:00
2021-06-29 20:17:52 +00:00
if kill : break
2021-10-11 19:16:04 +00:00
if kill : break
2021-10-12 19:52:52 +00:00
try :
pause = float ( settings [ ' pause ' ] )
except :
pause = 0
pause_frames = int ( float ( pause ) / self . delay )
kill = self . scrollImage ( image , offset_x = offset_x , offset_y = offset_y , frame_skip = frame_skip , gif = options [ i % len ( options ) ] == ' Custom GIFs ' , pause_frames = pause_frames )
2021-07-13 19:32:26 +00:00
2021-06-22 19:05:56 +00:00
if kill : break
2021-10-11 19:16:04 +00:00
if kill : break
2022-02-14 18:48:27 +00:00
if not repeat :
break
2021-06-22 19:05:56 +00:00
update_process . join ( )
2022-02-22 20:45:42 +00:00
update_process . terminate ( )
2021-06-22 19:05:56 +00:00
i + = 1
2021-10-12 19:52:52 +00:00
def scrollProfessionalAnimated ( self , options , animation = ' on ' ) :
# scrolls trhough all functions with animation. Updates functions and remakes images when each function not being dispplayed
2021-11-22 19:08:14 +00:00
top = options [ 0 ]
bottom = options [ 1 ]
2021-10-12 19:52:52 +00:00
2021-11-22 19:08:14 +00:00
2021-10-12 19:52:52 +00:00
2021-11-22 19:08:14 +00:00
self . updateMultiple ( [ top [ 0 ] , bottom [ 0 ] ] )
2021-10-12 19:52:52 +00:00
kill = False
i1 = 0 # keep track of which image we are displaying
2021-11-22 19:08:14 +00:00
i2 = 0 # keep track of which image we are displaying
2021-10-12 19:52:52 +00:00
self . double_buffer = self . matrix . CreateFrameCanvas ( )
2021-11-22 19:08:14 +00:00
update_process = Process ( target = self . updateMultiple , args = ( [ top [ ( i1 + 1 ) % len ( top ) ] + ' Prof ' , bottom [ ( i2 + 1 ) % len ( bottom ) ] + ' Prof ' ] , ) )
2021-12-04 14:52:34 +00:00
2021-10-12 19:52:52 +00:00
update_process . start ( )
2021-12-04 14:52:34 +00:00
self . updateMultiple ( [ top [ i1 % len ( top ) ] + ' Prof ' , bottom [ i2 % len ( bottom ) ] + ' Prof ' ] )
2021-10-12 19:52:52 +00:00
2021-11-22 19:08:14 +00:00
image1 = self . openImage ( ' ./display_images/ ' + top [ i1 % len ( top ) ] + ' Prof.ppm ' )
2021-10-12 19:52:52 +00:00
image1 = image1 . convert ( ' RGB ' )
2021-11-22 19:08:14 +00:00
image2 = self . openImage ( ' ./display_images/ ' + bottom [ i2 % len ( bottom ) ] + ' Prof.ppm ' )
2021-10-12 19:52:52 +00:00
image2 = image2 . convert ( ' RGB ' )
2021-11-22 19:08:14 +00:00
settings1 = json . load ( open ( self . JSONs [ top [ i1 % len ( top ) ] ] ) )
2021-10-12 19:52:52 +00:00
delay_t1 = self . set_delay ( settings1 [ ' speed ' ] )
animation1 = settings1 [ ' animation ' ] . lower ( )
2021-11-22 19:08:14 +00:00
settings2 = json . load ( open ( self . JSONs [ bottom [ i2 % len ( bottom ) ] ] ) )
2022-03-07 16:47:07 +00:00
try :
delay_t2 = self . set_delay ( settings2 [ ' speed2 ' ] )
except :
delay_t2 = self . set_delay ( settings2 [ ' speed ' ] )
2021-10-12 19:52:52 +00:00
animation2 = settings2 [ ' animation ' ] . lower ( )
2021-12-21 17:21:04 +00:00
if animation1 == ' continuous ' :
2021-10-12 19:52:52 +00:00
offset_y1 = 0
offset_x1 = 128
else :
offset_y1 = - 16
offset_x1 = 0
2021-12-21 17:21:04 +00:00
if animation2 == ' continuous ' :
2021-10-12 19:52:52 +00:00
offset_y2 = 16
offset_x2 = 128
else :
offset_y2 = 32
offset_x2 = 0
frame_skip = int ( ( 1 / 15 ) / self . delay ) #controls how fast gifs run
self . frame = 0
img_width1 , img_height1 = image1 . size
img_width2 , img_height2 = image2 . size
kill = False
update_t1 = time . time ( )
update_t2 = time . time ( )
while True :
2022-02-22 20:45:42 +00:00
2021-10-12 19:52:52 +00:00
if offset_x1 < - ( img_width1 + 1 ) :
2021-11-22 19:08:14 +00:00
i1 + = 1
settings1 = json . load ( open ( self . JSONs [ top [ i1 % len ( top ) ] ] ) )
2021-10-12 19:52:52 +00:00
delay_t1 = self . set_delay ( settings1 [ ' speed ' ] )
animation1 = settings1 [ ' animation ' ] . lower ( )
2021-12-21 17:21:04 +00:00
if animation1 == ' continuous ' :
2021-10-12 19:52:52 +00:00
offset_y1 = 0
offset_x1 = 128
else :
offset_y1 = - 16
offset_x1 = 0
update_process . join ( )
2022-02-22 20:45:42 +00:00
update_process . terminate ( )
2021-12-04 14:52:34 +00:00
update_process = Process ( target = self . updateMultiple , args = ( [ top [ ( i1 + 1 ) % len ( top ) ] + ' Prof ' ] , ) )
2021-10-12 19:52:52 +00:00
update_process . start ( )
2021-11-22 19:08:14 +00:00
image1 = self . openImage ( ' ./display_images/ ' + top [ i1 % len ( top ) ] + ' Prof.ppm ' )
2021-10-12 19:52:52 +00:00
image1 = image1 . convert ( ' RGB ' )
img_width1 , img_height1 = image1 . size
if offset_x2 < - ( img_width2 + 1 ) :
2021-11-22 19:08:14 +00:00
i2 + = 1
settings2 = json . load ( open ( self . JSONs [ bottom [ ( i2 ) % len ( bottom ) ] ] ) )
2022-03-07 16:47:07 +00:00
try :
delay_t2 = self . set_delay ( settings2 [ ' speed2 ' ] )
except :
delay_t2 = self . set_delay ( settings2 [ ' speed ' ] )
2021-10-12 19:52:52 +00:00
animation2 = settings2 [ ' animation ' ] . lower ( )
2021-12-21 17:21:04 +00:00
if animation2 == ' continuous ' :
2021-10-12 19:52:52 +00:00
offset_y2 = 16
offset_x2 = 128
else :
offset_y2 = 32
offset_x2 = 0
update_process . join ( )
2022-02-22 20:45:42 +00:00
update_process . terminate ( )
2021-11-22 19:08:14 +00:00
update_process = Process ( target = self . updateMultiple , args = ( [ bottom [ i2 % len ( bottom ) ] + ' Prof ' ] , ) )
2021-10-12 19:52:52 +00:00
update_process . start ( )
2022-03-07 16:47:07 +00:00
image2 = self . openImage ( ' ./display_images/ ' + bottom [ i2 % len ( bottom ) ] + ' Prof.ppm ' )
2021-10-12 19:52:52 +00:00
image2 = image2 . convert ( ' RGB ' )
img_width2 , img_height2 = image2 . size
if time . time ( ) - update_t1 > delay_t1 :
update_t1 = time . time ( )
if offset_y1 < 0 :
offset_y1 + = 1
else :
offset_x1 - = 1
if time . time ( ) - update_t2 > delay_t2 :
update_t2 = time . time ( )
if offset_y2 > 16 :
offset_y2 - = 1
else :
offset_x2 - = 1
if kill : break
#image = image.convert('RGB')
self . double_buffer . SetImage ( image1 , offset_x1 , offset_y1 )
self . double_buffer . SetImage ( image2 , offset_x2 , offset_y2 )
buff = 0
# remove the ppixels behind the image, to stop trailing
self . double_buffer = self . matrix . SwapOnVSync ( self . double_buffer )
for y in range ( 16 ) :
self . matrix . SetPixel ( offset_x1 + img_width1 + 1 , y , 0 , 0 , 0 )
self . matrix . SetPixel ( offset_x1 + img_width1 , y , 0 , 0 , 0 )
for y in range ( 16 , 32 ) :
self . matrix . SetPixel ( offset_x2 + img_width2 + 1 , y , 0 , 0 , 0 )
self . matrix . SetPixel ( offset_x2 + img_width2 , y , 0 , 0 , 0 )
kill = self . checkKilled ( )
if kill : break
if kill : break
2022-02-22 20:45:42 +00:00
2021-08-03 18:44:16 +00:00
2021-07-27 17:33:02 +00:00
def scrollMultiple ( self , animation = ' down ' ) :
# scrolls trhough all functions with animation. Updates functions and remakes images when each function not being dispplayed
# read lines from csv
images = [ ]
delays = [ ]
kinds = [ ]
f = open ( ' csv/multiple.csv ' , ' r ' )
CSV = csv . reader ( f )
next ( CSV )
font = ImageFont . load ( " ./fonts/texgyre-27.pil " )
for row in CSV :
kind , content , delay = row
delays . append ( delay )
kinds . append ( kind )
2022-04-07 17:35:38 +00:00
2021-07-27 17:33:02 +00:00
if kind == ' text ' :
images . append ( self . textImage ( content , font , 255 , 255 , 0 , True , w_buff = 50 ) )
elif kind == ' image ' :
images . append ( self . openImage ( content ) . convert ( ' RGB ' ) )
elif kind == ' gif ' :
images . append ( self . openImage ( content ) )
f . close ( )
kill = False
i = 0 # keep track of which image we are displaying
self . double_buffer = self . matrix . CreateFrameCanvas ( )
while True :
image = images [ i % len ( images ) ]
delay = delays [ i % len ( images ) ]
kind = kinds [ i % len ( images ) ]
img_width , img_height = image . size
offset_x = 0
if animation == ' traditional ' :
offset_x = 128
elif animation == ' continuous ' :
offset_x = 0
elif animation in [ ' up ' , ' down ' ] :
offset_x = max ( 0 , 128 - img_width )
offset_y = 0
#first scroll image in from bottom
frame_skip = int ( ( 1 / 15 ) / self . delay ) #controls how fast gifs run
self . frame = 0
pause_frames = int ( float ( delay ) / self . delay )
if animation == ' up ' :
offset_y = 33
direction = - 1
2021-07-29 13:48:04 +00:00
kill = self . scrollImageY ( image , direction = direction , offset_x = offset_x , offset_y = offset_y , frame_skip = frame_skip , gif = kind == ' gif ' )
2021-07-27 17:33:02 +00:00
elif animation == ' down ' :
direction = 1
offset_y = - 33
2021-07-29 13:48:04 +00:00
kill = self . scrollImageY ( image , direction = direction , offset_x = offset_x , offset_y = offset_y , frame_skip = frame_skip , gif = kind == ' gif ' )
2021-07-27 17:33:02 +00:00
2021-07-28 18:55:55 +00:00
2021-07-27 17:33:02 +00:00
offset_y = 0
2021-07-29 13:48:04 +00:00
if kill : break
2021-07-27 17:33:02 +00:00
kill = self . scrollImage ( image , offset_x = offset_x , offset_y = offset_y , frame_skip = frame_skip , gif = kind == ' gif ' , pause_frames = pause_frames )
if kill : break
i + = 1
2022-01-15 11:11:32 +00:00
def textImage ( self , text , font , r = 255 , g = 255 , b = 255 , matrix_height = False , w_buff = 3 , h_buff = 3 , background = False , location = False ) :
2022-06-20 09:46:06 +00:00
#creates and returns a ppm image containing the text in the supplied font and colour
2021-05-23 09:34:06 +00:00
width , height = self . get_text_dimensions ( text , font )
2021-05-23 10:28:46 +00:00
if matrix_height :
height = 32
2021-06-27 11:07:47 +00:00
img = Image . new ( ' RGB ' , ( width + w_buff , height + h_buff ) )
2021-05-23 09:34:06 +00:00
d = ImageDraw . Draw ( img )
2021-10-11 19:16:04 +00:00
if background :
br , bg , bb = background
d . rectangle ( xy = ( 0 , 0 , width + w_buff , height + h_buff ) ,
fill = ( br , bg , bb ) )
#outline = (255, 255, 255),
#width = 0) #use outline and width to add a border
2022-01-15 11:11:32 +00:00
if location :
d . text ( location , text , fill = ( r , g , b ) , font = font )
else :
d . text ( ( 0 , 0 ) , text , fill = ( r , g , b ) , font = font )
2021-05-23 09:34:06 +00:00
return img
2021-05-21 13:24:37 +00:00
2021-05-23 09:34:06 +00:00
2021-10-11 19:16:04 +00:00
def getUserMessages ( self ) :
2022-06-20 09:46:06 +00:00
#displays the text entered in the webpage by the user.
2021-10-11 19:16:04 +00:00
f = open ( ' csv/message_settings.json ' , ' r ' )
all_settings = json . load ( f )
2021-05-14 10:31:14 +00:00
f . close ( )
2023-04-19 11:07:18 +00:00
2021-10-11 19:16:04 +00:00
colours = { ' Black ' : ( 0 , 0 , 0 ) ,
' White ' : ( 255 , 255 , 255 ) ,
' Red ' : ( 255 , 0 , 0 ) ,
' Green ' : ( 0 , 255 , 0 ) ,
2023-01-09 11:35:17 +00:00
' Dark Green ' : ( 0 , 100 , 0 ) ,
2021-10-11 19:16:04 +00:00
' Blue ' : ( 0 , 0 , 255 ) ,
2023-01-09 11:35:17 +00:00
' Purple ' : ( 145 , 0 , 255 ) ,
' Pink ' : ( 255 , 0 , 255 ) ,
2021-10-11 19:16:04 +00:00
' Yellow ' : ( 255 , 255 , 0 ) ,
2023-01-09 11:35:17 +00:00
' Orange ' : ( 255 , 130 , 0 ) ,
' Gold ' : ( 255 , 190 , 0 ) ,
' Gray ' : ( 100 , 100 , 100 ) ,
2021-10-11 19:16:04 +00:00
' Cyan ' : ( 0 , 255 , 255 ) }
2021-12-15 11:06:54 +00:00
imgs = [ ]
for ind , message in enumerate ( all_settings [ ' messages ' ] ) :
font = ImageFont . load ( " ./fonts/10x20.pil " )
2022-01-15 11:11:32 +00:00
location = ( 0 , 4 )
2021-12-15 11:06:54 +00:00
if message [ " size " ] == ' Large ' :
font = ImageFont . load ( " ./fonts/texgyre-27.pil " )
2022-01-15 11:11:32 +00:00
location = ( 0 , - 2 )
2021-12-15 11:06:54 +00:00
elif message [ " size " ] == ' Small ' :
font = ImageFont . load ( " ./fonts/6x13.pil " )
2022-01-15 11:11:32 +00:00
location = ( 0 , 7 )
2023-04-19 11:07:18 +00:00
2021-10-11 19:16:04 +00:00
r , g , b = colours [ message [ ' text_colour ' ] ]
background = colours [ message [ ' background_colour ' ] ]
2023-04-19 11:07:18 +00:00
decoded = message [ ' text ' ] . encode ( " ascii " , " ignore " )
message [ ' text ' ] = decoded . decode ( )
2022-01-15 11:11:32 +00:00
img = self . textImage ( message [ ' text ' ] , font , int ( r ) , int ( g ) , int ( b ) , True , w_buff = 5 , background = background , location = location )
2023-04-19 11:07:18 +00:00
2021-12-15 11:06:54 +00:00
if all_settings [ ' title ' ] and ind == 0 :
title_img = self . openImage ( ' feature_titles/message.png ' )
imgs . append ( self . stitchImage ( [ title_img , img ] ) )
else :
imgs . append ( img )
2021-10-11 19:16:04 +00:00
return imgs
2021-06-22 19:05:56 +00:00
2023-01-09 04:39:34 +00:00
def getUserMessagesProfessional ( self ) :
f = open ( ' csv/message_settings.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
if all_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/message.png ' )
image_list = [ title_img ]
else :
image_list = [ ]
colours = { ' Black ' : ( 0 , 0 , 0 ) ,
' White ' : ( 255 , 255 , 255 ) ,
' Red ' : ( 255 , 0 , 0 ) ,
' Green ' : ( 0 , 255 , 0 ) ,
' Dark Green ' : ( 0 , 100 , 0 ) ,
' Blue ' : ( 0 , 0 , 255 ) ,
' Purple ' : ( 145 , 0 , 255 ) ,
' Pink ' : ( 255 , 0 , 255 ) ,
' Yellow ' : ( 255 , 255 , 0 ) ,
' Orange ' : ( 255 , 130 , 0 ) ,
' Gold ' : ( 255 , 190 , 0 ) ,
' Gray ' : ( 100 , 100 , 100 ) ,
' Cyan ' : ( 0 , 255 , 255 ) }
blank = Image . new ( ' RGB ' , ( 0 , 16 ) )
for i , message in enumerate ( all_settings [ ' messages ' ] ) :
if ( i == len ( all_settings [ ' messages ' ] ) - 1 ) :
font = ImageFont . load ( " ./fonts/6x13.pil " )
location = ( 5 , 2 )
r , g , b = colours [ message [ ' text_colour ' ] ]
background = colours [ message [ ' background_colour ' ] ]
2023-04-19 11:08:12 +00:00
decoded = message [ ' text ' ] . encode ( " ascii " , " ignore " )
message [ ' text ' ] = decoded . decode ( )
2023-01-09 04:39:34 +00:00
msg_img = self . textImage ( message [ ' text ' ] , font , int ( r ) , int ( g ) , int ( b ) , True , w_buff = 11 , background = background , location = location )
img = Image . new ( ' RGB ' , ( msg_img . size [ 0 ] + 5 , 32 ) )
img . paste ( msg_img , ( 0 , 0 ) )
image_list . append ( img )
image_list . append ( blank )
else :
font = ImageFont . load ( " ./fonts/6x13.pil " )
location = ( 5 , 2 )
r , g , b = colours [ message [ ' text_colour ' ] ]
background = colours [ message [ ' background_colour ' ] ]
2023-04-19 11:19:01 +00:00
decoded = message [ ' text ' ] . encode ( " ascii " , " ignore " )
message [ ' text ' ] = decoded . decode ( )
2023-01-09 04:39:34 +00:00
msg_img = self . textImage ( message [ ' text ' ] , font , int ( r ) , int ( g ) , int ( b ) , True , w_buff = 11 , background = background , location = location )
img = Image . new ( ' RGB ' , ( msg_img . size [ 0 ] + 130 , 32 ) )
img . paste ( msg_img , ( 0 , 0 ) )
image_list . append ( img )
image_list . append ( blank )
return self . stitchImage ( image_list )
2022-01-20 18:40:52 +00:00
def displayGIF ( self , gif , delay = 0.5 , repeat = True ) :
2021-05-31 11:22:56 +00:00
# To iterate through the entire gif
i = 0
while True :
2021-05-21 10:20:39 +00:00
try :
2021-05-31 11:22:56 +00:00
gif . seek ( i )
except EOFError :
2022-01-20 18:40:52 +00:00
if not repeat : break
2021-05-31 11:22:56 +00:00
i = 0
gif . seek ( i )
# do something to im
self . setImage ( gif . convert ( ' RGB ' ) )
2022-01-20 18:40:52 +00:00
time . sleep ( delay )
2021-05-31 11:22:56 +00:00
i + = 1
try :
msg = getInput ( )
if msg == ' K ' :
gif . close ( )
self . resetMatrix ( )
2021-06-02 15:37:31 +00:00
2021-05-31 11:22:56 +00:00
break
self . process_msg ( msg )
except KeyboardInterrupt :
sys . stdout . flush ( )
pass
2021-05-21 13:24:37 +00:00
2021-05-31 11:22:56 +00:00
def scrollGIF ( self , gif , offset_x = 0 , offset_y = 0 ) :
# To iterate through the entire gif
i = 0
img_width , img_height = gif . size
while offset_x > - img_width :
offset_x - = 1
try :
gif . seek ( i )
except EOFError :
2021-07-08 18:42:21 +00:00
2021-05-21 10:20:39 +00:00
i = 0
2021-05-31 11:22:56 +00:00
gif . seek ( i )
# do something to im
self . setImage ( gif . convert ( ' RGB ' ) , offset_x = offset_x )
time . sleep ( self . delay )
if offset_x % 20 == 0 :
i + = 1
for x in range ( offset_x + img_width , 128 ) :
for y in range ( self . matrix . height ) :
self . matrix . SetPixel ( x , y , 0 , 0 , 0 )
2021-07-06 19:15:05 +00:00
kill = self . checkKilled ( )
if kill :
break
return kill
2021-06-03 20:56:25 +00:00
2021-04-26 19:27:34 +00:00
#Using change between min and day price give appropriate arrow
#and set the overall change colour
2021-07-05 18:51:40 +00:00
def getArrow ( self , CHANGE , professional = False ) :
2021-04-26 19:27:34 +00:00
self . greenORred
2021-07-08 18:42:21 +00:00
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' stocks ' )
2021-04-26 19:27:34 +00:00
if ( CHANGE > 0 ) :
2021-12-21 17:21:04 +00:00
Arrow = Image . open ( os . path . join ( logos_path , ' up-1.png ' ) )
2021-04-26 19:27:34 +00:00
self . greenORred = ( 0 , 255 , 0 )
2021-07-05 18:51:40 +00:00
else :
2021-12-21 17:21:04 +00:00
Arrow = Image . open ( os . path . join ( logos_path , ' down-1.png ' ) )
2021-07-05 18:51:40 +00:00
self . greenORred = ( 255 , 0 , 0 )
CHANGE = ( CHANGE * - 1 )
if professional :
w , h = Arrow . size
Arrow = Arrow . resize ( ( int ( w / 2 ) , int ( h / 2 ) ) )
2021-04-26 18:51:21 +00:00
return Arrow , CHANGE
2021-04-26 19:27:34 +00:00
def get_text_dimensions ( self , text_string , font ) :
2021-05-14 10:31:14 +00:00
canvas = Image . new ( ' RGB ' , ( 10000 , 100 ) )
2021-04-26 19:27:34 +00:00
draw = ImageDraw . Draw ( canvas )
monospace = font
text = text_string
white = ( 255 , 255 , 255 )
2021-05-23 10:28:46 +00:00
draw . text ( ( 0 , 0 ) , text , font = monospace , fill = white )
2021-04-26 19:27:34 +00:00
bbox = canvas . getbbox ( )
width = bbox [ 2 ] - bbox [ 0 ]
height = bbox [ 3 ] - bbox [ 1 ]
return width , height
#Draw Ticker, current and change onto one image
2021-10-28 18:44:44 +00:00
def textToImage ( self , TICKER , CURRENT , ARROW , percent_change = False , point_change = False , font = ImageFont . load ( " ./fonts/10x20.pil " ) ) :
2022-02-22 21:31:04 +00:00
w1 , text_height = self . get_text_dimensions ( TICKER , font )
w2 , text_height = self . get_text_dimensions ( CURRENT , font )
2021-11-16 19:11:32 +00:00
text_width_current = max ( w1 , w2 )
2021-06-22 19:05:56 +00:00
2022-02-22 21:31:04 +00:00
img = Image . new ( ' RGB ' , ( text_width_current + 1000 , 32 ) )
2021-04-26 19:27:34 +00:00
d = ImageDraw . Draw ( img )
2021-04-28 19:39:30 +00:00
d . text ( ( 4 , 0 ) , TICKER , fill = ( 255 , 255 , 255 ) , font = font )
2021-05-03 10:39:31 +00:00
d . text ( ( 4 , 16 ) , CURRENT , fill = self . greenORred , font = font )
2021-04-26 19:27:34 +00:00
2021-10-28 18:44:44 +00:00
if percent_change :
2022-02-22 21:31:04 +00:00
d . text ( ( ( w1 + 7 ) , 14 - text_height ) , percent_change , fill = self . greenORred , font = font )
w , h = self . get_text_dimensions ( percent_change , font )
w1 + = 7 + w
2021-11-16 19:11:32 +00:00
2022-02-22 21:31:04 +00:00
if point_change :
img . paste ( ARROW , ( ( w2 + 9 ) , 18 ) )
d . text ( ( ( w2 + 29 ) , 16 ) , point_change , fill = self . greenORred , font = font )
w , h = self . get_text_dimensions ( point_change , font )
w2 + = 29 + w
2021-11-16 19:11:32 +00:00
2021-04-26 19:27:34 +00:00
2023-08-07 10:03:42 +00:00
img = img . crop ( ( 0 , 0 , max ( w1 , w2 ) + 8 , 32 ) )
2021-04-26 19:27:34 +00:00
return img
2023-07-20 07:29:45 +00:00
2021-07-05 18:51:40 +00:00
def textToImageProf ( self , TICKER , CURRENT , CHANGE , ARROW , font ) :
2023-07-20 07:29:45 +00:00
if ' E-MINI ' in TICKER :
w1 , text_height = self . get_text_dimensions ( TICKER , font )
w2 , text_height = self . get_text_dimensions ( CURRENT , font )
text_width_current = max ( w1 , w2 )
2021-07-05 18:51:40 +00:00
2023-07-20 07:29:45 +00:00
img = Image . new ( ' RGB ' , ( text_width_current + 100 , 32 ) )
d = ImageDraw . Draw ( img )
2021-07-05 18:51:40 +00:00
2023-07-20 07:29:45 +00:00
d . text ( ( 4 , 0 ) , TICKER , fill = ( 255 , 255 , 255 ) , font = font )
d . text ( ( 4 , 8 ) , CURRENT , fill = self . greenORred , font = font )
2021-07-05 18:51:40 +00:00
2023-07-20 07:29:45 +00:00
img . paste ( ARROW , ( ( w2 + 7 ) , 10 ) )
d . text ( ( ( w2 + 18 ) , 8 ) , CHANGE , fill = self . greenORred , font = font )
2021-07-05 18:51:40 +00:00
2023-07-20 07:29:45 +00:00
text_width_change , text_height = self . get_text_dimensions ( CHANGE , font )
newWidth = max ( w2 + text_width_change , text_width_current ) + 15
img = img . crop ( ( 0 , 0 , newWidth , 32 ) )
2021-07-05 18:51:40 +00:00
2023-07-20 07:29:45 +00:00
else :
text_width_current , text_height = self . get_text_dimensions ( CURRENT , font )
img = Image . new ( ' RGB ' , ( text_width_current + 100 , 32 ) )
d = ImageDraw . Draw ( img )
d . text ( ( 4 , 0 ) , TICKER , fill = ( 255 , 255 , 255 ) , font = font )
d . text ( ( 4 , 8 ) , CURRENT , fill = self . greenORred , font = font )
img . paste ( ARROW , ( ( text_width_current + 7 ) , 10 ) )
d . text ( ( ( text_width_current + 18 ) , 8 ) , CHANGE , fill = self . greenORred , font = font )
text_width_change , text_height = self . get_text_dimensions ( CHANGE , font )
newWidth = text_width_current + text_width_change + 30
img = img . crop ( ( 0 , 0 , newWidth , 32 ) )
2021-07-05 18:51:40 +00:00
return img
2021-04-26 19:27:34 +00:00
2023-07-20 07:29:45 +00:00
2021-04-26 19:27:34 +00:00
#Stitch the logo & prices picture into one image
2021-05-03 10:39:31 +00:00
def stitchImage ( self , image_list ) :
widths , heights = zip ( * ( i . size for i in image_list ) )
2021-04-26 19:27:34 +00:00
total_width = sum ( widths )
max_height = max ( heights )
new_im = Image . new ( ' RGB ' , ( total_width , max_height ) )
x_offset = 0
2021-05-03 10:39:31 +00:00
for im in image_list :
2021-04-26 19:27:34 +00:00
new_im . paste ( im , ( x_offset , 0 ) )
x_offset + = im . size [ 0 ]
2021-05-14 10:31:14 +00:00
2021-04-26 19:27:34 +00:00
return new_im
2021-05-01 10:39:20 +00:00
def resetMatrix ( self ) :
for x in range ( self . matrix . width ) :
for y in range ( self . matrix . height ) :
self . matrix . SetPixel ( x , y , 0 , 0 , 0 )
2021-06-22 19:05:56 +00:00
def getCryptoImage ( self ) :
2021-04-28 19:39:30 +00:00
2021-09-30 19:17:53 +00:00
f = open ( ' csv/crypto_settings.json ' , ' r ' )
all_crypto_settings = json . load ( f )
f . close ( )
2021-06-22 19:05:56 +00:00
2021-09-30 19:17:53 +00:00
if all_crypto_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/crypto.png ' )
image_list = [ title_img ]
image_list . append ( self . blank )
2021-10-04 20:39:22 +00:00
else :
image_list = [ ]
2021-09-30 19:17:53 +00:00
2023-03-17 10:16:40 +00:00
if all_crypto_settings [ ' chart ' ] :
try :
f = open ( ' csv/portfolio_crypto_settings.json ' , ' r ' )
portfolio_settings = json . load ( f ) [ ' symbols ' ]
f . close ( )
except :
pass
2021-09-30 19:17:53 +00:00
coin_info = all_crypto_settings [ ' symbols ' ]
coin_bases = list ( coin_info . keys ( ) )
for i , cb in enumerate ( coin_bases ) :
2021-12-14 15:38:09 +00:00
try :
ticker , base = cb . split ( ' , ' )
current = float ( coin_info [ cb ] [ " current " ] )
2022-02-22 20:10:42 +00:00
point_change = float ( coin_info [ cb ] [ " 24hr_change " ] )
2022-06-12 09:28:48 +00:00
point_change2 = abs ( point_change )
point_changefinal = ' {0:.10f} ' . format ( point_change2 ) . rstrip ( " 0 " )
current_final = ' {0:.10f} ' . format ( current ) . rstrip ( " 0 " )
2022-02-22 20:10:42 +00:00
percent_change = float ( coin_info [ cb ] [ " percent_change " ] )
2021-12-14 15:38:09 +00:00
2022-02-22 20:10:42 +00:00
arrow , change = self . getArrow ( point_change )
2022-03-06 18:36:03 +00:00
percent_change = ' %.2f ' % abs ( percent_change ) + ' % '
2023-05-03 04:42:05 +00:00
num3 = point_changefinal . split ( ' . ' )
if len ( num3 [ 1 ] ) < = 1 :
point_change = ' %.2f ' % float ( point_changefinal )
else :
point_change = str ( point_changefinal )
num2 = current_final . split ( ' . ' )
if len ( num2 [ 1 ] ) < = 1 :
current = ' %.2f ' % float ( current_final )
else :
current = str ( current_final )
2021-12-14 15:38:09 +00:00
if not all_crypto_settings [ ' percent ' ] :
percent_change = False
if not all_crypto_settings [ ' point ' ] :
point_change = False
2021-10-18 17:38:24 +00:00
2021-12-14 15:38:09 +00:00
midFrame = self . textToImage ( ticker + ' ( ' + base + ' ) ' , current , arrow , percent_change , point_change ) #IMAGE THE TEXT
2021-10-18 17:38:24 +00:00
2021-12-14 15:38:09 +00:00
if all_crypto_settings [ ' logos ' ] :
try :
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' crypto ' )
logo = self . openImage ( os . path . join ( logos_path , ticker + ' .png ' ) )
stitchedStock = self . stitchImage ( [ logo , midFrame ] )
2022-02-22 20:34:04 +00:00
except Exception as e :
2021-12-14 15:38:09 +00:00
stitchedStock = midFrame
else :
stitchedStock = midFrame
2023-08-07 10:22:48 +00:00
try :
if all_crypto_settings [ ' lohivol ' ] :
font = ImageFont . load ( " ./fonts/5x8.pil " )
try :
day_low1 = ' {0:.10f} ' . format ( float ( coin_info [ cb ] [ ' day_low ' ] ) ) . rstrip ( " 0 " )
day_high1 = ' {0:.10f} ' . format ( float ( coin_info [ cb ] [ ' day_high ' ] ) ) . rstrip ( " 0 " )
day_low2 = day_low1 . split ( ' . ' )
day_high2 = day_high1 . split ( ' . ' )
if len ( day_low2 [ 1 ] ) < = 1 :
day_low = ' %.2f ' % float ( day_low1 )
else :
day_low = day_low1
if len ( day_high2 [ 1 ] ) < = 1 :
day_high = ' %.2f ' % float ( day_high1 )
else :
day_high = day_high1
volume = coin_info [ cb ] [ ' volume ' ]
daylow_img = self . textImage ( day_low , font , r = 0 , g = 255 , b = 0 )
daylow_t_img = self . textImage ( ' Lo ' , font , r = 255 , g = 255 , b = 255 )
dayhi_img = self . textImage ( day_high , font , r = 0 , g = 255 , b = 0 )
dayhi_t_img = self . textImage ( ' Hi ' , font , r = 255 , g = 255 , b = 255 )
vol_img = self . textImage ( volume , font , r = 0 , g = 255 , b = 0 )
vol_t_img = self . textImage ( ' Vol ' , font , r = 255 , g = 255 , b = 255 )
lohivol_img = Image . new ( ' RGB ' , ( max ( daylow_img . size [ 0 ] + daylow_t_img . size [ 0 ] , dayhi_img . size [ 0 ] + dayhi_t_img . size [ 0 ] ,
vol_img . size [ 0 ] + vol_t_img . size [ 0 ] ) + 5 , 32 ) )
lohivol_img . paste ( daylow_t_img , ( 0 , 3 ) )
lohivol_img . paste ( daylow_img , ( daylow_t_img . size [ 0 ] , 3 ) )
lohivol_img . paste ( dayhi_t_img , ( 0 , 12 ) )
lohivol_img . paste ( dayhi_img , ( dayhi_t_img . size [ 0 ] , 12 ) )
lohivol_img . paste ( vol_t_img , ( 0 , 21 ) )
lohivol_img . paste ( vol_img , ( vol_t_img . size [ 0 ] , 21 ) )
except :
pass
except :
pass
2023-03-17 10:16:40 +00:00
try :
if all_crypto_settings [ ' chart ' ] and ( cb in portfolio_settings ) : #IF USER INPUTTED PORTFOLIO SETTINGS, DISPLAY PORTFOLIO INFO
try :
cost = portfolio_settings [ cb ] [ ' cost ' ]
day = portfolio_settings [ cb ] [ ' day ' ]
2023-07-11 08:04:17 +00:00
day_start = datetime . strptime ( str ( day ) , " % Y- % m- %d " )
day_today = datetime . strptime ( datetime . now ( pytz . utc ) . strftime ( " % Y- % m- %d " ) , " % Y- % m- %d " )
day = str ( ( day_today - day_start ) . days )
2023-03-17 10:16:40 +00:00
shares = portfolio_settings [ cb ] [ ' shares ' ]
original_value = float ( cost ) * float ( shares )
2023-03-17 10:40:32 +00:00
new_value = float ( coin_info [ cb ] [ ' current ' ] ) * float ( shares )
value_day_change_percent = ( ( float ( coin_info [ cb ] [ ' percent_change ' ] ) / 100 ) * new_value )
2023-03-17 10:16:40 +00:00
font = ImageFont . load ( " ./fonts/5x8.pil " )
cost_img = self . textImage ( ' Cost ' , font , r = 255 , g = 255 , b = 255 )
cost2_img = self . textImage ( cost , font , r = 0 , g = 255 , b = 0 )
shares_img = self . textImage ( ' Shares ' , font , r = 255 , g = 255 , b = 255 )
shares2_img = self . textImage ( shares , font , r = 0 , g = 255 , b = 0 )
pnlchange = new_value - original_value
pnlpercent = ( ( new_value - original_value ) / original_value ) * 100
pnlpercent_img = self . textImage ( ' P/L % ' , font , r = 255 , g = 255 , b = 255 )
if pnlpercent > = 0 :
pnlpercent2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlpercent ) ) + ' % ' , font , r = 0 , g = 255 , b = 0 )
else :
pnlpercent2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlpercent ) ) + ' % ' , font , r = 255 , g = 0 , b = 0 )
daypercent_img = self . textImage ( ' Day % ' , font , r = 255 , g = 255 , b = 255 )
2023-03-17 10:40:32 +00:00
if float ( coin_info [ cb ] [ ' percent_change ' ] ) > = 0 :
daypercent2_img = self . textImage ( str ( ' %.2f ' % abs ( float ( coin_info [ cb ] [ ' percent_change ' ] ) ) ) + ' % ' , font , r = 0 , g = 255 , b = 0 )
2023-03-17 10:16:40 +00:00
else :
2023-03-17 10:40:32 +00:00
daypercent2_img = self . textImage ( str ( ' %.2f ' % abs ( float ( coin_info [ cb ] [ ' percent_change ' ] ) ) ) + ' % ' , font , r = 255 , g = 0 , b = 0 )
2023-03-17 10:16:40 +00:00
days_img = self . textImage ( ' Days ' , font , r = 255 , g = 255 , b = 255 )
days2_img = self . textImage ( day , font , r = 0 , g = 255 , b = 0 )
value_img = self . textImage ( ' Value ' , font , r = 255 , g = 255 , b = 255 )
value2_img = self . textImage ( str ( ' %.2f ' % abs ( original_value ) ) , font , r = 0 , g = 255 , b = 0 )
pnlchange_img = self . textImage ( ' P/L$ ' , font , r = 255 , g = 255 , b = 255 )
if pnlchange > = 0 :
pnlchange2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlchange ) ) , font , r = 0 , g = 255 , b = 0 )
else :
pnlchange2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlchange ) ) , font , r = 255 , g = 0 , b = 0 )
daychange_img = self . textImage ( ' Day$ ' , font , r = 255 , g = 255 , b = 255 )
if value_day_change_percent > = 0 :
daychange2_img = self . textImage ( str ( ' %.2f ' % abs ( value_day_change_percent ) ) , font , r = 0 , g = 255 , b = 0 )
else :
daychange2_img = self . textImage ( str ( ' %.2f ' % abs ( value_day_change_percent ) ) , font , r = 255 , g = 0 , b = 0 )
x_offset = 0
img = Image . new ( ' RGB ' , ( max ( cost_img . size [ 0 ] , cost2_img . size [ 0 ] , days_img . size [ 0 ] , days2_img . size [ 0 ] ) + 7 +
max ( shares_img . size [ 0 ] , shares2_img . size [ 0 ] , value2_img . size [ 0 ] , value_img . size [ 0 ] ) + 7 +
max ( pnlpercent_img . size [ 0 ] , pnlpercent2_img . size [ 0 ] , pnlchange_img . size [ 0 ] , pnlchange2_img . size [ 0 ] ) + 7 +
max ( daypercent_img . size [ 0 ] , daypercent2_img . size [ 0 ] , daychange_img . size [ 0 ] , daychange2_img . size [ 0 ] ) + 15 , 32 ) )
img . paste ( cost_img , ( x_offset , 0 ) )
img . paste ( cost2_img , ( x_offset , 8 ) )
img . paste ( days_img , ( x_offset , 16 ) )
img . paste ( days2_img , ( x_offset , 24 ) )
x_offset + = max ( cost_img . size [ 0 ] , cost2_img . size [ 0 ] , days_img . size [ 0 ] , days2_img . size [ 0 ] ) + 7
img . paste ( shares_img , ( x_offset , 0 ) )
img . paste ( shares2_img , ( x_offset , 8 ) )
img . paste ( value_img , ( x_offset , 16 ) )
img . paste ( value2_img , ( x_offset , 24 ) )
x_offset + = max ( shares_img . size [ 0 ] , shares2_img . size [ 0 ] , value2_img . size [ 0 ] , value_img . size [ 0 ] ) + 7
img . paste ( pnlpercent_img , ( x_offset , 0 ) )
img . paste ( pnlpercent2_img , ( x_offset , 8 ) )
img . paste ( pnlchange_img , ( x_offset , 16 ) )
img . paste ( pnlchange2_img , ( x_offset , 24 ) )
x_offset + = max ( pnlpercent_img . size [ 0 ] , pnlpercent2_img . size [ 0 ] , pnlchange_img . size [ 0 ] , pnlchange2_img . size [ 0 ] ) + 7
img . paste ( daypercent_img , ( x_offset , 0 ) )
img . paste ( daypercent2_img , ( x_offset , 8 ) )
img . paste ( daychange_img , ( x_offset , 16 ) )
img . paste ( daychange2_img , ( x_offset , 24 ) )
except :
pass
except :
pass
2021-12-14 15:38:09 +00:00
image_list . append ( stitchedStock )
2023-08-07 10:22:48 +00:00
try :
if all_crypto_settings [ ' lohivol ' ] :
try :
image_list . append ( lohivol_img )
except :
pass
except :
pass
2023-03-17 10:16:40 +00:00
try :
if all_crypto_settings [ ' chart ' ] and ( cb in portfolio_settings ) :
try :
image_list . append ( img )
except :
pass
except :
pass
2021-12-14 15:38:09 +00:00
image_list . append ( self . blank )
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
2021-07-14 17:02:54 +00:00
2021-06-22 19:05:56 +00:00
finalDisplayImage = self . stitchImage ( image_list )
return finalDisplayImage
2023-03-17 10:16:40 +00:00
2021-07-05 18:51:40 +00:00
def getCryptoProfessional ( self ) :
2023-03-22 08:56:30 +00:00
2021-07-22 18:08:43 +00:00
self . blank = Image . new ( ' RGB ' , ( 0 , 16 ) )
2021-07-05 18:51:40 +00:00
2021-10-05 19:29:05 +00:00
f = open ( ' csv/crypto_settings.json ' , ' r ' )
all_crypto_settings = json . load ( f )
f . close ( )
2021-07-22 18:08:43 +00:00
2021-10-05 19:29:05 +00:00
if all_crypto_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/crypto.png ' )
image_list = [ title_img ]
image_list . append ( self . blank )
else :
image_list = [ ]
2023-03-22 08:56:30 +00:00
if all_crypto_settings [ ' chart ' ] :
try :
f = open ( ' csv/portfolio_crypto_settings.json ' , ' r ' )
portfolio_settings = json . load ( f ) [ ' symbols ' ]
f . close ( )
except :
pass
2021-10-05 19:29:05 +00:00
coin_info = all_crypto_settings [ ' symbols ' ]
coin_bases = list ( coin_info . keys ( ) )
for i , cb in enumerate ( coin_bases ) :
2021-12-14 15:38:09 +00:00
try :
ticker , base = cb . split ( ' , ' )
2022-02-22 12:41:30 +00:00
current = float ( coin_info [ cb ] [ " current " ] )
2022-06-12 09:28:48 +00:00
current_final = ' {0:.10f} ' . format ( current ) . rstrip ( " 0 " )
2022-02-22 12:41:30 +00:00
change = float ( coin_info [ cb ] [ " 24hr_change " ] )
2022-06-12 09:28:48 +00:00
change2 = abs ( change )
changefinal = ' {0:.10f} ' . format ( change2 ) . rstrip ( " 0 " )
2021-12-14 15:38:09 +00:00
arrow , change = self . getArrow ( change , professional = True )
2022-02-22 20:10:42 +00:00
if all_crypto_settings [ " percent " ] :
2021-12-14 15:38:09 +00:00
# convert percent to points
2022-03-06 18:36:03 +00:00
change = ' %.2f ' % abs ( float ( coin_info [ cb ] [ ' percent_change ' ] ) ) + ' % '
2021-12-14 15:38:09 +00:00
else :
2023-05-03 04:42:05 +00:00
num3 = changefinal . split ( ' . ' )
if len ( num3 [ 1 ] ) < = 1 :
change = ' %.2f ' % float ( changefinal )
else :
change = str ( changefinal )
num2 = current_final . split ( ' . ' )
if len ( num2 [ 1 ] ) < = 1 :
current = ' %.2f ' % float ( current_final )
else :
current = str ( current_final )
2021-12-14 15:38:09 +00:00
midFrame = self . textToImageProf ( ticker + ' ( ' + base + ' ) ' , current , change , arrow , font = ImageFont . load ( " ./fonts/6x10.pil " ) ) #IMAGE THE TEXT
if all_crypto_settings [ ' logos ' ] :
try :
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' crypto ' )
logo = self . openImage ( os . path . join ( logos_path , ticker + ' .png ' ) )
w , h = logo . size
logo = logo . resize ( ( int ( w / 2 ) , int ( h / 2 ) ) )
stitchedStock = self . stitchImage ( [ logo , midFrame ] )
except :
stitchedStock = midFrame
else :
stitchedStock = midFrame
2023-08-07 15:16:23 +00:00
try :
if all_crypto_settings [ ' lohivol ' ] :
font = ImageFont . load ( " ./fonts/4x6.pil " )
try :
day_low1 = ' {0:.10f} ' . format ( float ( coin_info [ cb ] [ ' day_low ' ] ) ) . rstrip ( " 0 " )
day_high1 = ' {0:.10f} ' . format ( float ( coin_info [ cb ] [ ' day_high ' ] ) ) . rstrip ( " 0 " )
day_low2 = day_low1 . split ( ' . ' )
day_high2 = day_high1 . split ( ' . ' )
if len ( day_low2 [ 1 ] ) < = 1 :
day_low = ' %.2f ' % float ( day_low1 )
else :
day_low = day_low1
if len ( day_high2 [ 1 ] ) < = 1 :
day_high = ' %.2f ' % float ( day_high1 )
else :
day_high = day_high1
volume = coin_info [ cb ] [ ' volume ' ]
daylow_img = self . textImage ( day_low , font , r = 0 , g = 255 , b = 0 )
daylow_t_img = self . textImage ( ' Lo ' , font , r = 255 , g = 255 , b = 255 )
dayhi_img = self . textImage ( day_high , font , r = 0 , g = 255 , b = 0 )
dayhi_t_img = self . textImage ( ' Hi ' , font , r = 255 , g = 255 , b = 255 )
vol_img = self . textImage ( volume , font , r = 0 , g = 255 , b = 0 )
vol_t_img = self . textImage ( ' Vol ' , font , r = 255 , g = 255 , b = 255 )
lohivol_img = Image . new ( ' RGB ' , ( max ( daylow_t_img . size [ 0 ] + daylow_img . size [ 0 ] , dayhi_t_img . size [ 0 ] + dayhi_img . size [ 0 ] ) + 2 + vol_t_img . size [ 0 ] + vol_img . size [ 0 ] + 8 , 16 ) )
lohivol_img . paste ( daylow_t_img , ( 0 , 3 ) )
lohivol_img . paste ( daylow_img , ( daylow_t_img . size [ 0 ] , 3 ) )
lohivol_img . paste ( dayhi_t_img , ( 0 , 9 ) )
lohivol_img . paste ( dayhi_img , ( dayhi_t_img . size [ 0 ] , 9 ) )
lohivol_img . paste ( vol_t_img , ( max ( daylow_t_img . size [ 0 ] + daylow_img . size [ 0 ] , dayhi_t_img . size [ 0 ] + dayhi_img . size [ 0 ] ) + 2 , 3 ) )
lohivol_img . paste ( vol_img , ( max ( daylow_t_img . size [ 0 ] + daylow_img . size [ 0 ] , dayhi_t_img . size [ 0 ] + dayhi_img . size [ 0 ] ) + 2 + vol_t_img . size [ 0 ] , 3 ) )
except :
pass
except :
pass
2023-03-22 08:56:30 +00:00
try :
if all_crypto_settings [ ' chart ' ] and ( cb in portfolio_settings ) : #IF USER INPUTTED PORTFOLIO SETTINGS, DISPLAY PORTFOLIO INFO
try :
cost = portfolio_settings [ cb ] [ ' cost ' ]
day = portfolio_settings [ cb ] [ ' day ' ]
2023-07-11 08:04:17 +00:00
day_start = datetime . strptime ( str ( day ) , " % Y- % m- %d " )
day_today = datetime . strptime ( datetime . now ( pytz . utc ) . strftime ( " % Y- % m- %d " ) , " % Y- % m- %d " )
day = str ( ( day_today - day_start ) . days )
2023-03-22 08:56:30 +00:00
shares = portfolio_settings [ cb ] [ ' shares ' ]
original_value = float ( cost ) * float ( shares )
new_value = float ( coin_info [ cb ] [ ' current ' ] ) * float ( shares )
value_day_change_percent = ( ( float ( coin_info [ cb ] [ ' percent_change ' ] ) / 100 ) * new_value )
font = ImageFont . load ( " ./fonts/5x8.pil " )
cost_img = self . textImage ( ' Cost ' , font , r = 255 , g = 255 , b = 255 )
cost2_img = self . textImage ( cost , font , r = 0 , g = 255 , b = 0 )
shares_img = self . textImage ( ' Shares ' , font , r = 255 , g = 255 , b = 255 )
shares2_img = self . textImage ( shares , font , r = 0 , g = 255 , b = 0 )
pnlchange = new_value - original_value
pnlpercent = ( ( new_value - original_value ) / original_value ) * 100
pnlpercent_img = self . textImage ( ' P/L % ' , font , r = 255 , g = 255 , b = 255 )
if pnlpercent > = 0 :
pnlpercent2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlpercent ) ) + ' % ' , font , r = 0 , g = 255 , b = 0 )
else :
pnlpercent2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlpercent ) ) + ' % ' , font , r = 255 , g = 0 , b = 0 )
daypercent_img = self . textImage ( ' Day % ' , font , r = 255 , g = 255 , b = 255 )
if float ( coin_info [ cb ] [ ' percent_change ' ] ) > = 0 :
daypercent2_img = self . textImage ( str ( ' %.2f ' % abs ( float ( coin_info [ cb ] [ ' percent_change ' ] ) ) ) + ' % ' , font , r = 0 , g = 255 , b = 0 )
else :
daypercent2_img = self . textImage ( str ( ' %.2f ' % abs ( float ( coin_info [ cb ] [ ' percent_change ' ] ) ) ) + ' % ' , font , r = 255 , g = 0 , b = 0 )
days_img = self . textImage ( ' Days ' , font , r = 255 , g = 255 , b = 255 )
days2_img = self . textImage ( day , font , r = 0 , g = 255 , b = 0 )
value_img = self . textImage ( ' Value ' , font , r = 255 , g = 255 , b = 255 )
value2_img = self . textImage ( str ( ' %.2f ' % abs ( original_value ) ) , font , r = 0 , g = 255 , b = 0 )
pnlchange_img = self . textImage ( ' P/L$ ' , font , r = 255 , g = 255 , b = 255 )
if pnlchange > = 0 :
pnlchange2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlchange ) ) , font , r = 0 , g = 255 , b = 0 )
else :
pnlchange2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlchange ) ) , font , r = 255 , g = 0 , b = 0 )
daychange_img = self . textImage ( ' Day$ ' , font , r = 255 , g = 255 , b = 255 )
if value_day_change_percent > = 0 :
daychange2_img = self . textImage ( str ( ' %.2f ' % abs ( value_day_change_percent ) ) , font , r = 0 , g = 255 , b = 0 )
else :
daychange2_img = self . textImage ( str ( ' %.2f ' % abs ( value_day_change_percent ) ) , font , r = 255 , g = 0 , b = 0 )
x_offset = 0
img = Image . new ( ' RGB ' , ( max ( cost_img . size [ 0 ] , cost2_img . size [ 0 ] ) + 5 + max ( days_img . size [ 0 ] , days2_img . size [ 0 ] ) + 5 +
max ( shares_img . size [ 0 ] , shares2_img . size [ 0 ] ) + 5 + max ( value2_img . size [ 0 ] , value_img . size [ 0 ] ) + 5 +
max ( pnlpercent_img . size [ 0 ] , pnlpercent2_img . size [ 0 ] ) + 5 + max ( pnlchange_img . size [ 0 ] , pnlchange2_img . size [ 0 ] ) + 5 +
max ( daypercent_img . size [ 0 ] , daypercent2_img . size [ 0 ] ) + 5 + max ( daychange_img . size [ 0 ] , daychange2_img . size [ 0 ] ) + 10 , 16 ) )
img . paste ( cost_img , ( x_offset , 1 ) )
img . paste ( cost2_img , ( x_offset , 9 ) )
x_offset + = max ( cost_img . size [ 0 ] , cost2_img . size [ 0 ] ) + 4
img . paste ( days_img , ( x_offset , 1 ) )
img . paste ( days2_img , ( x_offset , 9 ) )
x_offset + = max ( days_img . size [ 0 ] , days2_img . size [ 0 ] ) + 4
img . paste ( shares_img , ( x_offset , 1 ) )
img . paste ( shares2_img , ( x_offset , 9 ) )
x_offset + = max ( shares_img . size [ 0 ] , shares2_img . size [ 0 ] ) + 4
img . paste ( value_img , ( x_offset , 1 ) )
img . paste ( value2_img , ( x_offset , 9 ) )
x_offset + = max ( value2_img . size [ 0 ] , value_img . size [ 0 ] ) + 4
img . paste ( pnlpercent_img , ( x_offset , 1 ) )
img . paste ( pnlpercent2_img , ( x_offset , 9 ) )
x_offset + = max ( pnlpercent_img . size [ 0 ] , pnlpercent2_img . size [ 0 ] ) + 4
img . paste ( pnlchange_img , ( x_offset , 1 ) )
img . paste ( pnlchange2_img , ( x_offset , 9 ) )
x_offset + = max ( pnlchange_img . size [ 0 ] , pnlchange2_img . size [ 0 ] ) + 4
img . paste ( daypercent_img , ( x_offset , 1 ) )
img . paste ( daypercent2_img , ( x_offset , 9 ) )
x_offset + = max ( daypercent_img . size [ 0 ] , daypercent2_img . size [ 0 ] ) + 4
img . paste ( daychange_img , ( x_offset , 1 ) )
img . paste ( daychange2_img , ( x_offset , 9 ) )
except :
pass
except :
pass
2021-12-14 15:38:09 +00:00
image_list . append ( stitchedStock )
2023-08-07 15:21:50 +00:00
try :
if all_crypto_settings [ ' lohivol ' ] :
try :
image_list . append ( lohivol_img )
except :
pass
except :
pass
2023-03-22 08:56:30 +00:00
try :
if all_crypto_settings [ ' chart ' ] and ( cb in portfolio_settings ) :
try :
image_list . append ( img )
except :
pass
except :
pass
2021-12-14 15:38:09 +00:00
image_list . append ( self . blank )
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
2021-10-18 17:38:24 +00:00
2021-07-05 18:51:40 +00:00
finalDisplayImage = self . stitchImage ( image_list )
self . blank = Image . new ( ' RGB ' , ( 10 , 32 ) )
return finalDisplayImage
2022-06-12 17:39:07 +00:00
2022-10-06 08:33:52 +00:00
def getIndicesImage ( self ) :
f = open ( ' csv/indices_settings.json ' , ' r ' )
all_indices_settings = json . load ( f )
f . close ( )
if all_indices_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/indices.png ' )
image_list = [ title_img ]
image_list . append ( self . blank )
else :
image_list = [ ]
index_info = all_indices_settings [ ' symbols ' ]
symbols = list ( index_info . keys ( ) )
for i , symbol in enumerate ( symbols ) :
try :
info = index_info [ symbol ]
change = float ( info [ ' point_change ' ] ) #TEXT
symb = symbol
ticker = info [ ' name ' ] #TEXT
arrow , change = self . getArrow ( change )
point_change = ' %.2f ' % abs ( change )
percent_change = ' %.2f ' % abs ( float ( info [ ' percent_change ' ] ) ) + ' % '
# point_change2 = abs(change)
# point_changefinal = '{0:.10f}'.format(point_change2).rstrip("0")
# point_change = str(point_changefinal)
current = ' %.2f ' % float ( info [ ' current ' ] )
# current_final = '{0:.10f}'.format(current).rstrip("0")
# current = str(current_final)
if not all_indices_settings [ ' percent ' ] :
percent_change = False
if not all_indices_settings [ ' point ' ] :
point_change = False
midFrame = self . textToImage ( ticker , current , arrow , percent_change , point_change ) #IMAGE THE TEXT
if all_indices_settings [ ' logos ' ] :
try :
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' indices ' )
logo = self . openImage ( os . path . join ( logos_path , symb + ' .png ' ) )
stitchedIndex = self . stitchImage ( [ logo , midFrame ] )
except Exception as e :
stitchedIndex = midFrame
else :
stitchedIndex = midFrame
image_list . append ( stitchedIndex )
image_list . append ( self . blank )
except Exception as e :
pass
finalDisplayImage = self . stitchImage ( image_list )
return finalDisplayImage
def getIndicesProfessional ( self ) :
self . blank = Image . new ( ' RGB ' , ( 0 , 16 ) )
f = open ( ' csv/indices_settings.json ' , ' r ' )
all_indices_settings = json . load ( f )
f . close ( )
if all_indices_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/indices.png ' )
image_list = [ title_img , Image . new ( ' RGB ' , ( 5 , 16 ) ) ]
image_list . append ( self . blank )
else :
image_list = [ ]
index_info = all_indices_settings [ ' symbols ' ]
symbols = list ( index_info . keys ( ) )
for i , symbol in enumerate ( symbols ) :
try :
info = index_info [ symbol ]
change = float ( info [ ' point_change ' ] ) #TEXT
symb = symbol
ticker = info [ ' name ' ] #TEXT
arrow , change = self . getArrow ( change , professional = True )
if all_indices_settings [ " percent " ] :
change = ' %.2f ' % abs ( float ( info [ ' percent_change ' ] ) ) + ' % '
else :
change = ' %.2f ' % abs ( change )
current = ' %.2f ' % float ( info [ ' current ' ] )
midFrame = self . textToImageProf ( ticker , current , change , arrow , font = ImageFont . load ( " ./fonts/6x10.pil " ) ) #IMAGE THE TEXT
if all_indices_settings [ ' logos ' ] :
try :
try : #load the tiny logo
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' tiny_indices ' )
logo = Image . open ( os . path . join ( logos_path , ticker + ' .png ' ) )
except : # load the big logo and scale it
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' indices ' )
logo = Image . open ( os . path . join ( logos_path , symb + ' .png ' ) )
# half the size of the logo
width , height = logo . size
logo = logo . resize ( ( int ( width / 2 ) , int ( height / 2 ) ) )
stitchedIndex = self . stitchImage ( [ logo , midFrame ] )
except Exception as e :
stitchedIndex = midFrame
else :
stitchedIndex = midFrame
image_list . append ( stitchedIndex )
image_list . append ( self . blank )
except Exception as e :
pass
finalDisplayImage = self . stitchImage ( image_list )
self . blank = Image . new ( ' RGB ' , ( 10 , 32 ) )
return finalDisplayImage
2022-06-12 17:39:07 +00:00
def getCommoditiesImage ( self ) :
f = open ( ' csv/commodities_settings.json ' , ' r ' )
all_commodities_settings = json . load ( f )
f . close ( )
if all_commodities_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/commodities.png ' )
image_list = [ title_img ]
image_list . append ( self . blank )
else :
image_list = [ ]
commodity_info = all_commodities_settings [ ' symbols ' ]
symbols = list ( commodity_info . keys ( ) )
for i , symbol in enumerate ( symbols ) :
try :
info = commodity_info [ symbol ]
change = float ( info [ ' 24hr_change ' ] ) #TEXT
ticker = symbol #TEXT
unit = info [ ' unit ' ]
ticker = symbol + ' ( ' + unit + ' ) ' #TEXT
arrow , change = self . getArrow ( change )
percent_change = ' %.2f ' % abs ( float ( info [ ' percent_change ' ] ) ) + ' % '
point_change2 = abs ( change )
point_changefinal = ' {0:.10f} ' . format ( point_change2 ) . rstrip ( " 0 " )
2023-05-03 04:14:14 +00:00
num3 = point_changefinal . split ( ' . ' )
if len ( num3 [ 1 ] ) < = 1 :
point_change = ' %.2f ' % float ( point_changefinal )
else :
point_change = str ( point_changefinal )
2022-06-12 17:39:07 +00:00
current = float ( info [ " current " ] )
current_final = ' {0:.10f} ' . format ( current ) . rstrip ( " 0 " )
2023-05-03 04:14:14 +00:00
num2 = current_final . split ( ' . ' )
if len ( num2 [ 1 ] ) < = 1 :
current = ' %.2f ' % float ( current_final )
else :
current = str ( current_final )
2022-06-12 17:39:07 +00:00
if not all_commodities_settings [ ' percent ' ] :
percent_change = False
if not all_commodities_settings [ ' point ' ] :
point_change = False
midFrame = self . textToImage ( ticker , current , arrow , percent_change , point_change ) #IMAGE THE TEXT
if all_commodities_settings [ ' logos ' ] :
try :
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' commodities ' )
logo = self . openImage ( os . path . join ( logos_path , ticker + ' .png ' ) )
stitchedCommodity = self . stitchImage ( [ logo , midFrame ] )
except Exception as e :
stitchedCommodity = midFrame
else :
stitchedCommodity = midFrame
image_list . append ( stitchedCommodity )
image_list . append ( self . blank )
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
2022-06-12 17:39:07 +00:00
finalDisplayImage = self . stitchImage ( image_list )
return finalDisplayImage
def getCommoditiesProfessional ( self ) :
self . blank = Image . new ( ' RGB ' , ( 0 , 16 ) )
f = open ( ' csv/commodities_settings.json ' , ' r ' )
all_commodities_settings = json . load ( f )
f . close ( )
if all_commodities_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/commodities.png ' )
image_list = [ title_img , Image . new ( ' RGB ' , ( 5 , 16 ) ) ]
image_list . append ( self . blank )
else :
image_list = [ ]
commodity_info = all_commodities_settings [ ' symbols ' ]
symbols = list ( commodity_info . keys ( ) )
for i , symbol in enumerate ( symbols ) :
try :
info = commodity_info [ symbol ]
change = float ( info [ ' 24hr_change ' ] ) #TEXT
unit = info [ ' unit ' ]
ticker = symbol + ' ( ' + unit + ' ) ' #TEXT
2023-05-03 04:14:14 +00:00
2022-06-12 17:39:07 +00:00
arrow , change = self . getArrow ( change , professional = True )
if all_commodities_settings [ " percent " ] :
change = ' %.2f ' % abs ( float ( info [ ' percent_change ' ] ) ) + ' % '
else :
point_change2 = abs ( change )
point_changefinal = ' {0:.10f} ' . format ( point_change2 ) . rstrip ( " 0 " )
2023-05-03 04:14:14 +00:00
num3 = point_changefinal . split ( ' . ' )
if len ( num3 [ 1 ] ) < = 1 :
change = ' %.2f ' % float ( point_changefinal )
else :
change = str ( point_changefinal )
2022-06-12 17:39:07 +00:00
current = float ( info [ " current " ] )
current_final = ' {0:.10f} ' . format ( current ) . rstrip ( " 0 " )
2023-05-03 04:14:14 +00:00
num2 = current_final . split ( ' . ' )
if len ( num2 [ 1 ] ) < = 1 :
current = ' %.2f ' % float ( current_final )
else :
current = str ( current_final )
2022-06-12 17:39:07 +00:00
midFrame = self . textToImageProf ( ticker , current , change , arrow , font = ImageFont . load ( " ./fonts/6x10.pil " ) ) #IMAGE THE TEXT
if all_commodities_settings [ ' logos ' ] :
try :
try : #load the tiny logo
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' tiny_commodities ' )
logo = Image . open ( os . path . join ( logos_path , ticker + ' .png ' ) )
except : # load the big logo and scale it
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' commodities ' )
logo = Image . open ( os . path . join ( logos_path , ticker + ' .png ' ) )
# half the size of the logo
width , height = logo . size
logo = logo . resize ( ( int ( width / 2 ) , int ( height / 2 ) ) )
stitchedCommodity = self . stitchImage ( [ logo , midFrame ] )
except Exception as e :
stitchedCommodity = midFrame
else :
stitchedCommodity = midFrame
image_list . append ( stitchedCommodity )
image_list . append ( self . blank )
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
2022-06-12 17:39:07 +00:00
finalDisplayImage = self . stitchImage ( image_list )
self . blank = Image . new ( ' RGB ' , ( 10 , 32 ) )
return finalDisplayImage
2021-06-22 19:05:56 +00:00
def getForexImage ( self ) :
2021-06-09 18:06:21 +00:00
2021-09-30 19:17:53 +00:00
f = open ( ' csv/forex_settings.json ' , ' r ' )
all_forex_settings = json . load ( f )
f . close ( )
if all_forex_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/forex.png ' )
image_list = [ title_img ]
image_list . append ( self . blank )
2021-10-04 20:39:22 +00:00
else :
image_list = [ ]
2021-09-30 19:17:53 +00:00
forex_settings = all_forex_settings [ ' symbols ' ]
2021-06-09 18:06:21 +00:00
2021-09-30 19:17:53 +00:00
symbol_bases = list ( forex_settings . keys ( ) )
for i , sb in enumerate ( symbol_bases ) :
2021-12-14 15:38:09 +00:00
try :
symbol , base = sb . split ( ' , ' )
current = float ( forex_settings [ sb ] [ ' current ' ] )
2022-06-12 09:28:48 +00:00
current_final = ' {0:.10f} ' . format ( current ) . rstrip ( " 0 " )
2021-12-14 15:38:09 +00:00
change = float ( forex_settings [ sb ] [ ' 24hr_change ' ] )
2022-06-12 09:28:48 +00:00
change2 = abs ( change )
changefinal = ' {0:.10f} ' . format ( change2 ) . rstrip ( " 0 " )
2022-03-06 18:36:03 +00:00
percent_change = ' %.2f ' % abs ( float ( forex_settings [ sb ] [ ' percent_change ' ] ) ) + ' % '
2021-12-14 15:38:09 +00:00
2022-06-12 09:28:48 +00:00
point_change = str ( changefinal )
2022-02-22 20:34:04 +00:00
2021-12-14 15:38:09 +00:00
if not all_forex_settings [ ' percent ' ] :
percent_change = False
if not all_forex_settings [ ' point ' ] :
point_change = False
2021-06-09 18:06:21 +00:00
2021-12-14 15:38:09 +00:00
arrow , change = self . getArrow ( change )
2022-06-12 09:28:48 +00:00
current = str ( current_final )
2021-12-14 15:38:09 +00:00
2021-10-18 17:38:24 +00:00
2022-03-06 18:41:02 +00:00
midFrame = self . textToImage ( symbol + ' ( ' + base + ' ) ' , current , arrow , percent_change , point_change ) #IMAGE THE TEXT
2021-12-14 15:38:09 +00:00
if all_forex_settings [ ' logos ' ] :
try :
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' currencies ' )
2022-02-28 16:11:45 +00:00
logo = Image . open ( os . path . join ( logos_path , symbol . upper ( ) + ' .png ' ) )
bse = Image . open ( os . path . join ( logos_path , base . upper ( ) + ' .png ' ) )
2021-12-14 15:38:09 +00:00
new_im = Image . new ( ' RGB ' , ( 32 , 32 ) )
new_im . paste ( bse , ( 0 , 10 ) , bse . convert ( ' RGBA ' ) )
new_im . paste ( logo , ( 10 , 0 ) , logo . convert ( ' RGBA ' ) )
stitchedStock = self . stitchImage ( [ new_im , midFrame ] )
image_list . append ( new_im )
2021-07-14 17:02:54 +00:00
2021-12-14 15:38:09 +00:00
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
2021-12-14 15:38:09 +00:00
image_list . append ( midFrame )
image_list . append ( self . blank )
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
2021-12-14 15:38:09 +00:00
2021-06-22 19:05:56 +00:00
finalDisplayImage = self . stitchImage ( image_list )
2021-07-14 17:02:54 +00:00
2021-06-22 19:05:56 +00:00
return finalDisplayImage
2021-07-08 18:42:21 +00:00
def getForexProfessional ( self ) :
2022-04-07 17:35:38 +00:00
2021-10-05 19:29:05 +00:00
self . blank = Image . new ( ' RGB ' , ( 0 , 16 ) )
2021-10-04 20:39:22 +00:00
f = open ( ' csv/forex_settings.json ' , ' r ' )
all_forex_settings = json . load ( f )
f . close ( )
if all_forex_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/forex.png ' )
2021-10-05 19:29:05 +00:00
image_list = [ title_img ]
image_list . append ( self . blank )
2021-10-04 20:39:22 +00:00
else :
image_list = [ ]
2021-10-05 19:29:05 +00:00
forex_settings = all_forex_settings [ ' symbols ' ]
2021-10-04 20:39:22 +00:00
2021-10-05 19:29:05 +00:00
symbol_bases = list ( forex_settings . keys ( ) )
2021-07-22 18:08:43 +00:00
2021-07-08 18:42:21 +00:00
2021-10-05 19:29:05 +00:00
for i , sb in enumerate ( symbol_bases ) :
2021-12-14 15:38:09 +00:00
try :
symbol , base = sb . split ( ' , ' )
2021-07-08 18:42:21 +00:00
2022-02-22 12:41:30 +00:00
current = float ( forex_settings [ sb ] [ ' current ' ] )
2022-06-12 09:28:48 +00:00
current_final = ' {0:.10f} ' . format ( current ) . rstrip ( " 0 " )
2022-02-22 12:41:30 +00:00
change = float ( forex_settings [ sb ] [ ' 24hr_change ' ] )
2022-06-12 09:28:48 +00:00
change2 = abs ( change )
changefinal = ' {0:.10f} ' . format ( change2 ) . rstrip ( " 0 " )
2021-12-14 15:38:09 +00:00
arrow , change = self . getArrow ( change , professional = True )
if all_forex_settings [ " percent " ] :
2022-03-06 18:36:03 +00:00
2022-02-22 20:34:04 +00:00
change = abs ( float ( forex_settings [ sb ] [ ' percent_change ' ] ) )
2021-10-18 17:38:24 +00:00
2022-03-06 18:36:03 +00:00
change = ' %.2f ' % change + ' % '
2021-12-14 15:38:09 +00:00
else :
2022-06-12 09:28:48 +00:00
change = str ( changefinal )
current = str ( current_final )
2021-12-14 15:38:09 +00:00
midFrame = self . textToImageProf ( symbol + ' ( ' + base + ' ) ' , current , change , arrow , font = ImageFont . load ( " ./fonts/6x10.pil " ) ) #IMAGE THE TEXT
if all_forex_settings [ ' logos ' ] :
try :
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' currencies ' )
2022-02-28 16:11:45 +00:00
logo = Image . open ( os . path . join ( logos_path , symbol . upper ( ) + ' .png ' ) )
bse = Image . open ( os . path . join ( logos_path , base . upper ( ) + ' .png ' ) )
2021-12-14 15:38:09 +00:00
new_im = Image . new ( ' RGB ' , ( 32 , 32 ) )
2021-10-18 17:38:24 +00:00
2021-12-14 15:38:09 +00:00
new_im . paste ( bse , ( 0 , 10 ) , bse . convert ( ' RGBA ' ) )
new_im . paste ( logo , ( 10 , 0 ) , logo . convert ( ' RGBA ' ) )
width , height = new_im . size
new_im = new_im . resize ( ( int ( width / 2 ) , int ( height / 2 ) ) )
stitchedStock = self . stitchImage ( [ new_im , midFrame ] )
image_list . append ( new_im )
2021-07-08 18:42:21 +00:00
2021-12-14 15:38:09 +00:00
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
2022-04-07 17:35:38 +00:00
2021-12-14 15:38:09 +00:00
image_list . append ( midFrame )
2021-10-18 17:38:24 +00:00
2021-12-14 15:38:09 +00:00
image_list . append ( self . blank )
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
2021-07-08 18:42:21 +00:00
finalDisplayImage = self . stitchImage ( image_list )
self . blank = Image . new ( ' RGB ' , ( 10 , 32 ) )
return finalDisplayImage
2023-03-16 09:20:07 +00:00
2021-06-22 19:05:56 +00:00
def getStockImage ( self ) :
2021-09-30 19:17:53 +00:00
f = open ( ' csv/stocks_settings.json ' , ' r ' )
all_stocks_settings = json . load ( f )
f . close ( )
if all_stocks_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/stocks.png ' )
image_list = [ title_img ]
image_list . append ( self . blank )
2021-10-04 20:39:22 +00:00
else :
image_list = [ ]
2023-03-16 09:20:07 +00:00
if all_stocks_settings [ ' chart ' ] :
try :
f = open ( ' csv/portfolio_settings.json ' , ' r ' )
portfolio_settings = json . load ( f ) [ ' symbols ' ]
f . close ( )
except :
pass
2023-03-30 05:15:43 +00:00
try :
if all_stocks_settings [ ' prepost ' ] :
try :
f = open ( ' csv/prepost_settings.json ' , ' r ' )
prepost_settings = json . load ( f )
f . close ( )
except :
pass
except :
pass
2023-03-29 08:48:19 +00:00
2021-09-30 19:17:53 +00:00
stock_info = all_stocks_settings [ ' symbols ' ]
symbols = list ( stock_info . keys ( ) )
2023-03-29 08:48:19 +00:00
timenow = datetime . now ( ny_zone ) . replace ( tzinfo = None ) . strftime ( " % H: % M: % S " )
weekday = datetime . now ( ny_zone ) . replace ( tzinfo = None ) . weekday ( )
2021-09-30 19:17:53 +00:00
for i , symbol in enumerate ( symbols ) :
2021-06-22 19:05:56 +00:00
2021-12-14 15:38:09 +00:00
try :
info = stock_info [ symbol ]
2022-02-22 20:10:42 +00:00
change = float ( info [ ' change ' ] ) #TEXT
2021-12-14 15:38:09 +00:00
ticker = symbol #TEXT
2022-02-22 20:10:42 +00:00
2021-12-14 15:38:09 +00:00
arrow , change = self . getArrow ( change )
2022-03-03 13:14:29 +00:00
percent_change = ' %.2f ' % abs ( float ( info [ ' percent_change ' ] ) ) + ' % '
2022-03-07 05:27:57 +00:00
point_change = ' %.2f ' % abs ( change )
2022-02-22 20:10:42 +00:00
2022-03-07 05:27:57 +00:00
current = ' %.2f ' % float ( info [ ' current ' ] ) #TEXT
2021-12-14 15:38:09 +00:00
if not all_stocks_settings [ ' percent ' ] :
percent_change = False
if not all_stocks_settings [ ' point ' ] :
point_change = False
midFrame = self . textToImage ( ticker , current , arrow , percent_change , point_change ) #IMAGE THE TEXT
if all_stocks_settings [ ' logos ' ] :
try :
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' stocks ' )
logo = self . openImage ( os . path . join ( logos_path , ticker + ' .png ' ) )
stitchedStock = self . stitchImage ( [ logo , midFrame ] )
except Exception as e :
2022-04-07 17:35:38 +00:00
2021-12-14 15:38:09 +00:00
stitchedStock = midFrame
else :
2021-10-18 17:38:24 +00:00
stitchedStock = midFrame
2023-03-29 08:48:19 +00:00
2023-08-03 11:24:42 +00:00
try :
if all_stocks_settings [ ' lohivol ' ] :
font = ImageFont . load ( " ./fonts/5x8.pil " )
try :
day_low = ' %.2f ' % float ( info [ ' day_low ' ] )
day_high = ' %.2f ' % float ( info [ ' day_high ' ] )
volume = info [ ' volume ' ]
2023-08-07 10:07:22 +00:00
daylow_img = self . textImage ( day_low , font , r = 0 , g = 255 , b = 0 )
daylow_t_img = self . textImage ( ' Lo ' , font , r = 255 , g = 255 , b = 255 )
dayhi_img = self . textImage ( day_high , font , r = 0 , g = 255 , b = 0 )
dayhi_t_img = self . textImage ( ' Hi ' , font , r = 255 , g = 255 , b = 255 )
vol_img = self . textImage ( volume , font , r = 0 , g = 255 , b = 0 )
vol_t_img = self . textImage ( ' Vol ' , font , r = 255 , g = 255 , b = 255 )
lohivol_img = Image . new ( ' RGB ' , ( max ( daylow_img . size [ 0 ] + daylow_t_img . size [ 0 ] , dayhi_img . size [ 0 ] + dayhi_t_img . size [ 0 ] ,
vol_img . size [ 0 ] + vol_t_img . size [ 0 ] ) + 5 , 32 ) )
lohivol_img . paste ( daylow_t_img , ( 0 , 3 ) )
lohivol_img . paste ( daylow_img , ( daylow_t_img . size [ 0 ] , 3 ) )
lohivol_img . paste ( dayhi_t_img , ( 0 , 12 ) )
lohivol_img . paste ( dayhi_img , ( dayhi_t_img . size [ 0 ] , 12 ) )
lohivol_img . paste ( vol_t_img , ( 0 , 21 ) )
lohivol_img . paste ( vol_img , ( vol_t_img . size [ 0 ] , 21 ) )
2023-08-03 11:24:42 +00:00
except :
pass
except :
pass
2023-03-29 08:48:19 +00:00
try :
if all_stocks_settings [ ' prepost ' ] :
font = ImageFont . load ( " ./fonts/6x13.pil " )
time_font = ImageFont . load ( " ./fonts/5x8.pil " )
prepost_time = prepost_settings [ symbol ] [ ' time_now ' ]
if ( ( timenow < " 09:30:00 " and timenow > " 04:00:00 " ) and ( weekday < = 4 ) ) : #premarket
try :
preprice = ' %.2f ' % abs ( float ( prepost_settings [ symbol ] [ ' Pre-market ' ] [ ' preprice ' ] ) )
prechange = ' %.2f ' % abs ( float ( prepost_settings [ symbol ] [ ' Pre-market ' ] [ ' prechange ' ] ) )
prepercent = ' %.2f ' % abs ( float ( prepost_settings [ symbol ] [ ' Pre-market ' ] [ ' prepercent ' ] ) )
2023-03-31 09:40:49 +00:00
premkt_img = self . textImage ( ' Pre-Mkt ' , font , r = 255 , g = 255 , b = 255 )
2023-03-29 08:48:19 +00:00
if ' - ' in prepost_settings [ symbol ] [ ' Pre-market ' ] [ ' prechange ' ] :
preprice_img = self . textImage ( preprice , font , r = 255 , g = 0 , b = 0 )
prechange_img = self . textImage ( prechange , font , r = 255 , g = 0 , b = 0 )
2023-03-30 05:08:53 +00:00
prepercent_img = self . textImage ( ' ( ' + prepercent + ' % ' + ' ) ' , font , r = 255 , g = 0 , b = 0 )
2023-03-29 08:48:19 +00:00
arrow = Image . open ( ' logos/down-tiny.png ' )
2023-03-31 09:09:21 +00:00
elif prepost_settings [ symbol ] [ ' Pre-market ' ] [ ' prechange ' ] == ' 0.00 ' :
preprice_img = self . textImage ( preprice , font , r = 200 , g = 200 , b = 200 )
prechange_img = self . textImage ( prechange , font , r = 200 , g = 200 , b = 200 )
prepercent_img = self . textImage ( ' ( ' + prepercent + ' % ' + ' ) ' , font , r = 200 , g = 200 , b = 200 )
2023-03-31 09:14:40 +00:00
arrow = Image . open ( ' logos/up-tiny2.png ' )
2023-03-29 08:48:19 +00:00
else :
preprice_img = self . textImage ( preprice , font , r = 0 , g = 255 , b = 0 )
prechange_img = self . textImage ( prechange , font , r = 0 , g = 255 , b = 0 )
2023-03-30 05:08:53 +00:00
prepercent_img = self . textImage ( ' ( ' + prepercent + ' % ' + ' ) ' , font , r = 0 , g = 255 , b = 0 )
2023-03-29 08:48:19 +00:00
arrow = Image . open ( ' logos/up-tiny.png ' )
time_img = self . textImage ( prepost_time , time_font , r = 255 , g = 255 , b = 255 )
prepost_img = Image . new ( ' RGB ' , ( 10 + max ( premkt_img . size [ 0 ] + prepercent_img . size [ 0 ] , preprice_img . size [ 0 ] + 3 + prechange_img . size [ 0 ] + arrow . size [ 0 ] ) , 32 ) )
prepost_img . paste ( premkt_img , ( 0 , 0 ) )
prepost_img . paste ( prepercent_img , ( premkt_img . size [ 0 ] , 1 ) )
prepost_img . paste ( preprice_img , ( 0 , 12 ) )
prepost_img . paste ( time_img , ( 0 , 24 ) )
prepost_img . paste ( arrow , ( preprice_img . size [ 0 ] , 18 ) )
prepost_img . paste ( prechange_img , ( preprice_img . size [ 0 ] + arrow . size [ 0 ] + 3 , 12 ) )
except :
pass
2023-03-30 13:35:55 +00:00
elif ( ( timenow < " 04:00:00 " or timenow > " 16:00:00 " ) and ( weekday < = 4 ) ) or ( weekday > 4 ) : #postmarket
2023-03-29 08:48:19 +00:00
try :
postprice = ' %.2f ' % abs ( float ( prepost_settings [ symbol ] [ ' Post-market ' ] [ ' postprice ' ] ) )
postchange = ' %.2f ' % abs ( float ( prepost_settings [ symbol ] [ ' Post-market ' ] [ ' postchange ' ] ) )
postpercent = ' %.2f ' % abs ( float ( prepost_settings [ symbol ] [ ' Post-market ' ] [ ' postpercent ' ] ) )
2023-03-31 09:40:49 +00:00
postmkt_img = self . textImage ( ' After-Hrs ' , font , r = 255 , g = 255 , b = 255 )
2023-03-29 08:48:19 +00:00
if ' - ' in prepost_settings [ symbol ] [ ' Post-market ' ] [ ' postchange ' ] :
postprice_img = self . textImage ( postprice , font , r = 255 , g = 0 , b = 0 )
postchange_img = self . textImage ( postchange , font , r = 255 , g = 0 , b = 0 )
2023-03-30 05:08:53 +00:00
postpercent_img = self . textImage ( ' ( ' + postpercent + ' % ' + ' ) ' , font , r = 255 , g = 0 , b = 0 )
2023-03-29 08:48:19 +00:00
arrow = Image . open ( ' logos/down-tiny.png ' )
2023-03-31 09:09:21 +00:00
elif prepost_settings [ symbol ] [ ' Post-market ' ] [ ' postchange ' ] == ' 0.00 ' :
postprice_img = self . textImage ( postprice , font , r = 200 , g = 200 , b = 200 )
postchange_img = self . textImage ( postchange , font , r = 200 , g = 200 , b = 200 )
postpercent_img = self . textImage ( ' ( ' + postpercent + ' % ' + ' ) ' , font , r = 200 , g = 200 , b = 200 )
2023-03-31 09:14:40 +00:00
arrow = Image . open ( ' logos/up-tiny2.png ' )
2023-03-29 08:48:19 +00:00
else :
postprice_img = self . textImage ( postprice , font , r = 0 , g = 255 , b = 0 )
postchange_img = self . textImage ( postchange , font , r = 0 , g = 255 , b = 0 )
2023-03-30 05:08:53 +00:00
postpercent_img = self . textImage ( ' ( ' + postpercent + ' % ' + ' ) ' , font , r = 0 , g = 255 , b = 0 )
2023-03-29 08:48:19 +00:00
arrow = Image . open ( ' logos/up-tiny.png ' )
time_img = self . textImage ( prepost_time , time_font , r = 255 , g = 255 , b = 255 )
prepost_img = Image . new ( ' RGB ' , ( 10 + max ( postmkt_img . size [ 0 ] + postpercent_img . size [ 0 ] , postprice_img . size [ 0 ] + 3 + postchange_img . size [ 0 ] + arrow . size [ 0 ] ) , 32 ) )
prepost_img . paste ( postmkt_img , ( 0 , 0 ) )
prepost_img . paste ( postpercent_img , ( postmkt_img . size [ 0 ] , 1 ) )
prepost_img . paste ( postprice_img , ( 0 , 12 ) )
prepost_img . paste ( time_img , ( 0 , 24 ) )
prepost_img . paste ( arrow , ( postprice_img . size [ 0 ] , 18 ) )
prepost_img . paste ( postchange_img , ( postprice_img . size [ 0 ] + arrow . size [ 0 ] + 3 , 12 ) )
except :
pass
except :
pass
2023-03-17 07:15:50 +00:00
try :
if all_stocks_settings [ ' chart ' ] and ( symbol in portfolio_settings ) : #IF USER INPUTTED PORTFOLIO SETTINGS, DISPLAY PORTFOLIO INFO
try :
cost = portfolio_settings [ symbol ] [ ' cost ' ]
day = portfolio_settings [ symbol ] [ ' day ' ]
2023-07-11 08:04:17 +00:00
day_start = datetime . strptime ( str ( day ) , " % Y- % m- %d " )
day_today = datetime . strptime ( datetime . now ( pytz . utc ) . strftime ( " % Y- % m- %d " ) , " % Y- % m- %d " )
day = str ( ( day_today - day_start ) . days )
2023-03-17 07:15:50 +00:00
shares = portfolio_settings [ symbol ] [ ' shares ' ]
original_value = float ( cost ) * float ( shares )
new_value = float ( info [ ' current ' ] ) * float ( shares )
value_day_change_percent = ( ( float ( info [ ' percent_change ' ] ) / 100 ) * new_value )
font = ImageFont . load ( " ./fonts/5x8.pil " )
cost_img = self . textImage ( ' Cost ' , font , r = 255 , g = 255 , b = 255 )
cost2_img = self . textImage ( cost , font , r = 0 , g = 255 , b = 0 )
shares_img = self . textImage ( ' Shares ' , font , r = 255 , g = 255 , b = 255 )
shares2_img = self . textImage ( shares , font , r = 0 , g = 255 , b = 0 )
pnlchange = new_value - original_value
pnlpercent = ( ( new_value - original_value ) / original_value ) * 100
pnlpercent_img = self . textImage ( ' P/L % ' , font , r = 255 , g = 255 , b = 255 )
if pnlpercent > = 0 :
pnlpercent2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlpercent ) ) + ' % ' , font , r = 0 , g = 255 , b = 0 )
else :
pnlpercent2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlpercent ) ) + ' % ' , font , r = 255 , g = 0 , b = 0 )
daypercent_img = self . textImage ( ' Day % ' , font , r = 255 , g = 255 , b = 255 )
if float ( info [ ' percent_change ' ] ) > = 0 :
daypercent2_img = self . textImage ( str ( ' %.2f ' % abs ( float ( info [ ' percent_change ' ] ) ) ) + ' % ' , font , r = 0 , g = 255 , b = 0 )
else :
daypercent2_img = self . textImage ( str ( ' %.2f ' % abs ( float ( info [ ' percent_change ' ] ) ) ) + ' % ' , font , r = 255 , g = 0 , b = 0 )
days_img = self . textImage ( ' Days ' , font , r = 255 , g = 255 , b = 255 )
days2_img = self . textImage ( day , font , r = 0 , g = 255 , b = 0 )
value_img = self . textImage ( ' Value ' , font , r = 255 , g = 255 , b = 255 )
value2_img = self . textImage ( str ( ' %.2f ' % abs ( original_value ) ) , font , r = 0 , g = 255 , b = 0 )
pnlchange_img = self . textImage ( ' P/L$ ' , font , r = 255 , g = 255 , b = 255 )
if pnlchange > = 0 :
pnlchange2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlchange ) ) , font , r = 0 , g = 255 , b = 0 )
else :
pnlchange2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlchange ) ) , font , r = 255 , g = 0 , b = 0 )
daychange_img = self . textImage ( ' Day$ ' , font , r = 255 , g = 255 , b = 255 )
if value_day_change_percent > = 0 :
daychange2_img = self . textImage ( str ( ' %.2f ' % abs ( value_day_change_percent ) ) , font , r = 0 , g = 255 , b = 0 )
else :
daychange2_img = self . textImage ( str ( ' %.2f ' % abs ( value_day_change_percent ) ) , font , r = 255 , g = 0 , b = 0 )
x_offset = 0
img = Image . new ( ' RGB ' , ( max ( cost_img . size [ 0 ] , cost2_img . size [ 0 ] , days_img . size [ 0 ] , days2_img . size [ 0 ] ) + 7 +
max ( shares_img . size [ 0 ] , shares2_img . size [ 0 ] , value2_img . size [ 0 ] , value_img . size [ 0 ] ) + 7 +
max ( pnlpercent_img . size [ 0 ] , pnlpercent2_img . size [ 0 ] , pnlchange_img . size [ 0 ] , pnlchange2_img . size [ 0 ] ) + 7 +
max ( daypercent_img . size [ 0 ] , daypercent2_img . size [ 0 ] , daychange_img . size [ 0 ] , daychange2_img . size [ 0 ] ) + 15 , 32 ) )
img . paste ( cost_img , ( x_offset , 0 ) )
img . paste ( cost2_img , ( x_offset , 8 ) )
img . paste ( days_img , ( x_offset , 16 ) )
img . paste ( days2_img , ( x_offset , 24 ) )
x_offset + = max ( cost_img . size [ 0 ] , cost2_img . size [ 0 ] , days_img . size [ 0 ] , days2_img . size [ 0 ] ) + 7
img . paste ( shares_img , ( x_offset , 0 ) )
img . paste ( shares2_img , ( x_offset , 8 ) )
img . paste ( value_img , ( x_offset , 16 ) )
img . paste ( value2_img , ( x_offset , 24 ) )
x_offset + = max ( shares_img . size [ 0 ] , shares2_img . size [ 0 ] , value2_img . size [ 0 ] , value_img . size [ 0 ] ) + 7
img . paste ( pnlpercent_img , ( x_offset , 0 ) )
img . paste ( pnlpercent2_img , ( x_offset , 8 ) )
img . paste ( pnlchange_img , ( x_offset , 16 ) )
img . paste ( pnlchange2_img , ( x_offset , 24 ) )
x_offset + = max ( pnlpercent_img . size [ 0 ] , pnlpercent2_img . size [ 0 ] , pnlchange_img . size [ 0 ] , pnlchange2_img . size [ 0 ] ) + 7
img . paste ( daypercent_img , ( x_offset , 0 ) )
img . paste ( daypercent2_img , ( x_offset , 8 ) )
img . paste ( daychange_img , ( x_offset , 16 ) )
img . paste ( daychange2_img , ( x_offset , 24 ) )
except :
pass
except :
pass
2023-03-16 09:20:07 +00:00
2021-12-14 15:38:09 +00:00
image_list . append ( stitchedStock )
2023-08-03 11:24:42 +00:00
try :
if all_stocks_settings [ ' lohivol ' ] :
try :
image_list . append ( lohivol_img )
except :
pass
except :
pass
2023-03-29 08:48:19 +00:00
try :
if all_stocks_settings [ ' prepost ' ] :
try :
image_list . append ( prepost_img )
except :
pass
except :
pass
2023-03-17 07:15:50 +00:00
try :
if all_stocks_settings [ ' chart ' ] and ( symbol in portfolio_settings ) :
try :
image_list . append ( img )
except :
pass
except :
pass
2021-12-14 15:38:09 +00:00
image_list . append ( self . blank )
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
2021-06-22 19:05:56 +00:00
2021-05-05 14:44:43 +00:00
finalDisplayImage = self . stitchImage ( image_list )
2021-06-21 16:39:44 +00:00
return finalDisplayImage
2023-03-16 09:20:07 +00:00
2021-05-05 14:44:43 +00:00
2021-07-05 18:51:40 +00:00
def getStockProfessional ( self ) :
2021-10-05 19:29:05 +00:00
self . blank = Image . new ( ' RGB ' , ( 0 , 16 ) )
2021-07-05 18:51:40 +00:00
2021-10-04 20:39:22 +00:00
f = open ( ' csv/stocks_settings.json ' , ' r ' )
all_stocks_settings = json . load ( f )
f . close ( )
if all_stocks_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/stocks.png ' )
image_list = [ title_img , Image . new ( ' RGB ' , ( 5 , 16 ) ) ]
image_list . append ( self . blank )
else :
image_list = [ ]
2023-03-22 08:44:08 +00:00
if all_stocks_settings [ ' chart ' ] :
try :
f = open ( ' csv/portfolio_settings.json ' , ' r ' )
portfolio_settings = json . load ( f ) [ ' symbols ' ]
f . close ( )
except :
pass
2023-03-30 10:27:09 +00:00
try :
if all_stocks_settings [ ' prepost ' ] :
try :
f = open ( ' csv/prepost_settings.json ' , ' r ' )
prepost_settings = json . load ( f )
f . close ( )
except :
pass
except :
pass
2021-10-05 19:29:05 +00:00
stock_info = all_stocks_settings [ ' symbols ' ]
symbols = list ( stock_info . keys ( ) )
2023-03-30 10:27:09 +00:00
timenow = datetime . now ( ny_zone ) . replace ( tzinfo = None ) . strftime ( " % H: % M: % S " )
weekday = datetime . now ( ny_zone ) . replace ( tzinfo = None ) . weekday ( )
2021-10-05 19:29:05 +00:00
for i , symbol in enumerate ( symbols ) :
2021-07-05 18:51:40 +00:00
2021-12-14 15:38:09 +00:00
try :
info = stock_info [ symbol ]
2021-07-05 18:51:40 +00:00
2022-02-22 20:10:42 +00:00
change = float ( info [ ' change ' ] ) #TEXT
2021-12-14 15:38:09 +00:00
ticker = symbol #TEXT
2021-10-18 17:38:24 +00:00
2021-12-14 15:38:09 +00:00
arrow , change = self . getArrow ( change , professional = True )
if all_stocks_settings [ " percent " ] :
2022-03-03 13:14:29 +00:00
change = ' %.2f ' % abs ( float ( info [ ' percent_change ' ] ) ) + ' % '
2022-02-22 20:34:04 +00:00
else :
2022-03-07 05:27:57 +00:00
change = ' %.2f ' % abs ( change )
2022-02-22 20:10:42 +00:00
2021-12-14 15:38:09 +00:00
2022-03-07 05:27:57 +00:00
current = ' %.2f ' % float ( info [ ' current ' ] ) #TEXT
2021-12-14 15:38:09 +00:00
midFrame = self . textToImageProf ( ticker , current , change , arrow , font = ImageFont . load ( " ./fonts/6x10.pil " ) ) #IMAGE THE TEXT
if all_stocks_settings [ ' logos ' ] :
try :
try : #load the tiny logo
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' tiny_stocks ' )
logo = Image . open ( os . path . join ( logos_path , ticker + ' .png ' ) )
except : # load the big logo and scale it
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' stocks ' )
logo = Image . open ( os . path . join ( logos_path , ticker + ' .png ' ) )
# half the size of the logo
width , height = logo . size
logo = logo . resize ( ( int ( width / 2 ) , int ( height / 2 ) ) )
stitchedStock = self . stitchImage ( [ logo , midFrame ] )
except Exception as e :
stitchedStock = midFrame
else :
2021-10-18 17:38:24 +00:00
stitchedStock = midFrame
2023-03-22 08:44:08 +00:00
2023-08-07 14:52:35 +00:00
try :
if all_stocks_settings [ ' lohivol ' ] :
font = ImageFont . load ( " ./fonts/4x6.pil " )
try :
day_low = ' %.2f ' % float ( info [ ' day_low ' ] )
day_high = ' %.2f ' % float ( info [ ' day_high ' ] )
volume = info [ ' volume ' ]
daylow_img = self . textImage ( day_low , font , r = 0 , g = 255 , b = 0 )
daylow_t_img = self . textImage ( ' Lo ' , font , r = 255 , g = 255 , b = 255 )
dayhi_img = self . textImage ( day_high , font , r = 0 , g = 255 , b = 0 )
dayhi_t_img = self . textImage ( ' Hi ' , font , r = 255 , g = 255 , b = 255 )
vol_img = self . textImage ( volume , font , r = 0 , g = 255 , b = 0 )
vol_t_img = self . textImage ( ' Vol ' , font , r = 255 , g = 255 , b = 255 )
lohivol_img = Image . new ( ' RGB ' , ( max ( daylow_t_img . size [ 0 ] + daylow_img . size [ 0 ] , dayhi_t_img . size [ 0 ] + dayhi_img . size [ 0 ] ) + 2 + vol_t_img . size [ 0 ] + vol_img . size [ 0 ] + 8 , 16 ) )
lohivol_img . paste ( daylow_t_img , ( 0 , 3 ) )
lohivol_img . paste ( daylow_img , ( daylow_t_img . size [ 0 ] , 3 ) )
lohivol_img . paste ( dayhi_t_img , ( 0 , 9 ) )
lohivol_img . paste ( dayhi_img , ( dayhi_t_img . size [ 0 ] , 9 ) )
lohivol_img . paste ( vol_t_img , ( max ( daylow_t_img . size [ 0 ] + daylow_img . size [ 0 ] , dayhi_t_img . size [ 0 ] + dayhi_img . size [ 0 ] ) + 2 , 3 ) )
lohivol_img . paste ( vol_img , ( max ( daylow_t_img . size [ 0 ] + daylow_img . size [ 0 ] , dayhi_t_img . size [ 0 ] + dayhi_img . size [ 0 ] ) + 2 + vol_t_img . size [ 0 ] , 3 ) )
except :
pass
except :
pass
2023-03-30 10:27:09 +00:00
try :
if all_stocks_settings [ ' prepost ' ] :
font = ImageFont . load ( " ./fonts/5x8.pil " )
# prepost_time = prepost_settings[symbol]['time_now']
if ( ( timenow < " 09:30:00 " and timenow > " 04:00:00 " ) and ( weekday < = 4 ) ) : #premarket
try :
preprice = ' %.2f ' % abs ( float ( prepost_settings [ symbol ] [ ' Pre-market ' ] [ ' preprice ' ] ) )
prechange = ' %.2f ' % abs ( float ( prepost_settings [ symbol ] [ ' Pre-market ' ] [ ' prechange ' ] ) )
prepercent = ' %.2f ' % abs ( float ( prepost_settings [ symbol ] [ ' Pre-market ' ] [ ' prepercent ' ] ) )
2023-03-31 09:40:49 +00:00
premkt_img = self . textImage ( ' Pre-Mkt ' , font , r = 255 , g = 255 , b = 255 )
2023-03-30 10:27:09 +00:00
if ' - ' in prepost_settings [ symbol ] [ ' Pre-market ' ] [ ' prechange ' ] :
preprice_img = self . textImage ( preprice , font , r = 255 , g = 0 , b = 0 )
prechange_img = self . textImage ( prechange , font , r = 255 , g = 0 , b = 0 )
prepercent_img = self . textImage ( ' ( ' + prepercent + ' % ' + ' ) ' , font , r = 255 , g = 0 , b = 0 )
arrow = Image . open ( ' logos/down-tiny.png ' )
2023-03-31 09:14:40 +00:00
elif prepost_settings [ symbol ] [ ' Pre-market ' ] [ ' prechange ' ] == ' 0.00 ' :
preprice_img = self . textImage ( preprice , font , r = 200 , g = 200 , b = 200 )
prechange_img = self . textImage ( prechange , font , r = 200 , g = 200 , b = 200 )
prepercent_img = self . textImage ( ' ( ' + prepercent + ' % ' + ' ) ' , font , r = 200 , g = 200 , b = 200 )
arrow = Image . open ( ' logos/up-tiny2.png ' )
2023-03-30 10:27:09 +00:00
else :
preprice_img = self . textImage ( preprice , font , r = 0 , g = 255 , b = 0 )
prechange_img = self . textImage ( prechange , font , r = 0 , g = 255 , b = 0 )
prepercent_img = self . textImage ( ' ( ' + prepercent + ' % ' + ' ) ' , font , r = 0 , g = 255 , b = 0 )
arrow = Image . open ( ' logos/up-tiny.png ' )
# time_img = self.textImage(prepost_time, font, r=255,g=255,b=255)
prepost_img = Image . new ( ' RGB ' , ( max ( premkt_img . size [ 0 ] + prepercent_img . size [ 0 ] , preprice_img . size [ 0 ] + 2 + prechange_img . size [ 0 ] + arrow . size [ 0 ] ) + 10 , 16 ) )
prepost_img . paste ( premkt_img , ( 0 , 0 ) )
prepost_img . paste ( prepercent_img , ( premkt_img . size [ 0 ] , 0 ) )
2023-03-30 10:33:05 +00:00
prepost_img . paste ( preprice_img , ( 0 , 7 ) )
2023-03-30 10:27:09 +00:00
# prepost_img.paste(time_img, (preprice_img.size[0] + prechange_img.size[0] + 2 + arrow.size[0], 8))
2023-03-30 10:33:05 +00:00
prepost_img . paste ( arrow , ( preprice_img . size [ 0 ] , 10 ) )
prepost_img . paste ( prechange_img , ( preprice_img . size [ 0 ] + arrow . size [ 0 ] + 2 , 7 ) )
2023-03-30 10:27:09 +00:00
except :
pass
2023-03-30 13:35:55 +00:00
elif ( ( timenow < " 04:00:00 " or timenow > " 16:00:00 " ) and ( weekday < = 4 ) ) or ( weekday > 4 ) : #postmarket
2023-03-30 10:27:09 +00:00
try :
postprice = ' %.2f ' % abs ( float ( prepost_settings [ symbol ] [ ' Post-market ' ] [ ' postprice ' ] ) )
postchange = ' %.2f ' % abs ( float ( prepost_settings [ symbol ] [ ' Post-market ' ] [ ' postchange ' ] ) )
postpercent = ' %.2f ' % abs ( float ( prepost_settings [ symbol ] [ ' Post-market ' ] [ ' postpercent ' ] ) )
2023-03-31 09:40:49 +00:00
postmkt_img = self . textImage ( ' After-Hrs ' , font , r = 255 , g = 255 , b = 255 )
2023-03-30 10:27:09 +00:00
if ' - ' in prepost_settings [ symbol ] [ ' Post-market ' ] [ ' postchange ' ] :
postprice_img = self . textImage ( postprice , font , r = 255 , g = 0 , b = 0 )
postchange_img = self . textImage ( postchange , font , r = 255 , g = 0 , b = 0 )
postpercent_img = self . textImage ( ' ( ' + postpercent + ' % ' + ' ) ' , font , r = 255 , g = 0 , b = 0 )
arrow = Image . open ( ' logos/down-tiny.png ' )
2023-03-31 09:14:40 +00:00
elif prepost_settings [ symbol ] [ ' Post-market ' ] [ ' postchange ' ] == ' 0.00 ' :
postprice_img = self . textImage ( postprice , font , r = 200 , g = 200 , b = 200 )
postchange_img = self . textImage ( postchange , font , r = 200 , g = 200 , b = 200 )
postpercent_img = self . textImage ( ' ( ' + postpercent + ' % ' + ' ) ' , font , r = 200 , g = 200 , b = 200 )
arrow = Image . open ( ' logos/up-tiny2.png ' )
2023-03-30 10:27:09 +00:00
else :
postprice_img = self . textImage ( postprice , font , r = 0 , g = 255 , b = 0 )
postchange_img = self . textImage ( postchange , font , r = 0 , g = 255 , b = 0 )
postpercent_img = self . textImage ( ' ( ' + postpercent + ' % ' + ' ) ' , font , r = 0 , g = 255 , b = 0 )
arrow = Image . open ( ' logos/up-tiny.png ' )
#time_img = self.textImage(prepost_time, font, r=255,g=255,b=255)
prepost_img = Image . new ( ' RGB ' , ( 10 + max ( postmkt_img . size [ 0 ] + postpercent_img . size [ 0 ] , postprice_img . size [ 0 ] + 2 + postchange_img . size [ 0 ] + arrow . size [ 0 ] ) , 16 ) )
prepost_img . paste ( postmkt_img , ( 0 , 0 ) )
prepost_img . paste ( postpercent_img , ( postmkt_img . size [ 0 ] , 0 ) )
2023-03-30 10:33:05 +00:00
prepost_img . paste ( postprice_img , ( 0 , 7 ) )
2023-03-30 10:27:09 +00:00
#prepost_img.paste(time_img, (0, 12))
2023-03-30 10:33:05 +00:00
prepost_img . paste ( arrow , ( postprice_img . size [ 0 ] , 10 ) )
prepost_img . paste ( postchange_img , ( postprice_img . size [ 0 ] + arrow . size [ 0 ] + 2 , 7 ) )
2023-03-30 10:27:09 +00:00
except :
pass
except :
pass
2023-03-22 08:44:08 +00:00
try :
if all_stocks_settings [ ' chart ' ] and ( symbol in portfolio_settings ) : #IF USER INPUTTED PORTFOLIO SETTINGS, DISPLAY PORTFOLIO INFO
try :
cost = portfolio_settings [ symbol ] [ ' cost ' ]
day = portfolio_settings [ symbol ] [ ' day ' ]
2023-07-11 08:04:17 +00:00
day_start = datetime . strptime ( str ( day ) , " % Y- % m- %d " )
day_today = datetime . strptime ( datetime . now ( pytz . utc ) . strftime ( " % Y- % m- %d " ) , " % Y- % m- %d " )
day = str ( ( day_today - day_start ) . days )
2023-03-22 08:44:08 +00:00
shares = portfolio_settings [ symbol ] [ ' shares ' ]
original_value = float ( cost ) * float ( shares )
new_value = float ( info [ ' current ' ] ) * float ( shares )
value_day_change_percent = ( ( float ( info [ ' percent_change ' ] ) / 100 ) * new_value )
font = ImageFont . load ( " ./fonts/5x8.pil " )
cost_img = self . textImage ( ' Cost ' , font , r = 255 , g = 255 , b = 255 )
cost2_img = self . textImage ( cost , font , r = 0 , g = 255 , b = 0 )
shares_img = self . textImage ( ' Shares ' , font , r = 255 , g = 255 , b = 255 )
shares2_img = self . textImage ( shares , font , r = 0 , g = 255 , b = 0 )
pnlchange = new_value - original_value
pnlpercent = ( ( new_value - original_value ) / original_value ) * 100
pnlpercent_img = self . textImage ( ' P/L % ' , font , r = 255 , g = 255 , b = 255 )
if pnlpercent > = 0 :
pnlpercent2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlpercent ) ) + ' % ' , font , r = 0 , g = 255 , b = 0 )
else :
pnlpercent2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlpercent ) ) + ' % ' , font , r = 255 , g = 0 , b = 0 )
daypercent_img = self . textImage ( ' Day % ' , font , r = 255 , g = 255 , b = 255 )
if float ( info [ ' percent_change ' ] ) > = 0 :
daypercent2_img = self . textImage ( str ( ' %.2f ' % abs ( float ( info [ ' percent_change ' ] ) ) ) + ' % ' , font , r = 0 , g = 255 , b = 0 )
else :
daypercent2_img = self . textImage ( str ( ' %.2f ' % abs ( float ( info [ ' percent_change ' ] ) ) ) + ' % ' , font , r = 255 , g = 0 , b = 0 )
days_img = self . textImage ( ' Days ' , font , r = 255 , g = 255 , b = 255 )
days2_img = self . textImage ( day , font , r = 0 , g = 255 , b = 0 )
value_img = self . textImage ( ' Value ' , font , r = 255 , g = 255 , b = 255 )
value2_img = self . textImage ( str ( ' %.2f ' % abs ( original_value ) ) , font , r = 0 , g = 255 , b = 0 )
pnlchange_img = self . textImage ( ' P/L$ ' , font , r = 255 , g = 255 , b = 255 )
if pnlchange > = 0 :
pnlchange2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlchange ) ) , font , r = 0 , g = 255 , b = 0 )
else :
pnlchange2_img = self . textImage ( str ( ' %.2f ' % abs ( pnlchange ) ) , font , r = 255 , g = 0 , b = 0 )
daychange_img = self . textImage ( ' Day$ ' , font , r = 255 , g = 255 , b = 255 )
if value_day_change_percent > = 0 :
daychange2_img = self . textImage ( str ( ' %.2f ' % abs ( value_day_change_percent ) ) , font , r = 0 , g = 255 , b = 0 )
else :
daychange2_img = self . textImage ( str ( ' %.2f ' % abs ( value_day_change_percent ) ) , font , r = 255 , g = 0 , b = 0 )
x_offset = 0
img = Image . new ( ' RGB ' , ( max ( cost_img . size [ 0 ] , cost2_img . size [ 0 ] ) + 5 + max ( days_img . size [ 0 ] , days2_img . size [ 0 ] ) + 5 +
max ( shares_img . size [ 0 ] , shares2_img . size [ 0 ] ) + 5 + max ( value2_img . size [ 0 ] , value_img . size [ 0 ] ) + 5 +
max ( pnlpercent_img . size [ 0 ] , pnlpercent2_img . size [ 0 ] ) + 5 + max ( pnlchange_img . size [ 0 ] , pnlchange2_img . size [ 0 ] ) + 5 +
max ( daypercent_img . size [ 0 ] , daypercent2_img . size [ 0 ] ) + 5 + max ( daychange_img . size [ 0 ] , daychange2_img . size [ 0 ] ) + 10 , 16 ) )
img . paste ( cost_img , ( x_offset , 1 ) )
img . paste ( cost2_img , ( x_offset , 9 ) )
x_offset + = max ( cost_img . size [ 0 ] , cost2_img . size [ 0 ] ) + 4
img . paste ( days_img , ( x_offset , 1 ) )
img . paste ( days2_img , ( x_offset , 9 ) )
x_offset + = max ( days_img . size [ 0 ] , days2_img . size [ 0 ] ) + 4
img . paste ( shares_img , ( x_offset , 1 ) )
img . paste ( shares2_img , ( x_offset , 9 ) )
x_offset + = max ( shares_img . size [ 0 ] , shares2_img . size [ 0 ] ) + 4
img . paste ( value_img , ( x_offset , 1 ) )
img . paste ( value2_img , ( x_offset , 9 ) )
x_offset + = max ( value2_img . size [ 0 ] , value_img . size [ 0 ] ) + 4
img . paste ( pnlpercent_img , ( x_offset , 1 ) )
img . paste ( pnlpercent2_img , ( x_offset , 9 ) )
x_offset + = max ( pnlpercent_img . size [ 0 ] , pnlpercent2_img . size [ 0 ] ) + 4
img . paste ( pnlchange_img , ( x_offset , 1 ) )
img . paste ( pnlchange2_img , ( x_offset , 9 ) )
x_offset + = max ( pnlchange_img . size [ 0 ] , pnlchange2_img . size [ 0 ] ) + 4
img . paste ( daypercent_img , ( x_offset , 1 ) )
img . paste ( daypercent2_img , ( x_offset , 9 ) )
x_offset + = max ( daypercent_img . size [ 0 ] , daypercent2_img . size [ 0 ] ) + 4
img . paste ( daychange_img , ( x_offset , 1 ) )
img . paste ( daychange2_img , ( x_offset , 9 ) )
except :
pass
except :
pass
2021-12-14 15:38:09 +00:00
image_list . append ( stitchedStock )
2023-08-07 14:52:35 +00:00
try :
if all_stocks_settings [ ' lohivol ' ] :
try :
image_list . append ( lohivol_img )
except :
pass
except :
pass
2023-03-30 10:27:09 +00:00
try :
if all_stocks_settings [ ' prepost ' ] :
try :
image_list . append ( prepost_img )
except :
pass
except :
pass
2021-12-14 15:38:09 +00:00
2023-03-22 08:44:08 +00:00
try :
if all_stocks_settings [ ' chart ' ] and ( symbol in portfolio_settings ) :
try :
image_list . append ( img )
except :
pass
except :
pass
2021-12-14 15:38:09 +00:00
image_list . append ( self . blank )
2021-07-05 18:51:40 +00:00
2021-12-14 15:38:09 +00:00
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
2021-07-05 18:51:40 +00:00
finalDisplayImage = self . stitchImage ( image_list )
self . blank = Image . new ( ' RGB ' , ( 10 , 32 ) )
return finalDisplayImage
2023-03-22 08:44:08 +00:00
2021-06-27 11:07:47 +00:00
def getNewsImage ( self ) :
2021-06-30 19:22:14 +00:00
2022-04-07 17:35:38 +00:00
f = open ( ' csv/news_settings.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
2021-09-30 19:17:53 +00:00
if all_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/news.png ' )
image_list = [ title_img ]
2022-02-28 11:21:46 +00:00
else :
image_list = [ ]
2021-09-30 19:17:53 +00:00
2021-07-14 17:02:54 +00:00
headline_font = ImageFont . load ( " ./fonts/6x13.pil " )
source_font = ImageFont . load ( " ./fonts/6x13.pil " )
2021-06-27 11:07:47 +00:00
2021-09-30 19:17:53 +00:00
headline_info = all_settings [ ' headlines ' ]
2021-06-27 11:07:47 +00:00
headlines = [ ]
source_date_times = [ ]
2022-02-28 14:01:05 +00:00
source = [ ]
2021-06-27 11:07:47 +00:00
2021-09-30 19:17:53 +00:00
2021-06-27 11:07:47 +00:00
2021-09-30 19:17:53 +00:00
for i , hi in enumerate ( headline_info ) :
2021-06-27 11:07:47 +00:00
try :
2021-12-14 15:38:09 +00:00
headline , source , date_time = hi
date , time = date_time . split ( ' T ' )
time = time [ : - 1 ]
source_date_time = source + ' : ' + date + ' ' + time
headline = headline . replace ( " ^ " , " , " )
headline = headline . replace ( " ’ " , " ' " )
headline = headline . replace ( " ‘ " , " ' " )
headline = headline . replace ( ' “ ' , ' " ' )
headline = headline . replace ( ' ” ' , ' " ' )
headline = headline . replace ( ' — ' , ' - ' )
headline = headline . replace ( ' – ' , ' - ' )
headline = ' ' . join ( [ h for h in headline if ord ( h ) < 256 ] )
lst = headline . rsplit ( ' - ' , 1 ) #remove source name at end of headline
headline = lst [ 0 ]
headline_img = self . textImage ( headline , headline_font , matrix_height = True )
source_img = self . textImage ( source_date_time , source_font , r = 255 , g = 255 , b = 0 , matrix_height = True )
try :
2022-02-28 14:01:05 +00:00
logo_name = source . lower ( ) . replace ( ' ' , ' - ' )
2021-12-14 15:38:09 +00:00
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' news_logos ' )
logo = Image . open ( os . path . join ( logos_path , logo_name + ' .png ' ) )
except Exception as e :
logo_name = ' default '
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' news_logos ' )
logo = Image . open ( os . path . join ( logos_path , logo_name + ' .png ' ) )
2021-07-22 18:08:43 +00:00
2021-12-14 15:38:09 +00:00
img = Image . new ( ' RGB ' , ( headline_img . size [ 0 ] , 32 ) )
img . paste ( headline_img , ( 2 , 0 ) )
img . paste ( source_img , ( 2 , 16 ) )
2021-07-08 18:42:21 +00:00
2021-12-14 15:38:09 +00:00
img = self . stitchImage ( [ logo , img ] )
image_list . append ( img )
image_list . append ( self . blank )
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
2021-07-08 18:42:21 +00:00
news_image = self . stitchImage ( image_list )
return news_image
def getNewsProfessional ( self ) :
2022-04-07 17:35:38 +00:00
f = open ( ' csv/news_settings.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
2021-10-05 19:29:05 +00:00
if all_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/news.png ' )
image_list = [ title_img ]
2022-02-28 11:21:46 +00:00
else :
image_list = [ ]
2021-10-05 19:29:05 +00:00
headline_font = ImageFont . load ( " ./fonts/6x13.pil " )
source_font = ImageFont . load ( " ./fonts/6x13.pil " )
headline_info = all_settings [ ' headlines ' ]
2021-07-08 18:42:21 +00:00
headlines = [ ]
2021-10-05 19:29:05 +00:00
source_date_times = [ ]
2022-02-28 14:01:05 +00:00
source = [ ]
2021-07-08 18:42:21 +00:00
2021-07-14 17:02:54 +00:00
blank = Image . new ( ' RGB ' , ( 0 , 16 ) )
2021-10-05 19:29:05 +00:00
for i , hi in enumerate ( headline_info ) :
2021-07-08 18:42:21 +00:00
try :
2021-12-14 15:38:09 +00:00
headline , source , date_time = hi
date , time = date_time . split ( ' T ' )
time = time [ : - 1 ]
source_date_time = source + ' : ' + date + ' ' + time
2021-07-08 18:42:21 +00:00
2021-12-14 15:38:09 +00:00
headline = headline . replace ( " ^ " , " , " )
headline = headline . replace ( " ’ " , " ' " )
headline = headline . replace ( " ‘ " , " ' " )
headline = headline . replace ( ' “ ' , ' " ' )
headline = headline . replace ( ' ” ' , ' " ' )
headline = headline . replace ( ' — ' , ' - ' )
headline = headline . replace ( ' – ' , ' - ' )
2021-07-16 11:01:41 +00:00
2021-12-14 15:38:09 +00:00
headline = ' ' . join ( [ h for h in headline if ord ( h ) < 256 ] )
2021-07-22 18:08:43 +00:00
2021-12-14 15:38:09 +00:00
lst = headline . rsplit ( ' - ' , 1 ) #remove source name at end of headline
headline = lst [ 0 ]
headline_img = self . textImage ( headline , headline_font , matrix_height = True )
source_img = self . textImage ( source_date_time + ' : ' , source_font , r = 255 , g = 255 , b = 0 , matrix_height = True )
try :
2022-03-06 19:02:51 +00:00
logo_name = source . lower ( ) . replace ( ' ' , ' - ' )
2022-06-12 09:59:51 +00:00
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' tiny_news ' )
2021-06-27 11:07:47 +00:00
2021-12-14 15:38:09 +00:00
logo = Image . open ( os . path . join ( logos_path , logo_name + ' .png ' ) )
except Exception as e :
logo_name = ' default '
2022-06-12 09:59:51 +00:00
logos_path = os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' logos ' ) , ' tiny_news ' )
2021-12-14 15:38:09 +00:00
logo = Image . open ( os . path . join ( logos_path , logo_name + ' .png ' ) )
width , height = logo . size
2022-06-12 09:59:51 +00:00
#logo = logo.resize((int(width/2), int(height/2)))
2021-12-14 15:38:09 +00:00
2023-01-09 10:20:11 +00:00
img = Image . new ( ' RGB ' , ( headline_img . size [ 0 ] + source_img . size [ 0 ] + logo . size [ 0 ] + 22 , 32 ) )
img . paste ( headline_img , ( source_img . size [ 0 ] + logo . size [ 0 ] + 10 , 3 ) )
img . paste ( source_img , ( logo . size [ 0 ] + 2 , 3 ) )
img . paste ( logo , ( 0 , 0 ) )
2021-12-14 15:38:09 +00:00
image_list . append ( img )
image_list . append ( blank )
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
2021-06-27 11:07:47 +00:00
news_image = self . stitchImage ( image_list )
return news_image
2023-01-09 10:08:18 +00:00
def getLeagueImage ( self , league = False , time = ' past ' ) :
if time in [ ' past ' , ' live ' ] :
filepath = ' csv/ {} _games.json ' . format ( time )
else :
filepath = ' csv/upcoming_games.json '
f = open ( filepath , ' r ' )
all_settings = json . load ( f )
f . close ( )
title_img = self . openImage ( ' feature_titles/sports_ ' + time + ' .png ' )
if all_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/sports_ {} .png ' . format ( time ) )
imgs = [ title_img , self . blank ]
else :
imgs = [ ]
leagues_info = all_settings [ ' leagues ' ]
leagues = list ( leagues_info . keys ( ) )
2021-06-15 18:35:04 +00:00
2023-01-09 10:08:18 +00:00
if time == ' live ' :
for league in leagues :
try :
x_offset = 0
if league == ' NFL ' :
f = open ( ' csv/live_nfl.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
league_info = all_settings [ ' leagues ' ] [ ' NFL ' ] [ 0 ]
elif league == ' NHL ' :
f = open ( ' csv/live_nhl.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
league_info = all_settings [ ' leagues ' ] [ ' NHL ' ] [ 0 ]
elif league == ' NBA ' :
f = open ( ' csv/live_nba.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
league_info = all_settings [ ' leagues ' ] [ ' NBA ' ] [ 0 ]
elif league == ' MLB ' :
f = open ( ' csv/live_mlb.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
league_info = all_settings [ ' leagues ' ] [ ' MLB ' ] [ 0 ]
elif league == ' MLS ' :
f = open ( ' csv/live_mls.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
league_info = all_settings [ ' leagues ' ] [ ' MLS ' ] [ 0 ]
elif league == ' PREMIERLEAGUE ' :
f = open ( ' csv/live_pl.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
league_info = all_settings [ ' leagues ' ] [ ' PREMIERLEAGUE ' ] [ 0 ]
img = Image . new ( ' RGB ' , ( 10000 , 32 ) )
try :
league_logo = Image . open ( ' logos/sports/league_logos/ {} .png ' . format ( league ) ) . convert ( ' RGB ' )
img . paste ( league_logo , ( x_offset , 0 ) )
x_offset + = league_logo . size [ 0 ] + self . blank . size [ 0 ]
except :
pass
slight_large_font = ImageFont . load ( " ./fonts/9x15.pil " )
small_font = ImageFont . load ( " ./fonts/5x7.pil " )
med_font = ImageFont . load ( " ./fonts/7x14B.pil " )
large_font = ImageFont . load ( " ./fonts/9x18B.pil " )
extra_small_font = ImageFont . load ( " ./fonts/4x6.pil " )
try :
sports_info = self . readSportsCSV ( league )
except :
pass
buff_size = 25
if all_settings [ ' leagues ' ] [ league ] [ 2 ] == ' no_live ' and all_settings [ ' leagues ' ] [ league ] [ 3 ] == ' no_upcoming ' :
no_match = self . textImage ( ( ' No live games ' ) . upper ( ) , slight_large_font , r = 255 , g = 255 , b = 255 )
img . paste ( no_match , ( x_offset , 10 ) )
x_offset + = no_match . size [ 0 ] + buff_size
elif all_settings [ ' leagues ' ] [ league ] [ 3 ] != ' no_upcoming ' :
next_match = self . textImage ( ' Next game: ' + all_settings [ ' leagues ' ] [ league ] [ 3 ] , slight_large_font , r = 255 , g = 255 , b = 255 )
img . paste ( next_match , ( x_offset , 10 ) )
x_offset + = next_match . size [ 0 ] + buff_size
else :
for match in league_info :
2023-05-26 04:37:56 +00:00
if match [ ' isLive ' ] != ' pre ' :
2023-05-23 10:22:27 +00:00
dateEvent = match [ ' time ' ]
date_timage = self . textImage ( dateEvent , small_font , r = 255 , g = 255 , b = 255 )
strHomeTeam = match [ ' home_team ' ]
strAwayTeam = match [ ' away_team ' ]
intHomeScore = str ( match [ ' home_score ' ] )
intAwayScore = str ( match [ ' away_score ' ] )
try :
home_logo = Image . open ( ' logos/sports/ {} / {} ' . format ( league , sports_info [ strHomeTeam ] [ ' logo ' ] ) )
except Exception as e :
home_logo = self . textImage ( strHomeTeam . replace ( ' ' , ' \n ' ) , extra_small_font , r = 255 , g = 255 , b = 255 )
try :
away_logo = Image . open ( ' logos/sports/ {} / {} ' . format ( league , sports_info [ strAwayTeam ] [ ' logo ' ] ) )
except Exception as e :
away_logo = self . textImage ( strAwayTeam . replace ( ' ' , ' \n ' ) , extra_small_font , r = 255 , g = 255 , b = 255 )
img . paste ( away_logo , ( x_offset , 0 ) )
x_offset + = away_logo . size [ 0 ] + 4
score_image = self . textImage ( intAwayScore + ' - ' + intHomeScore , large_font , h_buff = 5 , r = 255 , g = 255 , b = 255 )
try :
h_colour = mcolors . to_rgb ( sports_info [ strHomeTeam ] [ ' colour ' ] . replace ( ' ' , ' ' ) )
except :
pass
try :
a_colour = mcolors . to_rgb ( sports_info [ strAwayTeam ] [ ' colour ' ] . replace ( ' ' , ' ' ) )
except :
pass
try :
hc_timage = self . textImage ( sports_info [ strHomeTeam ] [ ' code ' ] , small_font , r = int ( h_colour [ 0 ] * 255 ) , g = int ( h_colour [ 1 ] * 255 ) , b = int ( h_colour [ 2 ] * 255 ) )
except Exception as e :
hc_timage = self . textImage ( ' . ' , extra_small_font , r = 255 , g = 255 , b = 255 )
try :
ac_timage = self . textImage ( sports_info [ strAwayTeam ] [ ' code ' ] , small_font , r = int ( a_colour [ 0 ] * 255 ) , g = int ( a_colour [ 1 ] * 255 ) , b = int ( a_colour [ 2 ] * 255 ) )
except Exception as e :
ac_timage = self . textImage ( ' . ' , extra_small_font , r = 255 , g = 255 , b = 255 )
vs_timage = self . textImage ( ' VS ' , extra_small_font , r = 255 , g = 255 , b = 255 )
vs_size = hc_timage . size [ 0 ] + ac_timage . size [ 0 ] + vs_timage . size [ 0 ]
main_offset = x_offset + int ( max ( vs_size , date_timage . size [ 0 ] , score_image . size [ 0 ] ) / 2 )
img . paste ( date_timage , ( main_offset - int ( date_timage . size [ 0 ] / 2 ) , 0 ) )
img . paste ( vs_timage , ( main_offset - int ( vs_timage . size [ 0 ] / 2 ) , 10 ) )
img . paste ( ac_timage , ( main_offset - int ( vs_timage . size [ 0 ] / 2 ) - ac_timage . size [ 0 ] , 9 ) )
img . paste ( score_image , ( main_offset - int ( score_image . size [ 0 ] / 2 ) , 15 ) )
if match [ ' isLive ' ] == ' post ' :
if int ( intHomeScore ) < int ( intAwayScore ) or int ( intHomeScore ) == int ( intAwayScore ) :
ua_image = Image . new ( " RGB " , ( hc_timage . size [ 0 ] - 2 , 1 ) )
ua_image1 = ImageDraw . Draw ( ua_image )
ua_image1 . line ( ( 0 , 0 , hc_timage . size [ 0 ] - 2 , 0 ) , fill = " red " , width = 0 )
img . paste ( ua_image , ( main_offset - int ( vs_timage . size [ 0 ] / 2 ) - ac_timage . size [ 0 ] , ac_timage . size [ 1 ] + 7 ) )
img . paste ( hc_timage , ( main_offset + int ( vs_timage . size [ 0 ] / 2 ) , 9 ) )
if match [ ' isLive ' ] == ' post ' :
if int ( intHomeScore ) > int ( intAwayScore ) or int ( intHomeScore ) == int ( intAwayScore ) :
u_image = Image . new ( " RGB " , ( ac_timage . size [ 0 ] - 2 , 1 ) )
u_image1 = ImageDraw . Draw ( u_image )
u_image1 . line ( ( 0 , 0 , ac_timage . size [ 0 ] - 2 , 0 ) , fill = " red " , width = 0 )
img . paste ( u_image , ( main_offset + int ( vs_timage . size [ 0 ] / 2 ) , hc_timage . size [ 1 ] + 7 ) )
x_offset = ( main_offset + max ( int ( date_timage . size [ 0 ] / 2 ) , int ( vs_timage . size [ 0 ] / 2 ) + hc_timage . size [ 0 ] , int ( score_image . size [ 0 ] / 2 ) ) + 4 )
img . paste ( home_logo , ( x_offset , 0 ) )
x_offset + = home_logo . size [ 0 ] + buff_size
2023-01-09 10:08:18 +00:00
img = img . crop ( ( 0 , 0 , x_offset , 32 ) )
imgs . append ( img )
except Exception as e :
pass
else :
for league in leagues :
try :
x_offset = 0
2023-03-23 10:31:42 +00:00
if ( league == ' PGA ' ) or ( league == ' LPGA ' ) or ( league == ' PGA_EU ' ) or ( league == ' LIV ' ) or ( league == ' NASCAR ' ) or ( league == ' F1 ' ) :
2023-01-09 10:08:18 +00:00
img = Image . new ( ' RGB ' , ( 10000 , 32 ) )
else :
img = Image . new ( ' RGB ' , ( 10000 , 32 ) )
league_info = leagues_info [ league ]
try :
2023-04-23 11:05:10 +00:00
league_logo = Image . open ( ' logos/sports/league_logos/ {} .png ' . format ( league ) )
2023-03-23 10:31:42 +00:00
if ( league == ' PGA ' ) or ( league == ' LPGA ' ) or ( league == ' PGA_EU ' ) or ( league == ' LIV ' ) or ( league == ' NASCAR ' ) or ( league == ' F1 ' ) :
2023-01-09 10:08:18 +00:00
x_offset + = self . blank . size [ 0 ]
else :
img . paste ( league_logo , ( x_offset , 0 ) )
x_offset + = league_logo . size [ 0 ] + self . blank . size [ 0 ]
except :
pass
try :
sports_info = self . readSportsCSV ( league )
except :
pass
2023-04-23 11:05:10 +00:00
med_font = ImageFont . load ( " ./fonts/7x14B.pil " )
large_font = ImageFont . load ( " ./fonts/9x18B.pil " )
extra_small_font = ImageFont . load ( " ./fonts/4x6.pil " )
2023-01-09 10:08:18 +00:00
buff_size = 25
2023-04-23 11:05:10 +00:00
if league == ' UFC ' :
try :
small_font = ImageFont . load ( " ./fonts/6x10.pil " )
date_img = self . textImage ( league_info [ 0 ] [ ' date ' ] , small_font , r = 0 , g = 150 , b = 255 )
eventname_img = self . textImage ( league_info [ 0 ] [ ' name ' ] . upper ( ) , med_font , r = 255 , g = 0 , b = 0 )
venue_img = self . textImage ( league_info [ 0 ] [ ' venue ' ] , small_font , r = 255 , g = 255 , b = 0 )
city_img = self . textImage ( league_info [ 0 ] [ ' city ' ] , small_font , r = 255 , g = 255 , b = 255 )
try :
country_img = self . textImage ( league_info [ 0 ] [ ' country ' ] , small_font , r = 255 , g = 128 , b = 0 )
except :
pass
broadcast_img = self . textImage ( league_info [ 0 ] [ ' broadcast ' ] , small_font , r = 255 , g = 0 , b = 0 )
time_img = self . textImage ( league_info [ 0 ] [ ' time ' ] , small_font , r = 0 , g = 150 , b = 255 )
2023-01-09 10:08:18 +00:00
2023-04-23 11:05:10 +00:00
try :
img . paste ( country_img , ( x_offset + venue_img . size [ 0 ] + 5 + city_img . size [ 0 ] + 5 , 13 ) )
except :
country_img = 0
pass
img . paste ( eventname_img , ( x_offset , 0 ) )
img . paste ( city_img , ( x_offset + venue_img . size [ 0 ] + 5 , 13 ) )
img . paste ( venue_img , ( x_offset , 13 ) )
img . paste ( broadcast_img , ( x_offset + date_img . size [ 0 ] + 5 + time_img . size [ 0 ] + 5 , 23 ) )
img . paste ( date_img , ( x_offset , 23 ) )
img . paste ( time_img , ( x_offset + date_img . size [ 0 ] + 5 , 23 ) )
try :
x_offset = 5 + max ( x_offset + eventname_img . size [ 0 ] , x_offset + venue_img . size [ 0 ] + 5 + city_img . size [ 0 ] + 5 + country_img . size [ 0 ] , x_offset + date_img . size [ 0 ] + 5 + time_img . size [ 0 ] + 5 + broadcast_img . size [ 0 ] )
except :
x_offset = 5 + max ( x_offset + eventname_img . size [ 0 ] , x_offset + venue_img . size [ 0 ] + 5 + city_img . size [ 0 ] + 5 , x_offset + date_img . size [ 0 ] + 5 + time_img . size [ 0 ] + 5 + broadcast_img . size [ 0 ] )
2023-01-09 10:08:18 +00:00
2023-04-23 11:05:10 +00:00
for fight in league_info [ 0 ] [ ' fights ' ] :
try :
if time != ' past ' :
fighter1_img = Image . open ( ' logos/ufc/ {} .png ' . format ( fight [ ' fighter1id ' ] ) )
elif time == ' past ' :
fighter1_img = Image . open ( ' logos/ufc_past/ {} .png ' . format ( fight [ ' fighter1id ' ] ) )
#fighter1_img.thumbnail((9000,32))
except :
fighter1_img = Image . open ( ' logos/unknown.png ' )
pass
try :
if time != ' past ' :
fighter2_img = Image . open ( ' logos/ufc/ {} .png ' . format ( fight [ ' fighter2id ' ] ) )
elif time == ' past ' :
fighter2_img = Image . open ( ' logos/ufc_past/ {} .png ' . format ( fight [ ' fighter2id ' ] ) )
#fighter2_img.thumbnail((9000,32))
except :
fighter2_img = Image . open ( ' logos/unknown.png ' )
pass
weight_img = self . textImage ( fight [ ' weight_div ' ] . upper ( ) , extra_small_font , r = 255 , g = 255 , b = 255 )
age1_img = self . textImage ( fight [ ' fighter1age ' ] , extra_small_font , r = 255 , g = 255 , b = 255 )
age2_img = self . textImage ( fight [ ' fighter2age ' ] , extra_small_font , r = 255 , g = 255 , b = 255 )
age_img = self . textImage ( ' AGE ' , extra_small_font , r = 255 , g = 0 , b = 0 )
height1_img = self . textImage ( fight [ ' fighter1height ' ] , extra_small_font , r = 255 , g = 255 , b = 255 )
height2_img = self . textImage ( fight [ ' fighter2height ' ] , extra_small_font , r = 255 , g = 255 , b = 255 )
height_img = self . textImage ( ' HEIGHT ' , extra_small_font , r = 255 , g = 0 , b = 0 )
weight1_img = self . textImage ( fight [ ' fighter1weight ' ] , extra_small_font , r = 255 , g = 255 , b = 255 )
weight2_img = self . textImage ( fight [ ' fighter2weight ' ] , extra_small_font , r = 255 , g = 255 , b = 255 )
weights_img = self . textImage ( ' WEIGHT ' , extra_small_font , r = 255 , g = 0 , b = 0 )
reach1_img = self . textImage ( fight [ ' fighter1reach ' ] , extra_small_font , r = 255 , g = 255 , b = 255 )
reach2_img = self . textImage ( fight [ ' fighter2reach ' ] , extra_small_font , r = 255 , g = 255 , b = 255 )
reach_img = self . textImage ( ' REACH ' , extra_small_font , r = 255 , g = 0 , b = 0 )
name1_img = self . textImage ( fight [ ' fighter1name ' ] , extra_small_font , r = 255 , g = 255 , b = 255 )
record1_img = self . textImage ( fight [ ' fighter1record ' ] , extra_small_font , r = 255 , g = 255 , b = 255 )
name2_img = self . textImage ( fight [ ' fighter2name ' ] , extra_small_font , r = 255 , g = 255 , b = 255 )
record2_img = self . textImage ( fight [ ' fighter2record ' ] , extra_small_font , r = 255 , g = 255 , b = 255 )
if time != ' past ' :
odds1_img = self . textImage ( fight [ ' fighter1odds ' ] , extra_small_font , r = 0 , g = 255 , b = 0 )
#odds2_img = self.textImage(fight['fighter2odds'], extra_small_font, r=0, g=255, b=0)
elif time == ' past ' :
if fight [ ' fighter1win ' ] :
win1_img = self . textImage ( ' WIN ' , extra_small_font , r = 0 , g = 255 , b = 0 )
2023-04-24 17:26:08 +00:00
elif not fight [ ' fighter1win ' ] and not fight [ ' fighter2win ' ] :
win1_img = self . textImage ( ' DRAW ' , extra_small_font , r = 80 , g = 80 , b = 80 )
2023-04-23 11:05:10 +00:00
else :
win1_img = self . textImage ( ' LOSS ' , extra_small_font , r = 0 , g = 255 , b = 0 )
max_fighter1_pic = max ( fighter1_img . size [ 0 ] , name1_img . size [ 0 ] , record1_img . size [ 0 ] )
draw = ImageDraw . Draw ( img , " RGBA " )
img . paste ( fighter1_img , ( x_offset + int ( max_fighter1_pic / 2 ) - int ( fighter1_img . size [ 0 ] / 2 ) , 0 ) , mask = fighter1_img )
2023-04-25 10:52:10 +00:00
try :
country1_img = Image . open ( ' logos/ufc_countries/ {} ' . format ( fight [ ' fighter1country ' ] . split ( ' / ' ) [ - 1 ] . split ( ' & ' ) [ 0 ] ) )
country1_img . thumbnail ( ( 9000 , 12 ) )
img . paste ( country1_img , ( x_offset , 0 ) )
except :
pass
2023-04-23 11:05:10 +00:00
draw . rectangle ( [ ( x_offset , 32 ) , ( x_offset + max ( name1_img . size [ 0 ] , record1_img . size [ 0 ] ) - 4 , 21 ) ] , fill = ( 5 , 5 , 5 , 200 ) )
draw . text ( ( x_offset + int ( max_fighter1_pic / 2 ) - int ( name1_img . size [ 0 ] / 2 ) , 21 ) , fight [ ' fighter1name ' ] , fill = ( 255 , 255 , 255 ) , font = extra_small_font )
#img.paste(name1_img, (x_offset + int(max_fighter1_pic/2) - int(name1_img.size[0]/2),21))
draw . text ( ( x_offset + int ( max_fighter1_pic / 2 ) - int ( record1_img . size [ 0 ] / 2 ) , 27 ) , fight [ ' fighter1record ' ] , fill = ( 255 , 255 , 0 ) , font = extra_small_font )
#img.paste(record1_img, (x_offset + int(max_fighter1_pic/2) - int(record1_img.size[0]/2), 27))
x_offset + = max ( fighter1_img . size [ 0 ] , name1_img . size [ 0 ] , record1_img . size [ 0 ] )
widest = x_offset + int ( max ( weight_img . size [ 0 ] , age1_img . size [ 0 ] + 3 + age_img . size [ 0 ] + 3 + age2_img . size [ 0 ] , height1_img . size [ 0 ] + 3 + height_img . size [ 0 ] + 3 + height2_img . size [ 0 ] , weight1_img . size [ 0 ] + 3 + weights_img . size [ 0 ] + 3 + weight2_img . size [ 0 ] , reach1_img . size [ 0 ] + 3 + reach_img . size [ 0 ] + 3 + reach2_img . size [ 0 ] ) / 2 )
largest = max ( age_img . size [ 0 ] , weights_img . size [ 0 ] , height_img . size [ 0 ] , reach_img . size [ 0 ] )
img . paste ( weight_img , ( widest - int ( weight_img . size [ 0 ] / 2 ) , 0 ) )
if time != ' past ' :
draw . text ( ( widest - int ( weight_img . size [ 0 ] / 2 ) - odds1_img . size [ 0 ] - 2 , 0 ) , fight [ ' fighter1odds ' ] , fill = ( 0 , 255 , 0 ) , font = extra_small_font )
# img.paste(odds1_img, (widest - int(weight_img.size[0]/2) - odds1_img.size[0] - 2,0))
elif time == ' past ' :
if fight [ ' fighter1win ' ] :
draw . text ( ( widest - int ( weight_img . size [ 0 ] / 2 ) - win1_img . size [ 0 ] - 2 , 0 ) , ' WIN ' , fill = ( 0 , 255 , 0 ) , font = extra_small_font )
2023-04-24 17:26:08 +00:00
elif not fight [ ' fighter1win ' ] and not fight [ ' fighter2win ' ] :
draw . text ( ( widest - int ( weight_img . size [ 0 ] / 2 ) - win1_img . size [ 0 ] - 2 , 0 ) , ' DRAW ' , fill = ( 80 , 80 , 80 ) , font = extra_small_font )
2023-04-23 11:05:10 +00:00
else :
draw . text ( ( widest - int ( weight_img . size [ 0 ] / 2 ) - win1_img . size [ 0 ] - 2 , 0 ) , ' LOSS ' , fill = ( 255 , 0 , 0 ) , font = extra_small_font )
2023-01-09 10:08:18 +00:00
2023-04-23 11:05:10 +00:00
img . paste ( age1_img , ( widest - int ( largest / 2 ) - age1_img . size [ 0 ] - 3 , 7 ) )
img . paste ( age_img , ( widest - int ( age_img . size [ 0 ] / 2 ) , 7 ) )
img . paste ( age2_img , ( widest + int ( largest / 2 ) + 3 , 7 ) )
img . paste ( height1_img , ( widest - int ( largest / 2 ) - height1_img . size [ 0 ] - 3 , 13 ) )
img . paste ( height_img , ( widest - int ( height_img . size [ 0 ] / 2 ) , 13 ) )
img . paste ( height2_img , ( widest + int ( largest / 2 ) + 3 , 13 ) )
img . paste ( weight1_img , ( widest - int ( largest / 2 ) - weight1_img . size [ 0 ] - 3 , 19 ) )
img . paste ( weights_img , ( widest - int ( weights_img . size [ 0 ] / 2 ) , 19 ) )
img . paste ( weight2_img , ( widest + int ( largest / 2 ) + 3 , 19 ) )
img . paste ( reach1_img , ( widest - int ( largest / 2 ) - reach1_img . size [ 0 ] - 3 , 25 ) )
img . paste ( reach_img , ( widest - int ( reach_img . size [ 0 ] / 2 ) , 25 ) )
img . paste ( reach2_img , ( widest + int ( largest / 2 ) + 3 , 25 ) )
x_offset = widest + widest - x_offset + 2
max_fighter2_pic = max ( fighter2_img . size [ 0 ] , name2_img . size [ 0 ] , record2_img . size [ 0 ] )
img . paste ( fighter2_img , ( x_offset + int ( max_fighter2_pic / 2 ) - int ( fighter2_img . size [ 0 ] / 2 ) , 0 ) , mask = fighter2_img )
draw . rectangle ( [ ( x_offset , 32 ) , ( x_offset + max ( name2_img . size [ 0 ] , record2_img . size [ 0 ] ) - 4 , 21 ) ] , fill = ( 5 , 5 , 5 , 200 ) )
draw . text ( ( x_offset + int ( max_fighter2_pic / 2 ) - int ( name2_img . size [ 0 ] / 2 ) , 21 ) , fight [ ' fighter2name ' ] , fill = ( 255 , 255 , 255 ) , font = extra_small_font )
#img.paste(name1_img, (x_offset + int(max_fighter1_pic/2) - int(name1_img.size[0]/2),21))
draw . text ( ( x_offset + int ( max_fighter2_pic / 2 ) - int ( record2_img . size [ 0 ] / 2 ) , 27 ) , fight [ ' fighter2record ' ] , fill = ( 255 , 255 , 0 ) , font = extra_small_font )
#img.paste(record1_img, (x_offset + int(max_fighter1_pic/2) - int(record1_img.size[0]/2), 27))
x_offset + = max ( fighter2_img . size [ 0 ] , name2_img . size [ 0 ] , record2_img . size [ 0 ] ) + 25
if time != ' past ' :
draw . text ( ( widest + int ( weight_img . size [ 0 ] / 2 ) + 2 , 0 ) , fight [ ' fighter2odds ' ] , fill = ( 0 , 255 , 0 ) , font = extra_small_font )
#img.paste(odds2_img, (widest + int(weight_img.size[0]/2) + 2,0))
elif time == ' past ' :
if fight [ ' fighter2win ' ] :
draw . text ( ( widest + int ( weight_img . size [ 0 ] / 2 ) + 2 , 0 ) , ' WIN ' , fill = ( 0 , 255 , 0 ) , font = extra_small_font )
2023-04-24 17:26:08 +00:00
elif not fight [ ' fighter2win ' ] and not fight [ ' fighter1win ' ] :
draw . text ( ( widest + int ( weight_img . size [ 0 ] / 2 ) + 2 , 0 ) , ' DRAW ' , fill = ( 80 , 80 , 80 ) , font = extra_small_font )
2023-03-23 09:37:41 +00:00
else :
2023-04-23 11:05:10 +00:00
draw . text ( ( widest + int ( weight_img . size [ 0 ] / 2 ) + 2 , 0 ) , ' LOSS ' , fill = ( 255 , 0 , 0 ) , font = extra_small_font )
2023-04-25 10:52:10 +00:00
try :
country2_img = Image . open ( ' logos/ufc_countries/ {} ' . format ( fight [ ' fighter2country ' ] . split ( ' / ' ) [ - 1 ] . split ( ' & ' ) [ 0 ] ) )
country2_img . thumbnail ( ( 9000 , 12 ) )
img . paste ( country2_img , ( x_offset - country2_img . size [ 0 ] - 25 , 0 ) )
except :
pass
2023-04-23 11:05:10 +00:00
except :
pass
# DONT FORGET TO CHANGE DIRECTORY FOR PAST UFC GAMES
else :
small_font = ImageFont . load ( " ./fonts/5x7.pil " )
for match in league_info :
2023-04-27 09:24:51 +00:00
try :
dateEvent = match [ ' date2 ' ]
except :
dateEvent = match [ ' date ' ] . replace ( ' - ' , ' . ' )
2023-04-23 11:05:10 +00:00
date_timage = self . textImage ( dateEvent , small_font , r = 255 , g = 255 , b = 255 )
if ( league == ' PGA ' ) or ( league == ' LPGA ' ) or ( league == ' PGA_EU ' ) or ( league == ' LIV ' ) or ( league == ' NASCAR ' ) or ( league == ' F1 ' ) :
event = match [ ' event ' ]
venue = match [ ' venue ' ]
city = match [ ' city ' ]
country = match [ ' country ' ]
season = match [ ' season ' ]
if ( time != ' future ' ) and ( league != ' LIV ' ) :
2023-05-19 08:40:59 +00:00
golf_standings1 = match [ ' golf_rankings ' ] [ : : 2 ]
golf_standings2 = match [ ' golf_rankings ' ] [ 1 : : 2 ]
2023-04-23 11:05:10 +00:00
elif ( time != ' future ' ) and ( league == ' LIV ' ) :
2023-05-19 08:40:59 +00:00
golf_standings1 = match [ ' golf_rankings ' ] [ : : 2 ]
golf_standings2 = match [ ' golf_rankings ' ] [ 1 : : 2 ]
#golf_standings1_teams = match['golf_standings'][1][::2]
#golf_standings2_teams = match['golf_standings'][1][1::2]
2023-04-23 11:05:10 +00:00
img . paste ( league_logo , ( x_offset , 0 ) )
x_offset + = league_logo . size [ 0 ] + 2
2023-05-19 08:40:59 +00:00
try :
if match [ ' purse ' ] != ' N/A ' and match [ ' purse ' ] != " " and match [ ' purse ' ] != ' 0 ' :
purse_timage = self . textImage ( match [ ' purse ' ] , small_font , r = 0 , g = 255 , b = 0 )
except :
pass
try :
if match [ ' shots_par ' ] != ' N/A ' and match [ ' shots_par ' ] != " " and match [ ' shots_par ' ] != 0 :
par_timage = self . textImage ( ' Par ' + str ( match [ ' shots_par ' ] ) , small_font , r = 255 , g = 127 , b = 80 )
except :
pass
try :
if match [ ' total_yards ' ] != ' N/A ' and match [ ' total_yards ' ] != " " and match [ ' total_yards ' ] != 0 :
yards_timage = self . textImage ( str ( match [ ' total_yards ' ] ) + ' yds ' , small_font , r = 255 , g = 127 , b = 80 )
except :
pass
2023-04-23 11:05:10 +00:00
if time == ' future ' :
event_timage = self . textImage ( event , med_font , r = 255 , g = 255 , b = 0 )
venue_timage = self . textImage ( venue , small_font , r = 0 , g = 255 , b = 0 )
city_timage = self . textImage ( city , small_font , r = 255 , g = 255 , b = 255 )
country_timage = self . textImage ( country , small_font , r = 255 , g = 255 , b = 255 )
date1_timage = self . textImage ( ' Date: ' , small_font , r = 255 , g = 0 , b = 171 )
season1_timage = self . textImage ( ' Season: ' , small_font , r = 0 , g = 170 , b = 255 )
season_timage = self . textImage ( season , small_font , r = 255 , g = 255 , b = 255 )
2023-05-19 08:40:59 +00:00
x_offset + = 2
x_offset_2nd = x_offset
x_offset_3rd = x_offset
2023-04-23 11:05:10 +00:00
#date
2023-05-19 08:40:59 +00:00
img . paste ( date1_timage , ( x_offset , 26 ) )
x_offset + = date1_timage . size [ 0 ]
img . paste ( date_timage , ( x_offset , 26 ) )
x_offset + = date_timage . size [ 0 ] + 10
#season
img . paste ( season1_timage , ( x_offset , 26 ) )
x_offset + = season1_timage . size [ 0 ]
img . paste ( season_timage , ( x_offset , 26 ) )
x_offset + = season_timage . size [ 0 ] + 3
2023-04-23 11:05:10 +00:00
#event
2023-05-19 08:40:59 +00:00
img . paste ( event_timage , ( x_offset_2nd , 0 ) )
x_offset_2nd + = event_timage . size [ 0 ] + 5
2023-04-23 11:05:10 +00:00
#country
2023-05-19 08:40:59 +00:00
img . paste ( country_timage , ( x_offset_2nd , 5 ) )
x_offset_2nd + = country_timage . size [ 0 ]
#venue
img . paste ( venue_timage , ( x_offset_3rd , 16 ) )
x_offset_3rd + = venue_timage . size [ 0 ] + 10
2023-04-23 11:05:10 +00:00
#city
2023-05-19 08:40:59 +00:00
img . paste ( city_timage , ( x_offset_3rd , 16 ) )
x_offset_3rd + = city_timage . size [ 0 ]
try :
if match [ ' total_yards ' ] != ' N/A ' and match [ ' total_yards ' ] != " " and match [ ' total_yards ' ] != 0 :
img . paste ( yards_timage , ( x_offset_3rd + 10 , 16 ) )
x_offset_3rd + = yards_timage . size [ 0 ] + 10
except :
pass
try :
if match [ ' shots_par ' ] != ' N/A ' and match [ ' shots_par ' ] != " " and match [ ' shots_par ' ] != 0 :
img . paste ( par_timage , ( x_offset_3rd + 5 , 16 ) )
x_offset_3rd + = par_timage . size [ 0 ] + 5
except :
pass
try :
if match [ ' purse ' ] != ' N/A ' and match [ ' purse ' ] != " " and match [ ' purse ' ] != ' 0 ' :
img . paste ( purse_timage , ( x_offset + 7 , 25 ) )
x_offset + = purse_timage . size [ 0 ] + 3 + 7
except :
pass
x_offset = max ( x_offset , x_offset_2nd , x_offset_3rd )
2023-04-23 11:05:10 +00:00
x_offset + = buff_size
else :
event_timage = self . textImage ( event , med_font , r = 255 , g = 255 , b = 0 )
venue_timage = self . textImage ( venue , small_font , r = 0 , g = 255 , b = 0 )
city_timage = self . textImage ( city , small_font , r = 255 , g = 255 , b = 255 )
country_timage = self . textImage ( country , small_font , r = 255 , g = 255 , b = 255 )
date1_timage = self . textImage ( ' Date: ' , small_font , r = 255 , g = 0 , b = 171 )
season1_timage = self . textImage ( ' Season: ' , small_font , r = 0 , g = 170 , b = 255 )
season_timage = self . textImage ( season , small_font , r = 255 , g = 255 , b = 255 )
2023-05-19 08:40:59 +00:00
x_offset + = 2
x_offset_2nd = x_offset
x_offset_3rd = x_offset
2023-04-23 11:05:10 +00:00
#date
2023-05-19 08:40:59 +00:00
img . paste ( date1_timage , ( x_offset , 26 ) )
x_offset + = date1_timage . size [ 0 ]
img . paste ( date_timage , ( x_offset , 26 ) )
x_offset + = date_timage . size [ 0 ] + 10
#season
img . paste ( season1_timage , ( x_offset , 26 ) )
x_offset + = season1_timage . size [ 0 ]
img . paste ( season_timage , ( x_offset , 26 ) )
x_offset + = season_timage . size [ 0 ] + 3
2023-04-23 11:05:10 +00:00
#event
2023-05-19 08:40:59 +00:00
img . paste ( event_timage , ( x_offset_2nd , 0 ) )
x_offset_2nd + = event_timage . size [ 0 ] + 5
2023-04-23 11:05:10 +00:00
#country
2023-05-19 08:40:59 +00:00
img . paste ( country_timage , ( x_offset_2nd , 5 ) )
x_offset_2nd + = country_timage . size [ 0 ]
#venue
img . paste ( venue_timage , ( x_offset_3rd , 16 ) )
x_offset_3rd + = venue_timage . size [ 0 ] + 10
2023-04-23 11:05:10 +00:00
#city
2023-05-19 08:40:59 +00:00
img . paste ( city_timage , ( x_offset_3rd , 16 ) )
x_offset_3rd + = city_timage . size [ 0 ]
try :
if match [ ' total_yards ' ] != ' N/A ' and match [ ' total_yards ' ] != " " and match [ ' total_yards ' ] != 0 :
img . paste ( yards_timage , ( x_offset_3rd + 10 , 16 ) )
x_offset_3rd + = yards_timage . size [ 0 ] + 10
except :
pass
try :
if match [ ' shots_par ' ] != ' N/A ' and match [ ' shots_par ' ] != " " and match [ ' shots_par ' ] != 0 :
img . paste ( par_timage , ( x_offset_3rd + 5 , 16 ) )
x_offset_3rd + = par_timage . size [ 0 ] + 5
except :
pass
try :
if match [ ' purse ' ] != ' N/A ' and match [ ' purse ' ] != " " and match [ ' purse ' ] != ' 0 ' :
img . paste ( purse_timage , ( x_offset + 7 , 25 ) )
x_offset + = purse_timage . size [ 0 ] + 3 + 7
except :
pass
x_offset = max ( x_offset , x_offset_2nd , x_offset_3rd ) + 5
#x_offset2 = x_offset
symbol1_timage = self . textImage ( ' | ' , small_font , r = 255 , g = 255 , b = 0 )
for each_player , each_player2 in zip ( golf_standings1 , golf_standings2 ) :
img . paste ( symbol1_timage , ( x_offset , 7 ) )
img . paste ( symbol1_timage , ( x_offset , 20 ) )
x_offset + = symbol1_timage . size [ 0 ] + 3
golf1_offset = 0
golf2_offset = 0
try :
golf1_rank_timage = self . textImage ( each_player [ ' rank ' ] , small_font , r = 255 , g = 255 , b = 255 )
golf1_offset + = golf1_rank_timage . size [ 0 ] + 3
img . paste ( golf1_rank_timage , ( x_offset , 7 ) )
try :
golf1_country = Image . open ( ' logos/ufc_countries/ {} ' . format ( each_player [ ' country ' ] . split ( ' / ' ) [ - 1 ] . split ( ' & ' ) [ 0 ] ) )
golf1_country . thumbnail ( ( 9000 , 12 ) )
img . paste ( golf1_country , ( x_offset + golf1_rank_timage . size [ 0 ] + 3 , 4 ) )
golf1_offset + = golf1_country . size [ 0 ] + 3
except :
pass
golf_standings1_timage = self . textImage ( each_player [ ' name ' ] + ' ' + each_player [ ' score ' ] , small_font , r = 255 , g = 255 , b = 255 )
img . paste ( golf_standings1_timage , ( x_offset + golf1_offset , 7 ) )
golf1_offset + = golf_standings1_timage . size [ 0 ]
except :
pass
try :
golf2_rank_timage = self . textImage ( each_player2 [ ' rank ' ] , small_font , r = 255 , g = 255 , b = 255 )
golf2_offset + = golf2_rank_timage . size [ 0 ] + 3
img . paste ( golf2_rank_timage , ( x_offset , 20 ) )
try :
golf2_country = Image . open ( ' logos/ufc_countries/ {} ' . format ( each_player2 [ ' country ' ] . split ( ' / ' ) [ - 1 ] . split ( ' & ' ) [ 0 ] ) )
golf2_country . thumbnail ( ( 9000 , 12 ) )
img . paste ( golf2_country , ( x_offset + golf2_rank_timage . size [ 0 ] + 3 , 17 ) )
golf2_offset + = golf2_country . size [ 0 ] + 3
except :
pass
golf_standings2_timage = self . textImage ( each_player2 [ ' name ' ] + ' ' + each_player2 [ ' score ' ] , small_font , r = 255 , g = 255 , b = 255 )
img . paste ( golf_standings2_timage , ( x_offset + golf2_offset , 20 ) )
golf2_offset + = golf_standings2_timage . size [ 0 ]
except :
pass
x_offset + = max ( golf2_offset , golf1_offset ) + 5
#for each_player in golf_standings1:
# symbol1_timage = self.textImage('|', small_font, r=255, g=255, b=0)
# img.paste(symbol1_timage, (x_offset + 5, 7))
# golf_standings1_timage = self.textImage(each_player, small_font, r=255, g=255, b=255)
# img.paste(golf_standings1_timage, (x_offset + symbol1_timage.size[0] + 7, 7))
# x_offset += (golf_standings1_timage.size[0] + symbol1_timage.size[0] + 7)
#for each_player2 in golf_standings2:
# symbol2_timage = self.textImage('|', small_font, r=255, g=255, b=0)
# img.paste(symbol2_timage, (x_offset2 + 5, 20))
# golf_standings2_timage = self.textImage(each_player2, small_font, r=255, g=255, b=255)
# img.paste(golf_standings2_timage, (x_offset2 + symbol2_timage.size[0] + 7, 20))
# x_offset2 += (golf_standings2_timage.size[0] + symbol2_timage.size[0] + 7)
# if league == 'LIV':
# if x_offset >= x_offset2:
# x_offset += 10
# x_offset2 = x_offset
# else:
# x_offset2 += 10
# x_offset = x_offset2
#for each_team in golf_standings1_teams:
# symbol1_timage = self.textImage('|', small_font, r=0, g=255, b=0)
# img.paste(symbol1_timage, (x_offset + 5, 7))
# golf_standings1_timage = self.textImage(each_team, small_font, r=255, g=255, b=255)
# img.paste(golf_standings1_timage, (x_offset + symbol1_timage.size[0] + 7, 7))
# x_offset += (golf_standings1_timage.size[0] + symbol1_timage.size[0] + 7)
#for each_team2 in golf_standings2_teams:
# symbol2_timage = self.textImage('|', small_font, r=0, g=255, b=0)
# img.paste(symbol2_timage, (x_offset2 + 5, 20))
# golf_standings2_timage = self.textImage(each_team2, small_font, r=255, g=255, b=255)
# img.paste(golf_standings2_timage, (x_offset2 + symbol2_timage.size[0] + 7, 20))
# x_offset2 += (golf_standings2_timage.size[0] + symbol2_timage.size[0] + 7)
#if x_offset >= x_offset2:
x_offset + = buff_size
#else:
# x_offset = x_offset2
# x_offset += buff_size
2023-01-09 10:08:18 +00:00
else :
2023-04-23 11:05:10 +00:00
strHomeTeam = match [ ' home_team ' ]
strAwayTeam = match [ ' away_team ' ]
if time != ' future ' :
intHomeScore = str ( match [ ' home_score ' ] )
intAwayScore = str ( match [ ' away_score ' ] )
2023-01-09 10:08:18 +00:00
try :
2023-04-23 11:05:10 +00:00
home_logo = Image . open ( ' logos/sports/ {} / {} ' . format ( league , sports_info [ strHomeTeam ] [ ' logo ' ] ) )
2023-01-09 10:08:18 +00:00
except Exception as e :
2023-04-23 11:05:10 +00:00
home_logo = self . textImage ( strHomeTeam . replace ( ' ' , ' \n ' ) , extra_small_font , r = 255 , g = 255 , b = 255 )
2023-01-09 10:08:18 +00:00
try :
2023-04-23 11:05:10 +00:00
away_logo = Image . open ( ' logos/sports/ {} / {} ' . format ( league , sports_info [ strAwayTeam ] [ ' logo ' ] ) )
2023-01-09 10:08:18 +00:00
except Exception as e :
2023-04-23 11:05:10 +00:00
away_logo = self . textImage ( strAwayTeam . replace ( ' ' , ' \n ' ) , extra_small_font , r = 255 , g = 255 , b = 255 )
img . paste ( away_logo , ( x_offset , 0 ) )
x_offset + = away_logo . size [ 0 ] + 4
if time == ' future ' :
2023-04-25 08:53:38 +00:00
try :
start_time = match [ ' time ' ]
2023-04-23 11:05:10 +00:00
#img.paste(date_timage, (x_offset+5, 0))
2023-04-25 08:53:38 +00:00
time_img = self . textImage ( start_time , small_font , r = 255 , g = 255 , b = 255 )
except :
pass
2023-04-23 11:05:10 +00:00
try :
h_colour = mcolors . to_rgb ( sports_info [ strHomeTeam ] [ ' colour ' ] . replace ( ' ' , ' ' ) )
except :
pass
try :
a_colour = mcolors . to_rgb ( sports_info [ strAwayTeam ] [ ' colour ' ] . replace ( ' ' , ' ' ) )
except :
pass
vs_timage = self . textImage ( ' vs ' , med_font , r = 255 , g = 255 , b = 255 , h_buff = 5 )
try :
hc_timage = self . textImage ( sports_info [ strHomeTeam ] [ ' code ' ] , med_font , r = int ( h_colour [ 0 ] * 255 ) , g = int ( h_colour [ 1 ] * 255 ) , b = int ( h_colour [ 2 ] * 255 ) )
except Exception as e :
hc_timage = self . textImage ( ' . ' , extra_small_font , r = 255 , g = 255 , b = 255 )
try :
ac_timage = self . textImage ( sports_info [ strAwayTeam ] [ ' code ' ] , med_font , r = int ( a_colour [ 0 ] * 255 ) , g = int ( a_colour [ 1 ] * 255 ) , b = int ( a_colour [ 2 ] * 255 ) )
except Exception as e :
ac_timage = self . textImage ( ' . ' , extra_small_font , r = 255 , g = 255 , b = 255 )
vs_size = vs_timage . size [ 0 ] + ac_timage . size [ 0 ] + hc_timage . size [ 0 ]
main_offset = 5 + x_offset + int ( max ( vs_size , date_timage . size [ 0 ] ) / 2 )
2023-04-25 08:53:38 +00:00
try :
img . paste ( time_img , ( main_offset - int ( time_img . size [ 0 ] / 2 ) , 26 ) )
except :
pass
2023-04-23 11:05:10 +00:00
img . paste ( date_timage , ( main_offset - int ( date_timage . size [ 0 ] / 2 ) , 0 ) )
img . paste ( vs_timage , ( main_offset - int ( vs_timage . size [ 0 ] / 2 ) , 9 ) )
img . paste ( ac_timage , ( main_offset - int ( vs_timage . size [ 0 ] / 2 ) - ac_timage . size [ 0 ] , 9 ) )
img . paste ( hc_timage , ( main_offset + int ( vs_timage . size [ 0 ] / 2 ) , 9 ) )
x_offset = ( main_offset + max ( int ( date_timage . size [ 0 ] / 2 ) , int ( vs_timage . size [ 0 ] / 2 ) + hc_timage . size [ 0 ] ) + 6 )
else :
score_image = self . textImage ( intAwayScore + ' - ' + intHomeScore , large_font , h_buff = 5 , r = 255 , g = 255 , b = 255 )
try :
h_colour = mcolors . to_rgb ( sports_info [ strHomeTeam ] [ ' colour ' ] . replace ( ' ' , ' ' ) )
except :
pass
try :
a_colour = mcolors . to_rgb ( sports_info [ strAwayTeam ] [ ' colour ' ] . replace ( ' ' , ' ' ) )
except :
pass
try :
hc_timage = self . textImage ( sports_info [ strHomeTeam ] [ ' code ' ] , small_font , r = int ( h_colour [ 0 ] * 255 ) , g = int ( h_colour [ 1 ] * 255 ) , b = int ( h_colour [ 2 ] * 255 ) )
except Exception as e :
hc_timage = self . textImage ( ' . ' , extra_small_font , r = 255 , g = 255 , b = 255 )
try :
ac_timage = self . textImage ( sports_info [ strAwayTeam ] [ ' code ' ] , small_font , r = int ( a_colour [ 0 ] * 255 ) , g = int ( a_colour [ 1 ] * 255 ) , b = int ( a_colour [ 2 ] * 255 ) )
except Exception as e :
ac_timage = self . textImage ( ' . ' , extra_small_font , r = 255 , g = 255 , b = 255 )
vs_timage = self . textImage ( ' VS ' , extra_small_font , r = 255 , g = 255 , b = 255 )
vs_size = hc_timage . size [ 0 ] + ac_timage . size [ 0 ] + vs_timage . size [ 0 ]
main_offset = x_offset + int ( max ( vs_size , date_timage . size [ 0 ] , score_image . size [ 0 ] ) / 2 )
img . paste ( date_timage , ( main_offset - int ( date_timage . size [ 0 ] / 2 ) , 0 ) )
img . paste ( vs_timage , ( main_offset - int ( vs_timage . size [ 0 ] / 2 ) , 10 ) )
img . paste ( ac_timage , ( main_offset - int ( vs_timage . size [ 0 ] / 2 ) - ac_timage . size [ 0 ] , 9 ) )
img . paste ( score_image , ( main_offset - int ( score_image . size [ 0 ] / 2 ) , 15 ) )
if int ( intHomeScore ) < int ( intAwayScore ) or int ( intHomeScore ) == int ( intAwayScore ) :
ua_image = Image . new ( " RGB " , ( ac_timage . size [ 0 ] - 2 , 1 ) )
ua_image1 = ImageDraw . Draw ( ua_image )
ua_image1 . line ( ( 0 , 0 , ac_timage . size [ 0 ] - 2 , 0 ) , fill = " red " , width = 0 )
img . paste ( ua_image , ( main_offset - int ( vs_timage . size [ 0 ] / 2 ) - ac_timage . size [ 0 ] , ac_timage . size [ 1 ] + 7 ) )
img . paste ( hc_timage , ( main_offset + int ( vs_timage . size [ 0 ] / 2 ) , 9 ) )
if int ( intHomeScore ) > int ( intAwayScore ) or int ( intHomeScore ) == int ( intAwayScore ) :
u_image = Image . new ( " RGB " , ( hc_timage . size [ 0 ] - 2 , 1 ) )
u_image1 = ImageDraw . Draw ( u_image )
u_image1 . line ( ( 0 , 0 , hc_timage . size [ 0 ] - 2 , 0 ) , fill = " red " , width = 0 )
img . paste ( u_image , ( main_offset + int ( vs_timage . size [ 0 ] / 2 ) , hc_timage . size [ 1 ] + 7 ) )
x_offset = ( main_offset + max ( int ( date_timage . size [ 0 ] / 2 ) , int ( vs_timage . size [ 0 ] / 2 ) + hc_timage . size [ 0 ] , int ( score_image . size [ 0 ] / 2 ) ) + 4 )
img . paste ( home_logo , ( x_offset , 0 ) )
x_offset + = home_logo . size [ 0 ]
x_offset + = buff_size
2023-01-09 10:08:18 +00:00
img = img . crop ( ( 0 , 0 , x_offset , 32 ) )
imgs . append ( img )
2023-02-23 06:34:05 +00:00
2023-01-09 10:08:18 +00:00
except Exception as e :
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
return self . stitchImage ( imgs )
2021-06-27 11:07:47 +00:00
def getLeagueTableImage ( self , league = False ) :
2021-06-17 19:06:23 +00:00
2022-04-07 17:35:38 +00:00
f = open ( ' csv/league_tables.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
2021-06-27 11:07:47 +00:00
2021-10-04 20:39:22 +00:00
leagues_info = all_settings [ ' leagues ' ]
2021-06-15 18:35:04 +00:00
2021-10-04 20:39:22 +00:00
leagues = list ( leagues_info . keys ( ) )
2021-06-15 18:35:04 +00:00
2021-10-04 20:39:22 +00:00
if all_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/sports_team_stats.png ' )
imgs = [ title_img , self . blank ]
else :
imgs = [ ]
2023-05-12 08:20:52 +00:00
ten_or_twenty = slice ( None )
2021-10-04 20:39:22 +00:00
for league in leagues :
2022-02-28 20:46:20 +00:00
2021-12-14 15:38:09 +00:00
try :
x_offset = 0
2021-10-25 18:42:00 +00:00
2021-12-14 15:38:09 +00:00
img = Image . new ( ' RGB ' , ( 10000 , 32 ) )
2023-05-09 08:18:55 +00:00
if league == ' PGA ' :
league_logo = Image . open ( ' logos/sports/league_logos/pga_1.png ' ) . convert ( ' RGB ' )
2023-05-12 08:20:52 +00:00
try :
if all_settings [ ' top20 ' ] == 10 :
ten_or_twenty = slice ( 10 )
else :
ten_or_twenty = slice ( None )
except :
ten_or_twenty = slice ( None )
2023-05-09 08:18:55 +00:00
elif league == ' LPGA ' :
league_logo = Image . open ( ' logos/sports/league_logos/lpga_1.png ' ) . convert ( ' RGB ' )
2023-05-12 08:20:52 +00:00
try :
if all_settings [ ' top20 ' ] == 10 :
ten_or_twenty = slice ( 10 )
else :
ten_or_twenty = slice ( None )
except :
ten_or_twenty = slice ( None )
2023-05-09 08:18:55 +00:00
else :
league_logo = Image . open ( ' logos/sports/league_logos/ {} .png ' . format ( league ) ) . convert ( ' RGB ' )
2023-05-12 08:20:52 +00:00
ten_or_twenty = slice ( None )
2021-12-14 15:38:09 +00:00
img . paste ( league_logo , ( x_offset , 0 ) )
x_offset + = league_logo . size [ 0 ] + self . blank . size [ 0 ]
2023-05-09 08:18:55 +00:00
2021-12-14 15:38:09 +00:00
team_info = leagues_info [ league ]
2023-05-09 08:18:55 +00:00
2021-12-14 15:38:09 +00:00
small_font = ImageFont . load ( " ./fonts/5x7.pil " )
med_font = ImageFont . load ( " ./fonts/8x13B.pil " )
large_font = ImageFont . load ( " ./fonts/10x20.pil " )
2023-05-09 08:18:55 +00:00
2021-12-14 15:38:09 +00:00
#if league =='NHL': # read the NHl info from the csv, prem will need this as well
2023-05-09 08:18:55 +00:00
try :
sports_info = self . readSportsCSV ( league ) # gets colour and symbol info etc from csv
except :
pass
2021-12-14 15:38:09 +00:00
buff_size = 20
2023-05-09 08:18:55 +00:00
2023-05-12 08:20:52 +00:00
for team in team_info [ ten_or_twenty ] :
2023-05-09 08:18:55 +00:00
if league == ' PGA ' or league == ' LPGA ' :
pga_font = ImageFont . load ( " ./fonts/7x14.pil " )
pga_small = ImageFont . load ( " ./fonts/5x8.pil " )
try :
if league == ' PGA ' :
player_img = Image . open ( ' logos/pga_rank/ ' + team [ ' photo ' ] . split ( ' / ' ) [ - 1 ] . split ( ' & ' ) [ 0 ] )
elif league == ' LPGA ' :
player_img = Image . open ( ' logos/lpga_rank/ ' + team [ ' photo ' ] . split ( ' / ' ) [ - 1 ] )
player_img . thumbnail ( ( 9000 , 32 ) )
try :
img . paste ( player_img , ( x_offset , 0 ) , mask = player_img )
except :
img . paste ( player_img , ( x_offset , 0 ) )
x_offset + = player_img . size [ 0 ] + 2
except :
pass
x_offset2 = x_offset
if league == ' LPGA ' :
if str ( abs ( team [ ' rank_change ' ] ) ) != ' - ' and str ( abs ( team [ ' rank_change ' ] ) ) != ' 0 ' :
if int ( team [ ' rank_change ' ] ) > 0 :
rank_change_img = self . textImage ( str ( abs ( team [ ' rank_change ' ] ) ) , pga_font , r = 0 , g = 255 , b = 0 )
elif int ( team [ ' rank_change ' ] ) < 0 :
rank_change_img = self . textImage ( str ( abs ( team [ ' rank_change ' ] ) ) , pga_font , r = 255 , g = 0 , b = 0 )
elif league == ' PGA ' :
if str ( team [ ' rank_change ' ] ) != ' - ' :
if int ( team [ ' rank_change ' ] ) > 0 :
rank_change_img = self . textImage ( str ( abs ( int ( team [ ' rank_change ' ] ) ) ) , pga_font , r = 0 , g = 255 , b = 0 )
elif int ( team [ ' rank_change ' ] ) < 0 :
rank_change_img = self . textImage ( str ( abs ( int ( team [ ' rank_change ' ] ) ) ) , pga_font , r = 255 , g = 0 , b = 0 )
country_img = Image . open ( ' logos/ufc_countries/ ' + team [ ' country ' ] . split ( ' / ' ) [ - 1 ] . split ( ' & ' ) [ 0 ] )
country_img . thumbnail ( ( 9000 , 13 ) )
img . paste ( country_img , ( x_offset , 0 ) )
x_offset + = country_img . size [ 0 ] + 2
rank_img = self . textImage ( ' # ' + str ( team [ ' rank ' ] ) , pga_font , r = 255 , g = 255 , b = 0 )
img . paste ( rank_img , ( x_offset , 0 ) )
x_offset + = rank_img . size [ 0 ] + 2
name_img = self . textImage ( team [ ' first_name ' ] . upper ( ) [ 0 ] + ' . ' + team [ ' last_name ' ] . upper ( ) , pga_font , r = 255 , g = 255 , b = 255 )
img . paste ( name_img , ( x_offset , 0 ) )
x_offset + = name_img . size [ 0 ] + 5
if league == ' LPGA ' :
if str ( abs ( int ( team [ ' rank_change ' ] ) ) ) != ' - ' and str ( abs ( int ( team [ ' rank_change ' ] ) ) ) != ' 0 ' :
try :
x_offset = x_offset - 3
up_img = Image . open ( ' logos/up-tiny.png ' )
down_img = Image . open ( ' logos/down-tiny.png ' )
if int ( team [ ' rank_change ' ] ) > 0 :
img . paste ( up_img , ( x_offset , 6 ) )
x_offset + = up_img . size [ 0 ] + 2
elif int ( team [ ' rank_change ' ] ) < 0 :
img . paste ( down_img , ( x_offset , 6 ) )
x_offset + = down_img . size [ 0 ] + 2
img . paste ( rank_change_img , ( x_offset , 0 ) )
x_offset + = rank_change_img . size [ 0 ] + 5
except :
pass
elif league == ' PGA ' :
if str ( team [ ' rank_change ' ] ) != ' - ' :
try :
x_offset = x_offset - 3
up_img = Image . open ( ' logos/up-tiny.png ' )
down_img = Image . open ( ' logos/down-tiny.png ' )
if int ( team [ ' rank_change ' ] ) > 0 :
img . paste ( up_img , ( x_offset , 6 ) )
x_offset + = up_img . size [ 0 ] + 2
elif int ( team [ ' rank_change ' ] ) < 0 :
img . paste ( down_img , ( x_offset , 6 ) )
x_offset + = down_img . size [ 0 ] + 2
img . paste ( rank_change_img , ( x_offset , 0 ) )
x_offset + = rank_change_img . size [ 0 ] + 5
except :
pass
totalpts_img = self . textImage ( ' Total: ' , pga_small , r = 255 , g = 255 , b = 255 )
totalpts2_img = self . textImage ( str ( team [ ' total_pts ' ] ) , pga_small , r = 0 , g = 255 , b = 0 )
img . paste ( totalpts_img , ( x_offset2 , 14 ) )
img . paste ( totalpts2_img , ( x_offset2 + totalpts_img . size [ 0 ] + 2 , 14 ) )
avgpts_img = self . textImage ( ' Avg: ' , pga_small , r = 255 , g = 255 , b = 255 )
avgpts2_img = self . textImage ( str ( team [ ' avg_pts ' ] ) , pga_small , r = 0 , g = 0 , b = 255 )
img . paste ( avgpts_img , ( x_offset2 , 23 ) )
img . paste ( avgpts2_img , ( x_offset2 + 2 + avgpts_img . size [ 0 ] , 23 ) )
events_img = self . textImage ( ' Events: ' , pga_small , r = 255 , g = 255 , b = 255 )
events2_img = self . textImage ( str ( team [ ' events_played ' ] ) , pga_small , r = 255 , g = 128 , b = 0 )
img . paste ( events_img , ( x_offset2 + 10 + avgpts_img . size [ 0 ] + 2 + avgpts2_img . size [ 0 ] , 23 ) )
img . paste ( events2_img , ( x_offset2 + 10 + avgpts_img . size [ 0 ] + 2 + avgpts2_img . size [ 0 ] + 2 + events_img . size [ 0 ] , 23 ) )
try :
ptsgained_img = self . textImage ( ' + ' + str ( team [ ' gained_pts ' ] ) , pga_small , r = 0 , g = 255 , b = 0 )
ptslost_img = self . textImage ( str ( team [ ' lost_pts ' ] ) , pga_small , r = 255 , g = 0 , b = 0 )
img . paste ( ptsgained_img , ( x_offset2 + totalpts_img . size [ 0 ] + 2 + totalpts2_img . size [ 0 ] + 5 , 14 ) )
img . paste ( ptslost_img , ( x_offset2 + totalpts_img . size [ 0 ] + 2 + totalpts2_img . size [ 0 ] + 5 + ptsgained_img . size [ 0 ] + 3 , 14 ) )
x_offset2 + = max ( avgpts_img . size [ 0 ] + 2 + avgpts2_img . size [ 0 ] + 10 + events_img . size [ 0 ] + 2 + events2_img . size [ 0 ] , totalpts_img . size [ 0 ] + 2 + totalpts2_img . size [ 0 ] + 5 + ptsgained_img . size [ 0 ] + 3 + ptslost_img . size [ 0 ] )
except :
x_offset2 + = max ( avgpts_img . size [ 0 ] + 2 + avgpts2_img . size [ 0 ] + 10 + events_img . size [ 0 ] + 2 + events2_img . size [ 0 ] , 2 + totalpts_img . size [ 0 ] + totalpts2_img . size [ 0 ] )
pass
x_offset = max ( x_offset , x_offset2 ) + 20
else :
try :
logo = Image . open ( ' logos/sports/ {} / {} ' . format ( league , sports_info [ team [ ' name ' ] ] [ ' logo ' ] ) )
img . paste ( logo , ( x_offset , 0 ) )
x_offset + = logo . size [ 0 ] + 2
except Exception as e :
pass
name_timage = self . textImage ( team [ ' name ' ] , med_font , r = 255 , g = 255 , b = 0 )
wins_timage = self . textImage ( ' Wins: ' + str ( team [ ' wins ' ] ) , small_font , r = 0 , g = 255 , b = 0 )
loss_timage = self . textImage ( ' Losses: ' + str ( team [ ' loss ' ] ) , small_font , r = 255 , g = 0 , b = 0 )
draw_timage = self . textImage ( ' Draws: ' + str ( team [ ' draw ' ] ) , small_font , r = 0 , g = 0 , b = 255 )
standing_timage = self . textImage ( ' Standing: ' + str ( team [ ' standing ' ] ) , small_font , r = 255 , g = 255 , b = 255 )
2022-01-29 09:26:55 +00:00
2023-05-09 08:18:55 +00:00
img . paste ( name_timage , ( x_offset , - 1 ) )
img . paste ( wins_timage , ( x_offset , 12 ) )
img . paste ( loss_timage , ( x_offset , 19 ) )
img . paste ( draw_timage , ( x_offset , 26 ) )
2021-12-14 15:38:09 +00:00
2023-05-09 08:18:55 +00:00
x_offset + = max ( wins_timage . size [ 0 ] , loss_timage . size [ 0 ] , draw_timage . size [ 0 ] )
img . paste ( standing_timage , ( x_offset , 22 ) )
2021-12-14 15:38:09 +00:00
2023-05-09 08:18:55 +00:00
x_offset + = standing_timage . size [ 0 ]
if name_timage . size [ 0 ] > max ( wins_timage . size [ 0 ] , loss_timage . size [ 0 ] , draw_timage . size [ 0 ] ) + standing_timage . size [ 0 ] :
x_offset + = name_timage . size [ 0 ] - ( max ( wins_timage . size [ 0 ] , loss_timage . size [ 0 ] , draw_timage . size [ 0 ] ) + standing_timage . size [ 0 ] )
x_offset + = buff_size
2021-12-14 15:38:09 +00:00
img = img . crop ( ( 0 , 0 , x_offset , 32 ) )
imgs . append ( img )
2023-05-09 08:18:55 +00:00
2021-12-14 15:38:09 +00:00
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
2021-10-25 18:42:00 +00:00
return self . stitchImage ( imgs )
2022-10-31 07:42:13 +00:00
def getLeagueTableProfessional ( self , league = False ) :
f = open ( ' csv/league_tables.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
leagues_info = all_settings [ ' leagues ' ]
leagues = list ( leagues_info . keys ( ) )
if all_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/sports_team_stats.png ' )
imgs = [ title_img , self . blank ]
else :
imgs = [ ]
2023-05-12 08:23:02 +00:00
ten_or_twenty = slice ( None )
2023-05-09 09:47:17 +00:00
for league in leagues :
2022-10-31 07:42:13 +00:00
try :
x_offset = 0
img = Image . new ( ' RGB ' , ( 10000 , 32 ) )
2023-05-09 09:47:17 +00:00
if league == ' PGA ' :
league_logo = Image . open ( ' logos/sports/league_logos/pga_1.png ' ) . convert ( ' RGB ' )
2023-05-12 08:23:02 +00:00
try :
if all_settings [ ' top20 ' ] == 10 :
ten_or_twenty = slice ( 10 )
else :
ten_or_twenty = slice ( None )
except :
ten_or_twenty = slice ( None )
2023-05-09 09:47:17 +00:00
elif league == ' LPGA ' :
league_logo = Image . open ( ' logos/sports/league_logos/lpga_1.png ' ) . convert ( ' RGB ' )
2023-05-12 08:23:02 +00:00
try :
if all_settings [ ' top20 ' ] == 10 :
ten_or_twenty = slice ( 10 )
else :
ten_or_twenty = slice ( None )
except :
ten_or_twenty = slice ( None )
2023-05-09 09:47:17 +00:00
else :
league_logo = Image . open ( ' logos/sports/league_logos/ {} .png ' . format ( league ) ) . convert ( ' RGB ' )
2023-05-12 08:23:02 +00:00
ten_or_twenty = slice ( None )
2022-10-31 07:42:13 +00:00
width , height = league_logo . size
league_logo2 = league_logo . resize ( ( int ( width / 2 ) , int ( height / 2 ) ) )
img . paste ( league_logo2 , ( x_offset , 0 ) )
x_offset + = ( league_logo2 . size [ 0 ] + 5 )
team_info = leagues_info [ league ]
font = ImageFont . load ( " ./fonts/6x10.pil " )
2023-05-09 09:47:17 +00:00
try :
sports_info = self . readSportsCSV ( league )
except :
pass
2022-10-31 07:42:13 +00:00
2023-05-09 09:47:17 +00:00
buff_size = 20
2022-10-31 07:42:13 +00:00
2023-05-12 08:23:02 +00:00
for team in team_info [ ten_or_twenty ] :
2023-05-09 09:47:17 +00:00
if league == ' PGA ' or league == ' LPGA ' :
pga_small = ImageFont . load ( " ./fonts/4x6.pil " )
try :
if league == ' PGA ' :
player_img = Image . open ( ' logos/pga_rank/ ' + team [ ' photo ' ] . split ( ' / ' ) [ - 1 ] . split ( ' & ' ) [ 0 ] )
elif league == ' LPGA ' :
player_img = Image . open ( ' logos/lpga_rank/ ' + team [ ' photo ' ] . split ( ' / ' ) [ - 1 ] )
player_img . thumbnail ( ( 9000 , 16 ) )
try :
img . paste ( player_img , ( x_offset , 0 ) , mask = player_img )
except :
img . paste ( player_img , ( x_offset , 0 ) )
x_offset + = player_img . size [ 0 ] + 2
except :
pass
if league == ' LPGA ' :
if str ( abs ( team [ ' rank_change ' ] ) ) != ' - ' and str ( abs ( team [ ' rank_change ' ] ) ) != ' 0 ' :
if int ( team [ ' rank_change ' ] ) > 0 :
rank_change_img = self . textImage ( str ( abs ( team [ ' rank_change ' ] ) ) , font , r = 0 , g = 255 , b = 0 )
elif int ( team [ ' rank_change ' ] ) < 0 :
rank_change_img = self . textImage ( str ( abs ( team [ ' rank_change ' ] ) ) , font , r = 255 , g = 0 , b = 0 )
elif league == ' PGA ' :
if str ( team [ ' rank_change ' ] ) != ' - ' :
if int ( team [ ' rank_change ' ] ) > 0 :
rank_change_img = self . textImage ( str ( abs ( int ( team [ ' rank_change ' ] ) ) ) , font , r = 0 , g = 255 , b = 0 )
elif int ( team [ ' rank_change ' ] ) < 0 :
rank_change_img = self . textImage ( str ( abs ( int ( team [ ' rank_change ' ] ) ) ) , font , r = 255 , g = 0 , b = 0 )
x_offset2 = x_offset
2022-10-31 07:42:13 +00:00
2023-05-09 09:47:17 +00:00
country_img = Image . open ( ' logos/ufc_countries/ ' + team [ ' country ' ] . split ( ' / ' ) [ - 1 ] . split ( ' & ' ) [ 0 ] )
country_img . thumbnail ( ( 9000 , 11 ) )
img . paste ( country_img , ( x_offset , - 1 ) )
2022-10-31 07:42:13 +00:00
2023-05-09 09:47:17 +00:00
x_offset + = country_img . size [ 0 ] + 2
rank_img = self . textImage ( ' # ' + str ( team [ ' rank ' ] ) , font , r = 255 , g = 255 , b = 0 )
img . paste ( rank_img , ( x_offset , 0 ) )
x_offset + = rank_img . size [ 0 ] + 2
name_img = self . textImage ( team [ ' first_name ' ] . upper ( ) [ 0 ] + ' . ' + team [ ' last_name ' ] . upper ( ) , font , r = 255 , g = 255 , b = 255 )
img . paste ( name_img , ( x_offset , 0 ) )
x_offset + = name_img . size [ 0 ] + 2
2022-10-31 07:42:13 +00:00
2023-05-09 09:47:17 +00:00
if league == ' LPGA ' :
if str ( abs ( int ( team [ ' rank_change ' ] ) ) ) != ' - ' and str ( abs ( int ( team [ ' rank_change ' ] ) ) ) != ' 0 ' :
try :
up_img = Image . open ( ' logos/up-tiny.png ' )
down_img = Image . open ( ' logos/down-tiny.png ' )
if int ( team [ ' rank_change ' ] ) > 0 :
img . paste ( up_img , ( x_offset , 3 ) )
x_offset + = up_img . size [ 0 ] + 2
elif int ( team [ ' rank_change ' ] ) < 0 :
img . paste ( down_img , ( x_offset , 3 ) )
x_offset + = down_img . size [ 0 ] + 2
img . paste ( rank_change_img , ( x_offset , 0 ) )
x_offset + = rank_change_img . size [ 0 ] + 2
except :
pass
elif league == ' PGA ' :
if str ( team [ ' rank_change ' ] ) != ' - ' :
try :
up_img = Image . open ( ' logos/up-tiny.png ' )
down_img = Image . open ( ' logos/down-tiny.png ' )
if int ( team [ ' rank_change ' ] ) > 0 :
img . paste ( up_img , ( x_offset , 3 ) )
x_offset + = up_img . size [ 0 ] + 2
elif int ( team [ ' rank_change ' ] ) < 0 :
img . paste ( down_img , ( x_offset , 3 ) )
x_offset + = down_img . size [ 0 ] + 2
img . paste ( rank_change_img , ( x_offset , 0 ) )
x_offset + = rank_change_img . size [ 0 ] + 2
except :
pass
2022-10-31 07:42:13 +00:00
2023-05-09 09:47:17 +00:00
try :
ptsgained_img = self . textImage ( ' + ' + str ( team [ ' gained_pts ' ] ) , pga_small , r = 0 , g = 255 , b = 0 )
ptslost_img = self . textImage ( str ( team [ ' lost_pts ' ] ) , pga_small , r = 255 , g = 0 , b = 0 )
img . paste ( ptsgained_img , ( x_offset , 3 ) )
x_offset + = ptsgained_img . size [ 0 ] + 2
img . paste ( ptslost_img , ( x_offset , 3 ) )
x_offset + = ptslost_img . size [ 0 ] + 2
except :
pass
totalpts_img = self . textImage ( ' Total: ' , pga_small , r = 255 , g = 255 , b = 255 )
totalpts2_img = self . textImage ( str ( team [ ' total_pts ' ] ) , pga_small , r = 0 , g = 255 , b = 0 )
img . paste ( totalpts_img , ( x_offset2 , 10 ) )
x_offset2 + = totalpts_img . size [ 0 ]
img . paste ( totalpts2_img , ( x_offset2 , 10 ) )
x_offset2 + = totalpts2_img . size [ 0 ] + 3
avgpts_img = self . textImage ( ' Avg: ' , pga_small , r = 255 , g = 255 , b = 255 )
avgpts2_img = self . textImage ( str ( team [ ' avg_pts ' ] ) , pga_small , r = 0 , g = 0 , b = 255 )
img . paste ( avgpts_img , ( x_offset2 , 10 ) )
x_offset2 + = avgpts_img . size [ 0 ]
img . paste ( avgpts2_img , ( x_offset2 , 10 ) )
x_offset2 + = avgpts2_img . size [ 0 ] + 3
events_img = self . textImage ( ' Events: ' , pga_small , r = 255 , g = 255 , b = 255 )
events2_img = self . textImage ( str ( team [ ' events_played ' ] ) , pga_small , r = 255 , g = 128 , b = 0 )
img . paste ( events_img , ( x_offset2 , 10 ) )
x_offset2 + = events_img . size [ 0 ]
img . paste ( events2_img , ( x_offset2 , 10 ) )
x_offset2 + = events2_img . size [ 0 ] + 3
x_offsetfinal = max ( x_offset2 , x_offset )
x_offset = x_offsetfinal + 15
else :
name_timage = self . textImage ( team [ ' name ' ] . upper ( ) , font , r = 255 , g = 255 , b = 0 )
wins_timage = self . textImage ( ' W: ' + str ( team [ ' wins ' ] ) , font , r = 0 , g = 255 , b = 0 )
loss_timage = self . textImage ( ' L: ' + str ( team [ ' loss ' ] ) , font , r = 255 , g = 0 , b = 0 )
draw_timage = self . textImage ( ' D: ' + str ( team [ ' draw ' ] ) , font , r = 0 , g = 0 , b = 255 )
standing_timage = self . textImage ( ' # ' + str ( team [ ' standing ' ] ) , font , r = 255 , g = 255 , b = 255 )
img . paste ( standing_timage , ( x_offset , 3 ) )
x_offset + = ( standing_timage . size [ 0 ] )
try :
logo = Image . open ( ' logos/sports/ {} / {} ' . format ( league , sports_info [ team [ ' name ' ] ] [ ' logo ' ] ) )
width , height = logo . size
logo2 = logo . resize ( ( int ( width / 2 ) , int ( height / 2 ) ) )
img . paste ( logo2 , ( x_offset , 0 ) )
x_offset + = ( logo2 . size [ 0 ] + 3 )
except Exception as e :
pass
img . paste ( name_timage , ( x_offset , 3 ) )
x_offset + = ( name_timage . size [ 0 ] + 2 )
img . paste ( wins_timage , ( x_offset , 3 ) )
x_offset + = ( wins_timage . size [ 0 ] + 2 )
img . paste ( loss_timage , ( x_offset , 3 ) )
x_offset + = ( loss_timage . size [ 0 ] + 2 )
img . paste ( draw_timage , ( x_offset , 3 ) )
x_offset + = ( draw_timage . size [ 0 ] + 10 )
2022-10-31 07:42:13 +00:00
x_offset + = 25
img1 = img . crop ( ( 0 , 0 , x_offset , 16 ) )
imgs . append ( img1 )
except Exception as e :
pass
return self . stitchImage ( imgs )
2022-10-31 07:47:37 +00:00
def getLeagueProfessional ( self , league = False , time = ' future ' ) :
if time in [ ' past ' , ' live ' ] :
filepath = ' csv/ {} _games.json ' . format ( time )
else :
filepath = ' csv/upcoming_games.json '
f = open ( filepath , ' r ' )
all_settings = json . load ( f )
f . close ( )
title_img = self . openImage ( ' feature_titles/sports_ ' + time + ' .png ' )
2023-01-09 10:08:18 +00:00
imgs = [ ]
2022-10-31 07:47:37 +00:00
if all_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/sports_ {} .png ' . format ( time ) )
imgs = [ title_img , self . blank ]
else :
imgs = [ ]
leagues_info = all_settings [ ' leagues ' ]
leagues = list ( leagues_info . keys ( ) )
2023-01-09 10:08:18 +00:00
if time == ' live ' :
for league in leagues :
2022-10-31 07:47:37 +00:00
try :
2023-01-09 10:08:18 +00:00
x_offset = 0
if league == ' NFL ' :
f = open ( ' csv/live_nfl.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
league_info = all_settings [ ' leagues ' ] [ ' NFL ' ] [ 0 ]
elif league == ' NHL ' :
f = open ( ' csv/live_nhl.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
league_info = all_settings [ ' leagues ' ] [ ' NHL ' ] [ 0 ]
elif league == ' NBA ' :
f = open ( ' csv/live_nba.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
league_info = all_settings [ ' leagues ' ] [ ' NBA ' ] [ 0 ]
elif league == ' MLB ' :
f = open ( ' csv/live_mlb.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
league_info = all_settings [ ' leagues ' ] [ ' MLB ' ] [ 0 ]
elif league == ' MLS ' :
f = open ( ' csv/live_mls.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
league_info = all_settings [ ' leagues ' ] [ ' MLS ' ] [ 0 ]
elif league == ' PREMIERLEAGUE ' :
f = open ( ' csv/live_pl.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
league_info = all_settings [ ' leagues ' ] [ ' PREMIERLEAGUE ' ] [ 0 ]
img = Image . new ( ' RGB ' , ( 10000 , 32 ) )
2022-10-31 07:47:37 +00:00
2023-01-09 10:08:18 +00:00
try :
league_logo = Image . open ( ' logos/sports/league_logos/ {} .png ' . format ( league ) ) . convert ( ' RGB ' )
width , height = league_logo . size
league_logo2 = league_logo . resize ( ( int ( width / 2 ) , int ( height / 2 ) ) )
img . paste ( league_logo2 , ( x_offset , 0 ) )
x_offset + = ( league_logo2 . size [ 0 ] + 10 )
except :
pass
2022-10-31 07:47:37 +00:00
2023-01-09 10:08:18 +00:00
font = ImageFont . load ( " ./fonts/6x10.pil " )
small_font = ImageFont . load ( " ./fonts/4x6.pil " )
2022-10-31 07:47:37 +00:00
2023-01-09 10:08:18 +00:00
try :
sports_info = self . readSportsCSV ( league )
except :
pass
2022-10-31 07:47:37 +00:00
2023-01-09 10:08:18 +00:00
buff_size = 20
2022-10-31 07:47:37 +00:00
2023-01-09 10:08:18 +00:00
if all_settings [ ' leagues ' ] [ league ] [ 2 ] == ' no_live ' and all_settings [ ' leagues ' ] [ league ] [ 3 ] == ' no_upcoming ' :
no_match = self . textImage ( ( ' No live games ' ) . upper ( ) , font , r = 255 , g = 255 , b = 255 )
img . paste ( no_match , ( x_offset , 4 ) )
x_offset + = no_match . size [ 0 ]
2022-10-31 07:47:37 +00:00
2023-01-09 10:08:18 +00:00
elif all_settings [ ' leagues ' ] [ league ] [ 3 ] != ' no_upcoming ' :
next_match = self . textImage ( ' Next game: ' + all_settings [ ' leagues ' ] [ league ] [ 3 ] , font , r = 255 , g = 255 , b = 255 )
img . paste ( next_match , ( x_offset , 4 ) )
x_offset + = next_match . size [ 0 ]
2022-10-31 07:47:37 +00:00
2023-01-09 10:08:18 +00:00
else :
for match in league_info :
2023-05-26 04:37:56 +00:00
if match [ ' isLive ' ] != ' pre ' :
2023-05-23 10:24:23 +00:00
dateEvent = match [ ' time ' ]
date_timage = self . textImage ( dateEvent , small_font , r = 255 , g = 255 , b = 255 )
2022-10-31 07:47:37 +00:00
2023-05-23 10:24:23 +00:00
strHomeTeam = match [ ' home_team ' ]
strAwayTeam = match [ ' away_team ' ]
intHomeScore = str ( match [ ' home_score ' ] )
intAwayScore = str ( match [ ' away_score ' ] )
2023-01-09 10:08:18 +00:00
2023-05-23 10:24:23 +00:00
try :
home_logo = Image . open ( ' logos/sports/ {} / {} ' . format ( league , sports_info [ strHomeTeam ] [ ' logo ' ] ) )
width1 , height1 = home_logo . size
home_logo1 = home_logo . resize ( ( int ( width1 / 2 ) , int ( height1 / 2 ) ) )
except Exception as e :
home_logo1 = self . textImage ( strHomeTeam , small_font , r = 255 , g = 255 , b = 255 )
try :
away_logo = Image . open ( ' logos/sports/ {} / {} ' . format ( league , sports_info [ strAwayTeam ] [ ' logo ' ] ) )
width2 , height2 = away_logo . size
away_logo1 = away_logo . resize ( ( int ( width2 / 2 ) , int ( height2 / 2 ) ) )
except Exception as e :
away_logo1 = self . textImage ( strAwayTeam , small_font , r = 255 , g = 255 , b = 255 )
2023-01-09 10:08:18 +00:00
2023-05-23 10:24:23 +00:00
error = False
2023-01-09 10:08:18 +00:00
2023-05-23 10:24:23 +00:00
img . paste ( away_logo1 , ( x_offset , 0 ) )
x_offset + = ( away_logo1 . size [ 0 ] + 2 )
score_image = self . textImage ( intAwayScore + ' - ' + intHomeScore , font , h_buff = 5 , r = 255 , g = 255 , b = 255 )
try :
h_colour = mcolors . to_rgb ( sports_info [ strHomeTeam ] [ ' colour ' ] . replace ( ' ' , ' ' ) )
except :
pass
try :
a_colour = mcolors . to_rgb ( sports_info [ strAwayTeam ] [ ' colour ' ] . replace ( ' ' , ' ' ) )
except :
pass
try :
hc_timage = self . textImage ( sports_info [ strHomeTeam ] [ ' code ' ] , font , r = int ( h_colour [ 0 ] * 255 ) , g = int ( h_colour [ 1 ] * 255 ) , b = int ( h_colour [ 2 ] * 255 ) )
except :
hc_timage = self . textImage ( ' . ' , small_font , r = 255 , g = 255 , b = 255 )
error = True
try :
ac_timage = self . textImage ( sports_info [ strAwayTeam ] [ ' code ' ] , font , r = int ( a_colour [ 0 ] * 255 ) , g = int ( a_colour [ 1 ] * 255 ) , b = int ( a_colour [ 2 ] * 255 ) )
except :
ac_timage = self . textImage ( ' . ' , small_font , r = 255 , g = 255 , b = 255 )
error = True
if date_timage . size [ 0 ] > ( hc_timage . size [ 0 ] + 2 + score_image . size [ 0 ] + ac_timage . size [ 0 ] ) :
x_offset10 = x_offset + int ( ( date_timage . size [ 0 ] / 2 ) - ( score_image . size [ 0 ] / 2 ) - ac_timage . size [ 0 ] )
img . paste ( date_timage , ( x_offset , 0 ) )
img . paste ( score_image , ( x_offset + int ( ( date_timage . size [ 0 ] / 2 ) - ( score_image . size [ 0 ] / 2 ) ) , 5 ) )
x_offset + = date_timage . size [ 0 ]
img . paste ( ac_timage , ( x_offset10 , 5 ) )
if match [ ' isLive ' ] == ' post ' :
if int ( intHomeScore ) < int ( intAwayScore ) or int ( intHomeScore ) == int ( intAwayScore ) :
ua_image = Image . new ( " RGB " , ( ac_timage . size [ 0 ] - 3 , 1 ) )
ua_image1 = ImageDraw . Draw ( ua_image )
ua_image1 . line ( ( 0 , 0 , ac_timage . size [ 0 ] - 3 , 0 ) , fill = " red " , width = 0 )
img . paste ( ua_image , ( x_offset10 , ac_timage . size [ 1 ] + 4 ) )
x_offset10 + = ac_timage . size [ 0 ] + score_image . size [ 0 ]
img . paste ( hc_timage , ( x_offset10 , 5 ) )
if match [ ' isLive ' ] == ' post ' :
if int ( intHomeScore ) > int ( intAwayScore ) or int ( intHomeScore ) == int ( intAwayScore ) :
u_image = Image . new ( " RGB " , ( hc_timage . size [ 0 ] - 3 , 1 ) )
u_image1 = ImageDraw . Draw ( u_image )
u_image1 . line ( ( 0 , 0 , hc_timage . size [ 0 ] - 3 , 0 ) , fill = " red " , width = 0 )
img . paste ( u_image , ( x_offset10 , hc_timage . size [ 1 ] + 4 ) )
x_offset10 + = hc_timage . size [ 0 ]
if error :
img . paste ( home_logo1 , ( max ( x_offset + date_timage . size [ 0 ] , x_offset10 ) , 0 ) )
x_offset + = ( home_logo1 . size [ 0 ] + date_timage . size [ 0 ] )
else :
img . paste ( home_logo1 , ( max ( x_offset , x_offset10 ) , 0 ) )
x_offset + = home_logo1 . size [ 0 ]
2023-01-09 10:08:18 +00:00
2023-02-23 06:34:05 +00:00
2023-01-09 10:08:18 +00:00
else :
2023-05-23 10:24:23 +00:00
x_offset_date = ( x_offset + ac_timage . size [ 0 ] + int ( score_image . size [ 0 ] / 2 ) - int ( date_timage . size [ 0 ] / 2 ) )
img . paste ( date_timage , ( x_offset_date , 0 ) )
#img.paste(date_timage, (x_offset+20+int((score_image.size[0] - date_timage.size[0])/2),0))
img . paste ( ac_timage , ( x_offset , 5 ) )
if match [ ' isLive ' ] == ' post ' :
if int ( intHomeScore ) < int ( intAwayScore ) or int ( intHomeScore ) == int ( intAwayScore ) :
ua_image = Image . new ( " RGB " , ( ac_timage . size [ 0 ] - 3 , 1 ) )
ua_image1 = ImageDraw . Draw ( ua_image )
ua_image1 . line ( ( 0 , 0 , ac_timage . size [ 0 ] - 3 , 0 ) , fill = " red " , width = 0 )
img . paste ( ua_image , ( x_offset , ac_timage . size [ 1 ] + 4 ) )
x_offset + = ac_timage . size [ 0 ]
img . paste ( score_image , ( x_offset , 5 ) )
x_offset + = score_image . size [ 0 ]
img . paste ( hc_timage , ( x_offset , 5 ) )
if match [ ' isLive ' ] == ' post ' :
if int ( intHomeScore ) > int ( intAwayScore ) or int ( intHomeScore ) == int ( intAwayScore ) :
u_image = Image . new ( " RGB " , ( hc_timage . size [ 0 ] - 3 , 1 ) )
u_image1 = ImageDraw . Draw ( u_image )
u_image1 . line ( ( 0 , 0 , hc_timage . size [ 0 ] - 3 , 0 ) , fill = " red " , width = 0 )
img . paste ( u_image , ( x_offset , hc_timage . size [ 1 ] + 4 ) )
x_offset + = hc_timage . size [ 0 ]
x_offset_date + = date_timage . size [ 0 ]
if error :
img . paste ( home_logo1 , ( max ( x_offset + date_timage . size [ 0 ] , x_offset_date ) , 0 ) )
x_offset + = ( home_logo1 . size [ 0 ] + date_timage . size [ 0 ] )
else :
img . paste ( home_logo1 , ( max ( x_offset , x_offset_date ) , 0 ) )
x_offset + = home_logo1 . size [ 0 ]
x_offset + = buff_size
2023-01-09 10:08:18 +00:00
x_offset + = 20
img = img . crop ( ( 0 , 0 , x_offset , 16 ) )
imgs . append ( img )
except :
pass
else :
for league in leagues :
try :
x_offset = 0
img = Image . new ( ' RGB ' , ( 10000 , 32 ) )
league_info = leagues_info [ league ]
#league logo
2022-10-31 07:47:37 +00:00
try :
2023-01-09 10:08:18 +00:00
league_logo = Image . open ( ' logos/sports/league_logos/ {} .png ' . format ( league ) ) . convert ( ' RGB ' )
width , height = league_logo . size
league_logo2 = league_logo . resize ( ( int ( width / 2 ) , int ( height / 2 ) ) )
2022-10-31 07:47:37 +00:00
2023-03-23 10:32:21 +00:00
if ( league == ' PGA ' ) or ( league == ' LPGA ' ) or ( league == ' PGA_EU ' ) or ( league == ' LIV ' ) or ( league == ' NASCAR ' ) or ( league == ' F1 ' ) :
2023-01-09 10:08:18 +00:00
x_offset + = 10
else :
img . paste ( league_logo2 , ( x_offset , 0 ) )
x_offset + = ( league_logo2 . size [ 0 ] + 10 )
except :
pass
2022-10-31 07:47:37 +00:00
2023-01-09 10:08:18 +00:00
font = ImageFont . load ( " ./fonts/6x10.pil " )
small_font = ImageFont . load ( " ./fonts/4x6.pil " )
2022-10-31 07:47:37 +00:00
2023-01-09 10:08:18 +00:00
try :
sports_info = self . readSportsCSV ( league )
except :
pass
2022-10-31 07:47:37 +00:00
2023-01-09 10:08:18 +00:00
buff_size = 20
2023-04-28 11:27:47 +00:00
if league == ' UFC ' :
try :
date_img = self . textImage ( league_info [ 0 ] [ ' date ' ] , small_font , r = 0 , g = 150 , b = 255 )
eventname_img = self . textImage ( league_info [ 0 ] [ ' name ' ] . upper ( ) , font , r = 255 , g = 0 , b = 0 )
venue_img = self . textImage ( league_info [ 0 ] [ ' venue ' ] , small_font , r = 255 , g = 255 , b = 0 )
city_img = self . textImage ( league_info [ 0 ] [ ' city ' ] , small_font , r = 255 , g = 255 , b = 255 )
try :
country_img = self . textImage ( league_info [ 0 ] [ ' country ' ] , small_font , r = 255 , g = 128 , b = 0 )
except :
pass
broadcast_img = self . textImage ( league_info [ 0 ] [ ' broadcast ' ] , small_font , r = 255 , g = 0 , b = 0 )
time_img = self . textImage ( league_info [ 0 ] [ ' time ' ] , small_font , r = 0 , g = 150 , b = 255 )
2023-01-09 10:08:18 +00:00
2023-04-28 11:27:47 +00:00
try :
img . paste ( country_img , ( x_offset + eventname_img . size [ 0 ] + 2 , 2 ) )
except :
country_img = 0
pass
img . paste ( eventname_img , ( x_offset , 0 ) )
img . paste ( city_img , ( x_offset + date_img . size [ 0 ] + 3 + time_img . size [ 0 ] + 3 + broadcast_img . size [ 0 ] + 7 + venue_img . size [ 0 ] + 3 , 10 ) )
img . paste ( venue_img , ( x_offset + date_img . size [ 0 ] + 3 + time_img . size [ 0 ] + 3 + broadcast_img . size [ 0 ] + 7 , 10 ) )
img . paste ( broadcast_img , ( x_offset + date_img . size [ 0 ] + 3 + time_img . size [ 0 ] + 3 , 10 ) )
img . paste ( date_img , ( x_offset , 10 ) )
img . paste ( time_img , ( x_offset + date_img . size [ 0 ] + 3 , 10 ) )
try :
x_offset = 10 + max ( x_offset + eventname_img . size [ 0 ] + 2 + country_img . size [ 0 ] , x_offset + date_img . size [ 0 ] + 3 + time_img . size [ 0 ] + 3 + broadcast_img . size [ 0 ] + 7 + venue_img . size [ 0 ] + 3 + city_img . size [ 0 ] )
except :
x_offset = 10 + max ( x_offset + eventname_img . size [ 0 ] , x_offset + date_img . size [ 0 ] + 3 + time_img . size [ 0 ] + 3 + broadcast_img . size [ 0 ] + 7 + venue_img . size [ 0 ] + 3 + city_img . size [ 0 ] )
for fight in league_info [ 0 ] [ ' fights ' ] :
try :
if time != ' past ' :
fighter1_img = Image . open ( ' logos/ufc/ {} .png ' . format ( fight [ ' fighter1id ' ] ) )
elif time == ' past ' :
fighter1_img = Image . open ( ' logos/ufc_past/ {} .png ' . format ( fight [ ' fighter1id ' ] ) )
fighter1_img . thumbnail ( ( 9000 , 16 ) )
except :
fighter1_img = Image . open ( ' logos/unknown.png ' )
fighter1_img . thumbnail ( ( 9000 , 16 ) )
pass
draw = ImageDraw . Draw ( img , " RGBA " )
name1_img = self . textImage ( fight [ ' fighter1name ' ] . split ( ' ' , 1 ) [ 0 ] [ 0 ] + ' . ' + fight [ ' fighter1name ' ] . split ( ' ' , 1 ) [ 1 ] , small_font , r = 255 , g = 255 , b = 255 )
max_fighter1pic = max ( name1_img . size [ 0 ] , fighter1_img . size [ 0 ] )
img . paste ( fighter1_img , ( x_offset + int ( max_fighter1pic / 2 ) - int ( fighter1_img . size [ 0 ] / 2 ) , 0 ) , mask = fighter1_img )
draw . rectangle ( [ ( x_offset , 16 ) , ( x_offset + name1_img . size [ 0 ] - 4 , 10 ) ] , fill = ( 5 , 5 , 5 , 200 ) )
draw . text ( ( x_offset + int ( max_fighter1pic / 2 ) - int ( name1_img . size [ 0 ] / 2 ) , 10 ) , fight [ ' fighter1name ' ] . split ( ' ' , 1 ) [ 0 ] [ 0 ] + ' . ' + fight [ ' fighter1name ' ] . split ( ' ' , 1 ) [ 1 ] , fill = ( 255 , 255 , 255 ) , font = small_font )
try :
country1_img = Image . open ( ' logos/ufc_countries/ {} ' . format ( fight [ ' fighter1country ' ] . split ( ' / ' ) [ - 1 ] . split ( ' & ' ) [ 0 ] ) )
country1_img . thumbnail ( ( 9000 , 8 ) )
img . paste ( country1_img , ( x_offset , 0 ) )
except :
pass
x_offset + = max_fighter1pic
try :
if time != ' past ' :
fighter2_img = Image . open ( ' logos/ufc/ {} .png ' . format ( fight [ ' fighter2id ' ] ) )
elif time == ' past ' :
fighter2_img = Image . open ( ' logos/ufc_past/ {} .png ' . format ( fight [ ' fighter2id ' ] ) )
fighter2_img . thumbnail ( ( 9000 , 16 ) )
except :
fighter2_img = Image . open ( ' logos/unknown.png ' )
fighter2_img . thumbnail ( ( 9000 , 16 ) )
pass
weight_img = self . textImage ( fight [ ' weight_div ' ] . upper ( ) , small_font , r = 255 , g = 0 , b = 0 )
vs_img = self . textImage ( ' VS ' , small_font , r = 255 , g = 255 , b = 255 )
if time != ' past ' :
odds1_img = self . textImage ( fight [ ' fighter1odds ' ] , small_font , r = 0 , g = 255 , b = 0 )
odds2_img = self . textImage ( fight [ ' fighter2odds ' ] , small_font , r = 0 , g = 255 , b = 0 )
max_middle = max ( vs_img . size [ 0 ] + odds1_img . size [ 0 ] + odds2_img . size [ 0 ] , weight_img . size [ 0 ] )
img . paste ( weight_img , ( x_offset + int ( max_middle / 2 ) - int ( weight_img . size [ 0 ] / 2 ) , 1 ) )
img . paste ( odds1_img , ( x_offset + int ( max_middle / 2 ) - int ( vs_img . size [ 0 ] / 2 ) - odds1_img . size [ 0 ] , 8 ) )
img . paste ( vs_img , ( x_offset + int ( max_middle / 2 ) - int ( vs_img . size [ 0 ] / 2 ) , 8 ) )
img . paste ( odds2_img , ( x_offset + int ( max_middle / 2 ) + int ( vs_img . size [ 0 ] / 2 ) , 8 ) )
elif time == ' past ' :
if fight [ ' fighter1win ' ] :
win1_img = self . textImage ( ' WIN ' , small_font , r = 0 , g = 255 , b = 0 )
win2_img = self . textImage ( ' LOSS ' , small_font , r = 255 , g = 0 , b = 0 )
elif not fight [ ' fighter1win ' ] and not fight [ ' fighter2win ' ] :
win1_img = self . textImage ( ' DRAW ' , small_font , r = 80 , g = 80 , b = 80 )
win2_img = self . textImage ( ' DRAW ' , small_font , r = 80 , g = 80 , b = 80 )
else :
win1_img = self . textImage ( ' LOSS ' , small_font , r = 255 , g = 0 , b = 0 )
win2_img = self . textImage ( ' WIN ' , small_font , r = 0 , g = 255 , b = 0 )
max_middle = max ( vs_img . size [ 0 ] + win1_img . size [ 0 ] + win2_img . size [ 0 ] , weight_img . size [ 0 ] )
img . paste ( weight_img , ( x_offset + int ( max_middle / 2 ) - int ( weight_img . size [ 0 ] / 2 ) , 1 ) )
img . paste ( win1_img , ( x_offset + int ( max_middle / 2 ) - int ( vs_img . size [ 0 ] / 2 ) - int ( win1_img . size [ 0 ] ) , 8 ) )
img . paste ( vs_img , ( x_offset + int ( max_middle / 2 ) - int ( vs_img . size [ 0 ] / 2 ) , 8 ) )
img . paste ( win2_img , ( x_offset + int ( max_middle / 2 ) + int ( vs_img . size [ 0 ] / 2 ) , 8 ) )
x_offset + = max_middle
name2_img = self . textImage ( fight [ ' fighter2name ' ] . split ( ' ' , 1 ) [ 0 ] [ 0 ] + ' . ' + fight [ ' fighter2name ' ] . split ( ' ' , 1 ) [ 1 ] , small_font , r = 255 , g = 255 , b = 255 )
max_fighter2pic = max ( name2_img . size [ 0 ] , fighter2_img . size [ 0 ] )
img . paste ( fighter2_img , ( x_offset + int ( max_fighter2pic / 2 ) - int ( fighter2_img . size [ 0 ] / 2 ) , 0 ) , mask = fighter2_img )
draw . rectangle ( [ ( x_offset , 16 ) , ( x_offset + name2_img . size [ 0 ] - 4 , 10 ) ] , fill = ( 5 , 5 , 5 , 200 ) )
draw . text ( ( x_offset + int ( max_fighter2pic / 2 ) - int ( name2_img . size [ 0 ] / 2 ) , 10 ) , fight [ ' fighter2name ' ] . split ( ' ' , 1 ) [ 0 ] [ 0 ] + ' . ' + fight [ ' fighter2name ' ] . split ( ' ' , 1 ) [ 1 ] , fill = ( 255 , 255 , 255 ) , font = small_font )
try :
country2_img = Image . open ( ' logos/ufc_countries/ {} ' . format ( fight [ ' fighter2country ' ] . split ( ' / ' ) [ - 1 ] . split ( ' & ' ) [ 0 ] ) )
country2_img . thumbnail ( ( 9000 , 8 ) )
img . paste ( country2_img , ( x_offset + max_fighter2pic - country2_img . size [ 0 ] - 2 , 0 ) )
except :
pass
x_offset + = max_fighter2pic + 15
2023-01-09 10:08:18 +00:00
2023-04-27 09:49:38 +00:00
except :
2023-04-28 11:27:47 +00:00
pass
# DONT FORGET TO CHANGE DIRECTORY FOR PAST UFC GAMES
else :
for match in league_info :
2023-04-27 10:22:21 +00:00
try :
2023-04-28 11:27:47 +00:00
dateEvent = match [ ' date2 ' ]
2023-04-27 10:22:21 +00:00
except :
2023-04-28 11:27:47 +00:00
dateEvent = match [ ' date ' ] . replace ( ' - ' , ' . ' )
if time == ' future ' :
try :
date_timage = self . textImage ( dateEvent + ' ' + match [ ' time ' ] . replace ( " EST " , " " ) . replace ( ' PM ' , ' P ' ) . replace ( ' AM ' , ' A ' ) . replace ( ' CET ' , ' ' ) , small_font , r = 255 , g = 255 , b = 255 )
except :
date_timage = self . textImage ( dateEvent , small_font , r = 255 , g = 255 , b = 255 )
else :
2023-04-27 10:22:21 +00:00
date_timage = self . textImage ( dateEvent , small_font , r = 255 , g = 255 , b = 255 )
2023-01-09 10:08:18 +00:00
2023-04-28 11:27:47 +00:00
if ( league == ' PGA ' ) or ( league == ' LPGA ' ) or ( league == ' PGA_EU ' ) or ( league == ' LIV ' ) or ( league == ' NASCAR ' ) or ( league == ' F1 ' ) :
event = match [ ' event ' ]
venue = match [ ' venue ' ]
city = match [ ' city ' ]
country = match [ ' country ' ]
season = match [ ' season ' ]
2023-01-09 10:08:18 +00:00
2023-04-28 11:27:47 +00:00
if ( time != ' future ' ) and ( league != ' LIV ' ) :
2023-05-19 10:15:53 +00:00
golf_standings1 = match [ ' golf_rankings ' ] [ : : 2 ]
golf_standings2 = match [ ' golf_rankings ' ] [ 1 : : 2 ]
2023-04-28 11:27:47 +00:00
elif ( time != ' future ' ) and ( league == ' LIV ' ) :
2023-05-19 10:15:53 +00:00
golf_standings1 = match [ ' golf_rankings ' ] [ : : 2 ]
golf_standings2 = match [ ' golf_rankings ' ] [ 1 : : 2 ]
2023-01-09 10:08:18 +00:00
2023-04-28 11:27:47 +00:00
img . paste ( league_logo2 , ( x_offset , 0 ) )
x_offset + = league_logo2 . size [ 0 ] + 5
2023-05-19 10:15:53 +00:00
try :
if match [ ' purse ' ] != ' N/A ' and match [ ' purse ' ] != " " and match [ ' purse ' ] != ' 0 ' :
purse_timage = self . textImage ( match [ ' purse ' ] , small_font , r = 0 , g = 255 , b = 0 )
except :
pass
try :
if match [ ' shots_par ' ] != ' N/A ' and match [ ' shots_par ' ] != " " and match [ ' shots_par ' ] != 0 :
par_timage = self . textImage ( ' Par ' + str ( match [ ' shots_par ' ] ) , small_font , r = 255 , g = 127 , b = 80 )
except :
pass
try :
if match [ ' total_yards ' ] != ' N/A ' and match [ ' total_yards ' ] != " " and match [ ' total_yards ' ] != 0 :
yards_timage = self . textImage ( str ( match [ ' total_yards ' ] ) + ' yds ' , small_font , r = 255 , g = 127 , b = 80 )
except :
pass
2023-04-28 11:27:47 +00:00
if time == ' future ' :
event_timage = self . textImage ( event , small_font , r = 255 , g = 255 , b = 0 )
venue_timage = self . textImage ( venue , small_font , r = 0 , g = 255 , b = 0 )
city_timage = self . textImage ( city , small_font , r = 255 , g = 255 , b = 255 )
country_timage = self . textImage ( country , small_font , r = 255 , g = 255 , b = 255 )
season1_timage = self . textImage ( ' Season: ' , small_font , r = 0 , g = 170 , b = 255 )
season_timage = self . textImage ( season , small_font , r = 255 , g = 255 , b = 255 )
date1_timage = self . textImage ( ' Date: ' , small_font , r = 255 , g = 0 , b = 171 )
#event
img . paste ( event_timage , ( x_offset , 1 ) )
#venue
img . paste ( venue_timage , ( x_offset , 9 ) )
x_offset + = ( max ( event_timage . size [ 0 ] , venue_timage . size [ 0 ] ) + 5 )
2023-05-19 10:15:53 +00:00
x_offset_2nd = x_offset
2023-04-28 11:27:47 +00:00
#date
img . paste ( date1_timage , ( x_offset , 1 ) )
2023-05-19 10:15:53 +00:00
x_offset + = date1_timage . size [ 0 ]
img . paste ( date_timage , ( x_offset , 1 ) )
x_offset + = date_timage . size [ 0 ] + 5
2023-04-28 11:27:47 +00:00
#city
2023-05-19 10:15:53 +00:00
img . paste ( city_timage , ( x_offset_2nd , 9 ) )
x_offset_2nd + = city_timage . size [ 0 ] + 7
2023-04-28 11:27:47 +00:00
#country
2023-05-19 10:15:53 +00:00
img . paste ( country_timage , ( x_offset_2nd , 9 ) )
x_offset_2nd + = country_timage . size [ 0 ] + 5
2023-04-28 11:27:47 +00:00
#season
2023-05-19 10:15:53 +00:00
img . paste ( season1_timage , ( x_offset , 1 ) )
x_offset + = season1_timage . size [ 0 ]
img . paste ( season_timage , ( x_offset , 1 ) )
x_offset + = season_timage . size [ 0 ] + 5
try :
if match [ ' purse ' ] != ' N/A ' and match [ ' purse ' ] != " " and match [ ' purse ' ] != ' 0 ' :
img . paste ( purse_timage , ( x_offset , 1 ) )
x_offset + = purse_timage . size [ 0 ] + 5
except :
pass
try :
if match [ ' total_yards ' ] != ' N/A ' and match [ ' total_yards ' ] != " " and match [ ' total_yards ' ] != 0 :
img . paste ( yards_timage , ( x_offset_2nd , 9 ) )
x_offset_2nd + = yards_timage . size [ 0 ] + 5
except :
pass
try :
if match [ ' shots_par ' ] != ' N/A ' and match [ ' shots_par ' ] != " " and match [ ' shots_par ' ] != 0 :
img . paste ( par_timage , ( x_offset_2nd , 9 ) )
x_offset_2nd + = par_timage . size [ 0 ] + 5
except :
pass
x_offset = max ( x_offset , x_offset_2nd )
#x_offset += max(date1_timage.size[0] + 2 + date_timage.size[0] + season1_timage.size[0] + 5 + season_timage.size[0], city_timage.size[0] + 7 + country_timage.size[0])
2023-04-28 11:27:47 +00:00
x_offset + = ( buff_size - 10 )
2023-05-19 10:15:53 +00:00
2023-04-28 11:27:47 +00:00
else :
event_timage = self . textImage ( event , small_font , r = 255 , g = 255 , b = 0 )
venue_timage = self . textImage ( venue , small_font , r = 0 , g = 255 , b = 0 )
city_timage = self . textImage ( city , small_font , r = 255 , g = 255 , b = 255 )
country_timage = self . textImage ( country , small_font , r = 255 , g = 255 , b = 255 )
season1_timage = self . textImage ( ' Season: ' , small_font , r = 0 , g = 170 , b = 255 )
season_timage = self . textImage ( season , small_font , r = 255 , g = 255 , b = 255 )
date1_timage = self . textImage ( ' Date: ' , small_font , r = 255 , g = 0 , b = 171 )
#event
img . paste ( event_timage , ( x_offset , 1 ) )
#venue
img . paste ( venue_timage , ( x_offset , 9 ) )
x_offset + = ( max ( event_timage . size [ 0 ] , venue_timage . size [ 0 ] ) + 5 )
2023-05-19 10:15:53 +00:00
x_offset_2nd = x_offset
2023-04-28 11:27:47 +00:00
#date
img . paste ( date1_timage , ( x_offset , 1 ) )
2023-05-19 10:15:53 +00:00
x_offset + = date1_timage . size [ 0 ]
img . paste ( date_timage , ( x_offset , 1 ) )
x_offset + = date_timage . size [ 0 ] + 5
2023-04-28 11:27:47 +00:00
#city
2023-05-19 10:15:53 +00:00
img . paste ( city_timage , ( x_offset_2nd , 9 ) )
x_offset_2nd + = city_timage . size [ 0 ] + 7
2023-04-28 11:27:47 +00:00
#country
2023-05-19 10:15:53 +00:00
img . paste ( country_timage , ( x_offset_2nd , 9 ) )
x_offset_2nd + = country_timage . size [ 0 ] + 5
2023-04-28 11:27:47 +00:00
#season
2023-05-19 10:15:53 +00:00
img . paste ( season1_timage , ( x_offset , 1 ) )
x_offset + = season1_timage . size [ 0 ]
img . paste ( season_timage , ( x_offset , 1 ) )
x_offset + = season_timage . size [ 0 ] + 5
try :
if match [ ' purse ' ] != ' N/A ' and match [ ' purse ' ] != " " and match [ ' purse ' ] != ' 0 ' :
img . paste ( purse_timage , ( x_offset , 1 ) )
x_offset + = purse_timage . size [ 0 ] + 5
except :
pass
try :
if match [ ' total_yards ' ] != ' N/A ' and match [ ' total_yards ' ] != " " and match [ ' total_yards ' ] != 0 :
img . paste ( yards_timage , ( x_offset_2nd , 9 ) )
x_offset_2nd + = yards_timage . size [ 0 ] + 5
except :
pass
try :
if match [ ' shots_par ' ] != ' N/A ' and match [ ' shots_par ' ] != " " and match [ ' shots_par ' ] != 0 :
img . paste ( par_timage , ( x_offset_2nd , 9 ) )
x_offset_2nd + = par_timage . size [ 0 ] + 5
except :
pass
x_offset = max ( x_offset , x_offset_2nd )
#x_offset += max(date1_timage.size[0] + 2 + date_timage.size[0] + season1_timage.size[0] + 5 + season_timage.size[0], city_timage.size[0] + 7 + country_timage.size[0])
symbol1_timage = self . textImage ( ' | ' , small_font , r = 255 , g = 255 , b = 0 )
for each_player , each_player2 in zip ( golf_standings1 , golf_standings2 ) :
img . paste ( symbol1_timage , ( x_offset , 1 ) )
img . paste ( symbol1_timage , ( x_offset , 9 ) )
x_offset + = symbol1_timage . size [ 0 ] + 2
golf1_offset = 0
golf2_offset = 0
try :
golf1_rank_timage = self . textImage ( each_player [ ' rank ' ] , small_font , r = 255 , g = 255 , b = 255 )
img . paste ( golf1_rank_timage , ( x_offset , 1 ) )
golf1_offset + = golf1_rank_timage . size [ 0 ] + 2
try :
golf1_country = Image . open ( ' logos/ufc_countries/ {} ' . format ( each_player [ ' country ' ] . split ( ' / ' ) [ - 1 ] . split ( ' & ' ) [ 0 ] ) )
golf1_country . thumbnail ( ( 9000 , 9 ) )
img . paste ( golf1_country , ( golf1_offset + x_offset , - 1 ) )
golf1_offset + = golf1_country . size [ 0 ] + 2
except :
pass
golf_standings1_timage = self . textImage ( each_player [ ' name ' ] + ' ' + each_player [ ' score ' ] , small_font , r = 255 , g = 255 , b = 255 )
img . paste ( golf_standings1_timage , ( x_offset + golf1_offset , 1 ) )
golf1_offset + = golf_standings1_timage . size [ 0 ]
except :
pass
try :
golf2_rank_timage = self . textImage ( each_player2 [ ' rank ' ] , small_font , r = 255 , g = 255 , b = 255 )
golf2_offset + = golf2_rank_timage . size [ 0 ] + 2
img . paste ( golf2_rank_timage , ( x_offset , 9 ) )
try :
golf2_country = Image . open ( ' logos/ufc_countries/ {} ' . format ( each_player2 [ ' country ' ] . split ( ' / ' ) [ - 1 ] . split ( ' & ' ) [ 0 ] ) )
golf2_country . thumbnail ( ( 9000 , 9 ) )
img . paste ( golf2_country , ( x_offset + golf2_offset , 7 ) )
golf2_offset + = golf2_country . size [ 0 ] + 2
except :
pass
golf_standings2_timage = self . textImage ( each_player2 [ ' name ' ] + ' ' + each_player2 [ ' score ' ] , small_font , r = 255 , g = 255 , b = 255 )
img . paste ( golf_standings2_timage , ( x_offset + golf2_offset , 9 ) )
golf2_offset + = golf_standings2_timage . size [ 0 ]
except :
pass
x_offset + = max ( golf2_offset , golf1_offset ) + 5
# for each_player in golf_standings1:
# symbol1_timage = self.textImage('|', small_font, r=255, g=255, b=0)
# img.paste(symbol1_timage, (x_offset + 5, 1))
# golf_standings1_timage = self.textImage(each_player, small_font, r=255, g=255, b=255)
# img.paste(golf_standings1_timage, (x_offset + symbol1_timage.size[0] + 7, 1))
# x_offset += (golf_standings1_timage.size[0] + symbol1_timage.size[0] + 7)
#
# for each_player2 in golf_standings2:
# symbol2_timage = self.textImage('|', small_font, r=255, g=255, b=0)
# img.paste(symbol2_timage, (x_offset2 + 5, 9))
# golf_standings2_timage = self.textImage(each_player2, small_font, r=255, g=255, b=255)
# img.paste(golf_standings2_timage, (x_offset2 + symbol2_timage.size[0] + 7, 9))
# x_offset2 += (golf_standings2_timage.size[0] + symbol2_timage.size[0] + 7)
x_offset + = ( buff_size - 10 )
2022-10-31 07:47:37 +00:00
2023-04-28 11:27:47 +00:00
else :
strHomeTeam = match [ ' home_team ' ]
strAwayTeam = match [ ' away_team ' ]
2022-10-31 07:47:37 +00:00
2023-04-28 11:27:47 +00:00
if time != ' future ' :
intHomeScore = str ( match [ ' home_score ' ] )
intAwayScore = str ( match [ ' away_score ' ] )
2023-01-09 10:08:18 +00:00
2023-04-28 11:27:47 +00:00
try :
home_logo = Image . open ( ' logos/sports/ {} / {} ' . format ( league , sports_info [ strHomeTeam ] [ ' logo ' ] ) )
width1 , height1 = home_logo . size
home_logo1 = home_logo . resize ( ( int ( width1 / 2 ) , int ( height1 / 2 ) ) )
except Exception as e :
home_logo1 = self . textImage ( strHomeTeam , small_font , r = 255 , g = 255 , b = 255 )
try :
away_logo = Image . open ( ' logos/sports/ {} / {} ' . format ( league , sports_info [ strAwayTeam ] [ ' logo ' ] ) )
width2 , height2 = away_logo . size
away_logo1 = away_logo . resize ( ( int ( width2 / 2 ) , int ( height2 / 2 ) ) )
except Exception as e :
away_logo1 = self . textImage ( strAwayTeam , small_font , r = 255 , g = 255 , b = 255 )
2023-01-09 10:08:18 +00:00
2023-04-28 11:27:47 +00:00
error = False
2023-01-09 10:08:18 +00:00
2023-04-28 11:27:47 +00:00
img . paste ( away_logo1 , ( x_offset , 0 ) )
x_offset + = ( away_logo1 . size [ 0 ] + 2 )
if time == ' future ' :
try :
h_colour = mcolors . to_rgb ( sports_info [ strHomeTeam ] [ ' colour ' ] . replace ( ' ' , ' ' ) )
except :
pass
try :
a_colour = mcolors . to_rgb ( sports_info [ strAwayTeam ] [ ' colour ' ] . replace ( ' ' , ' ' ) )
except :
pass
try :
hc_timage = self . textImage ( sports_info [ strHomeTeam ] [ ' code ' ] , font , r = int ( h_colour [ 0 ] * 255 ) , g = int ( h_colour [ 1 ] * 255 ) , b = int ( h_colour [ 2 ] * 255 ) )
except :
hc_timage = self . textImage ( ' . ' , small_font , r = 255 , g = 255 , b = 255 )
error = True
try :
ac_timage = self . textImage ( sports_info [ strAwayTeam ] [ ' code ' ] , font , r = int ( a_colour [ 0 ] * 255 ) , g = int ( a_colour [ 1 ] * 255 ) , b = int ( a_colour [ 2 ] * 255 ) )
except :
ac_timage = self . textImage ( ' . ' , small_font , r = 255 , g = 255 , b = 255 )
error = True
vs_timage = self . textImage ( ' vs ' , font , r = 255 , g = 255 , b = 255 , h_buff = 5 )
x_offsetdate2 = x_offset + int ( ( hc_timage . size [ 0 ] + vs_timage . size [ 0 ] + ac_timage . size [ 0 ] ) / 2 ) - int ( date_timage . size [ 0 ] / 2 )
if date_timage . size [ 0 ] > ( ac_timage . size [ 0 ] + vs_timage . size [ 0 ] + hc_timage . size [ 0 ] ) :
x_offset3 = x_offset + int ( date_timage . size [ 0 ] / 2 )
img . paste ( date_timage , ( x_offset , 0 ) )
x_offset + = date_timage . size [ 0 ]
img . paste ( ac_timage , ( x_offset3 - int ( ac_timage . size [ 0 ] ) - int ( vs_timage . size [ 0 ] / 2 ) , 5 ) )
img . paste ( vs_timage , ( x_offset3 - int ( vs_timage . size [ 0 ] / 2 ) , 5 ) )
img . paste ( hc_timage , ( x_offset3 + int ( vs_timage . size [ 0 ] / 2 ) , 5 ) )
else :
img . paste ( date_timage , ( x_offsetdate2 , 0 ) )
x_offsetdate2 + = date_timage . size [ 0 ]
img . paste ( ac_timage , ( x_offset , 5 ) )
x_offset + = ac_timage . size [ 0 ]
img . paste ( vs_timage , ( x_offset , 5 ) )
x_offset + = vs_timage . size [ 0 ]
img . paste ( hc_timage , ( x_offset , 5 ) )
x_offset + = hc_timage . size [ 0 ]
2023-01-09 10:08:18 +00:00
2023-04-27 10:40:04 +00:00
else :
2023-04-28 11:27:47 +00:00
score_image = self . textImage ( intAwayScore + ' - ' + intHomeScore , font , h_buff = 5 , r = 255 , g = 255 , b = 255 )
try :
h_colour = mcolors . to_rgb ( sports_info [ strHomeTeam ] [ ' colour ' ] . replace ( ' ' , ' ' ) )
except :
pass
try :
a_colour = mcolors . to_rgb ( sports_info [ strAwayTeam ] [ ' colour ' ] . replace ( ' ' , ' ' ) )
except :
pass
try :
hc_timage = self . textImage ( sports_info [ strHomeTeam ] [ ' code ' ] , font , r = int ( h_colour [ 0 ] * 255 ) , g = int ( h_colour [ 1 ] * 255 ) , b = int ( h_colour [ 2 ] * 255 ) )
except :
hc_timage = self . textImage ( ' . ' , small_font , r = 255 , g = 255 , b = 255 )
error = True
try :
ac_timage = self . textImage ( sports_info [ strAwayTeam ] [ ' code ' ] , font , r = int ( a_colour [ 0 ] * 255 ) , g = int ( a_colour [ 1 ] * 255 ) , b = int ( a_colour [ 2 ] * 255 ) )
except :
ac_timage = self . textImage ( ' . ' , small_font , r = 255 , g = 255 , b = 255 )
error = True
x_offsetdate2 = x_offset + ac_timage . size [ 0 ] + int ( score_image . size [ 0 ] / 2 ) - int ( date_timage . size [ 0 ] / 2 )
2023-04-27 10:40:04 +00:00
img . paste ( date_timage , ( x_offsetdate2 , 0 ) )
x_offsetdate2 + = date_timage . size [ 0 ]
2023-04-28 11:27:47 +00:00
#img.paste(date_timage, (x_offset+20+int((score_image.size[0] - date_timage.size[0])/2),0))
2023-04-27 10:40:04 +00:00
img . paste ( ac_timage , ( x_offset , 5 ) )
2023-04-28 11:27:47 +00:00
if int ( intHomeScore ) < int ( intAwayScore ) or int ( intHomeScore ) == int ( intAwayScore ) :
ua_image = Image . new ( " RGB " , ( ac_timage . size [ 0 ] - 3 , 1 ) )
ua_image1 = ImageDraw . Draw ( ua_image )
ua_image1 . line ( ( 0 , 0 , ac_timage . size [ 0 ] - 3 , 0 ) , fill = " red " , width = 0 )
img . paste ( ua_image , ( x_offset , ac_timage . size [ 1 ] + 4 ) )
2023-04-27 10:40:04 +00:00
x_offset + = ac_timage . size [ 0 ]
2023-04-28 11:27:47 +00:00
img . paste ( score_image , ( x_offset , 5 ) )
x_offset + = score_image . size [ 0 ]
2023-04-27 10:40:04 +00:00
img . paste ( hc_timage , ( x_offset , 5 ) )
2023-04-28 11:27:47 +00:00
if int ( intHomeScore ) > int ( intAwayScore ) or int ( intHomeScore ) == int ( intAwayScore ) :
u_image = Image . new ( " RGB " , ( hc_timage . size [ 0 ] - 3 , 1 ) )
u_image1 = ImageDraw . Draw ( u_image )
u_image1 . line ( ( 0 , 0 , hc_timage . size [ 0 ] - 3 , 0 ) , fill = " red " , width = 0 )
img . paste ( u_image , ( x_offset , hc_timage . size [ 1 ] + 4 ) )
2023-04-27 10:40:04 +00:00
x_offset + = hc_timage . size [ 0 ]
2023-01-09 10:08:18 +00:00
2023-04-28 11:27:47 +00:00
if error :
img . paste ( home_logo1 , ( max ( x_offset + date_timage . size [ 0 ] , x_offsetdate2 ) , 0 ) )
x_offset + = ( home_logo1 . size [ 0 ] + date_timage . size [ 0 ] )
else :
img . paste ( home_logo1 , ( max ( x_offset , x_offsetdate2 ) , 0 ) )
x_offset + = home_logo1 . size [ 0 ]
x_offset + = buff_size
2023-01-09 10:08:18 +00:00
2023-04-28 11:27:47 +00:00
x_offset + = 20 #INDENT THIS OR NO?
2023-01-09 10:08:18 +00:00
img = img . crop ( ( 0 , 0 , x_offset , 16 ) )
imgs . append ( img )
except :
pass
2022-10-31 07:47:37 +00:00
return self . stitchImage ( imgs )
2022-04-10 11:50:10 +00:00
def convertTemp ( self , temp , setting ) :
if setting == ' kelvin ' :
temp = temp + 273.15
elif setting == ' fahrenheit ' :
temp = temp * 9 / 5 + 32
return temp
2021-06-07 20:03:03 +00:00
def getTodayWeatherImage ( self ) :
2022-04-07 17:35:38 +00:00
f = open ( ' csv/current_weather.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
2021-10-04 20:39:22 +00:00
if all_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/weather.png ' )
imgs = [ title_img , self . blank ]
else :
imgs = [ ]
2021-06-15 18:35:04 +00:00
2021-06-03 20:56:25 +00:00
2021-10-04 20:39:22 +00:00
current_weathers = all_settings [ ' locations ' ]
locations = list ( current_weathers . keys ( ) )
2021-07-06 19:15:05 +00:00
for i , location in enumerate ( locations ) :
2021-12-14 15:38:09 +00:00
try :
current_weather = current_weathers [ location ]
small_font = ImageFont . load ( " ./fonts/5x7.pil " )
large_font = ImageFont . load ( " ./fonts/10x20.pil " )
2021-06-28 19:36:29 +00:00
2021-12-14 15:38:09 +00:00
location_img = self . textImage ( location . upper ( ) , small_font , r = 255 , g = 255 , b = 0 )
main = current_weather [ ' main_weather ' ]
if main == ' Clouds ' :
main = current_weather [ ' description ' ]
2022-06-12 10:35:44 +00:00
if main == ' Rain ' :
main = current_weather [ ' description ' ]
2021-12-14 15:38:09 +00:00
weather_ids = { ' Clear ' : ' 01 ' , ' few clouds ' : ' 02 ' , ' scattered clouds ' : ' 03 ' , ' broken clouds ' : ' 04 ' , ' overcast clouds ' : ' 04 ' , ' Drizzle ' : ' 09 ' ,
' Rain ' : ' 10 ' , ' Thunderstorm ' : ' 11 ' , ' Snow ' : ' 13 ' , ' Mist ' : ' 50 ' , ' Smoke ' : ' 50 ' , ' Haze ' : ' 50 ' , ' Dust ' : ' 50 ' , ' Fog ' : ' 50 ' ,
2022-06-12 10:35:44 +00:00
' Sand ' : ' 50 ' , ' Ash ' : ' 50 ' , ' Squall ' : ' 50 ' , ' Tornado ' : ' 50 ' , ' light rain ' : ' 10 ' , ' moderate rain ' : ' 10 ' , ' heavy intensity rain ' : ' 10 ' ,
' very heavy rain ' : ' 10 ' , ' extreme rain ' : ' 10 ' , ' freezing rain ' : ' 13 ' , ' light intensity shower rain ' : ' 09 ' , ' shower rain ' : ' 09 ' ,
' heavy intensity shower rain ' : ' 09 ' , ' ragged shower rain ' : ' 09 ' }
2021-12-14 15:38:09 +00:00
weather_dir = ' ./logos/weather_icons '
weather_img = Image . open ( weather_dir + ' /weather_type_icons/ ' + weather_ids [ main ] + ' .png ' )
2022-04-10 11:50:10 +00:00
temp = self . convertTemp ( current_weather [ ' temp ' ] , all_settings [ ' temp ' ] )
feels_temp = self . convertTemp ( current_weather [ ' feels_like ' ] , all_settings [ ' temp ' ] )
2021-12-14 15:38:09 +00:00
temp_img = self . textImage ( str ( " {0:.0f} " . format ( temp ) ) , large_font )
deg_img = self . textImage ( ' o ' , small_font )
main = current_weather [ ' main_weather ' ]
main_img = self . textImage ( main . upper ( ) , small_font )
2021-12-21 17:21:04 +00:00
feels_img = self . textImage ( ' Feels like: ' . upper ( ) + str ( " {0:.0f} " . format ( feels_temp ) ) , small_font )
2022-04-10 11:50:10 +00:00
min_img = self . textImage ( " {0:.0f} " . format ( self . convertTemp ( current_weather [ ' min_temp ' ] , all_settings [ ' temp ' ] ) ) , small_font , r = 0 , g = 0 , b = 255 )
max_img = self . textImage ( " {0:.0f} " . format ( self . convertTemp ( current_weather [ ' max_temp ' ] , all_settings [ ' temp ' ] ) ) , small_font , r = 255 , g = 0 , b = 0 )
2021-12-14 15:38:09 +00:00
hum_img = Image . open ( weather_dir + ' /humidity.png ' )
htext_img = self . textImage ( str ( current_weather [ ' humidity ' ] ) + ' % ' , small_font )
uv_img = Image . open ( weather_dir + ' /uv.png ' )
utext_img = self . textImage ( str ( round ( current_weather [ ' uv ' ] , 1 ) ) , small_font )
weekdays = [ ' Mon ' , ' Tue ' , ' Wed ' , ' Thu ' , ' Fri ' , ' Sat ' , ' Sun ' ]
months = [ ' Jan ' , ' Feb ' , ' Mar ' , ' Apr ' , ' May ' , ' Jun ' , ' Jul ' , ' Aug ' , ' Sep ' , ' Oct ' , ' Nov ' , ' Dec ' ]
month = months [ int ( datetime . now ( ) . strftime ( ' % m ' ) ) - 1 ]
date = str ( int ( datetime . now ( ) . strftime ( ' %d ' ) ) )
weekday = weekdays [ datetime . today ( ) . weekday ( ) ]
date_img = self . textImage ( ( month + ' ' + date + ' , ' + weekday ) . upper ( ) , small_font )
rain_img = Image . open ( weather_dir + ' /rain-chance.png ' )
2023-05-23 08:19:29 +00:00
rtext_img = self . textImage ( str ( current_weather [ ' rain_chance ' ] ) + ' % ' , small_font )
2021-12-14 15:38:09 +00:00
cloud_img = Image . open ( weather_dir + ' /clouds.png ' )
ctext_img = self . textImage ( str ( current_weather [ ' clouds ' ] ) + ' % ' , small_font )
wind_img = Image . open ( weather_dir + ' /wind.png ' )
2023-05-23 08:19:29 +00:00
w_speed = current_weather [ ' wind_speed ' ]
2021-12-14 15:38:09 +00:00
w_unit = ' K/H '
if all_settings [ " wind_speed " ] == " miles/hour " :
2023-05-23 08:19:29 +00:00
w_speed = current_weather [ ' wind_speed ' ] / 1.609
2021-12-14 15:38:09 +00:00
w_unit = ' M/H '
wtext_img = self . textImage ( " {0:.0f} " . format ( w_speed ) + w_unit , small_font )
wdir_img = self . textImage ( self . degreesToCompass ( current_weather [ ' wind_direction ' ] ) . upper ( ) , small_font )
vis_img = Image . open ( weather_dir + ' /visibility.png ' )
vtext_img = self . textImage ( str ( round ( current_weather [ ' visibility ' ] / 1000 , 1 ) ) + ' km ' . upper ( ) , small_font )
2022-01-20 18:40:52 +00:00
' ------------------------------------------ '
img = Image . new ( ' RGB ' , ( 1000 , 32 ) )
img . paste ( weather_img , ( 5 , 9 ) )
x_offset = 5 + weather_img . size [ 0 ] + 1
img . paste ( main_img , ( x_offset , 26 ) )
img . paste ( temp_img , ( x_offset + main_img . size [ 0 ] / / 2 - temp_img . size [ 0 ] / / 2 , 9 ) )
img . paste ( deg_img , ( x_offset + main_img . size [ 0 ] / / 2 - temp_img . size [ 0 ] / / 2 + temp_img . size [ 0 ] , 8 ) )
x_offset + = max ( main_img . size [ 0 ] , temp_img . size [ 0 ] + deg_img . size [ 0 ] )
2022-06-12 10:35:44 +00:00
img . paste ( min_img , ( x_offset - 0 , 12 ) )
img . paste ( max_img , ( x_offset - 0 , 21 ) )
2022-01-20 18:40:52 +00:00
x_offset + = max ( min_img . size [ 0 ] , max_img . size [ 0 ] ) + 2
2022-06-12 10:35:44 +00:00
img . paste ( hum_img , ( x_offset - 1 , 8 ) )
img . paste ( uv_img , ( x_offset - 1 , 22 ) )
2022-01-20 18:40:52 +00:00
img . paste ( htext_img , ( x_offset + hum_img . size [ 0 ] , 10 ) )
img . paste ( utext_img , ( x_offset + uv_img . size [ 0 ] , 23 ) )
x_offset + = max ( hum_img . size [ 0 ] , uv_img . size [ 0 ] + 2 )
x_offset + = max ( htext_img . size [ 0 ] , utext_img . size [ 0 ] ) + 6
img . paste ( rain_img , ( x_offset , 8 ) )
img . paste ( cloud_img , ( x_offset , 20 ) )
img . paste ( ctext_img , ( x_offset + cloud_img . size [ 0 ] + 2 , 22 ) )
img . paste ( rtext_img , ( x_offset + rain_img . size [ 0 ] + 2 , 10 ) )
x_offset + = max ( cloud_img . size [ 0 ] , rain_img . size [ 0 ] ) + 6
x_offset + = max ( ctext_img . size [ 0 ] , rtext_img . size [ 0 ] ) + 6
img . paste ( wind_img , ( x_offset , 8 ) )
img . paste ( vis_img , ( x_offset , 20 ) )
img . paste ( wtext_img , ( x_offset + wind_img . size [ 0 ] + 2 , 10 ) )
img . paste ( vtext_img , ( x_offset + vis_img . size [ 0 ] + 2 , 22 ) )
x_offset + = wind_img . size [ 0 ] + wtext_img . size [ 0 ] + 4
img . paste ( wdir_img , ( x_offset , 10 ) )
2022-01-20 18:58:27 +00:00
2022-01-20 18:40:52 +00:00
img . paste ( location_img , ( 5 , 0 ) )
img . paste ( feels_img , ( location_img . size [ 0 ] + 10 , 0 ) )
img . paste ( date_img , ( location_img . size [ 0 ] + feels_img . size [ 0 ] + 15 , 0 ) )
2022-01-20 18:58:27 +00:00
img = img . crop ( ( 0 , 0 , max ( x_offset + wdir_img . size [ 0 ] + 4 , location_img . size [ 0 ] + feels_img . size [ 0 ] + 15 + date_img . size [ 0 ] ) , 32 ) )
2021-12-14 15:38:09 +00:00
imgs . append ( img )
imgs . append ( self . blank )
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
2021-06-27 11:07:47 +00:00
2021-06-30 19:22:14 +00:00
return self . stitchImage ( imgs )
2021-07-08 18:42:21 +00:00
def getTodayWeatherProfessional ( self ) :
2022-04-07 17:35:38 +00:00
f = open ( ' csv/current_weather.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
2021-07-08 18:42:21 +00:00
2021-10-05 19:29:05 +00:00
if all_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/weather.png ' )
image_list = [ title_img , Image . new ( ' RGB ' , ( 3 , 16 ) ) ]
else :
image_list = [ ]
current_weathers = all_settings [ ' locations ' ]
locations = list ( current_weathers . keys ( ) )
2021-07-14 17:02:54 +00:00
2021-07-08 18:42:21 +00:00
weekdays = [ ' Mon ' , ' Tue ' , ' Wed ' , ' Thu ' , ' Fri ' , ' Sat ' , ' Sun ' ]
months = [ ' Jan ' , ' Feb ' , ' Mar ' , ' Apr ' , ' May ' , ' Jun ' , ' Jul ' , ' Aug ' , ' Sep ' , ' Oct ' , ' Nov ' , ' Dec ' ]
2021-07-16 10:00:37 +00:00
month = months [ int ( datetime . now ( ) . strftime ( ' % m ' ) ) - 1 ]
2021-07-08 18:42:21 +00:00
date = str ( int ( datetime . now ( ) . strftime ( ' %d ' ) ) )
weekday = weekdays [ datetime . today ( ) . weekday ( ) ]
2021-10-05 19:29:05 +00:00
2021-07-08 18:42:21 +00:00
for i , location in enumerate ( locations ) :
2022-03-06 19:10:27 +00:00
2021-12-14 15:38:09 +00:00
try :
2021-10-05 19:29:05 +00:00
2021-12-14 15:38:09 +00:00
img = Image . new ( ' RGB ' , ( 1000 , 32 ) )
current_weather = current_weathers [ location ]
small_font = ImageFont . load ( " ./fonts/4x6.pil " )
font = ImageFont . load ( " ./fonts/6x10.pil " )
large_font = ImageFont . load ( " ./fonts/10x20.pil " )
2021-07-08 18:42:21 +00:00
2021-12-14 15:38:09 +00:00
main = current_weather [ ' main_weather ' ]
if main == ' Clouds ' :
main = current_weather [ ' description ' ]
2022-06-12 10:40:22 +00:00
if main == ' Rain ' :
main = current_weather [ ' description ' ]
2021-12-14 15:38:09 +00:00
weather_ids = { ' Clear ' : ' 01 ' , ' few clouds ' : ' 02 ' , ' scattered clouds ' : ' 03 ' , ' broken clouds ' : ' 04 ' , ' overcast clouds ' : ' 04 ' , ' Drizzle ' : ' 09 ' ,
' Rain ' : ' 10 ' , ' Thunderstorm ' : ' 11 ' , ' Snow ' : ' 13 ' , ' Mist ' : ' 50 ' , ' Smoke ' : ' 50 ' , ' Haze ' : ' 50 ' , ' Dust ' : ' 50 ' , ' Fog ' : ' 50 ' ,
2022-06-12 10:40:22 +00:00
' Sand ' : ' 50 ' , ' Ash ' : ' 50 ' , ' Squall ' : ' 50 ' , ' Tornado ' : ' 50 ' , ' light rain ' : ' 10 ' , ' moderate rain ' : ' 10 ' , ' heavy intensity rain ' : ' 10 ' ,
' very heavy rain ' : ' 10 ' , ' extreme rain ' : ' 10 ' , ' freezing rain ' : ' 13 ' , ' light intensity shower rain ' : ' 09 ' , ' shower rain ' : ' 09 ' ,
' heavy intensity shower rain ' : ' 09 ' , ' ragged shower rain ' : ' 09 ' }
2021-12-14 15:38:09 +00:00
weather_dir = ' ./logos/weather_icons '
location_img = self . textImage ( location . upper ( ) , font , r = 255 , g = 255 , b = 0 )
img . paste ( location_img , ( 5 , 3 ) )
x_offset = location_img . size [ 0 ] + 8
2021-07-08 18:42:21 +00:00
2021-12-14 15:38:09 +00:00
date_img = self . textImage ( ( month + ' ' + date + ' , ' + weekday ) . upper ( ) , font )
img . paste ( date_img , ( x_offset , 3 ) )
x_offset + = date_img . size [ 0 ] + 2
2022-06-12 10:40:22 +00:00
weather_img = Image . open ( weather_dir + ' /small_icons/ ' + weather_ids [ main ] + ' .png ' )
2021-12-14 15:38:09 +00:00
w , h = weather_img . size
2022-06-12 10:40:22 +00:00
#weather_img = weather_img.resize((int(w/2), int(h/2)))
2021-12-14 15:38:09 +00:00
main = current_weather [ ' main_weather ' ]
main_img = self . textImage ( main . upper ( ) , font )
img . paste ( main_img , ( x_offset , 3 ) )
x_offset + = main_img . size [ 0 ] + 2
img . paste ( weather_img , ( x_offset , 3 ) )
x_offset + = weather_img . size [ 0 ] + 2
2022-04-11 15:55:17 +00:00
temp = self . convertTemp ( current_weather [ ' temp ' ] , all_settings [ ' temp ' ] )
2021-12-14 15:38:09 +00:00
temp_img = self . textImage ( str ( " {0:.0f} " . format ( temp ) ) , font )
img . paste ( temp_img , ( x_offset , 3 ) )
x_offset + = temp_img . size [ 0 ] - 3
deg_img = self . textImage ( ' o ' , small_font )
2021-07-08 18:42:21 +00:00
2021-12-14 15:38:09 +00:00
img . paste ( deg_img , ( x_offset + 1 , 1 ) )
x_offset + = deg_img . size [ 0 ] - 2
2021-07-08 18:42:21 +00:00
2022-04-10 11:50:10 +00:00
min_img = self . textImage ( " {0:.0f} " . format ( self . convertTemp ( current_weather [ ' min_temp ' ] , all_settings [ ' temp ' ] ) ) , small_font , r = 0 , g = 0 , b = 255 )
2021-12-14 15:38:09 +00:00
img . paste ( min_img , ( x_offset + 2 , 2 ) )
2022-04-10 11:50:10 +00:00
max_img = self . textImage ( " {0:.0f} " . format ( self . convertTemp ( current_weather [ ' max_temp ' ] , all_settings [ ' temp ' ] ) ) , small_font , r = 255 , g = 0 , b = 0 )
2021-12-14 15:38:09 +00:00
img . paste ( max_img , ( x_offset + 2 , 8 ) )
x_offset + = max_img . size [ 0 ] + 2
hum_img = Image . open ( weather_dir + ' /humidity.png ' )
htext_img = self . textImage ( str ( current_weather [ ' humidity ' ] ) + ' % ' , font )
uv_img = Image . open ( weather_dir + ' /uv.png ' )
utext_img = self . textImage ( str ( round ( current_weather [ ' uv ' ] , 1 ) ) , font )
2021-07-08 18:42:21 +00:00
2021-12-14 15:38:09 +00:00
rain_img = Image . open ( weather_dir + ' /rain-chance.png ' )
2023-06-01 13:33:04 +00:00
rtext_img = self . textImage ( str ( current_weather [ ' rain_chance ' ] ) + ' % ' , font )
2021-12-14 15:38:09 +00:00
cloud_img = Image . open ( weather_dir + ' /clouds.png ' )
ctext_img = self . textImage ( str ( current_weather [ ' clouds ' ] ) + ' % ' , font )
wind_img = Image . open ( weather_dir + ' /wind.png ' )
2023-06-01 13:33:04 +00:00
w_speed = current_weather [ ' wind_speed ' ]
2021-12-14 15:38:09 +00:00
w_unit = ' K/H '
if all_settings [ " wind_speed " ] == " miles/hour " :
2023-06-01 13:33:04 +00:00
w_speed = current_weather [ ' wind_speed ' ] / 1.609
2021-12-14 15:38:09 +00:00
w_unit = ' M/H '
2022-03-06 19:10:27 +00:00
wtext_img = self . textImage ( " {0:.0f} " . format ( w_speed ) + w_unit , font )
2021-12-14 15:38:09 +00:00
wdir_img = self . textImage ( self . degreesToCompass ( current_weather [ ' wind_direction ' ] ) . upper ( ) , font )
vis_img = Image . open ( weather_dir + ' /visibility.png ' )
vtext_img = self . textImage ( str ( current_weather [ ' visibility ' ] / 1000 ) + ' km ' , font )
for image in [ hum_img , htext_img , uv_img , utext_img , rain_img , rtext_img , cloud_img , ctext_img , wind_img , wtext_img , wdir_img , vis_img , vtext_img ] :
img . paste ( image , ( x_offset , 3 ) )
x_offset + = image . size [ 0 ] + 2
img = img . crop ( ( 0 , 0 , x_offset + image . size [ 0 ] , 16 ) )
2021-07-08 18:42:21 +00:00
2021-12-14 15:38:09 +00:00
image_list . append ( img )
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
2021-07-14 17:02:54 +00:00
return self . stitchImage ( image_list )
2021-06-03 20:56:25 +00:00
2021-06-10 18:55:23 +00:00
def getDailyWeatherImageAlt ( self ) :
2021-06-07 20:03:03 +00:00
2021-06-09 18:06:21 +00:00
f = open ( " csv/weather_location.txt " , ' r ' )
location = f . read ( )
f . close ( )
2021-06-08 20:16:08 +00:00
img = Image . new ( ' RGB ' , ( 128 , 32 ) )
current_weather = json . load ( open ( ' csv/current_weather.json ' , ' r ' ) )
2021-06-07 20:03:03 +00:00
small_font = ImageFont . load ( " ./fonts/5x7.pil " )
2021-06-08 20:16:08 +00:00
extra_small_font = ImageFont . load ( " ./fonts/4x6.pil " )
2021-06-07 20:03:03 +00:00
large_font = ImageFont . load ( " ./fonts/10x20.pil " )
2021-06-09 18:06:21 +00:00
location_img = self . textImage ( location , extra_small_font , r = 255 , g = 255 , b = 0 )
2021-06-08 20:16:08 +00:00
main = current_weather [ ' main_weather ' ]
if main == ' Clouds ' :
main = current_weather [ ' description ' ]
weather_ids = { ' Clear ' : ' 01 ' , ' few clouds ' : ' 02 ' , ' scattered clouds ' : ' 03 ' , ' broken clouds ' : ' 04 ' , ' overcast clouds ' : ' 04 ' , ' Drizzle ' : ' 09 ' ,
' Rain ' : ' 10 ' , ' Thunderstorm ' : ' 11 ' , ' Snow ' : ' 13 ' , ' Mist ' : ' 50 ' , ' Smoke ' : ' 50 ' , ' Haze ' : ' 50 ' , ' Dust ' : ' 50 ' , ' Fog ' : ' 50 ' ,
' Sand ' : ' 50 ' , ' Ash ' : ' 50 ' , ' Squall ' : ' 50 ' , ' Tornado ' : ' 50 ' }
weather_dir = ' ./logos/weather_icons '
weather_img = Image . open ( weather_dir + ' /weather_type_icons/ ' + weather_ids [ main ] + ' .png ' )
temp_img = self . textImage ( str ( " {0:.0f} " . format ( current_weather [ ' temp ' ] ) ) , large_font )
deg_img = self . textImage ( ' o ' , small_font )
2021-06-07 20:03:03 +00:00
2021-06-08 20:16:08 +00:00
min_img = self . textImage ( " {0:.0f} " . format ( current_weather [ ' min_temp ' ] ) , small_font , r = 0 , g = 0 , b = 255 )
max_img = self . textImage ( " {0:.0f} " . format ( current_weather [ ' max_temp ' ] ) , small_font , r = 255 , g = 0 , b = 0 )
main = current_weather [ ' main_weather ' ]
main_img = self . textImage ( main , small_font )
2021-06-07 20:03:03 +00:00
weekdays = [ ' Mon ' , ' Tue ' , ' Wed ' , ' Thu ' , ' Fri ' , ' Sat ' , ' Sun ' ]
months = [ ' Jan ' , ' Feb ' , ' Mar ' , ' Apr ' , ' May ' , ' Jun ' , ' Jul ' , ' Aug ' , ' Sep ' , ' Oct ' , ' Nov ' , ' Dec ' ]
month = months [ int ( datetime . now ( ) . strftime ( ' % m ' ) ) ]
date = str ( int ( datetime . now ( ) . strftime ( ' %d ' ) ) )
weekday = weekdays [ datetime . today ( ) . weekday ( ) ]
2021-06-08 20:16:08 +00:00
date_img = self . textImage ( month + ' ' + date + ' , ' + weekday , extra_small_font )
rain_img = Image . open ( weather_dir + ' /rain-chance.png ' )
2021-06-07 20:03:03 +00:00
2021-06-09 18:39:04 +00:00
rtext_img = self . textImage ( str ( int ( current_weather [ ' rain_chance ' ] * 100 ) ) + ' % ' , extra_small_font )
2021-05-14 12:06:19 +00:00
2021-06-07 20:03:03 +00:00
2021-06-08 20:16:08 +00:00
hum_img = Image . open ( weather_dir + ' /humidity.png ' )
htext_img = self . textImage ( str ( current_weather [ ' humidity ' ] ) + ' % ' , extra_small_font )
uv_img = Image . open ( weather_dir + ' /uv.png ' )
2021-06-07 20:03:03 +00:00
2021-06-08 20:16:08 +00:00
utext_img = self . textImage ( str ( current_weather [ ' uv ' ] ) , extra_small_font )
2021-06-07 20:03:03 +00:00
2021-06-08 20:16:08 +00:00
wind_img = Image . open ( weather_dir + ' /wind.png ' )
wtext_img = self . textImage ( str ( current_weather [ ' wind_speed ' ] ) + ' m/s ' , extra_small_font )
2021-06-15 18:35:04 +00:00
2021-06-08 20:16:08 +00:00
img . paste ( location_img , ( 0 , 0 ) )
img . paste ( weather_img , ( 0 , 12 ) )
img . paste ( temp_img , ( 30 , 9 ) )
img . paste ( deg_img , ( 50 , 8 ) )
2021-06-08 20:30:48 +00:00
img . paste ( min_img , ( 55 , 10 ) )
2021-06-08 20:16:08 +00:00
img . paste ( main_img , ( 30 , 26 ) )
2021-06-14 18:19:52 +00:00
img . paste ( max_img , ( 55 , 19 ) )
2021-06-08 20:16:08 +00:00
img . paste ( date_img , ( location_img . size [ 0 ] , 1 ) )
img . paste ( rain_img , ( 75 , 0 ) )
img . paste ( rtext_img , ( 88 , 1 ) )
img . paste ( hum_img , ( 102 , 0 ) )
img . paste ( htext_img , ( 113 , 1 ) )
#img.paste(uv_img, ( 96, 0))
#img.paste(utext_img, (109, 0))
#img.paste(wind_img, (96,0))
#img.paste(wtext_img, (109,0))
img0 = img
img = Image . new ( ' RGB ' , ( 1000 , 32 ) )
daily_weather = json . load ( open ( ' csv/daily_weather.json ' , ' r ' ) )
#img.paste(date_img, (70, 0))
x_offset = 64
for i in range ( 0 , len ( daily_weather ) - 1 ) :
weekday = weekdays [ ( datetime . today ( ) . weekday ( ) + i ) % 7 ]
day_img = self . textImage ( weekday , small_font )
2021-06-07 20:03:03 +00:00
weather = daily_weather [ i ]
main = weather [ ' main_weather ' ]
if main == ' Clouds ' :
main = weather [ ' description ' ]
2021-06-08 20:16:08 +00:00
weather_img = Image . open ( weather_dir + ' /small_icons/ ' + weather_ids [ main ] + ' .png ' )
2021-06-07 20:03:03 +00:00
min_img = self . textImage ( " {0:.0f} " . format ( weather [ ' min_temp ' ] ) , small_font , r = 0 , g = 0 , b = 255 )
max_img = self . textImage ( " {0:.0f} " . format ( weather [ ' max_temp ' ] ) , small_font , r = 255 , g = 0 , b = 0 )
2021-06-08 20:16:08 +00:00
img . paste ( day_img , ( x_offset + 5 , 9 ) )
img . paste ( weather_img , ( x_offset + 5 , 16 ) )
img . paste ( min_img , ( x_offset + 25 , 10 ) )
2021-06-14 18:19:52 +00:00
img . paste ( max_img , ( x_offset + 25 , 20 ) )
2021-06-07 20:03:03 +00:00
2021-06-08 20:16:08 +00:00
x_offset + = 35
2021-06-07 20:03:03 +00:00
2021-06-08 20:16:08 +00:00
img1 = img . crop ( ( 64 , 0 , x_offset , 32 ) )
2021-06-07 20:03:03 +00:00
2021-06-22 19:05:56 +00:00
img1 . save ( ' display_images/weather.ppm ' )
2021-06-08 20:16:08 +00:00
return img0 , img1
2021-06-07 20:03:03 +00:00
2021-06-10 18:55:23 +00:00
def getDailyWeatherImage ( self ) :
2022-04-07 17:35:38 +00:00
f = open ( ' csv/daily_weather.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
2023-04-14 07:32:24 +00:00
2021-09-30 19:17:53 +00:00
if all_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/forecast.png ' )
imgs = [ title_img , self . blank ]
else :
imgs = [ ]
2023-04-14 07:32:24 +00:00
2022-04-10 11:50:10 +00:00
f = open ( ' csv/daily_weather.json ' , ' r ' )
daily_weathers = json . load ( f )
f . close ( )
2021-10-04 20:39:22 +00:00
locations = list ( daily_weathers [ ' locations ' ] . keys ( ) )
2021-07-06 19:15:05 +00:00
for i , location in enumerate ( locations ) :
2021-12-14 15:38:09 +00:00
try :
img = Image . new ( ' RGB ' , ( 1000 , 32 ) )
2023-04-14 07:32:24 +00:00
2021-12-14 15:38:09 +00:00
daily_weather = daily_weathers [ ' locations ' ] [ location ]
2021-06-28 19:36:29 +00:00
2021-12-14 15:38:09 +00:00
small_font = ImageFont . load ( " ./fonts/5x7.pil " )
extra_small_font = ImageFont . load ( " ./fonts/4x6.pil " )
large_font = ImageFont . load ( " ./fonts/10x20.pil " )
2023-04-14 07:32:24 +00:00
location_img = self . textImage ( location . upper ( ) , small_font , r = 255 , g = 255 , b = 0 )
2021-12-14 15:38:09 +00:00
main = daily_weather [ 0 ] [ ' main_weather ' ]
2021-06-28 19:36:29 +00:00
if main == ' Clouds ' :
2021-12-14 15:38:09 +00:00
main = daily_weather [ 0 ] [ ' description ' ]
2022-06-12 10:31:44 +00:00
if main == ' Rain ' :
main = daily_weather [ 0 ] [ ' description ' ]
2021-12-14 15:38:09 +00:00
weather_ids = { ' Clear ' : ' 01 ' , ' few clouds ' : ' 02 ' , ' scattered clouds ' : ' 03 ' , ' broken clouds ' : ' 04 ' , ' overcast clouds ' : ' 04 ' , ' Drizzle ' : ' 09 ' ,
' Rain ' : ' 10 ' , ' Thunderstorm ' : ' 11 ' , ' Snow ' : ' 13 ' , ' Mist ' : ' 50 ' , ' Smoke ' : ' 50 ' , ' Haze ' : ' 50 ' , ' Dust ' : ' 50 ' , ' Fog ' : ' 50 ' ,
2022-06-12 10:31:44 +00:00
' Sand ' : ' 50 ' , ' Ash ' : ' 50 ' , ' Squall ' : ' 50 ' , ' Tornado ' : ' 50 ' , ' light rain ' : ' 10 ' , ' moderate rain ' : ' 10 ' , ' heavy intensity rain ' : ' 10 ' ,
' very heavy rain ' : ' 10 ' , ' extreme rain ' : ' 10 ' , ' freezing rain ' : ' 13 ' , ' light intensity shower rain ' : ' 09 ' , ' shower rain ' : ' 09 ' ,
' heavy intensity shower rain ' : ' 09 ' , ' ragged shower rain ' : ' 09 ' }
2021-06-28 19:36:29 +00:00
2021-12-14 15:38:09 +00:00
weather_dir = ' ./logos/weather_icons '
2021-06-28 19:36:29 +00:00
2021-12-14 15:38:09 +00:00
weather_img = Image . open ( weather_dir + ' /weather_type_icons/ ' + weather_ids [ main ] + ' .png ' )
2023-04-14 07:32:24 +00:00
2022-04-11 16:07:12 +00:00
temp = self . convertTemp ( daily_weather [ 0 ] [ ' temp ' ] , daily_weathers [ ' temp ' ] )
2022-04-10 11:50:10 +00:00
min_temp = self . convertTemp ( daily_weather [ 0 ] [ ' min_temp ' ] , daily_weathers [ ' temp ' ] )
max_temp = self . convertTemp ( daily_weather [ 0 ] [ ' max_temp ' ] , daily_weathers [ ' temp ' ] )
2023-04-14 07:32:24 +00:00
2021-12-14 15:38:09 +00:00
temp_img = self . textImage ( str ( " {0:.0f} " . format ( temp ) ) , large_font )
deg_img = self . textImage ( ' o ' , small_font )
2022-04-11 16:07:12 +00:00
min_img = self . textImage ( " {0:.0f} " . format ( min_temp , daily_weathers [ ' temp ' ] ) , small_font , r = 0 , g = 0 , b = 255 )
max_img = self . textImage ( " {0:.0f} " . format ( max_temp , daily_weathers [ ' temp ' ] ) , small_font , r = 255 , g = 0 , b = 0 )
2021-12-14 15:38:09 +00:00
main = daily_weather [ 0 ] [ ' main_weather ' ]
main_img = self . textImage ( main . upper ( ) , small_font )
weekdays = [ ' Mon ' , ' Tue ' , ' Wed ' , ' Thu ' , ' Fri ' , ' Sat ' , ' Sun ' ]
months = [ ' Jan ' , ' Feb ' , ' Mar ' , ' Apr ' , ' May ' , ' Jun ' , ' Jul ' , ' Aug ' , ' Sep ' , ' Oct ' , ' Nov ' , ' Dec ' ]
month = months [ int ( datetime . now ( ) . strftime ( ' % m ' ) ) - 1 ]
date = str ( int ( datetime . now ( ) . strftime ( ' %d ' ) ) )
weekday = weekdays [ datetime . today ( ) . weekday ( ) ]
2023-04-14 07:32:24 +00:00
date_img = self . textImage ( ( month + ' ' + date + ' , ' + weekday ) . upper ( ) , small_font )
if daily_weathers [ ' current_weather ' ] :
rain_img = Image . open ( weather_dir + ' /rain-chance.png ' )
2023-05-23 08:19:29 +00:00
rtext_img = self . textImage ( str ( daily_weather [ 0 ] [ ' rain_chance ' ] ) + ' % ' , small_font )
2023-04-14 07:32:24 +00:00
hum_img = Image . open ( weather_dir + ' /humidity.png ' )
htext_img = self . textImage ( str ( daily_weather [ 0 ] [ ' humidity ' ] ) + ' % ' , small_font )
wind_img = Image . open ( weather_dir + ' /wind.png ' )
wtext_img = self . textImage ( str ( daily_weather [ 0 ] [ ' wind_speed ' ] ) + ' m/s ' . upper ( ) , small_font )
uv_img = Image . open ( weather_dir + ' /uv.png ' )
utext_img = self . textImage ( str ( round ( daily_weather [ 0 ] [ ' uv ' ] , 1 ) ) , small_font )
cloud_img = Image . open ( weather_dir + ' /clouds.png ' )
ctext_img = self . textImage ( str ( daily_weather [ 0 ] [ ' clouds ' ] ) + ' % ' , small_font )
wind_img = Image . open ( weather_dir + ' /wind.png ' )
2023-05-23 08:19:29 +00:00
w_speed = daily_weather [ 0 ] [ ' wind_speed ' ]
2023-04-14 07:32:24 +00:00
w_unit = ' K/H '
if daily_weathers [ ' wind_speed ' ] == " miles/hour " :
2023-05-23 08:19:29 +00:00
w_speed = daily_weather [ 0 ] [ ' wind_speed ' ] / 1.609
2023-04-14 07:32:24 +00:00
w_unit = ' M/H '
wtext_img = self . textImage ( " {0:.0f} " . format ( w_speed ) + w_unit , small_font )
wdir_img = self . textImage ( self . degreesToCompass ( daily_weather [ 0 ] [ ' wind_direction ' ] ) , small_font )
vis_img = Image . open ( weather_dir + ' /visibility.png ' )
vtext_img = self . textImage ( str ( round ( daily_weather [ 0 ] [ ' visibility ' ] / 1000 , 1 ) ) + ' km ' . upper ( ) , small_font )
2021-12-14 15:38:09 +00:00
img . paste ( location_img , ( 0 , 0 ) )
2023-04-14 07:32:24 +00:00
x_offset2 = location_img . size [ 0 ] + 5
2022-01-20 18:58:27 +00:00
img . paste ( weather_img , ( 5 , 9 ) )
x_offset = 5 + weather_img . size [ 0 ] + 1
img . paste ( main_img , ( x_offset , 26 ) )
img . paste ( temp_img , ( x_offset + main_img . size [ 0 ] / / 2 - temp_img . size [ 0 ] / / 2 , 9 ) )
img . paste ( deg_img , ( x_offset + main_img . size [ 0 ] / / 2 - temp_img . size [ 0 ] / / 2 + temp_img . size [ 0 ] , 8 ) )
x_offset + = max ( main_img . size [ 0 ] , temp_img . size [ 0 ] + deg_img . size [ 0 ] )
2023-04-14 07:32:24 +00:00
2022-06-12 10:31:44 +00:00
img . paste ( min_img , ( x_offset - 0 , 12 ) )
img . paste ( max_img , ( x_offset - 0 , 21 ) )
2022-01-20 18:58:27 +00:00
x_offset + = max ( min_img . size [ 0 ] , max_img . size [ 0 ] ) + 2
2023-04-14 07:32:24 +00:00
img . paste ( date_img , ( x_offset2 , 0 ) )
x_offset2 + = date_img . size [ 0 ] + 5
if daily_weathers [ ' current_weather ' ] :
img . paste ( rain_img , ( x_offset2 , 0 ) )
x_offset2 + = rain_img . size [ 0 ] + 2
img . paste ( rtext_img , ( x_offset2 , 1 ) )
x_offset2 + = rtext_img . size [ 0 ] + 2
img . paste ( hum_img , ( x_offset2 , 0 ) )
x_offset2 + = hum_img . size [ 0 ] + 2
img . paste ( htext_img , ( x_offset2 , 1 ) )
x_offset2 + = htext_img . size [ 0 ] + 2
img . paste ( uv_img , ( x_offset2 , 0 ) )
x_offset2 + = uv_img . size [ 0 ] + 2
img . paste ( utext_img , ( x_offset2 , 1 ) )
x_offset2 + = utext_img . size [ 0 ] + 2
img . paste ( cloud_img , ( x_offset2 , 0 ) )
x_offset2 + = cloud_img . size [ 0 ] + 2
img . paste ( ctext_img , ( x_offset2 , 1 ) )
x_offset2 + = ctext_img . size [ 0 ] + 2
img . paste ( wind_img , ( x_offset2 , 0 ) )
x_offset2 + = wind_img . size [ 0 ] + 2
img . paste ( wtext_img , ( x_offset2 , 1 ) )
x_offset2 + = wtext_img . size [ 0 ] + 2
img . paste ( wdir_img , ( x_offset2 , 1 ) )
x_offset2 + = wdir_img . size [ 0 ] + 2
img . paste ( vis_img , ( x_offset2 , - 1 ) )
x_offset2 + = vis_img . size [ 0 ] + 2
img . paste ( vtext_img , ( x_offset2 , 1 ) )
x_offset2 + = vtext_img . size [ 0 ] + 2
2022-06-12 10:31:44 +00:00
for i in range ( 1 , len ( daily_weather ) ) :
2021-12-14 15:38:09 +00:00
weekday = weekdays [ ( datetime . today ( ) . weekday ( ) + i ) % 7 ]
day_img = self . textImage ( weekday . upper ( ) , small_font )
weather = daily_weather [ i ]
main = weather [ ' main_weather ' ]
2023-04-14 07:32:24 +00:00
2021-12-14 15:38:09 +00:00
if main == ' Clouds ' :
main = weather [ ' description ' ]
2022-06-12 10:31:44 +00:00
if main == ' Rain ' :
main = weather [ ' description ' ]
2023-04-14 07:32:24 +00:00
2022-06-12 10:31:44 +00:00
min_temp = self . convertTemp ( weather [ ' min_temp ' ] , daily_weathers [ ' temp ' ] )
max_temp = self . convertTemp ( weather [ ' max_temp ' ] , daily_weathers [ ' temp ' ] )
2022-04-10 11:50:10 +00:00
2021-12-14 15:38:09 +00:00
weather_img = Image . open ( weather_dir + ' /small_icons/ ' + weather_ids [ main ] + ' .png ' )
min_img = self . textImage ( " {0:.0f} " . format ( min_temp ) , small_font , r = 0 , g = 0 , b = 255 )
2023-04-14 07:32:24 +00:00
2021-12-14 15:38:09 +00:00
max_img = self . textImage ( " {0:.0f} " . format ( max_temp ) , small_font , r = 255 , g = 0 , b = 0 )
img . paste ( day_img , ( x_offset + 5 , 9 ) )
img . paste ( weather_img , ( x_offset + 5 , 16 ) )
img . paste ( min_img , ( x_offset + 25 , 10 ) )
img . paste ( max_img , ( x_offset + 25 , 18 ) )
2022-01-20 18:58:27 +00:00
x_offset + = 43
2021-12-14 15:38:09 +00:00
2023-04-14 07:32:24 +00:00
img1 = img . crop ( ( 0 , 0 , max ( x_offset , x_offset2 + 10 ) , 32 ) )
2021-12-14 15:38:09 +00:00
imgs . append ( img1 )
imgs . append ( self . blank )
# add the image text
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
2021-06-30 19:22:14 +00:00
return self . stitchImage ( imgs )
2022-10-31 07:36:32 +00:00
def getDailyWeatherProfessional ( self ) :
f = open ( ' csv/daily_weather.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
if all_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/forecast.png ' )
image_list = [ title_img , Image . new ( ' RGB ' , ( 3 , 16 ) ) ]
else :
image_list = [ ]
f = open ( ' csv/daily_weather.json ' , ' r ' )
daily_weathers = json . load ( f )
f . close ( )
locations = list ( daily_weathers [ ' locations ' ] . keys ( ) )
for i , location in enumerate ( locations ) :
try :
img = Image . new ( ' RGB ' , ( 1000 , 32 ) )
daily_weather = daily_weathers [ ' locations ' ] [ location ]
small_font = ImageFont . load ( " ./fonts/4x6.pil " )
font = ImageFont . load ( " ./fonts/6x10.pil " )
large_font = ImageFont . load ( " ./fonts/10x20.pil " )
main = daily_weather [ 0 ] [ ' main_weather ' ]
if main == ' Clouds ' :
main = daily_weather [ 0 ] [ ' description ' ]
if main == ' Rain ' :
main = daily_weather [ 0 ] [ ' description ' ]
weather_ids = { ' Clear ' : ' 01 ' , ' few clouds ' : ' 02 ' , ' scattered clouds ' : ' 03 ' , ' broken clouds ' : ' 04 ' , ' overcast clouds ' : ' 04 ' , ' Drizzle ' : ' 09 ' ,
' Rain ' : ' 10 ' , ' Thunderstorm ' : ' 11 ' , ' Snow ' : ' 13 ' , ' Mist ' : ' 50 ' , ' Smoke ' : ' 50 ' , ' Haze ' : ' 50 ' , ' Dust ' : ' 50 ' , ' Fog ' : ' 50 ' ,
' Sand ' : ' 50 ' , ' Ash ' : ' 50 ' , ' Squall ' : ' 50 ' , ' Tornado ' : ' 50 ' , ' light rain ' : ' 10 ' , ' moderate rain ' : ' 10 ' , ' heavy intensity rain ' : ' 10 ' ,
' very heavy rain ' : ' 10 ' , ' extreme rain ' : ' 10 ' , ' freezing rain ' : ' 13 ' , ' light intensity shower rain ' : ' 09 ' , ' shower rain ' : ' 09 ' ,
' heavy intensity shower rain ' : ' 09 ' , ' ragged shower rain ' : ' 09 ' }
weather_dir = ' ./logos/weather_icons '
location_img = self . textImage ( location . upper ( ) , font , r = 255 , g = 255 , b = 0 )
img . paste ( location_img , ( 5 , 3 ) )
x_offset = location_img . size [ 0 ] + 8
2023-07-18 08:50:44 +00:00
weekdays = [ ' Mon ' , ' Tue ' , ' Wed ' , ' Thu ' , ' Fri ' , ' Sat ' , ' Sun ' ]
months = [ ' Jan ' , ' Feb ' , ' Mar ' , ' Apr ' , ' May ' , ' Jun ' , ' Jul ' , ' Aug ' , ' Sep ' , ' Oct ' , ' Nov ' , ' Dec ' ]
month = months [ int ( datetime . now ( ) . strftime ( ' % m ' ) ) - 1 ]
date = str ( int ( datetime . now ( ) . strftime ( ' %d ' ) ) )
weekday = weekdays [ datetime . today ( ) . weekday ( ) ]
2022-10-31 07:36:32 +00:00
date_img = self . textImage ( ( month + ' ' + date + ' , ' + weekday ) . upper ( ) , font )
img . paste ( date_img , ( x_offset , 3 ) )
x_offset + = date_img . size [ 0 ] + 2
weather_img = Image . open ( weather_dir + ' /small_icons/ ' + weather_ids [ main ] + ' .png ' )
w , h = weather_img . size
#weather_img = weather_img.resize((int(w/2), int(h/2)))
main = daily_weather [ 0 ] [ ' main_weather ' ]
main_img = self . textImage ( main . upper ( ) , font )
img . paste ( main_img , ( x_offset , 3 ) )
x_offset + = main_img . size [ 0 ] + 2
img . paste ( weather_img , ( x_offset , 3 ) )
x_offset + = weather_img . size [ 0 ] + 2
temp = self . convertTemp ( daily_weather [ 0 ] [ ' temp ' ] , daily_weathers [ ' temp ' ] )
temp_img = self . textImage ( str ( " {0:.0f} " . format ( temp ) ) , font )
img . paste ( temp_img , ( x_offset , 3 ) )
x_offset + = temp_img . size [ 0 ] - 3
deg_img = self . textImage ( ' o ' , small_font )
img . paste ( deg_img , ( x_offset + 1 , 1 ) )
x_offset + = deg_img . size [ 0 ] - 2
min_img = self . textImage ( " {0:.0f} " . format ( self . convertTemp ( daily_weather [ 0 ] [ ' min_temp ' ] , daily_weathers [ ' temp ' ] ) ) , small_font , r = 0 , g = 0 , b = 255 )
img . paste ( min_img , ( x_offset + 2 , 2 ) )
max_img = self . textImage ( " {0:.0f} " . format ( self . convertTemp ( daily_weather [ 0 ] [ ' max_temp ' ] , daily_weathers [ ' temp ' ] ) ) , small_font , r = 255 , g = 0 , b = 0 )
img . paste ( max_img , ( x_offset + 2 , 8 ) )
x_offset + = max_img . size [ 0 ] + 15
crop_x = x_offset
for i in range ( 1 , len ( daily_weather ) ) :
weekday = weekdays [ ( datetime . today ( ) . weekday ( ) + i ) % 7 ]
day_img = self . textImage ( weekday . upper ( ) , font )
weather = daily_weather [ i ]
main = weather [ ' main_weather ' ]
if main == ' Clouds ' :
main = weather [ ' description ' ]
if main == ' Rain ' :
main = weather [ ' description ' ]
min_img = self . textImage ( " {0:.0f} " . format ( self . convertTemp ( weather [ ' min_temp ' ] , daily_weathers [ ' temp ' ] ) ) , small_font , r = 0 , g = 0 , b = 255 )
max_img = self . textImage ( " {0:.0f} " . format ( self . convertTemp ( weather [ ' max_temp ' ] , daily_weathers [ ' temp ' ] ) ) , small_font , r = 255 , g = 0 , b = 0 )
weather_img = Image . open ( weather_dir + ' /small_icons/ ' + weather_ids [ main ] + ' .png ' )
img . paste ( day_img , ( x_offset , 3 ) )
x_offset + = ( day_img . size [ 0 ] )
img . paste ( weather_img , ( x_offset , 3 ) )
x_offset + = ( weather_img . size [ 0 ] + 2 )
img . paste ( min_img , ( x_offset , 2 ) )
img . paste ( max_img , ( x_offset , 8 ) )
x_offset + = ( max ( min_img . size [ 0 ] , max_img . size [ 0 ] ) + 5 )
x_offset + = 35
img1 = img . crop ( ( 0 , 0 , x_offset , 16 ) )
# img1 = img.crop((0,0,max(x_offset, crop_x) ,16))
image_list . append ( img1 )
except Exception as e :
pass
return self . stitchImage ( image_list )
2021-05-21 13:24:37 +00:00
2021-05-14 12:02:22 +00:00
2021-06-17 19:06:23 +00:00
def readSportsCSV ( self , league ) :
team_info = { }
f = open ( ' csv/sports/ {} /team_info.csv ' . format ( league ) , ' r ' )
CSV = csv . reader ( f )
next ( CSV )
for row in CSV :
team_info [ row [ 0 ] ] = { }
team_info [ row [ 0 ] ] [ ' id ' ] = row [ 1 ]
team_info [ row [ 0 ] ] [ ' code ' ] = row [ 2 ]
2021-06-21 16:39:44 +00:00
team_info [ row [ 0 ] ] [ ' logo ' ] = row [ 4 ]
team_info [ row [ 0 ] ] [ ' colour ' ] = row [ 3 ]
2022-02-28 20:46:20 +00:00
f . close ( )
2021-06-17 19:06:23 +00:00
return team_info
2021-06-10 18:55:23 +00:00
def displayDailyWeatherAlt ( self ) :
img0 , img1 = self . getDailyWeatherImageAlt ( )
2021-06-08 20:16:08 +00:00
while True :
self . setImage ( img0 , offset_x = 0 , offset_y = 0 )
image = img1
img_width , img_height = image . size
offset_x = 64
offset_y = 0
while offset_x > 64 - img_width :
offset_x - = 1
self . setImage ( image , offset_x = offset_x , offset_y = offset_y , min_x = 64 , min_y = 9 )
if offset_x + img_width < self . matrix . width : # if the image is ending
self . setImage ( image , offset_x = offset_x + img_width , offset_y = offset_y , min_x = 64 , min_y = 9 )
try :
msg = getInput ( )
if msg == ' K ' :
self . resetMatrix ( )
return True
self . process_msg ( msg )
except KeyboardInterrupt :
sys . stdout . flush ( )
pass
2021-06-08 20:30:48 +00:00
time . sleep ( self . delay * 1.1 )
2021-12-15 09:37:09 +00:00
2021-10-11 19:16:04 +00:00
def getUserImages ( self ) :
2021-06-30 19:22:14 +00:00
2021-10-04 20:39:22 +00:00
f = open ( ' csv/image_settings.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
2021-10-18 17:38:24 +00:00
imgs = [ ]
for ind , image in enumerate ( all_settings [ ' images ' ] ) :
2021-12-15 09:37:09 +00:00
try :
img = self . openImage ( os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' user_uploads ' ) , image ) )
2022-04-07 17:35:38 +00:00
2021-12-15 09:37:09 +00:00
img . thumbnail ( ( 99999 , 32 ) )
2023-04-14 10:29:49 +00:00
if img . size [ 0 ] < 128 :
diff = 128 - img . size [ 0 ]
new_image = Image . new ( ' RGB ' , ( 128 , 32 ) )
new_image . paste ( img , ( 64 - int ( img . size [ 0 ] / 2 ) , 0 ) )
img = new_image
2021-12-15 09:37:09 +00:00
if all_settings [ ' title ' ] and ind == 0 :
title_img = self . openImage ( ' feature_titles/images.png ' )
imgs . append ( self . stitchImage ( [ title_img , img ] ) )
else :
imgs . append ( img )
2021-10-18 17:38:24 +00:00
2021-12-15 09:37:09 +00:00
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
2021-10-04 20:39:22 +00:00
2021-10-11 19:16:04 +00:00
return imgs
2021-08-03 17:16:13 +00:00
2023-01-09 04:46:39 +00:00
def getUserImagesProfessional ( self ) :
f = open ( ' csv/image_settings.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
if all_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/images.png ' )
image_list = [ title_img ]
else :
image_list = [ ]
blank = Image . new ( ' RGB ' , ( 0 , 16 ) )
for i , image in enumerate ( all_settings [ ' images ' ] ) :
if ( i == len ( all_settings [ ' images ' ] ) - 1 ) :
try :
user_image = self . openImage ( os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' user_uploads ' ) , image ) )
user_image . thumbnail ( ( 99999 , 16 ) )
#user_image.convert('RGB')
img = Image . new ( ' RGB ' , ( user_image . size [ 0 ] + 5 , 32 ) )
img . paste ( user_image , ( 0 , 0 ) )
image_list . append ( img )
image_list . append ( blank )
except Exception as e :
pass
else :
try :
user_image = self . openImage ( os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' user_uploads ' ) , image ) )
user_image . thumbnail ( ( 99999 , 16 ) )
#user_image.convert('RGB')
img = Image . new ( ' RGB ' , ( user_image . size [ 0 ] + 130 , 32 ) )
img . paste ( user_image , ( 0 , 0 ) )
image_list . append ( img )
image_list . append ( blank )
except Exception as e :
pass
return self . stitchImage ( image_list )
2021-10-11 19:16:04 +00:00
def getUserGIFs ( self ) :
2021-10-04 20:39:22 +00:00
f = open ( ' csv/GIF_settings.json ' , ' r ' )
all_settings = json . load ( f )
f . close ( )
2021-10-18 17:38:24 +00:00
GIFs = [ ]
2021-10-11 19:16:04 +00:00
2021-10-18 17:38:24 +00:00
for ind , fle in enumerate ( all_settings [ ' images ' ] ) :
2021-12-15 09:37:09 +00:00
try :
GIF = Image . open ( os . path . join ( os . path . join ( os . path . dirname ( os . path . abspath ( __file__ ) ) , ' user_uploads ' ) , fle ) )
2021-12-22 09:43:36 +00:00
frames = [ ]
2021-12-15 09:37:09 +00:00
if ind == 0 and all_settings [ ' title ' ] :
2021-12-22 09:43:36 +00:00
2022-06-14 07:25:58 +00:00
#title_img = self.openImage('feature_titles/gifs.png')
2021-10-18 17:38:24 +00:00
2021-12-15 09:37:09 +00:00
for i , frame in enumerate ( ImageSequence . Iterator ( GIF ) ) :
2022-06-14 07:25:58 +00:00
frame = frame . convert ( ' P ' )
frame . thumbnail ( ( 128 , 32 ) , Image . NEAREST )
2023-04-14 10:34:57 +00:00
if frame . size [ 0 ] < 128 :
diff = 128 - frame . size [ 0 ]
new_image = Image . new ( ' RGB ' , ( 128 , 32 ) )
new_image . paste ( frame , ( 64 - int ( frame . size [ 0 ] / 2 ) , 0 ) )
frame = new_image
2022-06-14 07:25:58 +00:00
#f = self.stitchImage([title_img, frame])
frames . append ( frame )
2021-10-18 17:38:24 +00:00
2021-12-15 09:37:09 +00:00
else :
2021-12-22 09:43:36 +00:00
2021-12-21 10:11:49 +00:00
for i , frame in enumerate ( ImageSequence . Iterator ( GIF ) ) :
2022-01-15 11:11:32 +00:00
2022-06-14 07:25:58 +00:00
frame = frame . convert ( ' P ' )
frame . thumbnail ( ( 128 , 32 ) , Image . NEAREST )
2023-04-14 10:34:57 +00:00
if frame . size [ 0 ] < 128 :
diff = 128 - frame . size [ 0 ]
new_image = Image . new ( ' RGB ' , ( 128 , 32 ) )
new_image . paste ( frame , ( 64 - int ( frame . size [ 0 ] / 2 ) , 0 ) )
frame = new_image
2022-01-15 11:11:32 +00:00
#frame = frame.resize((99999, 32))
2022-06-14 07:25:58 +00:00
#f = self.stitchImage([frame])
frames . append ( frame )
2021-12-21 10:11:49 +00:00
2021-10-18 17:38:24 +00:00
2021-12-22 09:43:36 +00:00
frames [ 0 ] . save ( ' ./display_images/working_gif {} .gif ' . format ( str ( ind ) ) , save_all = True , append_images = frames [ 1 : ] , loop = 0 , optimize = False )
GIF = Image . open ( ' ./display_images/working_gif {} .gif ' . format ( str ( ind ) ) )
GIFs . append ( GIF )
2021-12-21 10:11:49 +00:00
2021-12-15 09:37:09 +00:00
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
2021-12-29 13:05:45 +00:00
2021-10-11 19:16:04 +00:00
#below code stitches title and GIF together
2022-06-20 09:46:06 +00:00
# frames = []
2021-08-03 17:16:13 +00:00
2022-06-20 09:46:06 +00:00
# for i, frame in enumerate(ImageSequence.Iterator(gif)):
2021-10-04 20:39:22 +00:00
2022-06-20 09:46:06 +00:00
# if all_settings['title']:
# f = self.stitchImage([title_img, frame])
# else:
# f = self.stitchImage([frame])
# frames.append(f)
2021-08-03 17:16:13 +00:00
2022-06-20 09:46:06 +00:00
# frames[0].save('./display_images/Custom GIFs.gif', save_all=True, append_images=frames[1:], loop=0, optimize = False)
2021-08-03 17:16:13 +00:00
2021-10-11 19:16:04 +00:00
return GIFs
2021-06-29 20:17:52 +00:00
2023-02-23 05:20:44 +00:00
2023-01-09 08:16:18 +00:00
def getMoviesImage ( self ) :
f = open ( ' csv/movie_settings.json ' , ' r ' )
all_movie_settings = json . load ( f )
f . close ( )
if all_movie_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/movies.png ' )
image_list = [ title_img ]
else :
image_list = [ ]
font = ImageFont . load ( " ./fonts/6x13.pil " )
small_font = ImageFont . load ( " ./fonts/5x8.pil " )
for movie in all_movie_settings [ ' movies ' ] :
x_offset = 0
movie_title_img = self . textImage ( movie [ ' title ' ] + ' ( ' + movie [ ' media_type ' ] + ' ) ' , font , r = 255 , g = 180 , b = 0 )
lang_img = self . textImage ( ' Lan: ' + movie [ ' language ' ] , small_font , r = 255 , g = 0 , b = 100 )
vote_img = self . textImage ( movie [ ' votes ' ] , small_font , r = 255 , g = 255 , b = 255 )
star_img = Image . open ( ' logos/star.png ' ) . convert ( ' RGB ' )
date_img = self . textImage ( movie [ ' date ' ] , small_font , r = 0 , g = 162 , b = 255 )
2023-02-23 05:20:44 +00:00
try :
if movie [ ' media_type ' ] == ' Movie ' :
if movie [ ' budget ' ] == ' 0 ' :
budget_img = self . textImage ( ' $N/A ' , small_font , r = 255 , g = 0 , b = 0 )
else :
budget_img = self . textImage ( ' $ ' + movie [ ' budget ' ] , small_font , r = 255 , g = 0 , b = 0 )
except :
pass
try :
if movie [ ' media_type ' ] == ' Movie ' :
if movie [ ' revenue ' ] == ' 0 ' :
rev_img = self . textImage ( ' $N/A ' , small_font , r = 0 , g = 255 , b = 0 )
else :
rev_img = self . textImage ( ' $ ' + movie [ ' revenue ' ] , small_font , r = 0 , g = 255 , b = 0 )
except :
pass
2023-01-09 08:16:18 +00:00
try :
logo = Image . open ( ' logos/movies/ ' + movie [ ' backdrop ' ] )
logo . thumbnail ( ( 9000 , 32 ) )
logo . convert ( ' P ' )
except :
logo = self . textImage ( ' No Logo ' , small_font , r = 255 , g = 255 , b = 255 )
x_offset + = logo . size [ 0 ] + 3
genre_offset = 0
for genre in movie [ ' genre ' ] :
genre_img = self . textImage ( genre + ' , ' , small_font , r = 255 , g = 255 , b = 255 )
genre_offset + = genre_img . size [ 0 ]
2023-02-23 05:20:44 +00:00
try :
if movie [ ' media_type ' ] == ' Movie ' :
img = Image . new ( ' RGB ' , ( max ( x_offset + movie_title_img . size [ 0 ] , x_offset + date_img . size [ 0 ] + 3 + star_img . size [ 0 ] + vote_img . size [ 0 ] + 3 + 5 + budget_img . size [ 0 ] + 5 + rev_img . size [ 0 ] , x_offset + date_img . size [ 0 ] + 3 + genre_offset ) + 15 , 32 ) )
else :
img = Image . new ( ' RGB ' , ( max ( x_offset + movie_title_img . size [ 0 ] , x_offset + date_img . size [ 0 ] + 3 + star_img . size [ 0 ] + vote_img . size [ 0 ] + 3 , x_offset + date_img . size [ 0 ] + 3 + genre_offset ) + 15 , 32 ) )
except :
img = Image . new ( ' RGB ' , ( max ( x_offset + movie_title_img . size [ 0 ] , x_offset + date_img . size [ 0 ] + 3 + star_img . size [ 0 ] + vote_img . size [ 0 ] + 3 , x_offset + date_img . size [ 0 ] + 3 + genre_offset ) + 15 , 32 ) )
2023-01-09 08:16:18 +00:00
img . paste ( logo , ( 0 , 0 ) )
img . paste ( movie_title_img , ( x_offset , 0 ) )
img . paste ( date_img , ( x_offset , 14 ) )
img . paste ( lang_img , ( x_offset , 23 ) )
x_offset + = max ( date_img . size [ 0 ] , lang_img . size [ 0 ] ) + 3
x_offset2 = x_offset
img . paste ( star_img , ( x_offset2 , 14 ) )
img . paste ( vote_img , ( x_offset2 + star_img . size [ 0 ] + 3 , 14 ) )
2023-02-23 05:20:44 +00:00
try :
if movie [ ' media_type ' ] == ' Movie ' :
img . paste ( budget_img , ( x_offset2 + star_img . size [ 0 ] + 3 + vote_img . size [ 0 ] + 5 , 14 ) )
except :
pass
try :
if movie [ ' media_type ' ] == ' Movie ' :
img . paste ( rev_img , ( x_offset2 + star_img . size [ 0 ] + 3 + vote_img . size [ 0 ] + 5 + budget_img . size [ 0 ] + 5 , 14 ) )
except :
pass
2023-01-09 08:16:18 +00:00
for genre in movie [ ' genre ' ] [ : - 1 ] :
genre_img = self . textImage ( genre + ' , ' , small_font , r = 255 , g = 255 , b = 255 )
img . paste ( genre_img , ( x_offset2 , 23 ) )
x_offset2 + = genre_img . size [ 0 ]
else :
genre_img2 = self . textImage ( movie [ ' genre ' ] [ - 1 ] , small_font , r = 255 , g = 255 , b = 255 )
img . paste ( genre_img2 , ( x_offset2 , 23 ) )
x_offset2 + = genre_img2 . size [ 0 ]
image_list . append ( img )
return self . stitchImage ( image_list )
2023-02-23 05:20:44 +00:00
2023-01-09 08:16:18 +00:00
def getMoviesProfessional ( self ) :
f = open ( ' csv/movie_settings.json ' , ' r ' )
all_movie_settings = json . load ( f )
f . close ( )
if all_movie_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/movies.png ' )
image_list = [ title_img ]
else :
image_list = [ ]
font = ImageFont . load ( " ./fonts/6x10.pil " )
small_font = ImageFont . load ( " ./fonts/4x6.pil " )
for movie in all_movie_settings [ ' movies ' ] :
x_offset = 0
movie_title_img = self . textImage ( movie [ ' title ' ] + ' ( ' + movie [ ' media_type ' ] + ' ) ' , font , r = 255 , g = 180 , b = 0 )
lang_img = self . textImage ( ' Lan: ' + movie [ ' language ' ] , small_font , r = 255 , g = 0 , b = 100 )
vote_img = self . textImage ( movie [ ' votes ' ] , small_font , r = 255 , g = 255 , b = 255 )
star_img = Image . open ( ' logos/star.png ' ) . convert ( ' RGB ' )
date_img = self . textImage ( movie [ ' date ' ] , small_font , r = 0 , g = 162 , b = 255 )
2023-02-23 05:20:44 +00:00
try :
if movie [ ' media_type ' ] == ' Movie ' :
if movie [ ' budget ' ] == ' 0 ' :
budget_img = self . textImage ( ' $N/A ' , small_font , r = 255 , g = 0 , b = 0 )
else :
budget_img = self . textImage ( ' $ ' + movie [ ' budget ' ] , small_font , r = 255 , g = 0 , b = 0 )
except :
pass
try :
if movie [ ' media_type ' ] == ' Movie ' :
if movie [ ' revenue ' ] == ' 0 ' :
rev_img = self . textImage ( ' $N/A ' , small_font , r = 0 , g = 255 , b = 0 )
else :
rev_img = self . textImage ( ' $ ' + movie [ ' revenue ' ] , small_font , r = 0 , g = 255 , b = 0 )
except :
pass
2023-01-09 08:16:18 +00:00
try :
logo = Image . open ( ' logos/movies/ ' + movie [ ' backdrop ' ] )
logo . thumbnail ( ( 1000 , 16 ) )
logo . convert ( ' P ' )
except :
logo = self . textImage ( ' No Logo ' , small_font , r = 255 , g = 255 , b = 255 )
x_offset + = logo . size [ 0 ] + 3
genre_offset = 0
# img = Image.new('RGB', (200,16))
for genre in movie [ ' genre ' ] :
genre_img = self . textImage ( genre + ' , ' , small_font , r = 255 , g = 255 , b = 255 )
genre_offset + = genre_img . size [ 0 ]
2023-02-23 05:20:44 +00:00
try :
if movie [ ' media_type ' ] == ' Movie ' :
img = Image . new ( ' RGB ' , ( max ( x_offset + movie_title_img . size [ 0 ] + 3 + star_img . size [ 0 ] + 2 + vote_img . size [ 0 ] + 10 + 3 + budget_img . size [ 0 ] + 3 + rev_img . size [ 0 ] , x_offset + date_img . size [ 0 ] + 7 + lang_img . size [ 0 ] + 7 + genre_offset + 10 ) , 16 ) )
else :
img = Image . new ( ' RGB ' , ( max ( x_offset + movie_title_img . size [ 0 ] + 3 + star_img . size [ 0 ] + 2 + vote_img . size [ 0 ] + 10 , x_offset + date_img . size [ 0 ] + 7 + lang_img . size [ 0 ] + 7 + genre_offset + 10 ) , 16 ) )
except :
img = Image . new ( ' RGB ' , ( max ( x_offset + movie_title_img . size [ 0 ] + 3 + star_img . size [ 0 ] + 2 + vote_img . size [ 0 ] + 10 , x_offset + date_img . size [ 0 ] + 7 + lang_img . size [ 0 ] + 7 + genre_offset + 10 ) , 16 ) )
2023-01-09 08:16:18 +00:00
img . paste ( logo , ( 0 , 0 ) )
img . paste ( movie_title_img , ( x_offset , 0 ) )
x_offset2 = x_offset + movie_title_img . size [ 0 ] + 3
img . paste ( star_img , ( x_offset2 , 1 ) )
x_offset2 + = star_img . size [ 0 ] + 2
img . paste ( vote_img , ( x_offset2 , 2 ) )
2023-02-23 05:20:44 +00:00
x_offset2 + = vote_img . size [ 0 ]
try :
if movie [ ' media_type ' ] == ' Movie ' :
img . paste ( budget_img , ( x_offset2 + 3 , 2 ) )
except :
pass
try :
if movie [ ' media_type ' ] == ' Movie ' :
img . paste ( rev_img , ( x_offset2 + 3 + budget_img . size [ 0 ] + 3 , 2 ) )
except :
pass
2023-01-09 08:16:18 +00:00
img . paste ( date_img , ( x_offset , 10 ) )
x_offset + = date_img . size [ 0 ] + 7
img . paste ( lang_img , ( x_offset , 10 ) )
x_offset + = lang_img . size [ 0 ] + 7
for genre in movie [ ' genre ' ] [ : - 1 ] :
genre_img = self . textImage ( genre + ' , ' , small_font , r = 255 , g = 255 , b = 255 )
img . paste ( genre_img , ( x_offset , 10 ) )
x_offset + = genre_img . size [ 0 ]
else :
genre_img2 = self . textImage ( movie [ ' genre ' ] [ - 1 ] , small_font , r = 255 , g = 255 , b = 255 )
img . paste ( genre_img2 , ( x_offset , 10 ) )
x_offset + = genre_img2 . size [ 0 ]
image_list . append ( img )
return self . stitchImage ( image_list )
2023-02-23 05:20:44 +00:00
2023-03-08 06:47:19 +00:00
def getIpoImage ( self ) :
f = open ( ' csv/ipo_settings.json ' , ' r ' )
ipo_settings = json . load ( f )
f . close ( )
if ipo_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/ipo.png ' )
image_list = [ title_img ]
else :
image_list = [ ]
font = ImageFont . load ( " ./fonts/7x14B.pil " )
font2 = ImageFont . load ( " ./fonts/6x13.pil " )
small_font = ImageFont . load ( " ./fonts/6x10.pil " )
if ipo_settings [ ' symbols ' ] [ 0 ] != ' No Data ' :
try :
for ipo in ipo_settings [ ' symbols ' ] :
x_offset = 10
x_offset2 = 10
name_img = self . textImage ( ipo [ ' name ' ] . upper ( ) , font , r = 255 , g = 255 , b = 255 )
try :
if ipo [ ' symbol ' ] == " " :
symbol_img = self . textImage ( ' ($N/A) ' , font2 , r = 255 , g = 255 , b = 255 )
else :
symbol_img = self . textImage ( ' ($ ' + ipo [ ' symbol ' ] + ' ) ' , font2 , r = 255 , g = 255 , b = 255 )
except :
symbol_img = self . textImage ( ' ($N/A) ' , font2 , r = 255 , g = 255 , b = 255 )
date_img = self . textImage ( ipo [ ' date ' ] , font2 , r = 255 , g = 255 , b = 0 )
status_1 = self . textImage ( ' Status: ' , small_font , r = 255 , g = 255 , b = 255 )
if ipo [ ' status ' ] == ' expected ' :
status_img = self . textImage ( ipo [ ' status ' ] . capitalize ( ) , small_font , r = 255 , g = 255 , b = 0 ) # diff color
elif ipo [ ' status ' ] == ' priced ' :
status_img = self . textImage ( ipo [ ' status ' ] . capitalize ( ) , small_font , r = 0 , g = 255 , b = 0 ) # diff color
elif ipo [ ' status ' ] == ' withdrawn ' :
status_img = self . textImage ( ipo [ ' status ' ] . capitalize ( ) , small_font , r = 255 , g = 0 , b = 0 ) # diff color
elif ipo [ ' status ' ] == ' filed ' :
status_img = self . textImage ( ipo [ ' status ' ] . capitalize ( ) , small_font , r = 54 , g = 69 , b = 79 ) # diff color
shares_1 = self . textImage ( ' Shares: ' , small_font , r = 255 , g = 255 , b = 255 )
try :
shares_img = self . textImage ( ipo [ ' shares ' ] , small_font , r = 38 , g = 59 , b = 232 )
except :
shares_img = self . textImage ( ' N/A ' , small_font , r = 38 , g = 59 , b = 232 )
price_1 = self . textImage ( ' Price: ' , small_font , r = 255 , g = 255 , b = 255 )
try :
price_img = self . textImage ( ipo [ ' price ' ] , small_font , r = 0 , g = 255 , b = 0 )
except :
price_img = self . textImage ( ' N/A ' , small_font , r = 0 , g = 255 , b = 0 )
sharesvalue_1 = self . textImage ( ' Value: ' , small_font , r = 255 , g = 255 , b = 255 )
try :
sharesvalue_img = self . textImage ( ipo [ ' sharesvalue ' ] , small_font , r = 213 , g = 117 , b = 0 )
except :
sharesvalue_img = self . textImage ( ' N/A ' , small_font , r = 213 , g = 117 , b = 0 )
img = Image . new ( ' RGB ' , ( max ( x_offset + name_img . size [ 0 ] + 2 + symbol_img . size [ 0 ] + 8 + date_img . size [ 0 ] , x_offset2 + status_1 . size [ 0 ] +
status_img . size [ 0 ] + 8 + price_1 . size [ 0 ] + price_img . size [ 0 ] + 8 + shares_1 . size [ 0 ] + shares_img . size [ 0 ] + 8
+ sharesvalue_1 . size [ 0 ] + sharesvalue_img . size [ 0 ] ) + 30 , 32 ) )
img . paste ( status_1 , ( x_offset2 , 19 ) )
x_offset2 + = status_1 . size [ 0 ]
img . paste ( status_img , ( x_offset2 , 19 ) )
x_offset2 + = status_img . size [ 0 ] + 8
img . paste ( price_1 , ( x_offset2 , 19 ) )
x_offset2 + = price_1 . size [ 0 ]
img . paste ( price_img , ( x_offset2 , 19 ) )
x_offset2 + = price_img . size [ 0 ] + 8
img . paste ( shares_1 , ( x_offset2 , 19 ) )
x_offset2 + = shares_1 . size [ 0 ]
img . paste ( shares_img , ( x_offset2 , 19 ) )
x_offset2 + = shares_img . size [ 0 ] + 8
img . paste ( sharesvalue_1 , ( x_offset2 , 19 ) )
x_offset2 + = sharesvalue_1 . size [ 0 ]
img . paste ( sharesvalue_img , ( x_offset2 , 19 ) )
img . paste ( name_img , ( x_offset , 0 ) )
x_offset + = name_img . size [ 0 ] + 2
img . paste ( symbol_img , ( x_offset , 0 ) )
x_offset + = symbol_img . size [ 0 ] + 8
img . paste ( date_img , ( x_offset , 0 ) )
line_image = Image . new ( " RGB " , ( name_img . size [ 0 ] + 2 + symbol_img . size [ 0 ] + 8 + date_img . size [ 0 ] , 1 ) )
line_image1 = ImageDraw . Draw ( line_image )
line_image1 . line ( ( 0 , 0 , name_img . size [ 0 ] + 2 + symbol_img . size [ 0 ] + 8 + date_img . size [ 0 ] , 0 ) , fill = " blue " , width = 0 )
img . paste ( line_image , ( 10 , max ( name_img . size [ 1 ] , symbol_img . size [ 1 ] ) - 1 ) )
image_list . append ( img )
except :
time . sleep ( 0.1 )
no_ipo = self . textImage ( ' No Upcoming IPOs for the next 3 weeks. ' , font , r = 255 , g = 255 , b = 255 )
img = Image . new ( ' RGB ' , ( no_ipo . size [ 0 ] + 15 , 32 ) )
img . paste ( no_ipo , ( 10 , 10 ) )
image_list . append ( img )
elif ipo_settings [ ' symbols ' ] [ 0 ] == ' No Data ' :
time . sleep ( 0.1 )
no_ipo = self . textImage ( ' No Upcoming IPOs for the next 3 weeks. ' , font , r = 255 , g = 255 , b = 255 )
img = Image . new ( ' RGB ' , ( no_ipo . size [ 0 ] + 15 , 32 ) )
img . paste ( no_ipo , ( 10 , 10 ) )
image_list . append ( img )
return self . stitchImage ( image_list )
def getIpoProfessional ( self ) :
f = open ( ' csv/ipo_settings.json ' , ' r ' )
ipo_settings = json . load ( f )
f . close ( )
2023-02-23 05:20:44 +00:00
2023-03-08 06:47:19 +00:00
if ipo_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/ipo.png ' )
image_list = [ title_img ]
else :
image_list = [ ]
font = ImageFont . load ( " ./fonts/5x8.pil " )
small_font = ImageFont . load ( " ./fonts/4x6.pil " )
if ipo_settings [ ' symbols ' ] [ 0 ] != ' No Data ' :
try :
for ipo in ipo_settings [ ' symbols ' ] :
x_offset = 10
x_offset2 = 10
name_img = self . textImage ( ipo [ ' name ' ] . upper ( ) , font , r = 255 , g = 255 , b = 255 )
try :
if ipo [ ' symbol ' ] == " " :
symbol_img = self . textImage ( ' ($N/A) ' , font , r = 255 , g = 255 , b = 255 )
else :
symbol_img = self . textImage ( ' ($ ' + ipo [ ' symbol ' ] + ' ) ' , font , r = 255 , g = 255 , b = 255 )
except :
symbol_img = self . textImage ( ' ($N/A) ' , font , r = 255 , g = 255 , b = 255 )
date_img = self . textImage ( ipo [ ' date ' ] , font , r = 255 , g = 255 , b = 0 )
status_1 = self . textImage ( ' Status: ' , small_font , r = 255 , g = 255 , b = 255 )
if ipo [ ' status ' ] == ' expected ' :
status_img = self . textImage ( ipo [ ' status ' ] . capitalize ( ) , small_font , r = 255 , g = 255 , b = 0 ) # diff color
elif ipo [ ' status ' ] == ' priced ' :
status_img = self . textImage ( ipo [ ' status ' ] . capitalize ( ) , small_font , r = 0 , g = 255 , b = 0 ) # diff color
elif ipo [ ' status ' ] == ' withdrawn ' :
status_img = self . textImage ( ipo [ ' status ' ] . capitalize ( ) , small_font , r = 255 , g = 0 , b = 0 ) # diff color
elif ipo [ ' status ' ] == ' filed ' :
status_img = self . textImage ( ipo [ ' status ' ] . capitalize ( ) , small_font , r = 54 , g = 69 , b = 79 ) # diff color
shares_1 = self . textImage ( ' Shares: ' , small_font , r = 255 , g = 255 , b = 255 )
try :
shares_img = self . textImage ( ipo [ ' shares ' ] , small_font , r = 38 , g = 59 , b = 232 )
except :
shares_img = self . textImage ( ' N/A ' , small_font , r = 38 , g = 59 , b = 232 )
price_1 = self . textImage ( ' Price: ' , small_font , r = 255 , g = 255 , b = 255 )
try :
price_img = self . textImage ( ipo [ ' price ' ] , small_font , r = 0 , g = 255 , b = 0 )
except :
price_img = self . textImage ( ' N/A ' , small_font , r = 0 , g = 255 , b = 0 )
sharesvalue_1 = self . textImage ( ' Value: ' , small_font , r = 255 , g = 255 , b = 255 )
try :
sharesvalue_img = self . textImage ( ipo [ ' sharesvalue ' ] , small_font , r = 213 , g = 117 , b = 0 )
except :
sharesvalue_img = self . textImage ( ' N/A ' , small_font , r = 213 , g = 117 , b = 0 )
img = Image . new ( ' RGB ' , ( max ( x_offset + name_img . size [ 0 ] + 2 + symbol_img . size [ 0 ] + 5 + date_img . size [ 0 ] , x_offset2 + status_1 . size [ 0 ] +
status_img . size [ 0 ] + 8 + price_1 . size [ 0 ] + price_img . size [ 0 ] + 8 + shares_1 . size [ 0 ] + shares_img . size [ 0 ] + 8
+ sharesvalue_1 . size [ 0 ] + sharesvalue_img . size [ 0 ] ) + 30 , 16 ) )
img . paste ( status_1 , ( x_offset2 , 10 ) )
x_offset2 + = status_1 . size [ 0 ]
img . paste ( status_img , ( x_offset2 , 10 ) )
x_offset2 + = status_img . size [ 0 ] + 8
img . paste ( price_1 , ( x_offset2 , 10 ) )
x_offset2 + = price_1 . size [ 0 ]
img . paste ( price_img , ( x_offset2 , 10 ) )
x_offset2 + = price_img . size [ 0 ] + 8
img . paste ( shares_1 , ( x_offset2 , 10 ) )
x_offset2 + = shares_1 . size [ 0 ]
img . paste ( shares_img , ( x_offset2 , 10 ) )
x_offset2 + = shares_img . size [ 0 ] + 8
img . paste ( sharesvalue_1 , ( x_offset2 , 10 ) )
x_offset2 + = sharesvalue_1 . size [ 0 ]
img . paste ( sharesvalue_img , ( x_offset2 , 10 ) )
img . paste ( name_img , ( x_offset , 0 ) )
x_offset + = name_img . size [ 0 ] + 2
img . paste ( symbol_img , ( x_offset , 0 ) )
x_offset + = symbol_img . size [ 0 ] + 5
img . paste ( date_img , ( x_offset , 0 ) )
line_image = Image . new ( " RGB " , ( name_img . size [ 0 ] + 2 + symbol_img . size [ 0 ] + 5 + date_img . size [ 0 ] , 1 ) )
line_image1 = ImageDraw . Draw ( line_image )
line_image1 . line ( ( 0 , 0 , name_img . size [ 0 ] + 2 + symbol_img . size [ 0 ] + 5 + date_img . size [ 0 ] , 0 ) , fill = " blue " , width = 0 )
img . paste ( line_image , ( 10 , max ( name_img . size [ 1 ] , symbol_img . size [ 1 ] ) - 2 ) )
image_list . append ( img )
except :
time . sleep ( 0.1 )
font = ImageFont . load ( " ./fonts/6x13.pil " )
no_ipo = self . textImage ( ' No Upcoming IPOs for the next 3 weeks. ' , font , r = 255 , g = 255 , b = 255 )
img = Image . new ( ' RGB ' , ( no_ipo . size [ 0 ] + 15 , 16 ) )
img . paste ( no_ipo , ( 10 , 1 ) )
image_list . append ( img )
elif ipo_settings [ ' symbols ' ] [ 0 ] == ' No Data ' :
time . sleep ( 0.1 )
font = ImageFont . load ( " ./fonts/6x13.pil " )
no_ipo = self . textImage ( ' No Upcoming IPOs for the next 3 weeks. ' , font , r = 255 , g = 255 , b = 255 )
img = Image . new ( ' RGB ' , ( no_ipo . size [ 0 ] + 15 , 16 ) )
img . paste ( no_ipo , ( 10 , 1 ) )
image_list . append ( img )
return self . stitchImage ( image_list )
2023-04-11 10:52:21 +00:00
2023-06-16 14:21:31 +00:00
def getEconomicImage ( self ) :
f = open ( ' csv/economic_settings.json ' , ' r ' )
econ_settings = json . load ( f )
f . close ( )
if econ_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/economy.png ' )
image_list = [ title_img ]
else :
image_list = [ ]
font = ImageFont . load ( " ./fonts/7x14B.pil " )
font2 = ImageFont . load ( " ./fonts/6x12.pil " )
small_font = ImageFont . load ( " ./fonts/6x10.pil " )
if len ( econ_settings [ ' events ' ] ) != 0 :
try :
for event in econ_settings [ ' events ' ] :
if event [ ' importance ' ] == - 1 :
imp_img = Image . open ( ' logos/low_imp.png ' )
elif event [ ' importance ' ] == 0 :
imp_img = Image . open ( ' logos/med_imp.png ' )
elif event [ ' importance ' ] == 1 :
imp_img = Image . open ( ' logos/high_imp.png ' )
x_offset = 15
if event [ ' period ' ] != " " :
clock_img = Image . open ( ' logos/period.png ' )
period_img = self . textImage ( event [ ' period ' ] . upper ( ) , small_font , r = 255 , g = 255 , b = 255 )
else :
clock_img = None
period_img = None
flag_img = Image . open ( ' logos/economic_logos/ ' + event [ ' country ' ] + ' .png ' )
circle_img = Image . open ( ' logos/indicator.png ' )
2023-07-05 14:21:28 +00:00
title_img = self . textImage ( ( event [ ' title ' ] . upper ( ) ) . replace ( " ( " , ' ' ) . replace ( " ) " , ' ' ) . replace ( " / " , " " ) , font , r = 255 , g = 255 , b = 255 )
2023-06-16 14:21:31 +00:00
country_img = self . textImage ( event [ ' country ' ] . upper ( ) , font2 , r = 255 , g = 255 , b = 0 )
date_img = self . textImage ( event [ ' time ' ] , small_font , r = 0 , g = 150 , b = 255 )
indicator_img = self . textImage ( event [ ' indicator ' ] , font2 , r = 255 , g = 255 , b = 255 )
after_offset = 0
if event [ ' forecast ' ] != None or event [ ' previous ' ] != None or event [ ' actual ' ] != None :
tiny_font = ImageFont . load ( " ./fonts/5x7.pil " )
try :
if event [ ' forecast ' ] != None :
fore_img = self . textImage ( ' Forecast ' , tiny_font , r = 255 , g = 255 , b = 255 )
fore2_img = self . textImage ( str ( event [ ' forecast ' ] ) , tiny_font , r = 0 , g = 255 , b = 0 )
after_offset + = max ( fore_img . size [ 0 ] , fore2_img . size [ 0 ] ) + 3
if event [ ' previous ' ] != None :
prev_img = self . textImage ( ' Prior ' , tiny_font , r = 255 , g = 255 , b = 255 )
prev2_img = self . textImage ( str ( event [ ' previous ' ] ) , tiny_font , r = 0 , g = 255 , b = 0 )
after_offset + = max ( prev_img . size [ 0 ] , prev2_img . size [ 0 ] ) + 3
actual_img = self . textImage ( ' Actual ' , tiny_font , r = 255 , g = 255 , b = 255 )
if event [ ' actual ' ] == None :
actual2_img = self . textImage ( ' Soon ' , tiny_font , r = 255 , g = 40 , b = 40 )
else :
actual2_img = self . textImage ( str ( event [ ' actual ' ] ) , tiny_font , r = 0 , g = 255 , b = 0 )
after_offset + = max ( actual_img . size [ 0 ] , actual2_img . size [ 0 ] ) + 3
except :
pass
try :
img = Image . new ( ' RGB ' , (
max ( flag_img . size [ 0 ] + x_offset + 5 + 3 + title_img . size [ 0 ] + country_img . size [ 0 ] ,
max ( flag_img . size [ 0 ] + x_offset + 5 + 1 + circle_img . size [ 0 ] + 2 + indicator_img . size [ 0 ] + 2 + imp_img . size [ 0 ] ,
flag_img . size [ 0 ] + x_offset + 5 + 1 + date_img . size [ 0 ] + 3 + 2 + clock_img . size [ 0 ] + period_img . size [ 0 ] ) + 10 + after_offset
)
, 32 ) )
except :
img = Image . new ( ' RGB ' , (
max ( flag_img . size [ 0 ] + x_offset + 5 + 3 + title_img . size [ 0 ] + country_img . size [ 0 ] ,
max ( flag_img . size [ 0 ] + x_offset + 5 + 1 + circle_img . size [ 0 ] + 2 + indicator_img . size [ 0 ] + 2 + imp_img . size [ 0 ] ,
flag_img . size [ 0 ] + x_offset + 5 + 1 + date_img . size [ 0 ] ) + 10 + after_offset
)
, 32 ) )
img . paste ( flag_img , ( x_offset , 0 ) )
x_offset + = flag_img . size [ 0 ] + 5
x_offset2 = x_offset + 1
img . paste ( circle_img , ( x_offset2 , 15 ) )
img . paste ( indicator_img , ( x_offset2 + circle_img . size [ 0 ] + 2 , 11 ) )
img . paste ( imp_img , ( x_offset2 + circle_img . size [ 0 ] + 2 + indicator_img . size [ 0 ] + 2 , 15 ) )
img . paste ( title_img , ( x_offset , 0 ) )
x_offset + = title_img . size [ 0 ] + 3
img . paste ( country_img , ( x_offset , 2 ) )
x_offset + = country_img . size [ 0 ]
img . paste ( date_img , ( x_offset2 , 23 ) )
try :
img . paste ( clock_img , ( x_offset2 + 3 + date_img . size [ 0 ] , 24 ) )
img . paste ( period_img , ( x_offset2 + 3 + date_img . size [ 0 ] + 2 + clock_img . size [ 0 ] , 23 ) )
x_offset2 + = max ( circle_img . size [ 0 ] + 2 + indicator_img . size [ 0 ] + 2 + imp_img . size [ 0 ] ,
date_img . size [ 0 ] + clock_img . size [ 0 ] + 3 + 2 + period_img . size [ 0 ] ) + 10
except :
x_offset2 + = max ( circle_img . size [ 0 ] + 2 + indicator_img . size [ 0 ] + 2 + imp_img . size [ 0 ] , date_img . size [ 0 ] ) + 10
try :
if event [ ' forecast ' ] != None :
img . paste ( fore_img , ( x_offset2 , 14 ) )
img . paste ( fore2_img , ( x_offset2 , 22 ) )
x_offset2 + = max ( fore_img . size [ 0 ] , fore2_img . size [ 0 ] ) + 3
except :
pass
try :
if event [ ' previous ' ] != None :
img . paste ( prev_img , ( x_offset2 , 14 ) )
img . paste ( prev2_img , ( x_offset2 , 22 ) )
x_offset2 + = max ( prev_img . size [ 0 ] , prev2_img . size [ 0 ] ) + 3
img . paste ( actual_img , ( x_offset2 , 14 ) )
img . paste ( actual2_img , ( x_offset2 , 22 ) )
x_offset2 + = max ( actual_img . size [ 0 ] , actual2_img . size [ 0 ] ) + 3
except :
pass
image_list . append ( img )
except :
pass
elif len ( econ_settings [ ' events ' ] ) == 0 :
time . sleep ( 0.1 )
no_econ = self . textImage ( ' No upcoming economic events today. ' , font , r = 255 , g = 255 , b = 255 )
img = Image . new ( ' RGB ' , ( no_econ . size [ 0 ] + 15 , 32 ) )
img . paste ( no_econ , ( 10 , 10 ) )
image_list . append ( img )
return self . stitchImage ( image_list )
2023-06-26 09:31:31 +00:00
def getEconomicProfessional ( self ) :
f = open ( ' csv/economic_settings.json ' , ' r ' )
econ_settings = json . load ( f )
f . close ( )
if econ_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/economy.png ' )
image_list = [ title_img ]
else :
image_list = [ ]
font = ImageFont . load ( " ./fonts/5x8.pil " )
small_font = ImageFont . load ( " ./fonts/4x6.pil " )
if len ( econ_settings [ ' events ' ] ) != 0 :
try :
for event in econ_settings [ ' events ' ] :
x_offset = 5
if event [ ' importance ' ] == - 1 :
imp_img = Image . open ( ' logos/low_imp.png ' )
elif event [ ' importance ' ] == 0 :
imp_img = Image . open ( ' logos/med_imp.png ' )
elif event [ ' importance ' ] == 1 :
imp_img = Image . open ( ' logos/high_imp.png ' )
if event [ ' period ' ] != " " :
clock_img = Image . open ( ' logos/period.png ' )
period_img = self . textImage ( event [ ' period ' ] . upper ( ) , small_font , r = 255 , g = 85 , b = 0 )
else :
clock_img = None
period_img = None
flag_img = Image . open ( ' logos/economic_logos/ ' + event [ ' country ' ] + ' .png ' )
width , height = flag_img . size
flag_img = flag_img . resize ( ( int ( width / 2 ) , int ( height / 2 ) ) )
circle_img = Image . open ( ' logos/indicator.png ' )
2023-07-05 14:21:28 +00:00
title_img = self . textImage ( ( event [ ' title ' ] . upper ( ) ) . replace ( " ( " , ' ' ) . replace ( " ) " , ' ' ) . replace ( " / " , " " ) , font , r = 255 , g = 255 , b = 255 )
2023-06-26 09:31:31 +00:00
country_img = self . textImage ( event [ ' country ' ] . upper ( ) , small_font , r = 255 , g = 255 , b = 0 )
date_img = self . textImage ( event [ ' time ' ] . split ( ' ' ) [ 2 ] , small_font , r = 0 , g = 150 , b = 255 )
indicator_img = self . textImage ( event [ ' indicator ' ] , small_font , r = 255 , g = 255 , b = 255 )
if event [ ' forecast ' ] != None or event [ ' previous ' ] != None or event [ ' actual ' ] != None :
try :
if event [ ' forecast ' ] != None :
fore_img = self . textImage ( ' Forecast ' , small_font , r = 255 , g = 255 , b = 255 )
fore2_img = self . textImage ( str ( event [ ' forecast ' ] ) , small_font , r = 0 , g = 255 , b = 0 )
if event [ ' previous ' ] != None :
prev_img = self . textImage ( ' Prior ' , small_font , r = 255 , g = 255 , b = 255 )
prev2_img = self . textImage ( str ( event [ ' previous ' ] ) , small_font , r = 0 , g = 255 , b = 0 )
actual_img = self . textImage ( ' Actual ' , small_font , r = 255 , g = 255 , b = 255 )
if event [ ' actual ' ] == None :
actual2_img = self . textImage ( ' Soon ' , small_font , r = 255 , g = 40 , b = 40 )
else :
actual2_img = self . textImage ( str ( event [ ' actual ' ] ) , small_font , r = 0 , g = 255 , b = 0 )
except :
pass
x_off1 = x_offset + flag_img . size [ 0 ] + 2 + title_img . size [ 0 ] + 2 + country_img . size [ 0 ] + imp_img . size [ 0 ] + 2
x_off2 = x_offset + flag_img . size [ 0 ] + 2 + circle_img . size [ 0 ] + 2 + indicator_img . size [ 0 ] + 2 + date_img . size [ 0 ] + 2
try :
x_off2 + = clock_img . size [ 0 ] + 2 + period_img . size [ 0 ] + 2
except :
pass
x_off3 = max ( x_off1 , x_off2 )
try :
if event [ ' forecast ' ] != None :
x_off3 + = max ( fore_img . size [ 0 ] , fore2_img . size [ 0 ] ) + 2
except :
pass
try :
if event [ ' previous ' ] != None :
x_off3 + = max ( prev_img . size [ 0 ] , prev2_img . size [ 0 ] ) + 2
x_off3 + = max ( actual_img . size [ 0 ] , actual2_img . size [ 0 ] ) + 2
except :
pass
img = Image . new ( ' RGB ' , ( x_off3 + 5 , 16 ) )
img . paste ( flag_img , ( x_offset , 0 ) )
x_offset + = flag_img . size [ 0 ] + 2
x_offset2 = x_offset
img . paste ( title_img , ( x_offset , 0 ) )
x_offset + = title_img . size [ 0 ] + 2
img . paste ( country_img , ( x_offset , 2 ) )
x_offset + = country_img . size [ 0 ]
img . paste ( imp_img , ( x_offset , 1 ) )
x_offset + = imp_img . size [ 0 ] + 2
img . paste ( circle_img , ( x_offset2 , 9 ) )
x_offset2 + = circle_img . size [ 0 ] + 2
img . paste ( indicator_img , ( x_offset2 , 9 ) )
x_offset2 + = indicator_img . size [ 0 ] + 2
img . paste ( date_img , ( x_offset2 , 9 ) )
x_offset2 + = date_img . size [ 0 ] + 2
try :
img . paste ( clock_img , ( x_offset2 , 8 ) )
x_offset2 + = clock_img . size [ 0 ] + 2
img . paste ( period_img , ( x_offset2 , 9 ) )
x_offset2 + = period_img . size [ 0 ] + 2
except :
pass
x_offset3 = max ( x_offset , x_offset2 )
try :
if event [ ' forecast ' ] != None :
img . paste ( fore_img , ( x_offset3 , 3 ) )
img . paste ( fore2_img , ( x_offset3 , 9 ) )
x_offset3 + = max ( fore_img . size [ 0 ] , fore2_img . size [ 0 ] ) + 2
except :
pass
try :
if event [ ' previous ' ] != None :
img . paste ( prev_img , ( x_offset3 , 3 ) )
img . paste ( prev2_img , ( x_offset3 , 9 ) )
x_offset3 + = max ( prev_img . size [ 0 ] , prev2_img . size [ 0 ] ) + 2
img . paste ( actual_img , ( x_offset3 , 3 ) )
img . paste ( actual2_img , ( x_offset3 , 9 ) )
x_offset3 + = max ( actual_img . size [ 0 ] , actual2_img . size [ 0 ] ) + 2
except :
pass
image_list . append ( img )
except :
time . sleep ( 0.1 )
no_econ = self . textImage ( ' No upcoming economic events today. ' , font , r = 255 , g = 255 , b = 255 )
img = Image . new ( ' RGB ' , ( no_econ . size [ 0 ] + 15 , 16 ) )
img . paste ( no_econ , ( 10 , 1 ) )
image_list . append ( img )
elif len ( econ_settings [ ' events ' ] ) == 0 :
time . sleep ( 0.1 )
no_econ = self . textImage ( ' No upcoming economic events today. ' , font , r = 255 , g = 255 , b = 255 )
img = Image . new ( ' RGB ' , ( no_econ . size [ 0 ] + 15 , 16 ) )
img . paste ( no_econ , ( 10 , 1 ) )
image_list . append ( img )
return self . stitchImage ( image_list )
2023-07-17 07:03:58 +00:00
def getJokesImage ( self ) :
f = open ( ' csv/jokes_settings.json ' , ' r ' )
jokes_settings = json . load ( f )
f . close ( )
if jokes_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/jokes.png ' )
image_list = [ title_img ]
else :
image_list = [ ]
2023-07-17 07:54:55 +00:00
font = ImageFont . load ( " ./fonts/BonusCoffee-16.pil " )
2023-07-17 07:03:58 +00:00
small_font = ImageFont . load ( " ./fonts/5x8.pil " )
colours = { ' White ' : ( 255 , 255 , 255 ) ,
' Red ' : ( 255 , 0 , 0 ) ,
' Green ' : ( 0 , 255 , 0 ) ,
' Dark Green ' : ( 0 , 100 , 0 ) ,
' Blue ' : ( 0 , 0 , 255 ) ,
' Purple ' : ( 145 , 0 , 255 ) ,
' Pink ' : ( 255 , 0 , 255 ) ,
' Yellow ' : ( 255 , 255 , 0 ) ,
' Orange ' : ( 255 , 130 , 0 ) ,
' Gold ' : ( 255 , 190 , 0 ) ,
' Cyan ' : ( 0 , 255 , 255 ) }
if len ( jokes_settings [ ' jokes ' ] ) > 0 :
try :
for joke in jokes_settings [ ' jokes ' ] :
random_color = random . choice ( list ( colours . keys ( ) ) )
r , g , b = colours [ random_color ]
random_number = str ( random . randint ( 1 , 8 ) ) + ' .png '
emoji = self . openImage ( ' logos/emojis/emoji ' + random_number )
category_icon = self . openImage ( ' logos/emojis/category.png ' )
category = self . textImage ( joke [ ' category ' ] , small_font , r = 255 , g = 255 , b = 255 )
if joke [ ' safe ' ] :
safe = self . textImage ( ' Safe ' , small_font , r = 255 , g = 255 , b = 0 )
else :
safe = self . textImage ( ' Unsafe ' , small_font , r = 255 , g = 0 , b = 0 )
if joke [ ' type ' ] == ' twopart ' :
2023-07-17 12:00:46 +00:00
decoded = joke [ ' setup ' ] . encode ( " ascii " , " ignore " )
joke [ ' setup ' ] = decoded . decode ( )
2023-07-17 07:03:58 +00:00
joke1 = self . textImage ( joke [ ' setup ' ] . replace ( ' \n ' , ' ' ) , font , int ( r ) , int ( g ) , int ( b ) )
random_color = random . choice ( list ( colours . keys ( ) ) )
r , g , b = colours [ random_color ]
2023-07-17 12:00:46 +00:00
decoded = joke [ ' delivery ' ] . encode ( " ascii " , " ignore " )
joke [ ' delivery ' ] = decoded . decode ( )
2023-07-17 07:03:58 +00:00
joke2 = self . textImage ( joke [ ' delivery ' ] . replace ( ' \n ' , ' ' ) , font , int ( r ) , int ( g ) , int ( b ) )
else :
2023-07-17 12:00:46 +00:00
decoded = joke [ ' joke ' ] . encode ( " ascii " , " ignore " )
joke [ ' joke ' ] = decoded . decode ( )
2023-07-17 07:03:58 +00:00
joke1 = self . textImage ( joke [ ' joke ' ] . replace ( ' \n ' , ' ' ) , font , int ( r ) , int ( g ) , int ( b ) )
joke2 = None
try :
true_flags = [ key for key , value in joke [ ' flags ' ] . items ( ) if value ]
flags = " , " . join ( true_flags )
flags_final = self . textImage ( flags , small_font , r = 255 , g = 145 , b = 0 )
except :
flags_final = None
pass
if flags_final != None :
flags_icon = self . openImage ( ' logos/emojis/flags.png ' )
else :
flags_icon = None
x_offset = 10
if joke2 != None :
try :
img = Image . new ( ' RGB ' , ( 20 + emoji . size [ 0 ] + 5 + max ( joke1 . size [ 0 ] , category_icon . size [ 0 ] + 2 + category . size [ 0 ] + 5 + safe . size [ 0 ] + 5 + flags_icon . size [ 0 ] + 2 + flags_final . size [ 0 ] + 5 ) + joke2 . size [ 0 ] , 32 ) )
except :
img = Image . new ( ' RGB ' , ( 20 + emoji . size [ 0 ] + 5 + max ( joke1 . size [ 0 ] , category_icon . size [ 0 ] + 2 + category . size [ 0 ] + 5 + safe . size [ 0 ] + 5 ) + joke2 . size [ 0 ] , 32 ) )
else :
try :
img = Image . new ( ' RGB ' , ( 20 + emoji . size [ 0 ] + 5 + max ( joke1 . size [ 0 ] , category_icon . size [ 0 ] + 2 + category . size [ 0 ] + 5 + safe . size [ 0 ] + 5 + flags_icon . size [ 0 ] + 2 + flags_final . size [ 0 ] + 5 ) , 32 ) )
except :
img = Image . new ( ' RGB ' , ( 20 + emoji . size [ 0 ] + 5 + max ( joke1 . size [ 0 ] , category_icon . size [ 0 ] + 2 + category . size [ 0 ] + 5 + safe . size [ 0 ] + 5 ) , 32 ) )
img . paste ( emoji , ( x_offset , 3 ) )
x_offset + = emoji . size [ 0 ] + 5
x_offset2 = x_offset
2023-07-17 07:54:55 +00:00
img . paste ( joke1 , ( x_offset , 1 ) )
2023-07-17 07:03:58 +00:00
x_offset + = joke1 . size [ 0 ]
img . paste ( category_icon , ( x_offset2 , 20 ) )
x_offset2 + = category_icon . size [ 0 ] + 2
img . paste ( category , ( x_offset2 , 20 ) )
x_offset2 + = category . size [ 0 ] + 5
img . paste ( safe , ( x_offset2 , 20 ) )
x_offset2 + = safe . size [ 0 ] + 5
try :
img . paste ( flags_icon , ( x_offset2 , 20 ) )
x_offset2 + = flags_icon . size [ 0 ] + 2
img . paste ( flags_final , ( x_offset2 , 20 ) )
x_offset2 + = flags_final . size [ 0 ] + 5
except :
pass
try :
2023-07-17 07:54:55 +00:00
img . paste ( joke2 , ( max ( x_offset , x_offset2 ) , 16 ) )
2023-07-17 07:03:58 +00:00
except :
pass
image_list . append ( img )
except :
pass
return self . stitchImage ( image_list )
2023-06-16 14:21:31 +00:00
2023-07-17 08:45:22 +00:00
def getJokesProfessional ( self ) :
f = open ( ' csv/jokes_settings.json ' , ' r ' )
jokes_settings = json . load ( f )
f . close ( )
if jokes_settings [ ' title ' ] :
title_img = self . openImage ( ' feature_titles/small_feature_titles/jokes.png ' )
image_list = [ title_img ]
else :
image_list = [ ]
font = ImageFont . load ( " ./fonts/6x10.pil " )
small_font = ImageFont . load ( " ./fonts/4x6.pil " )
colours = { ' White ' : ( 255 , 255 , 255 ) ,
' Red ' : ( 255 , 0 , 0 ) ,
' Green ' : ( 0 , 255 , 0 ) ,
' Dark Green ' : ( 0 , 100 , 0 ) ,
' Blue ' : ( 0 , 0 , 255 ) ,
' Purple ' : ( 145 , 0 , 255 ) ,
' Pink ' : ( 255 , 0 , 255 ) ,
' Yellow ' : ( 255 , 255 , 0 ) ,
' Orange ' : ( 255 , 130 , 0 ) ,
' Gold ' : ( 255 , 190 , 0 ) ,
' Cyan ' : ( 0 , 255 , 255 ) }
if len ( jokes_settings [ ' jokes ' ] ) > 0 :
try :
for joke in jokes_settings [ ' jokes ' ] :
random_color = random . choice ( list ( colours . keys ( ) ) )
r , g , b = colours [ random_color ]
random_number = str ( random . randint ( 1 , 8 ) ) + ' .png '
emoji = self . openImage ( ' logos/emojis/small_emojis/emoji ' + random_number )
category_icon = self . openImage ( ' logos/emojis/small_emojis/category.png ' )
category = self . textImage ( joke [ ' category ' ] , small_font , r = 255 , g = 255 , b = 255 )
if joke [ ' safe ' ] :
safe = self . textImage ( ' Safe ' , small_font , r = 255 , g = 255 , b = 0 )
else :
safe = self . textImage ( ' Unsafe ' , small_font , r = 255 , g = 0 , b = 0 )
if joke [ ' type ' ] == ' twopart ' :
joke1 = self . textImage ( joke [ ' setup ' ] . replace ( ' \n ' , ' ' ) , font , int ( r ) , int ( g ) , int ( b ) )
random_color = random . choice ( list ( colours . keys ( ) ) )
r , g , b = colours [ random_color ]
joke2 = self . textImage ( joke [ ' delivery ' ] . replace ( ' \n ' , ' ' ) , font , int ( r ) , int ( g ) , int ( b ) )
else :
joke1 = self . textImage ( joke [ ' joke ' ] . replace ( ' \n ' , ' ' ) , font , int ( r ) , int ( g ) , int ( b ) )
joke2 = None
try :
true_flags = [ key for key , value in joke [ ' flags ' ] . items ( ) if value ]
flags = " , " . join ( true_flags )
flags_final = self . textImage ( flags , small_font , r = 255 , g = 145 , b = 0 )
except :
flags_final = None
pass
if flags_final != None :
flags_icon = self . openImage ( ' logos/emojis/small_emojis/flags.png ' )
else :
flags_icon = None
x_offset = 10
if joke2 != None :
try :
img = Image . new ( ' RGB ' , ( 20 + emoji . size [ 0 ] + 5 + max ( joke1 . size [ 0 ] , category_icon . size [ 0 ] + 2 + category . size [ 0 ] + 5 + safe . size [ 0 ] + 5 + flags_icon . size [ 0 ] + 2 + flags_final . size [ 0 ] + 5 ) + joke2 . size [ 0 ] , 16 ) )
except :
img = Image . new ( ' RGB ' , ( 20 + emoji . size [ 0 ] + 5 + max ( joke1 . size [ 0 ] , category_icon . size [ 0 ] + 2 + category . size [ 0 ] + 5 + safe . size [ 0 ] + 5 ) + joke2 . size [ 0 ] , 16 ) )
else :
try :
img = Image . new ( ' RGB ' , ( 20 + emoji . size [ 0 ] + 5 + max ( joke1 . size [ 0 ] , category_icon . size [ 0 ] + 2 + category . size [ 0 ] + 5 + safe . size [ 0 ] + 5 + flags_icon . size [ 0 ] + 2 + flags_final . size [ 0 ] + 5 ) , 16 ) )
except :
img = Image . new ( ' RGB ' , ( 20 + emoji . size [ 0 ] + 5 + max ( joke1 . size [ 0 ] , category_icon . size [ 0 ] + 2 + category . size [ 0 ] + 5 + safe . size [ 0 ] + 5 ) , 16 ) )
img . paste ( emoji , ( x_offset , 0 ) )
x_offset + = emoji . size [ 0 ] + 5
x_offset2 = x_offset
img . paste ( joke1 , ( x_offset , 0 ) )
x_offset + = joke1 . size [ 0 ]
img . paste ( category_icon , ( x_offset2 , 10 ) )
x_offset2 + = category_icon . size [ 0 ] + 2
img . paste ( category , ( x_offset2 , 10 ) )
x_offset2 + = category . size [ 0 ] + 5
img . paste ( safe , ( x_offset2 , 10 ) )
x_offset2 + = safe . size [ 0 ] + 5
try :
img . paste ( flags_icon , ( x_offset2 , 10 ) )
x_offset2 + = flags_icon . size [ 0 ] + 2
img . paste ( flags_final , ( x_offset2 , 10 ) )
x_offset2 + = flags_final . size [ 0 ] + 5
except :
pass
try :
img . paste ( joke2 , ( max ( x_offset , x_offset2 ) , 6 ) )
except :
pass
image_list . append ( img )
except :
pass
return self . stitchImage ( image_list )
2023-06-16 14:21:31 +00:00
2023-04-11 10:52:21 +00:00
def ip_viewer ( self ) :
font = ImageFont . load ( " ./fonts/6x10.pil " )
image = Image . new ( ' RGB ' , ( 128 , 32 ) )
hostname = str ( os . popen ( ' hostname ' ) . read ( ) ) . strip ( ) + " .local:1024 "
mac_add = str ( os . popen ( ' cat /sys/class/net/wlan0/address ' ) . read ( ) ) . replace ( " " , " " ) . strip ( )
2023-04-11 11:27:50 +00:00
ip_add = str ( os . popen ( ' hostname -I ' ) . read ( ) ) . replace ( " " , " " ) . strip ( ) + " :1024 "
2023-04-11 10:52:21 +00:00
hostname_img = self . textImage ( hostname , font , r = 255 , g = 255 , b = 255 )
ip_img = self . textImage ( ip_add , font , r = 255 , g = 255 , b = 255 )
mac_img = self . textImage ( mac_add , font , r = 255 , g = 255 , b = 255 )
image . paste ( hostname_img , ( 0 , 0 ) )
image . paste ( ip_img , ( 0 , 12 ) )
image . paste ( mac_img , ( 0 , 23 ) )
stock_ticker . setImage ( image )
time . sleep ( 10 )
2023-01-09 08:16:18 +00:00
2021-06-15 18:35:04 +00:00
def displayStocks ( self ) :
self . scrollImageTransition ( [ ' final.ppm ' , ' final.ppm ' ] , offset_x = 0 , offset_y = 0 )
2021-07-14 17:02:54 +00:00
def displayProfessional ( self ) :
forex = self . getForexProfessional ( )
crypto = self . getCryptoProfessional ( )
news = self . getNewsProfessional ( )
stock = self . getStockProfessional ( )
weather = self . getTodayWeatherProfessional ( )
2022-06-12 17:39:07 +00:00
commodities = self . getCommoditiesProfessional ( )
2022-10-06 08:33:52 +00:00
indices = self . getIndicesProfessional ( )
2022-10-31 07:36:32 +00:00
daily_forecast = self . getDailyWeatherProfessional ( )
2022-10-31 07:42:13 +00:00
sports_stats = self . getLeagueTableProfessional ( )
2022-10-31 07:47:37 +00:00
sports_upcoming = self . getLeagueProfessional ( )
sports_past = self . getLeagueProfessional ( )
2023-01-09 10:08:18 +00:00
sports_live = self . getLeagueProfessional ( )
2023-01-09 08:16:18 +00:00
movies = self . getMoviesProfessional ( )
2023-01-09 04:39:34 +00:00
messages = self . getUserMessagesProfessional ( )
2023-01-09 04:46:39 +00:00
images = self . getUserImagesProfessional ( )
2023-03-08 06:47:19 +00:00
ipo = self . getIpoProfessional ( )
2021-07-14 17:02:54 +00:00
x_offset = 0
news . paste ( weather , ( x_offset , 16 ) )
x_offset + = weather . size [ 0 ]
news . paste ( crypto , ( x_offset , 16 ) )
x_offset + = crypto . size [ 0 ]
news . paste ( stock , ( x_offset , 16 ) )
x_offset + = stock . size [ 0 ]
news . paste ( forex , ( x_offset , 16 ) )
x_offset + = forex . size [ 0 ]
2022-06-12 17:39:07 +00:00
news . paste ( commodities , ( x_offset , 16 ) )
x_offset + = commodities . size [ 0 ]
2022-10-06 08:33:52 +00:00
news . paste ( indices , ( x_offset , 16 ) )
2022-10-31 07:36:32 +00:00
x_offset + = indices . size [ 0 ]
news . paste ( daily_forecast , ( x_offset , 16 ) )
x_offset + = daily_forecast . size [ 0 ]
2022-10-31 07:42:13 +00:00
news . paste ( sports_stats , ( x_offset , 16 ) )
x_offset + = sports_stats . size [ 0 ]
2022-10-31 07:47:37 +00:00
news . paste ( sports_upcoming , ( x_offset , 16 ) )
x_offset + = sports_upcoming . size [ 0 ]
news . paste ( sports_past , ( x_offset , 16 ) )
x_offset + = sports_past . size [ 0 ]
2023-01-09 10:08:18 +00:00
news . paste ( sports_live , ( x_offset , 16 ) )
x_offset + = sports_live . size [ 0 ]
2023-01-09 08:16:18 +00:00
news . paste ( movies , ( x_offset , 16 ) )
x_offset + = movies . size [ 0 ]
2023-01-09 04:39:34 +00:00
news . paste ( messages , ( x_offset , 16 ) )
x_offset + = messages . size [ 0 ]
2023-01-09 04:46:39 +00:00
news . paste ( images , ( x_offset , 16 ) )
x_offset + = images . size [ 0 ]
2023-03-08 06:47:19 +00:00
news . paste ( ipo , ( x_offset , 16 ) )
x_offset + = ipo . size [ 0 ]
2023-06-26 09:31:31 +00:00
news . paste ( economic , ( x_offset , 16 ) )
x_offset + = economic . size [ 0 ]
2023-07-13 09:10:58 +00:00
news . paste ( jokes , ( x_offset , 16 ) )
x_offset + = jokes . size [ 0 ]
2021-07-29 13:48:04 +00:00
self . double_buffer = self . matrix . CreateFrameCanvas ( )
2021-07-14 17:02:54 +00:00
while True :
kill = stock_ticker . scrollImage ( news , offset_x = 128 )
if kill :
break
2021-07-28 19:18:38 +00:00
2021-10-12 19:52:52 +00:00
2021-08-03 18:44:16 +00:00
2021-05-05 15:22:01 +00:00
def process_msg ( self , msg ) :
2021-05-21 10:20:39 +00:00
if msg == ' S ' : # stocks
2021-07-16 10:00:37 +00:00
self . scrollFunctionsAnimated ( [ ' stocks ' , ' stocks ' ] , animation = ' traditional ' )
2021-05-05 15:22:01 +00:00
2021-07-06 19:15:05 +00:00
elif msg == ' C ' : # crypto
2021-07-16 10:00:37 +00:00
self . scrollFunctionsAnimated ( [ ' crypto ' , ' crypto ' ] , animation = ' traditional ' )
2021-07-06 19:15:05 +00:00
2021-07-08 16:48:03 +00:00
elif msg == ' F ' : # forex
2021-07-16 10:00:37 +00:00
self . scrollFunctionsAnimated ( [ ' forex ' , ' forex ' ] , animation = ' traditional ' )
2021-07-06 19:15:05 +00:00
2021-05-21 13:24:37 +00:00
elif msg == ' N ' : #news
2021-07-16 10:00:37 +00:00
self . scrollFunctionsAnimated ( [ ' news ' , ' news ' ] , animation = ' traditional ' )
2021-06-22 19:05:56 +00:00
2021-05-21 10:20:39 +00:00
# speed settings
2021-05-05 15:22:01 +00:00
elif msg == ' s ' :
self . delay = 0.03
elif msg == ' m ' :
2021-07-08 19:12:18 +00:00
self . delay = 0.02
2021-05-05 15:22:01 +00:00
elif msg == ' f ' :
2021-07-08 19:12:18 +00:00
self . delay = 0.01
2021-05-05 15:22:01 +00:00
2021-05-21 10:20:39 +00:00
elif msg in [ ' 0 ' , ' 1 ' , ' 2 ' , ' 3 ' , ' 4 ' , ' 5 ' , ' 6 ' , ' 7 ' , ' 8 ' , ' 9 ' ] : # birghtness ettings
2021-05-05 15:22:01 +00:00
2021-11-20 15:30:31 +00:00
self . brightness = ( float ( msg ) + 1 ) * 10
2021-10-25 18:42:00 +00:00
self . matrix . brightness = self . brightness
2021-05-21 10:20:39 +00:00
elif msg == ' T ' : # text
2021-07-14 17:02:54 +00:00
self . scrollFunctionsAnimated ( [ ' text ' , ' text ' ] , animation = ' traditional ' )
2021-05-21 10:20:39 +00:00
elif msg == ' I ' : # image
2021-07-14 17:02:54 +00:00
self . scrollFunctionsAnimated ( [ ' display_image ' , ' display_image ' ] , animation = ' traditional ' )
2021-05-21 10:20:39 +00:00
elif msg == ' G ' : # gif
2021-08-03 17:16:13 +00:00
2021-07-14 17:02:54 +00:00
self . scrollFunctionsAnimated ( [ ' display_gif ' , ' display_gif ' ] , animation = ' traditional ' )
2021-06-07 20:03:03 +00:00
elif msg == ' W ' : # weather
2021-07-14 17:02:54 +00:00
self . scrollFunctionsAnimated ( [ ' today_weather ' , ' today_weather ' ] , animation = ' traditional ' )
2021-05-21 10:20:39 +00:00
2021-06-07 20:03:03 +00:00
elif msg == ' D ' : # daily weather
2021-07-14 17:02:54 +00:00
self . scrollFunctionsAnimated ( [ ' daily_weather ' , ' daily_weather ' ] , animation = ' traditional ' )
2021-06-10 18:55:23 +00:00
2021-06-19 09:53:09 +00:00
elif msg == ' P ' : # past league
2021-08-03 17:16:13 +00:00
self . scrollFunctionsAnimated ( [ ' past_games ' , ' past_games ' ] , animation = ' traditional ' )
2021-06-19 09:53:09 +00:00
2021-07-08 16:48:03 +00:00
elif msg == ' l ' : # future league
2021-08-03 17:16:13 +00:00
self . scrollFunctionsAnimated ( [ ' future_games ' , ' future_games ' ] , animation = ' traditional ' )
2021-06-15 18:35:04 +00:00
2021-06-19 09:53:09 +00:00
elif msg == ' L ' : # live game
2021-08-03 17:16:13 +00:00
self . scrollFunctionsAnimated ( [ ' live_games ' , ' live_games ' ] , animation = ' traditional ' )
2021-06-19 09:53:09 +00:00
2021-06-27 11:07:47 +00:00
elif msg == ' t ' : #legue tble
2021-08-03 17:16:13 +00:00
self . scrollFunctionsAnimated ( [ ' league_table ' , ' league_table ' ] , animation = ' traditional ' )
2021-06-15 18:35:04 +00:00
2022-06-12 17:39:07 +00:00
elif msg == ' CO ' : #commodities
self . scrollFunctionsAnimated ( [ ' commodities ' , ' commodities ' ] , animation = ' traditional ' )
2022-10-06 08:33:52 +00:00
elif msg == ' WI ' : #indices
2023-01-09 08:16:18 +00:00
self . scrollFunctionsAnimated ( [ ' indices ' , ' indices ' ] , animation = ' traditional ' )
elif msg == ' MO ' : #movies
self . scrollFunctionsAnimated ( [ ' movies ' , ' movies ' ] , animation = ' traditional ' )
2022-10-06 08:33:52 +00:00
2023-03-08 06:47:19 +00:00
elif msg == ' IPO ' : #ipo
self . scrollFunctionsAnimated ( [ ' ipo ' , ' ipo ' ] , animation = ' traditional ' )
2023-06-16 14:21:31 +00:00
elif msg == ' EC ' : #economic calendar
self . scrollFunctionsAnimated ( [ ' economic ' , ' economic ' ] , animation = ' traditional ' )
2023-07-13 09:10:58 +00:00
2023-07-13 09:13:31 +00:00
elif msg == ' JO ' : # jokes
2023-07-13 09:10:58 +00:00
self . scrollFunctionsAnimated ( [ ' jokes ' , ' jokes ' ] , animation = ' traditional ' )
2023-06-16 14:21:31 +00:00
2021-06-21 16:39:44 +00:00
elif msg == ' A ' : #everything
2021-07-26 19:50:51 +00:00
2021-08-11 19:58:01 +00:00
#userSettings = ['display_gif', 'text', 'display_image', 'stocks', 'crypto', 'forex', 'today_weather', 'daily_weather', 'league_table', 'league_games', 'news'] # these wil be read from csv, just for demo
2021-07-06 19:15:05 +00:00
#userSettings = [ 'daily_weather']
2021-07-05 18:51:40 +00:00
#userSettings = ['crypto', 'stocks'] # these wil be read from csv, just for demo
2021-06-30 21:00:14 +00:00
#userSettings = [ 'display_image', 'news'] # these wil be read from csv, just for demo
2022-04-07 17:35:38 +00:00
f = open ( ' csv/display_settings.json ' , ' r ' )
user_settings = json . load ( f )
f . close ( )
if ' Professional ' == user_settings [ 0 ] and len ( user_settings [ 1 ] [ 0 ] ) > 0 and len ( user_settings [ 1 ] [ 1 ] ) > 0 : #if professional display
self . scrollProfessionalAnimated ( user_settings [ 1 ] )
elif len ( user_settings [ 1 ] [ 0 ] ) > 0 and ' Standard ' == user_settings [ 0 ] :
self . scrollFunctionsAnimated ( user_settings [ 1 ] [ 0 ] , animation = ' down ' )
2021-05-21 13:24:37 +00:00
2021-07-14 17:02:54 +00:00
elif msg == ' b ' :
2021-08-18 19:50:02 +00:00
userSettings = json . load ( open ( ' csv/display_settings.json ' ) )
2021-07-26 19:50:51 +00:00
2021-08-03 18:44:16 +00:00
self . scrollProfessionalAnimated ( userSettings )
#self.displayProfessional()
2021-07-27 17:33:02 +00:00
elif msg == ' + ' :
stock_ticker . scrollMultiple ( )
2021-07-14 17:02:54 +00:00
2021-05-21 10:20:39 +00:00
elif msg == ' K ' : # kill
self . resetMatrix ( )
2022-02-15 18:33:32 +00:00
elif msg == ' - ' :
self . run_intro_screen ( )
elif msg == ' * ' :
#
#
2022-02-15 19:25:24 +00:00
start_GIF = Image . open ( ' ./logos/startup_logo1.gif ' )
2022-02-15 18:33:32 +00:00
self . displayGIF ( start_GIF , delay = 0.02 , repeat = False )
2022-02-15 19:25:24 +00:00
2022-02-15 18:33:32 +00:00
#stock_ticker.setImage(start_image)
2023-04-11 11:27:50 +00:00
time . sleep ( 10 )
2022-02-15 18:33:32 +00:00
self . resetMatrix ( )
2023-04-11 11:27:50 +00:00
time . sleep ( 2 )
2023-04-11 10:52:21 +00:00
self . ip_viewer ( )
time . sleep ( 2 )
self . resetMatrix ( )
2022-02-14 18:48:27 +00:00
def run_intro_screen ( self ) :
2022-02-15 18:33:32 +00:00
dct = { " feature " : " Custom Messages " , " speed " : " Medium " , " animation " : " Down " , " title " : False , " messages " : [ { " name " : " welcome " , " text " : " Welcome to Fintic! " , " text_colour " : " White " , " size " : " Large " , " background_colour " : " Black " } , { " name " : " get_started " , " text " : " To get started, connect your device to the \" Fintic Hotspot \" and access \" fintic.local:1024 \" on your web browser. You can connect your ticker to Wi-Fi there. " , " text_colour " : " White " , " size " : " Small " , " background_colour " : " Black " } ] }
2022-02-14 18:48:27 +00:00
json . dump ( dct , open ( ' csv/message_settings.json ' , ' w ' ) )
2022-02-15 18:33:32 +00:00
self . scrollFunctionsAnimated ( [ ' Custom Messages ' ] , repeat = True )
2022-02-14 18:48:27 +00:00
2021-05-01 10:39:20 +00:00
if __name__ == ' __main__ ' :
2022-04-07 17:35:38 +00:00
try :
stock_ticker = StockTicker ( )
2022-04-07 17:40:38 +00:00
2021-06-22 19:05:56 +00:00
2022-04-11 16:07:12 +00:00
2022-04-07 17:35:38 +00:00
while True :
msg = getInput ( )
stock_ticker . process_msg ( msg )
except Exception as e :
2022-06-20 09:42:10 +00:00
pass
# logf = open('log.txt', "a")
# exc_type, exc_obj, exc_tb = sys.exc_info()
# fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
# logf.write(str(e))
# logf.write('. file: ' + fname)
# logf.write('. line: ' + str(exc_tb.tb_lineno))
# logf.write('. type: ' + str(exc_type))
# logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])))
# logf.close()
2022-04-07 17:37:29 +00:00
2022-02-15 18:33:32 +00:00
2021-05-01 10:39:20 +00:00
2022-04-07 17:35:38 +00:00