From bb48c4ca83fe3aa92e3209484f259f8d5d1ce92f Mon Sep 17 00:00:00 2001 From: Nanda Scott Date: Mon, 19 Feb 2018 12:20:05 -0500 Subject: [PATCH] Created symbology. --- scrython/__init__.py | 4 + scrython/symbology/__init__.py | 2 + scrython/symbology/parse_mana.py | 76 ++++++++++++++++ scrython/symbology/symbology.py | 117 +++++++++++++++++++++++++ scrython/symbology/symbology_object.py | 84 ++++++++++++++++++ 5 files changed, 283 insertions(+) create mode 100644 scrython/symbology/__init__.py create mode 100644 scrython/symbology/parse_mana.py create mode 100644 scrython/symbology/symbology.py create mode 100644 scrython/symbology/symbology_object.py diff --git a/scrython/__init__.py b/scrython/__init__.py index d53fb2c..9ef8a66 100644 --- a/scrython/__init__.py +++ b/scrython/__init__.py @@ -30,3 +30,7 @@ from scrython.catalog import SpellTypes from scrython.catalog import Toughnesses from scrython.catalog import Watermarks from scrython.catalog import WordBank + +#Import symbology +from scrython.symbology import ParseMana +from scrython.symbology import Symbology diff --git a/scrython/symbology/__init__.py b/scrython/symbology/__init__.py new file mode 100644 index 0000000..7c40d61 --- /dev/null +++ b/scrython/symbology/__init__.py @@ -0,0 +1,2 @@ +from .parse_mana import ParseMana +from .symbology import Symbology diff --git a/scrython/symbology/parse_mana.py b/scrython/symbology/parse_mana.py new file mode 100644 index 0000000..ca437cc --- /dev/null +++ b/scrython/symbology/parse_mana.py @@ -0,0 +1,76 @@ +from .symbology_object import SymbologyObject + +class ParseMana(SymbologyObject): + def __init__(self, **kwargs): + self.cost = kwargs.get('cost') + self.url = 'symbology/parse-mana?cost=' + self.cost + super(ParseMana, self).__init__(self.url) + + def __checkForKey(self, key): + try: + return self.scryfallJson[key] + except KeyError: + return None + + def object(self): + if self.__checkForKey('object') is None: + raise KeyError('This object has no key \'object\'') + + return self.scryfallJson['object'] + + def mana_cost(self): + if self.__checkForKey('cost') is None: + raise KeyError('This object has no key \'cost\'') + + return self.scryfallJson['cost'] + + def cmc(self): + if self.__checkForKey('cmc') is None: + raise KeyError('This object has no key \'cmc\'') + + return self.scryfallJson['cmc'] + + def colors(self): + if self.__checkForKey('colors') is None: + raise KeyError('This object has no key \'colors\'') + + return self.scryfallJson['colors'] + + def colorless(self): + if self.__checkForKey('colorless') is None: + raise KeyError('This object has no key \'colorless\'') + + return self.scryfallJson['colorless'] + + def monocolored(self): + if self.__checkForKey('monocolored') is None: + raise KeyError('This object has no key \'monocolored\'') + + return self.scryfallJson['monocolored'] + + def multicolored(self): + if self.__checkForKey('multicolored') is None: + raise KeyError('This object has no key \'multicolored\'') + + return self.scryfallJson['multicolored'] + + #The following attributes are only to override the inherited class attributes. + #This class has no matching attributes but we still need the getRequest from SymbologyObject + + def appears_in_mana_costs(self): + raise AttributeError('This object has no attribute \'appears_in_mana_costs\'') + + def funny(self): + raise AttributeError('This object has no attribute \'funny\'') + + def loose_variant(self): + raise AttributeError('This object has no attribute \'loose_variant\'') + + def represents_mana(self): + raise AttributeError('This object has no attribute \'represents_mana\'') + + def symbol(self): + raise AttributeError('This object has no attribute \'symbol\'') + + def transposable(self): + raise AttributeError('This object has no attribute \'transposable\'') diff --git a/scrython/symbology/symbology.py b/scrython/symbology/symbology.py new file mode 100644 index 0000000..3f128bb --- /dev/null +++ b/scrython/symbology/symbology.py @@ -0,0 +1,117 @@ +from .symbology_object import SymbologyObject + +class Symbology(SymbologyObject): + def __init__(self): + self.url = 'symbology?' + super(Symbology, self).__init__(self.url) + + def __checkForKey(self, key): + try: + return self.scryfallJson[key] + except KeyError: + return None + + def __checkForTupleKey(self, parent, num, key): + try: + return self.scryfallJson[parent][num][key] + except KeyError: + return None + + def object(self): + if self.__checkForKey('object') is None: + raise KeyError('This object has no key \'object\'') + + return self.scryfallJson['object'] + + def has_more(self): + if self.__checkForKey('has_more') is None: + raise KeyError('This object has no key \'has_more\'') + + return self.scryfallJson['has_more'] + + def data(self): + if self.__checkForKey('has_more') is None: + raise KeyError('This object has no key \'data\'') + + return self.scryfallJson['data'] + + def data_length(self): + if self.__checkForKey('data') is None: + return KeyError('This object has no key \'data\'') + + return len(self.scryfallJson['data']) + + def symbol_symbol(self, num): + if self.__checkForTupleKey('data', num, 'symbol') is None: + raise KeyError('This object has no key \'symbol\'') + + return self.scryfallJson['data'][num]['symbol'] + + def symbol_loose_variant(self, num): + if self.__checkForTupleKey('data', num, 'loose_variant') is None: + raise KeyError('This object has no key \'loose_variant\'') + + return self.scryfallJson['data'][num]['loose_variant'] + + def symbol_transposable(self, num): + if self.__checkForTupleKey('data', num, 'transposable') is None: + raise KeyError('This object has no key \'transposable\'') + + return self.scryfallJson['data'][num]['transposable'] + + def symbol_represents_mana(self, num): + if self.__checkForTupleKey('data', num, 'represents_mana') is None: + raise KeyError('This object has no key \'represents_mana\'') + + return self.scryfallJson['data'][num]['represents_mana'] + + def symbol_cmc(self, num): + if self.__checkForTupleKey('data', num, 'cmc') is None: + raise KeyError('This object has no key \'cmc\'') + + return self.scryfallJson['data'][num]['cmc'] + + def symbol_appears_in_mana_costs(self, num): + if self.__checkForTupleKey('data', num, 'appears_in_mana_costs') is None: + raise KeyError('This object has no key \'appears_in_mana_costs\'') + + return self.scryfallJson['data'][num]['appears_in_mana_costs'] + + def symbol_funny(self, num): + if self.__checkForTupleKey('data', num, 'funny') is None: + raise KeyError('This object has no key \'funny\'') + + return self.scryfallJson['data'][num]['funny'] + + def symbol_colors(self, num): + if self.__checkForTupleKey('data', num, 'colors') is None: + raise KeyError('This object has no key \'colors\'') + + return self.scryfallJson['data'][num]['colors'] + + #The following attributes are only to override the inherited class attributes. + #This class has no matching attributes but we still need the getRequest from SymbologyObject + + def symbol(self): + raise AttributeError('This object has no key \'symbol\'') + + def loose_variant(self): + raise AttributeError('This object has no key \'loose_variant\'') + + def transposable(self): + raise AttributeError('This object has no key \'transposable\'') + + def represents_mana(self): + raise AttributeError('This object has no key \'represents_mana\'') + + def cmc(self): + raise AttributeError('This object has no key \'cmc\'') + + def appears_in_mana_costs(self): + raise AttributeError('This object has no key \'appears_in_mana_costs\'') + + def funny(self): + raise AttributeError('This object has no key \'funny\'') + + def colors(self): + raise AttributeError('This object has no key \'colors\'') diff --git a/scrython/symbology/symbology_object.py b/scrython/symbology/symbology_object.py new file mode 100644 index 0000000..99aa7a6 --- /dev/null +++ b/scrython/symbology/symbology_object.py @@ -0,0 +1,84 @@ +import asyncio +import aiohttp +import urllib.parse + +class SymbologyObject(object): + def __init__(self, _url, **kwargs): + self.params = {'format': kwargs.get('format', 'json'), 'pretty': kwargs.get('pretty', '')} + + self.encodedParams = urllib.parse.urlencode(self.params) + self._url = 'https://api.scryfall.com/' + _url + "&" + self.encodedParams #Find a fix for this later + + async def getRequest(client, url, **kwargs): + async with client.get(url, **kwargs) as response: + return await response.json() + + async def main(loop): + async with aiohttp.ClientSession(loop=loop) as client: + self.scryfallJson = await getRequest(client, self._url) + + loop = asyncio.get_event_loop() + loop.run_until_complete(main(loop)) + + if self.scryfallJson['object'] == 'error': + raise Exception(self.scryfallJson['details']) + + def __checkForKey(self, key): + try: + return self.scryfallJson[key] + except KeyError: + return None + + def object(self): + if self.__checkForKey('object') is None: + raise KeyError('This object has no key \'object\'') + + return self.scryfallJson['object'] + + def symbol(self): + if self.__checkForKey('symbol') is None: + raise KeyError('This object has no key \'symbol\'') + + return self.scryfallJson['symbol'] + + def loose_variant(self): + if self.__checkForKey('loose_variant') is None: + raise KeyError('This object has no key \'loose_variant\'') + + return self.scryfallJson['loose_variant'] + + def transposable(self): + if self.__checkForKey('transposable') is None: + raise KeyError('This object has no key \'transposable\'') + + return self.scryfallJson['transposable'] + + def represents_mana(self): + if self.__checkForKey('represents_mana') is None: + raise KeyError('This object has no key \'represents_mana\'') + + return self.scryfallJson['represents_mana'] + + def cmc(self): + if self.__checkForKey('cmc') is None: + raise KeyError('This object has no key \'cmc\'') + + return self.scryfallJson['cmc'] + + def appears_in_mana_costs(self): + if self.__checkForKey('appears_in_mana_costs') is None: + raise KeyError('This object has no key \'appears_in_mana_costs\'') + + return self.scryfallJson['appears_in_mana_costs'] + + def funny(self): + if self.__checkForKey('funny') is None: + raise KeyError('This object has no key \'funny\'') + + return self.scryfallJson['funny'] + + def colors(self): + if self.__checkForKey('colors') is None: + raise KeyError('This object has no key \'colors\'') + + return self.scryfallJson['colors']