"""
    pyexcel.parser
    ~~~~~~~~~~~~~~~~~~~

    Extract tabular data from external file, stream or content

    :copyright: (c) 2015-2017 by Onni Software Ltd.
    :license: New BSD License
"""
import pyexcel.internal.garbagecollector as gc


class AbstractParser(object):
    """
    Parsing data from tabular data such as excel file
    """

    def __init__(self, file_type):
        self._file_type = file_type

    def parse_file(self, file_name, **keywords):
        """
        Parse data from a physical file
        """
        raise NotImplementedError("parse_file is not implemented")

    def parse_file_stream(self, file_stream, **keywords):
        """
        Parse data from a file stream
        """
        raise NotImplementedError("parse_file_stream is not implemented")

    def parse_file_content(self, file_content, **keywords):
        """
        Parse data from a given file content
        """
        raise NotImplementedError("parse_file_content is not implemented")

    def _free_me_up_later(self, reader):
        gc.append(reader)


class DbParser(AbstractParser):
    """
    Change interface for db parser
    """

    def parse_file(self, file_name, **keywords):
        raise Exception("parse_file is not supported")

    def parse_file_stream(self, file_stream, **keywords):
        return self.parse_db(file_stream, **keywords)

    def parse_file_content(self, file_content, **keywords):
        raise Exception("parse_file_content is not supported")

    def parse_db(self, argument, **keywords):
        """
        Parse data from database
        """
        raise NotImplementedError("parse_db is not implemented")
