mtg/database.py

72 lines
2.8 KiB
Python
Raw Normal View History

2010-06-30 06:22:34 +00:00
import re
from mtg import *
class Database:
def getCard(name):
pass
""" Text file database class
Loads the card database files found at http://www.yawgatog.com/resources/oracle/
"""
class TextDB(Database):
def __init__(self, filename):
self.filename = filename
def getCard(self, name):
card = None
with open(self.filename, 'r') as f:
inRecord = False
recordName = False
for line in f:
line = line.strip()
if not inRecord:
recordName = line
inRecord = True
if recordName.lower() == name.lower():
card = {
'name': recordName,
'type': '',
'attributes': [],
'cost': '',
'power': 0,
2010-06-30 11:52:01 +00:00
'toughness': 0,
'rarity': None,
'text': [],
2010-06-30 06:22:34 +00:00
}
elif card and line:
# Load the data into the card
2010-06-30 11:52:01 +00:00
if not card['cost'] and re.match('^X?\d*[{0}]*$'.format(' '.join(Mana.types.keys())), line):
2010-06-30 06:22:34 +00:00
card['cost'] = line
continue
elif not card['type']:
2010-06-30 06:22:34 +00:00
attributes = line.split(' -- ')
type = attributes.pop(0)
card['type'] = type
card['attributes'] = attributes
elif not card['power'] and not card['toughness'] and re.match('^\d+([+-]?\*)?\/\d+([+-]?\*)?$', line):
2010-06-30 06:22:34 +00:00
(card['power'], card['toughness']) = line.split('/')
2010-07-02 04:28:12 +00:00
elif re.match('^([A-Z0-9]+-[{0}](, )?)+$'.format(''.join(Card.rarities.keys())), line):
info = line.split(', ')
card['sets'] = [i.split('-').pop(0) for i in info]
currentSet = info.pop()
2010-06-30 11:52:01 +00:00
card['rarity'] = currentSet.split('-').pop()
else:
# Ability text
card['text'].append(line)
2010-06-30 06:22:34 +00:00
elif not line:
# Finished with current record
if card:
# We're done here
break
else:
# Prepare to read in the next record
inRecord = False
if not card:
return None
2010-07-02 04:28:12 +00:00
return Card(card['name'], card['type'], card['attributes'], card['cost'], card['power'], card['toughness'], card['sets'], card['rarity'], card['text'])
2010-06-30 06:22:34 +00:00
if __name__ == '__main__':
db = TextDB('db.txt')
c = db.getCard('Aura Gnarlid')
2010-06-30 11:52:01 +00:00
print c