Fix broken DFC support
This commit is contained in:
parent
5375a36c52
commit
ec8ffed27b
7
face.py
7
face.py
|
@ -31,4 +31,9 @@ class Face:
|
|||
return self.d['toughness']
|
||||
|
||||
def image_uris(self, _, layout):
|
||||
return self.d['image_uris'][layout]
|
||||
return self.d['image_uris'][layout]
|
||||
|
||||
def card_faces(self):
|
||||
# Scrython exposes this method on every card and manually raises KeyError
|
||||
# if it's not a DFC, so unfortunately I have to replicate that here.
|
||||
raise KeyError()
|
|
@ -45,7 +45,7 @@ async def startup():
|
|||
await t
|
||||
|
||||
async def get_cards(card_names):
|
||||
async def get_card_image(session, c):
|
||||
async def get_card_image(session, c, get_oracle=True):
|
||||
"""Return card image and description (text representation)"""
|
||||
|
||||
async def download_card_image(session, c):
|
||||
|
@ -70,10 +70,18 @@ async def get_cards(card_names):
|
|||
log(f'Done downloading text representation of {c.name()}!')
|
||||
|
||||
return text
|
||||
|
||||
|
||||
try:
|
||||
# Scrython exposes this method for every card and just manually raises a KeyError if it's not
|
||||
# a DFC, so this whole section has to be wrapped in a try-catch to deal with it
|
||||
c.card_faces()
|
||||
|
||||
log(f'{c.name()} is a DFC, getting each face separately...')
|
||||
|
||||
oracle_text = download_card_text(session, c)
|
||||
|
||||
front, back = map(Image.open, await asyncio.gather(
|
||||
*(get_card_image(session, face.Face(card_face)) for card_face in c.card_faces())
|
||||
*(get_card_image(session, face.Face(card_face), False) for card_face in c.card_faces())
|
||||
))
|
||||
|
||||
new_image = Image.new('RGB', (front.width*2, front.height))
|
||||
|
@ -85,15 +93,17 @@ async def get_cards(card_names):
|
|||
new_image.save(output, format=front.format)
|
||||
output.seek(0)
|
||||
|
||||
return output
|
||||
|
||||
except (AttributeError, KeyError):
|
||||
return (output, await oracle_text)
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
return await asyncio.gather(
|
||||
download_card_image(session, c),
|
||||
download_card_text(session, c)
|
||||
)
|
||||
if get_oracle:
|
||||
return await asyncio.gather(
|
||||
download_card_image(session, c),
|
||||
download_card_text(session, c)
|
||||
)
|
||||
else:
|
||||
return await download_card_image(session, c)
|
||||
|
||||
# Responses list: One entry for each [[card name]] in parent, even if the
|
||||
# response is just "No card named 'CARDNAME' was found."
|
||||
|
|
Loading…
Reference in New Issue