Add MTG API SDK to project
This commit is contained in:
20
mtg-collector/mtgsdk/__init__.py
Normal file
20
mtg-collector/mtgsdk/__init__.py
Normal file
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# This file is part of mtgsdk.
|
||||
# https://github.com/MagicTheGathering/mtg-sdk-python
|
||||
|
||||
# Licensed under the MIT license:
|
||||
# http://www.opensource.org/licenses/MIT-license
|
||||
# Copyright (c) 2016, Andrew Backes <backes.andrew@gmail.com>
|
||||
|
||||
from mtgsdk.config import __version__, __pypi_packagename__, __github_username__, __github_reponame__, __endpoint__
|
||||
from mtgsdk.card import Card
|
||||
from mtgsdk.set import Set
|
||||
from mtgsdk.supertype import Supertype
|
||||
from mtgsdk.subtype import Subtype
|
||||
from mtgsdk.type import Type
|
||||
from mtgsdk.changelog import Changelog
|
||||
from mtgsdk.restclient import RestClient
|
||||
from mtgsdk.restclient import MtgException
|
||||
from mtgsdk.querybuilder import QueryBuilder
|
||||
67
mtg-collector/mtgsdk/card.py
Normal file
67
mtg-collector/mtgsdk/card.py
Normal file
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# This file is part of mtgsdk.
|
||||
# https://github.com/MagicTheGathering/mtg-sdk-python
|
||||
|
||||
# Licensed under the MIT license:
|
||||
# http://www.opensource.org/licenses/MIT-license
|
||||
# Copyright (c) 2016, Andrew Backes <backes.andrew@gmail.com>
|
||||
|
||||
from mtgsdk.querybuilder import QueryBuilder
|
||||
|
||||
|
||||
class Card(object):
|
||||
RESOURCE = 'cards'
|
||||
|
||||
def __init__(self, response_dict={}):
|
||||
self.name = response_dict.get('name')
|
||||
self.layout = response_dict.get('layout')
|
||||
self.mana_cost = response_dict.get('manaCost')
|
||||
self.cmc = response_dict.get('cmc')
|
||||
self.colors = response_dict.get('colors')
|
||||
self.names = response_dict.get('names')
|
||||
self.type = response_dict.get('type')
|
||||
self.supertypes = response_dict.get('supertypes')
|
||||
self.subtypes = response_dict.get('subtypes')
|
||||
self.types = response_dict.get('types')
|
||||
self.rarity = response_dict.get('rarity')
|
||||
self.text = response_dict.get('text')
|
||||
self.flavor = response_dict.get('flavor')
|
||||
self.artist = response_dict.get('artist')
|
||||
self.number = response_dict.get('number')
|
||||
self.power = response_dict.get('power')
|
||||
self.toughness = response_dict.get('toughness')
|
||||
self.loyalty = response_dict.get('loyalty')
|
||||
self.multiverse_id = response_dict.get('multiverseid')
|
||||
self.variations = response_dict.get('variations')
|
||||
self.watermark = response_dict.get('watermark')
|
||||
self.border = response_dict.get('border')
|
||||
self.timeshifted = response_dict.get('timeshifted')
|
||||
self.hand = response_dict.get('hand')
|
||||
self.life = response_dict.get('life')
|
||||
self.release_date = response_dict.get('releaseDate')
|
||||
self.starter = response_dict.get('starter')
|
||||
self.printings = response_dict.get('printings')
|
||||
self.original_text = response_dict.get('originalText')
|
||||
self.original_type = response_dict.get('originalType')
|
||||
self.source = response_dict.get('source')
|
||||
self.image_url = response_dict.get('imageUrl')
|
||||
self.set = response_dict.get('set')
|
||||
self.set_name = response_dict.get('setName')
|
||||
self.id = response_dict.get('id')
|
||||
self.legalities = response_dict.get('legalities')
|
||||
self.rulings = response_dict.get('rulings')
|
||||
self.foreign_names = response_dict.get('foreignNames')
|
||||
|
||||
@staticmethod
|
||||
def find(id):
|
||||
return QueryBuilder(Card).find(id)
|
||||
|
||||
@staticmethod
|
||||
def where(**kwargs):
|
||||
return QueryBuilder(Card).where(**kwargs)
|
||||
|
||||
@staticmethod
|
||||
def all():
|
||||
return QueryBuilder(Card).all()
|
||||
25
mtg-collector/mtgsdk/changelog.py
Normal file
25
mtg-collector/mtgsdk/changelog.py
Normal file
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# This file is part of mtgsdk.
|
||||
# https://github.com/MagicTheGathering/mtg-sdk-python
|
||||
|
||||
# Licensed under the MIT license:
|
||||
# http://www.opensource.org/licenses/MIT-license
|
||||
# Copyright (c) 2016, Andrew Backes <backes.andrew@gmail.com>
|
||||
|
||||
from mtgsdk.querybuilder import QueryBuilder
|
||||
|
||||
|
||||
class Changelog(object):
|
||||
RESOURCE = 'changelogs'
|
||||
|
||||
def __init__(self, response_dict={}):
|
||||
self.id = response_dict.get('id')
|
||||
self.version = response_dict.get('version')
|
||||
self.details = response_dict.get('details')
|
||||
self.release_date = response_dict.get('releaseDate')
|
||||
|
||||
@staticmethod
|
||||
def all():
|
||||
return QueryBuilder(Changelog).all()
|
||||
15
mtg-collector/mtgsdk/config.py
Normal file
15
mtg-collector/mtgsdk/config.py
Normal file
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# This file is part of mtgsdk.
|
||||
# https://github.com/MagicTheGathering/mtg-sdk-python
|
||||
|
||||
# Licensed under the MIT license:
|
||||
# http://www.opensource.org/licenses/MIT-license
|
||||
# Copyright (c) 2016, Andrew Backes <backes.andrew@gmail.com>
|
||||
|
||||
__version__ = "1.2.0"
|
||||
__pypi_packagename__ = "mtgsdk"
|
||||
__github_username__ = "MagicTheGathering"
|
||||
__github_reponame__ = "mtg-sdk-python"
|
||||
__endpoint__ = "https://api.magicthegathering.io/v1"
|
||||
100
mtg-collector/mtgsdk/querybuilder.py
Normal file
100
mtg-collector/mtgsdk/querybuilder.py
Normal file
@@ -0,0 +1,100 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# This file is part of mtgsdk.
|
||||
# https://github.com/MagicTheGathering/mtg-sdk-python
|
||||
|
||||
# Licensed under the MIT license:
|
||||
# http://www.opensource.org/licenses/MIT-license
|
||||
# Copyright (c) 2016, Andrew Backes <backes.andrew@gmail.com>
|
||||
from mtgsdk.restclient import RestClient
|
||||
from mtgsdk.config import __endpoint__
|
||||
|
||||
|
||||
class QueryBuilder(object):
|
||||
def __init__(self, type):
|
||||
self.params = {}
|
||||
self.type = type
|
||||
|
||||
def find(self, id):
|
||||
"""Get a resource by its id
|
||||
|
||||
Args:
|
||||
id (string): Resource id
|
||||
Returns:
|
||||
object: Instance of the resource type
|
||||
"""
|
||||
url = "{}/{}/{}".format(__endpoint__, self.type.RESOURCE, id)
|
||||
response = RestClient.get(url)[self.type.RESOURCE[:-1]]
|
||||
return self.type(response)
|
||||
|
||||
def find_many(self, url, type, resource):
|
||||
"""Get a list of resources
|
||||
|
||||
Args:
|
||||
url (string): URL to invoke
|
||||
type (class): Class type
|
||||
resource (string): The REST Resource
|
||||
Returns:
|
||||
list of object: List of resource instances
|
||||
"""
|
||||
list = []
|
||||
response = RestClient.get(url)[resource]
|
||||
if len(response) > 0:
|
||||
for item in response:
|
||||
list.append(type(item))
|
||||
|
||||
return list
|
||||
|
||||
def where(self, **kwargs):
|
||||
"""Adds a parameter to the dictionary of query parameters
|
||||
|
||||
Args:
|
||||
**kwargs: Arbitrary keyword arguments.
|
||||
Returns:
|
||||
QueryBuilder: Instance of the QueryBuilder
|
||||
"""
|
||||
for key, value in kwargs.items():
|
||||
self.params[key] = value
|
||||
|
||||
return self
|
||||
|
||||
def all(self):
|
||||
"""Get all resources, automatically paging through data
|
||||
|
||||
Returns:
|
||||
list of object: List of resource objects
|
||||
"""
|
||||
list = []
|
||||
page = 1
|
||||
fetch_all = True
|
||||
url = "{}/{}".format(__endpoint__, self.type.RESOURCE)
|
||||
|
||||
if 'page' in self.params:
|
||||
page = self.params['page']
|
||||
fetch_all = False
|
||||
|
||||
while True:
|
||||
response = RestClient.get(url, self.params)[self.type.RESOURCE]
|
||||
if len(response) > 0:
|
||||
for item in response:
|
||||
list.append(self.type(item))
|
||||
|
||||
if not fetch_all:
|
||||
break
|
||||
else:
|
||||
page += 1
|
||||
self.where(page=page)
|
||||
else:
|
||||
break
|
||||
|
||||
return list
|
||||
|
||||
def array(self):
|
||||
"""Get all resources and return the result as an array
|
||||
|
||||
Returns:
|
||||
array of str: Array of resources
|
||||
"""
|
||||
url = "{}/{}".format(__endpoint__, self.type.RESOURCE)
|
||||
return RestClient.get(url, self.params)[self.type.RESOURCE]
|
||||
47
mtg-collector/mtgsdk/restclient.py
Normal file
47
mtg-collector/mtgsdk/restclient.py
Normal file
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# This file is part of mtgsdk.
|
||||
# https://github.com/MagicTheGathering/mtg-sdk-python
|
||||
|
||||
# Licensed under the MIT license:
|
||||
# http://www.opensource.org/licenses/MIT-license
|
||||
# Copyright (c) 2016, Andrew Backes <backes.andrew@gmail.com>
|
||||
|
||||
import json
|
||||
from urllib.request import Request, urlopen
|
||||
from urllib.error import HTTPError
|
||||
from urllib.parse import urlencode
|
||||
|
||||
|
||||
class RestClient(object):
|
||||
@staticmethod
|
||||
def get(url, params={}):
|
||||
"""Invoke an HTTP GET request on a url
|
||||
|
||||
Args:
|
||||
url (string): URL endpoint to request
|
||||
params (dict): Dictionary of url parameters
|
||||
Returns:
|
||||
dict: JSON response as a dictionary
|
||||
"""
|
||||
request_url = url
|
||||
|
||||
if len(params) > 0:
|
||||
request_url = "{}?{}".format(url, urlencode(params))
|
||||
|
||||
try:
|
||||
req = Request(request_url, headers={'User-Agent': 'Mozilla/5.0'})
|
||||
response = json.loads(urlopen(req).read().decode("utf-8"))
|
||||
|
||||
return response
|
||||
except HTTPError as err:
|
||||
raise MtgException(err.read())
|
||||
|
||||
|
||||
class MtgException(Exception):
|
||||
def __init__(self, description):
|
||||
self.description = description
|
||||
|
||||
def __str__(self):
|
||||
return self.description
|
||||
49
mtg-collector/mtgsdk/set.py
Normal file
49
mtg-collector/mtgsdk/set.py
Normal file
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# This file is part of mtgsdk.
|
||||
# https://github.com/MagicTheGathering/mtg-sdk-python
|
||||
|
||||
# Licensed under the MIT license:
|
||||
# http://www.opensource.org/licenses/MIT-license
|
||||
# Copyright (c) 2016, Andrew Backes <backes.andrew@gmail.com>
|
||||
|
||||
from mtgsdk.querybuilder import QueryBuilder
|
||||
from mtgsdk.config import __endpoint__
|
||||
from mtgsdk.card import Card
|
||||
|
||||
|
||||
class Set(object):
|
||||
RESOURCE = 'sets'
|
||||
|
||||
def __init__(self, response_dict={}):
|
||||
self.code = response_dict.get('code')
|
||||
self.name = response_dict.get('name')
|
||||
self.type = response_dict.get('type')
|
||||
self.border = response_dict.get('border')
|
||||
self.mkm_id = response_dict.get('mkm_id')
|
||||
self.mkm_name = response_dict.get('mkm_name')
|
||||
self.release_date = response_dict.get('releaseDate')
|
||||
self.gatherer_code = response_dict.get('gathererCode')
|
||||
self.magic_cards_info_code = response_dict.get('magicCardsInfoCode')
|
||||
self.booster = response_dict.get('booster')
|
||||
self.old_code = response_dict.get('oldCode')
|
||||
self.block = response_dict.get('block')
|
||||
self.online_only = response_dict.get('onlineOnly')
|
||||
|
||||
@staticmethod
|
||||
def find(id):
|
||||
return QueryBuilder(Set).find(id)
|
||||
|
||||
@staticmethod
|
||||
def where(**kwargs):
|
||||
return QueryBuilder(Set).where(**kwargs)
|
||||
|
||||
@staticmethod
|
||||
def all():
|
||||
return QueryBuilder(Set).all()
|
||||
|
||||
@staticmethod
|
||||
def generate_booster(code):
|
||||
url = "{}/{}/{}/booster".format(__endpoint__, Set.RESOURCE, code)
|
||||
return QueryBuilder(Set).find_many(url, Card, Card.RESOURCE)
|
||||
19
mtg-collector/mtgsdk/subtype.py
Normal file
19
mtg-collector/mtgsdk/subtype.py
Normal file
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# This file is part of mtgsdk.
|
||||
# https://github.com/MagicTheGathering/mtg-sdk-python
|
||||
|
||||
# Licensed under the MIT license:
|
||||
# http://www.opensource.org/licenses/MIT-license
|
||||
# Copyright (c) 2016, Andrew Backes <backes.andrew@gmail.com>
|
||||
|
||||
from mtgsdk.querybuilder import QueryBuilder
|
||||
|
||||
|
||||
class Subtype(object):
|
||||
RESOURCE = 'subtypes'
|
||||
|
||||
@staticmethod
|
||||
def all():
|
||||
return QueryBuilder(Subtype).array()
|
||||
19
mtg-collector/mtgsdk/supertype.py
Normal file
19
mtg-collector/mtgsdk/supertype.py
Normal file
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# This file is part of mtgsdk.
|
||||
# https://github.com/MagicTheGathering/mtg-sdk-python
|
||||
|
||||
# Licensed under the MIT license:
|
||||
# http://www.opensource.org/licenses/MIT-license
|
||||
# Copyright (c) 2016, Andrew Backes <backes.andrew@gmail.com>
|
||||
|
||||
from mtgsdk.querybuilder import QueryBuilder
|
||||
|
||||
|
||||
class Supertype(object):
|
||||
RESOURCE = 'supertypes'
|
||||
|
||||
@staticmethod
|
||||
def all():
|
||||
return QueryBuilder(Supertype).array()
|
||||
19
mtg-collector/mtgsdk/type.py
Normal file
19
mtg-collector/mtgsdk/type.py
Normal file
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# This file is part of mtgsdk.
|
||||
# https://github.com/MagicTheGathering/mtg-sdk-python
|
||||
|
||||
# Licensed under the MIT license:
|
||||
# http://www.opensource.org/licenses/MIT-license
|
||||
# Copyright (c) 2016, Andrew Backes <backes.andrew@gmail.com>
|
||||
|
||||
from mtgsdk.querybuilder import QueryBuilder
|
||||
|
||||
|
||||
class Type(object):
|
||||
RESOURCE = 'types'
|
||||
|
||||
@staticmethod
|
||||
def all():
|
||||
return QueryBuilder(Type).array()
|
||||
Reference in New Issue
Block a user