122 lines
4.4 KiB
Python
122 lines
4.4 KiB
Python
from zoneinfo import ZoneInfo
|
|
|
|
from django.http import HttpResponse
|
|
from django.shortcuts import redirect, render
|
|
|
|
|
|
# Create your views here.
|
|
def image_generator(request, team_id, event_id):
|
|
request.user.socialaccount_set.filter(provider="teamsnap").first()
|
|
current_teamsnap_user = request.user.socialaccount_set.filter(
|
|
provider="teamsnap"
|
|
).first()
|
|
|
|
TOKEN = current_teamsnap_user.socialtoken_set.order_by("-expires_at").first().token
|
|
|
|
from pyteamsnap.client import TeamSnap
|
|
from pyteamsnap.objects import Event
|
|
|
|
client = TeamSnap(token=TOKEN)
|
|
|
|
ts_event = Event.get(client, id=event_id)
|
|
return render(request, "instagen/instagen.html", context={"event": ts_event})
|
|
|
|
|
|
def get_matchup_image(request, team_id, event_id, dimensions=None, background=None):
|
|
import io
|
|
|
|
from pyteamsnap.objects import Location, Opponent, Team
|
|
|
|
from .utils.gen_image import Location as ImagegenLocation
|
|
from .utils.gen_image import Team as ImagegenTeam
|
|
from .utils.gen_image import gen_image, gen_results_image
|
|
|
|
if not team_id:
|
|
return redirect(
|
|
"teamsnap_event", team_id=request.user.preferences.managed_team_id
|
|
)
|
|
request.user.socialaccount_set.filter(provider="teamsnap").first()
|
|
current_teamsnap_user = request.user.socialaccount_set.filter(
|
|
provider="teamsnap"
|
|
).first()
|
|
|
|
ts_token = (
|
|
current_teamsnap_user.socialtoken_set.order_by("-expires_at").first().token
|
|
)
|
|
|
|
from pyteamsnap.client import TeamSnap
|
|
from pyteamsnap.objects import Event
|
|
|
|
teamsnap = TeamSnap(token=ts_token)
|
|
|
|
if request.GET:
|
|
BACKGROUND = request.GET.get("background", "location")
|
|
game_id = event_id
|
|
dimensions = request.GET.get("dimensions")
|
|
width = int(dimensions.split("x")[0])
|
|
height = int(dimensions.split("x")[1])
|
|
|
|
ts_event = Event.get(teamsnap, game_id).data
|
|
fave_team = Team.get(teamsnap, ts_event["team_id"]).data
|
|
opponent_team = Opponent.get(teamsnap, ts_event["opponent_id"]).data
|
|
location = Location.get(teamsnap, ts_event["location_id"]).data
|
|
formatted_results = ts_event["formatted_results"]
|
|
if formatted_results:
|
|
# L 4-3
|
|
runs_for = int(formatted_results.split(" ")[1].split("-")[0])
|
|
runs_against = int(formatted_results.split(" ")[1].split("-")[1])
|
|
else:
|
|
runs_for, runs_against = None, None
|
|
|
|
logo_image_directory = "instagen/static/instagen/logos-bw/{filename}.{ext}"
|
|
venue_image_directory = "instagen/static/instagen/locations/{filename}.{ext}"
|
|
|
|
def shortname_from_name(name):
|
|
return name.replace(" ", "").lower()
|
|
|
|
# date = parser.parse(ts_event['start_date'])
|
|
# date = date.astimezone(ZoneInfo("America/Chicago"))
|
|
game_info = {
|
|
"date": ts_event["start_date"].astimezone(
|
|
ZoneInfo(ts_event["time_zone_iana_name"])
|
|
),
|
|
"team_fave": ImagegenTeam(
|
|
name=fave_team["name"],
|
|
image_directory=logo_image_directory.format(
|
|
filename=shortname_from_name(fave_team["name"]), ext="png"
|
|
),
|
|
),
|
|
"team_opponent": ImagegenTeam(
|
|
name=opponent_team["name"],
|
|
image_directory=logo_image_directory.format(
|
|
filename=shortname_from_name(opponent_team["name"]), ext="png"
|
|
),
|
|
),
|
|
"location": ImagegenLocation(
|
|
name=location["name"],
|
|
image_directory=venue_image_directory.format(
|
|
filename=shortname_from_name(location["name"]), ext="png"
|
|
),
|
|
# address=location['address']
|
|
),
|
|
"runs_for": runs_for,
|
|
"runs_against": runs_against,
|
|
}
|
|
|
|
if not game_info["runs_for"] and not game_info["runs_against"]:
|
|
image = gen_image(
|
|
**game_info, background=BACKGROUND, width=width, height=height
|
|
)
|
|
elif game_info["runs_for"] or game_info["runs_against"]:
|
|
image = gen_results_image(
|
|
**game_info, background=BACKGROUND, width=width, height=height
|
|
)
|
|
else:
|
|
raise Exception
|
|
|
|
imgByteArr = io.BytesIO()
|
|
image.save(imgByteArr, format="PNG")
|
|
imgByteArr = imgByteArr.getvalue()
|
|
|
|
return HttpResponse(imgByteArr, content_type="image/png")
|