__author__ = "Sam Nicholls <sn8@sanger.ac.uk>"
__copyright__ = "Copyright (c) Sam Nicholls"
__version__ = "0.1.2"
__maintainer__ = "Sam Nicholls <sam@samnicholls.net>"
[docs]class AbstractReader(object):
"""Wraps a file handler and provides controlled access to its contents."""
def __init__(self, filepath, CLASSES, auto_close, header):
"""Constructs the read only file handler."""
self.header = header
self.CLASSES = CLASSES
if not filepath:
raise IOError("You must specify a file.")
self.handler = open(filepath, 'r')
self.process_file()
if auto_close:
self.close()
def __iter__(self):
"""Reset the file pointer and return an iterable."""
self.handler.seek(0)
return self.handler
[docs] def close(self):
"""Close the file handler."""
#TODO Check file is not already closed...
self.handler.close()
[docs] def get_id(self):
"""Return record ID."""
raise NotImplementedError("get_id has not been implemented")
[docs] def get_data(self):
"""Return read data."""
raise NotImplementedError("get_data has not been implemented")
[docs] def process_line(self, line):
"""Process a record of the input file."""
raise NotImplementedError("process_line has not been implemented")
[docs] def process_file(self):
"""Calls process_line for each line in input file."""
# Skip Header
for i in range(0,self.header):
self.handler.readline()
for line in self.handler:
self.process_line(line.strip())