Source code for gaiaxpy.input_reader.input_reader
import pandas as pd
from os import path
from .dataframe_reader import DataFrameReader
from .file_reader import FileReader
from .list_reader import ListReader
from .query_reader import QueryReader
default_extension = 'csv'
[docs]class InputReader(object):
def __init__(self, content, function, user=None, password=None):
self.content = content
self.function = function
self.user = user
self.password = password
def _string_reader(self):
content = self.content
function = self.function
user = self.user
password = self.password
# Check whether content is path
if path.isfile(content) or path.isabs(content):
selector = FileReader(function)
parser = selector._select() # Select type of parser required
parsed_input_data, extension = parser.parse(content)
# Query should start with select
elif content.lower().startswith('select'):
parsed_input_data, extension = QueryReader(content, function, user, password)._read()
else:
raise ValueError('Input string does not correspond to an existing file and it is not an ADQL query.')
return parsed_input_data, extension
def _read(self):
content = self.content
function = self.function
user = self.user
password = self.password
# DataFrame reader
if isinstance(content, pd.DataFrame):
# Call Dataframe reader
parsed_data, extension = DataFrameReader(content)._read_df()
# List reader for query
elif isinstance(content, list):
# Construct query from list
parsed_data, extension = ListReader(content, function, user, password)._read()
# String can be either query or file path
elif isinstance(content, str):
parsed_data, extension = self._string_reader()
else:
raise ValueError('The input provided does not match any of the expected input types.')
if extension is None:
extension = default_extension
return parsed_data, extension