From 25a9c450ed9b9149bb301119b6331116d2f76920 Mon Sep 17 00:00:00 2001 From: Nanda Scott Date: Mon, 29 Jan 2018 22:32:08 -0500 Subject: [PATCH] Named, multiverse, and randomcard now inherit scryfall_object. --- cards/multiverse.py | 218 ++----------------------------------- cards/named.py | 229 +++------------------------------------ cards/randomcard.py | 220 +------------------------------------ cards/scryfall_object.py | 77 ++++++++++++- 4 files changed, 103 insertions(+), 641 deletions(-) diff --git a/cards/multiverse.py b/cards/multiverse.py index 7c91588..88e7ccc 100644 --- a/cards/multiverse.py +++ b/cards/multiverse.py @@ -1,214 +1,12 @@ -import asyncio, aiohttp -import json - -class Multiverse(object): - """ cards/named +from scryfall_object import ScryfallObject +class Multiverse(ScryfallObject): + """ Parameters: - id: int The multiverse id of the card. - format: str The data format to return: json, text, or image. Defaults to json. - face: str If using the image format and this parameter has the value back, - the back face of the card will be returned. - Will return a 404 if this card has no back face. - version: str The image version to return when using the image - format: small, normal, large, png, art_crop, or border_crop. Defaults to large. - pretty: bool If true, the returned JSON will be prettified. Avoid using for production code. - - Attributes: - object: str Returns the type of object it is. (card, error, etc) - id: str The scryfall id of the card. - multiverse_ids: arr The associated multiverse ids of the card. - mtgo_id: int The Magic Online id of the card. - mtgo_foil_id: int The Magic Online foil id of the card. - name: str The full name of the card. Cards with multiple faces are named with '//' as a seperator. - uri: str The Scryfall API uri for the card. - scryfall_uri: str The full Scryfall page of the card. - layout: str The image layout of the card. (normal, transform, etc) - highres_image: bool Returns True if the card has a high res image. - card.image_uris: dict All image uris of the card in various qualities. - cmc: float A float of the converted mana cost of the card. - type_line: str The full type line of the card. - oracle_text: str The official oracle text of a card. - mana_cost: str The full mana cost using shorthanded mana symbols. - colors: arr An array of strings with all colors found in the mana cost. - color_identity: arr An array of strings with all colors found in on the card itself. - legalities: dict A dictionary of all formats and their legality. - reserved: bool Returns True if the card is on the reserved list. - reprint: bool Returns True if the card has been reprinted before. - set: str The 3 letter code for the set of the card. - set_name: str The full name for the set of the card. - set_uri: str The API uri for the full set list of the card. - set_search_uri: str Same output as set_uri. - scryfall_set_uri: str The full link to the set on Scryfall. - rulings_uri: str The API uri for the rulings of the card. - prints_search_uri: str TODO: Figure out what this does. - collector_number: str The collector number of the card. - digital: bool Returns True if the card is the digital version. - rarity: str The rarity of the card. - illustration_id: str The related id of the card art. - artist: str The artist of the card. - frame: str The year of the card frame. - full_art: bool Returns True if the card is considered full art. - border_color: str The color of the card border. - timeshifted: bool Returns True if the card is timeshifted. - colorshifted: bool Returns True if the card is colorshifted. - futureshifted: bool Returns True if the card is futureshifted. - edhrec_rank: int The rank of the card on edhrec.com - tix: int The MTGO price of the card - related_uris: dict A dictionary of related websites for this card. - purchase_uris: dict A dictionary of links to purchase the card. + id: int The multiverse id of the card. """ - def __init__(self, _id, _format=None, face=None, version=None, pretty=None): - self.multiverseid = _id - self.format = _format - self.face = face - self.version = version - self.pretty = pretty - loop = asyncio.get_event_loop() - self.session = aiohttp.ClientSession(loop=loop) - - async def getRequest(url, **kwargs): - async with self.session.get(url, **kwargs) as response: - return await response.json() - - self.scryfallJson = loop.run_until_complete(getRequest( - url='https://api.scryfall.com/cards/multiverse/{}'.format(self.multiverseid), - params={ - 'format':self.format, - 'face':self.face, - 'version':self.version, - 'pretty':self.pretty - })) - - if self.scryfallJson['object'] == 'error': - raise Exception(self.scryfallJson['details']) - self.session.close() - - self.session.close() - - def object(self): - return self.scryfallJson['object'] - - def id(self): - return self.scryfallJson['id'] - - def multiverse_ids(self): - return self.scryfallJson['multiverse_ids'] - - def mtgo_id(self): - return self.scryfallJson['mtgo_id'] - - def mtgo_foil_id(self): - return self.scryfallJson['mtgo_foil_id'] - - def name(self): - return self.scryfallJson['name'] - - def uri(self): - return self.scryfallJson['uri'] - - def scryfall_uri(self): - return self.scryfallJson['scryfall_uri'] - - def layout(self): - return self.scryfallJson['layout'] - - def highres_image(self): - return self.scryfallJson['highres_image'] - - def image_uris(self): - return self.scryfallJson['image_uris'] - - def cmc(self): - return self.scryfallJson['cmc'] - - def type_line(self): - return self.scryfallJson['type_line'] - - def oracle_text(self): - return self.scryfallJson['oracle_text'] - - def mana_cost(self): - return self.scryfallJson['mana_cost'] - - def colors(self): - return self.scryfallJson['colors'] - - def color_identity(self): - return self.scryfallJson['color_identity'] - - def legalities(self): - return self.scryfallJson['legalities'] - - def reserved(self): - return self.scryfallJson['reserved'] - - def reprint(self): - return self.scryfallJson['reprint'] - - def set(self): - return self.scryfallJson['set'] - - def set_name(self): - return self.scryfallJson['set_name'] - - def set_uri(self): - return self.scryfallJson['set_uri'] - - def set_search_uri(self): - return self.scryfallJson['set_search_uri'] - - def scryfall_set_uri(self): - return self.scryfallJson['scryfall_set_uri'] - - def rulings_uri(self): - return self.scryfallJson['rulings_uri'] - - def prints_search_uri(self): - return self.scryfallJson['prints_search_uri'] - - def collector_number(self): - return self.scryfallJson['collector_number'] - - def digital(self): - return self.scryfallJson['digital'] - - def rarity(self): - return self.scryfallJson['rarity'] - - def illustration_id(self): - return self.scryfallJson['illustration_id'] - - def artist(self): - return self.scryfallJson['artist'] - - def frame(self): - return self.scryfallJson['frame'] - - def full_art(self): - return self.scryfallJson['full_art'] - - def border_color(self): - return self.scryfallJson['border_color'] - - def timeshifted(self): - return self.scryfallJson['timeshifted'] - - def colorshifted(self): - return self.scryfallJson['colorshifted'] - - def futureshifted(self): - return self.scryfallJson['futureshifted'] - - def edhrec_rank(self): - return self.scryfallJson['edhrec_rank'] - - def tix(self): - return self.scryfallJson['tix'] - - def related_uris(self): - return self.scryfallJson['related_uris'] - - def purchase_uris(self): - return self.scryfallJson['purchase_uris'] + def __init__(self, **kwargs): + self.multiverseid = kwargs.get('id') + self.url = 'cards/multiverse/' + self.multiverseid + super(Multiverse, self).__init__(self.url) diff --git a/cards/named.py b/cards/named.py index ee667c2..9df3d8a 100644 --- a/cards/named.py +++ b/cards/named.py @@ -1,222 +1,29 @@ -import aiohttp -import asyncio - - -class Named(object): - """ cards/named +from scryfall_object import ScryfallObject +import urllib.parse +class Named(ScryfallObject): + """ Parameters: exact: str The exact card name to search for, case insenstive. fuzzy: str A fuzzy card name to search for. set: str A set code to limit the search to one set. - format: str The data format to return: json, text, or image. Defaults to json. - face: str If using the image format and this parameter has the value back, - the back face of the card will be returned. - Will return a 404 if this card has no back face. - version: str The image version to return when using the image - format: small, normal, large, png, art_crop, or border_crop. Defaults to large. - pretty: bool If true, the returned JSON will be prettified. Avoid using for production code. - - Attributes: - object: str Returns the type of object it is. (card, error, etc) - id: str The scryfall id of the card. - multiverse_ids: arr The associated multiverse ids of the card. - mtgo_id: int The Magic Online id of the card. - mtgo_foil_id: int The Magic Online foil id of the card. - name: str The full name of the card. Cards with multiple faces are named with '//' as a seperator. - uri: str The Scryfall API uri for the card. - scryfall_uri: str The full Scryfall page of the card. - layout: str The image layout of the card. (normal, transform, etc) - highres_image: bool Returns True if the card has a high res image. - card_image_uris: dict All image uris of the card in various qualities. - cmc: float A float of the converted mana cost of the card. - type_line: str The full type line of the card. - oracle_text: str The official oracle text of a card. - mana_cost: str The full mana cost using shorthanded mana symbols. - colors: arr An array of strings with all colors found in the mana cost. - color_identity: arr An array of strings with all colors found on the card itself. - legalities: dict A dictionary of all formats and their legality. - reserved: bool Returns True if the card is on the reserved list. - reprint: bool Returns True if the card has been reprinted before. - set: str The 3 letter code for the set of the card. - set_name: str The full name for the set of the card. - set_uri: str The API uri for the full set list of the card. - set_search_uri: str Same output as set_uri. - scryfall_set_uri: str The full link to the set on Scryfall. - rulings_uri: str The API uri for the rulings of the card. - prints_search_uri: str TODO: Figure out what this does. - collector_number: str The collector number of the card. - digital: bool Returns True if the card is the digital version. - rarity: str The rarity of the card. - illustration_id: str The related id of the card art. - artist: str The artist of the card. - frame: str The year of the card frame. - full_art: bool Returns True if the card is considered full art. - border_color: str The color of the card border. - timeshifted: bool Returns True if the card is timeshifted. - colorshifted: bool Returns True if the card is colorshifted. - futureshifted: bool Returns True if the card is futureshifted. - edhrec_rank: int The rank of the card on edhrec.com - tix: int The MTGO price of the card - related_uris: dict A dictionary of related websites for this card. - purchase_uris: dict A dictionary of links to purchase the card. """ - def __init__(self, exact=None, fuzzy=None, _set=None, _format=None, face=None, version=None, pretty=None): - self.exact = exact - self.fuzzy = fuzzy - self.set = _set - self.format = _format - self.face = face - self.version = version - self.pretty = pretty - loop = asyncio.get_event_loop() - self.session = aiohttp.ClientSession(loop=loop) + def __init__(self, **kwargs): + self.exact = kwargs.get('exact') + self.fuzzy = kwargs.get('fuzzy') + self.set = kwargs.get('set') + self.dict = {} - async def getRequest(url, **kwargs): - async with self.session.get(url, **kwargs) as response: - return await response.json() + if self.exact is not None: + self.dict['exact'] = self.exact - self.scryfallJson = loop.run_until_complete(getRequest( - url='https://api.scryfall.com/cards/named?', - params={ - 'exact': self.exact, - 'fuzzy': self.fuzzy, - 'set': self.set, - 'format': self.format, - 'face': self.face, - 'version': self.version, - 'pretty': self.pretty - })) + if self.fuzzy is not None: + self.dict['fuzzy'] = self.fuzzy - if self.scryfallJson['object'] == 'error': - self.session.close() - raise Exception(self.scryfallJson['details']) + if self.set is not None: + self.dict['set'] = self.set - self.session.close() - - def object(self): - return self.scryfallJson['object'] - - def id(self): - return self.scryfallJson['id'] - - def multiverse_ids(self): - return self.scryfallJson['multiverse_ids'] - - def mtgo_id(self): - return self.scryfallJson['mtgo_id'] - - def mtgo_foil_id(self): - return self.scryfallJson['mtgo_foil_id'] - - def name(self): - return self.scryfallJson['name'] - - def uri(self): - return self.scryfallJson['uri'] - - def scryfall_uri(self): - return self.scryfallJson['scryfall_uri'] - - def layout(self): - return self.scryfallJson['layout'] - - def highres_image(self): - return self.scryfallJson['highres_image'] - - def image_uris(self): - return self.scryfallJson['image_uris'] - - def cmc(self): - return self.scryfallJson['cmc'] - - def type_line(self): - return self.scryfallJson['type_line'] - - def oracle_text(self): - return self.scryfallJson['oracle_text'] - - def mana_cost(self): - return self.scryfallJson['mana_cost'] - - def colors(self): - return self.scryfallJson['colors'] - - def color_identity(self): - return self.scryfallJson['color_identity'] - - def legalities(self): - return self.scryfallJson['legalities'] - - def reserved(self): - return self.scryfallJson['reserved'] - - def reprint(self): - return self.scryfallJson['reprint'] - - def set(self): - return self.scryfallJson['set'] - - def set_name(self): - return self.scryfallJson['set_name'] - - def set_uri(self): - return self.scryfallJson['set_uri'] - - def set_search_uri(self): - return self.scryfallJson['set_search_uri'] - - def scryfall_set_uri(self): - return self.scryfallJson['scryfall_set_uri'] - - def rulings_uri(self): - return self.scryfallJson['rulings_uri'] - - def prints_search_uri(self): - return self.scryfallJson['prints_search_uri'] - - def collector_number(self): - return self.scryfallJson['collector_number'] - - def digital(self): - return self.scryfallJson['digital'] - - def rarity(self): - return self.scryfallJson['rarity'] - - def illustration_id(self): - return self.scryfallJson['illustration_id'] - - def artist(self): - return self.scryfallJson['artist'] - - def frame(self): - return self.scryfallJson['frame'] - - def full_art(self): - return self.scryfallJson['full_art'] - - def border_color(self): - return self.scryfallJson['border_color'] - - def timeshifted(self): - return self.scryfallJson['timeshifted'] - - def colorshifted(self): - return self.scryfallJson['colorshifted'] - - def futureshifted(self): - return self.scryfallJson['futureshifted'] - - def edhrec_rank(self): - return self.scryfallJson['edhrec_rank'] - - def tix(self): - return self.scryfallJson['tix'] - - def related_uris(self): - return self.scryfallJson['related_uris'] - - def purchase_uris(self): - return self.scryfallJson['purchase_uris'] + self.args = urllib.parse.urlencode(self.dict) + self.url = 'cards/named?' + self.args + super(Named, self).__init__(self.url) diff --git a/cards/randomcard.py b/cards/randomcard.py index e9bcad8..68737e9 100644 --- a/cards/randomcard.py +++ b/cards/randomcard.py @@ -1,216 +1,8 @@ -import aiohttp -import asyncio +from scryfall_object import ScryfallObject -class RandomCard(object): - """ cards/random - - Parameters: - format: str The data format to return: json, text, or image. Defaults to json. - face: str If using the image format and this parameter has the value back, - the back face of the card will be returned. - Will return a 404 if this card has no back face. - version: str The image version to return when using the image - format: small, normal, large, png, art_crop, or border_crop. Defaults to large. - pretty: bool If true, the returned JSON will be prettified. Avoid using for production code. - - Attributes: - object: str Returns the type of object it is. (card, error, etc) - id: str The scryfall id of the card. - multiverse_ids: arr The associated multiverse ids of the card. - mtgo_id: int The Magic Online id of the card. - mtgo_foil_id: int The Magic Online foil id of the card. - name: str The full name of the card. Cards with multiple faces are named with '//' as a seperator. - uri: str The Scryfall API uri for the card. - scryfall_uri: str The full Scryfall page of the card. - layout: str The image layout of the card. (normal, transform, etc) - highres_image: bool Returns True if the card has a high res image. - card.image_uris: dict All image uris of the card in various qualities. - cmc: float A float of the converted mana cost of the card. - type_line: str The full type line of the card. - oracle_text: str The official oracle text of a card. - mana_cost: str The full mana cost using shorthanded mana symbols. - colors: arr An array of strings with all colors found in the mana cost. - color_identity: arr An array of strings with all colors found in on the card itself. - legalities: dict A dictionary of all formats and their legality. - reserved: bool Returns True if the card is on the reserved list. - reprint: bool Returns True if the card has been reprinted before. - set: str The 3 letter code for the set of the card. - set_name: str The full name for the set of the card. - set_uri: str The API uri for the full set list of the card. - set_search_uri: str Same output as set_uri. - scryfall_set_uri: str The full link to the set on Scryfall. - rulings_uri: str The API uri for the rulings of the card. - prints_search_uri: str TODO: Figure out what this does. - collector_number: str The collector number of the card. - digital: bool Returns True if the card is the digital version. - rarity: str The rarity of the card. - illustration_id: str The related id of the card art. - artist: str The artist of the card. - frame: str The year of the card frame. - full_art: bool Returns True if the card is considered full art. - border_color: str The color of the card border. - timeshifted: bool Returns True if the card is timeshifted. - colorshifted: bool Returns True if the card is colorshifted. - futureshifted: bool Returns True if the card is futureshifted. - edhrec_rank: int The rank of the card on edhrec.com - currency: str The various currencies of the card. Modes are usd, eur, tix. - related_uris: dict A dictionary of related websites for this card. - purchase_uris: dict A dictionary of links to purchase the card. - """ - - def __init__(self, **kwargs): - self.format = kwargs.get('format') - self.face = kwargs.get('face') - self.version = kwargs.get('version') - self.pretty = kwargs.get('pretty') - loop = asyncio.get_event_loop() - self.session = aiohttp.ClientSession(loop=loop) - - async def getRequest(url, **kwargs): - async with self.session.get(url, **kwargs) as response: - return await response.json() - - self.scryfallJson = loop.run_until_complete(getRequest( - url='https://api.scryfall.com/cards/random?', - params={ - 'format': self.format, - 'face': self.face, - 'version': self.version, - 'pretty': self.pretty - })) - - if self.scryfallJson['object'] == 'error': - raise Exception(self.scryfallJson['details']) - self.session.close() - - self.session.close() - - def object(self): - return self.scryfallJson['object'] - - def id(self): - return self.scryfallJson['id'] - - def multiverse_ids(self): - return self.scryfallJson['multiverse_ids'] - - def mtgo_id(self): - return self.scryfallJson['mtgo_id'] - - def mtgo_foil_id(self): - return self.scryfallJson['mtgo_foil_id'] - - def name(self): - return self.scryfallJson['name'] - - def uri(self): - return self.scryfallJson['uri'] - - def scryfall_uri(self): - return self.scryfallJson['scryfall_uri'] - - def layout(self): - return self.scryfallJson['layout'] - - def highres_image(self): - return self.scryfallJson['highres_image'] - - def image_uris(self): - return self.scryfallJson['image_uris'] - - def cmc(self): - return self.scryfallJson['cmc'] - - def type_line(self): - return self.scryfallJson['type_line'] - - def oracle_text(self): - return self.scryfallJson['oracle_text'] - - def mana_cost(self): - return self.scryfallJson['mana_cost'] - - def colors(self): - return self.scryfallJson['colors'] - - def color_identity(self): - return self.scryfallJson['color_identity'] - - def legalities(self): - return self.scryfallJson['legalities'] - - def reserved(self): - return self.scryfallJson['reserved'] - - def reprint(self): - return self.scryfallJson['reprint'] - - def set(self): - return self.scryfallJson['set'] - - def set_name(self): - return self.scryfallJson['set_name'] - - def set_uri(self): - return self.scryfallJson['set_uri'] - - def set_search_uri(self): - return self.scryfallJson['set_search_uri'] - - def scryfall_set_uri(self): - return self.scryfallJson['scryfall_set_uri'] - - def rulings_uri(self): - return self.scryfallJson['rulings_uri'] - - def prints_search_uri(self): - return self.scryfallJson['prints_search_uri'] - - def collector_number(self): - return self.scryfallJson['collector_number'] - - def digital(self): - return self.scryfallJson['digital'] - - def rarity(self): - return self.scryfallJson['rarity'] - - def illustration_id(self): - return self.scryfallJson['illustration_id'] - - def artist(self): - return self.scryfallJson['artist'] - - def frame(self): - return self.scryfallJson['frame'] - - def full_art(self): - return self.scryfallJson['full_art'] - - def border_color(self): - return self.scryfallJson['border_color'] - - def timeshifted(self): - return self.scryfallJson['timeshifted'] - - def colorshifted(self): - return self.scryfallJson['colorshifted'] - - def futureshifted(self): - return self.scryfallJson['futureshifted'] - - def edhrec_rank(self): - return self.scryfallJson['edhrec_rank'] - - def currency(self, mode): - modes = ['usd', 'eur', 'tix'] - if mode not in modes: - return KeyError("That currency is not available.") - return self.scryfallJson[mode] - - def related_uris(self): - return self.scryfallJson['related_uris'] - - def purchase_uris(self): - return self.scryfallJson['purchase_uris'] +class RandomCard(ScryfallObject): + """This will return a random card. No parameters are passed while creating.""" + def __init__(self): + self.url = 'cards/random' + super(RandomCard, self).__init__(self.url) diff --git a/cards/scryfall_object.py b/cards/scryfall_object.py index d9beab5..45db750 100644 --- a/cards/scryfall_object.py +++ b/cards/scryfall_object.py @@ -3,12 +3,62 @@ import asyncio class ScryfallObject(object): - """docstring for ScryfallObject.""" - def __init__(self, **kwargs): - self.format = kwargs.get('format') - self.face = kwargs.get('face') - self.version = kwargs.get('version') - self.pretty = kwargs.get('pretty') + """ + Parameters: + format: str The data format to return: json, text, or image. Defaults to json. + face: str If using the image format and this parameter has the value back, + the back face of the card will be returned. + Will return a 404 if this card has no back face. + version: str The image version to return when using the image + format: small, normal, large, png, art_crop, or border_crop. Defaults to large. + pretty: bool If true, the returned JSON will be prettified. Avoid using for production code. + + Attributes: + object: str Returns the type of object it is. (card, error, etc) + id: str The scryfall id of the card. + multiverse_ids: arr The associated multiverse ids of the card. + mtgo_id: int The Magic Online id of the card. + mtgo_foil_id: int The Magic Online foil id of the card. + name: str The full name of the card. Cards with multiple faces are named with '//' as a seperator. + uri: str The Scryfall API uri for the card. + scryfall_uri: str The full Scryfall page of the card. + layout: str The image layout of the card. (normal, transform, etc) + highres_image: bool Returns True if the card has a high res image. + card_image_uris: dict All image uris of the card in various qualities. + cmc: float A float of the converted mana cost of the card. + type_line: str The full type line of the card. + oracle_text: str The official oracle text of a card. + mana_cost: str The full mana cost using shorthanded mana symbols. + colors: arr An array of strings with all colors found in the mana cost. + color_identity: arr An array of strings with all colors found on the card itself. + legalities: dict A dictionary of all formats and their legality. + reserved: bool Returns True if the card is on the reserved list. + reprint: bool Returns True if the card has been reprinted before. + set: str The 3 letter code for the set of the card. + set_name: str The full name for the set of the card. + set_uri: str The API uri for the full set list of the card. + set_search_uri: str Same output as set_uri. + scryfall_set_uri: str The full link to the set on Scryfall. + rulings_uri: str The API uri for the rulings of the card. + prints_search_uri: str TODO: Figure out what this does. + collector_number: str The collector number of the card. + digital: bool Returns True if the card is the digital version. + rarity: str The rarity of the card. + illustration_id: str The related id of the card art. + artist: str The artist of the card. + frame: str The year of the card frame. + full_art: bool Returns True if the card is considered full art. + border_color: str The color of the card border. + timeshifted: bool Returns True if the card is timeshifted. + colorshifted: bool Returns True if the card is colorshifted. + futureshifted: bool Returns True if the card is futureshifted. + edhrec_rank: int The rank of the card on edhrec.com + tix: int The MTGO price of the card + related_uris: dict A dictionary of related websites for this card. + purchase_uris: dict A dictionary of links to purchase the card. + """ + def __init__(self, _url, **kwargs): + self._url = 'https://api.scryfall.com/' + _url loop = asyncio.get_event_loop() self.session = aiohttp.ClientSession(loop=loop) @@ -16,6 +66,21 @@ class ScryfallObject(object): async with self.session.get(url, **kwargs) as response: return await response.json() + self.scryfallJson = loop.run_until_complete(getRequest( + url = self._url, + params={ + 'format': kwargs.get('format'), + 'face': kwargs.get('face'), + 'version': kwargs.get('version'), + 'pretty': kwargs.get('pretty') + })) + + if self.scryfallJson['object'] == 'error': + self.session.close() + raise Exception(self.scryfallJson['details']) + + self.session.close() + def object(self): return self.scryfallJson['object']