Improved DFC support (closes #1)
This commit is contained in:
parent
73e5b2cc85
commit
4be8ddf9b2
5
face.py
5
face.py
|
@ -28,4 +28,7 @@ class Face:
|
|||
return self.d['power']
|
||||
|
||||
def toughness(self):
|
||||
return self.d['toughness']
|
||||
return self.d['toughness']
|
||||
|
||||
def image_uris(self, _, layout):
|
||||
return self.d['image_uris'][layout]
|
|
@ -9,6 +9,7 @@ import json
|
|||
import requests
|
||||
import io
|
||||
import traceback
|
||||
from PIL import Image
|
||||
|
||||
import atoot # Asynchronous Mastodon API wrapper
|
||||
import scrython # Scryfall API (similar to Gatherer but I prefer Scryfall)
|
||||
|
@ -44,14 +45,36 @@ async def startup():
|
|||
await t
|
||||
|
||||
async def get_cards(card_names):
|
||||
async def download_card_image(session, c):
|
||||
async def get_card_image(session, c):
|
||||
async def download_card_image(session, url):
|
||||
async with session.get(url) as r:
|
||||
# BytesIO stores the data in memory as a file-like object.
|
||||
# We can turn around and upload it to fedi without ever
|
||||
# touching the disk.
|
||||
return io.BytesIO(await r.read())
|
||||
|
||||
try:
|
||||
front, back = map(Image.open, await asyncio.gather(
|
||||
*(get_card_image(session, face.Face(card_face)) for card_face in c.card_faces())
|
||||
))
|
||||
|
||||
new_image = Image.new('RGB', (front.width*2, front.height))
|
||||
|
||||
new_image.paste(front, (0, 0))
|
||||
new_image.paste(back, (front.width, 0))
|
||||
|
||||
output = io.BytesIO()
|
||||
new_image.save(output, format=front.format)
|
||||
output.seek(0)
|
||||
|
||||
return output
|
||||
|
||||
except (AttributeError, KeyError):
|
||||
pass
|
||||
|
||||
log(f'Downloading image for {c.name()}...')
|
||||
url = c.image_uris(0, 'normal')
|
||||
async with session.get(url) as r:
|
||||
# BytesIO stores the data in memory as a file-like object.
|
||||
# We can turn around and upload it to fedi without ever
|
||||
# touching the disk.
|
||||
image = io.BytesIO(await r.read())
|
||||
image = await download_card_image(session, url)
|
||||
|
||||
log(f'Done downloading image for {c.name()}!')
|
||||
return image
|
||||
|
@ -140,7 +163,7 @@ async def get_cards(card_names):
|
|||
async with aiohttp.ClientSession() as session:
|
||||
images = tuple(zip(
|
||||
await asyncio.gather(
|
||||
*(download_card_image(session, c) for c in cards)
|
||||
*(get_card_image(session, c) for c in cards)
|
||||
),
|
||||
(get_text_representation(c) for c in cards)
|
||||
))
|
||||
|
|
Loading…
Reference in New Issue