Fixed indentation in lark and updated comments.
parent
c53b9d81f5
commit
e55e31d5bb
@ -1,62 +0,0 @@
|
||||
import xml.etree.ElementTree
|
||||
import hashdb
|
||||
|
||||
class DatImportError(Exception):
|
||||
'''This error is raised when a DAT import fails.'''
|
||||
|
||||
# TODO: l o g g i n g
|
||||
|
||||
# TODO: Consider using a context object to avoid keeping large XML trees in memory.
|
||||
class Dat:
|
||||
'''A Dat object processes DAT files into the data structures defined in hashdb. '''
|
||||
def __init__(self, filename):
|
||||
'''Open the given DAT file and gather metadata from it.'''
|
||||
|
||||
xml_tree = xml.etree.ElementTree.parse(filename)
|
||||
self._xml_root = xml_tree.getroot()
|
||||
|
||||
dat_header = self._xml_root.find('header')
|
||||
self.info = hashdb.DatInfo(name=dat_header.find('name').text,
|
||||
description=dat_header.find('description').text,
|
||||
platform=None,
|
||||
version=dat_header.find('version').text)
|
||||
|
||||
def set_platform(self, platform_info):
|
||||
'''
|
||||
Set a platform for this DAT file.
|
||||
DAT files don't include platform metadata, but are all platform-specific.
|
||||
'''
|
||||
new_info = hashdb.DatInfo(name=self.info.name,
|
||||
description=self.info.description,
|
||||
platform=platform_info.shortcode,
|
||||
version=self.info.version)
|
||||
self.info = new_info
|
||||
|
||||
def set_name(self, new_name):
|
||||
'''
|
||||
Override the DAT file's name.
|
||||
DAT files often have less-than-helpful names.
|
||||
'''
|
||||
new_info = hashdb.DatInfo(name=new_name,
|
||||
description=self.info.description,
|
||||
platform=self.info.platform,
|
||||
version=self.info.version)
|
||||
self.info = new_info
|
||||
|
||||
def read_all_hashes(self):
|
||||
'''Read every hash in the DAT file and return it as a large list of RomInfo tuples.'''
|
||||
if self.info.platform is None:
|
||||
raise DatImportError('DAT platform not set.')
|
||||
|
||||
rom_info_list = []
|
||||
all_rom_entries = self._xml_root.findall('.//rom')
|
||||
|
||||
for rom in all_rom_entries:
|
||||
rom_info = hashdb.RomInfo(sha1sum=rom.get('sha1'),
|
||||
filename=rom.get('name'),
|
||||
platform=self.info.platform,
|
||||
datorigin=self.info.name)
|
||||
|
||||
rom_info_list.append(rom_info)
|
||||
|
||||
return rom_info_list
|
||||
Loading…
Reference in New Issue