def input_csv_to_df(self, input_file, date_range): csv_converter = CSVConverter(self.parser, self.logger) # "TAO_T0N110W_D_ADCP.ascii" => "T0N110W" column_str = input_file.filename.split("_")[1] columns = self.columns(column_str) csv_converter.input_csv_to_df(input_file, date_range, columns, column_str) self.pandas_tools.concat_df(csv_converter.pandas_tools.df)
def test_simple_case_twice_with_append(self): converter = CSVConverter(config_file_name=os.path.join(fo, 'valid-simple-header-change.json'), append_mode=True) output = converter.convert(input_file_name=os.path.join(fo, 'valid-simple.csv')) with open(os.path.join(fo, 'valid-simple-new.csv')) as output_file: self.assertEqual(output_file.read(), output.replace('\r\n', '\n')) output = converter.convert(input_file_name=os.path.join(fo, 'valid-simple-two.csv')) with open(os.path.join(fo, 'valid-simple-appended.csv')) as output_file: self.assertEqual(output_file.read(), output.replace('\r\n', '\n'))
def test_error_if_bad_config(self): with self.assertRaises(Exception): CSVConverter(config_json='Not real valid JSON here...') with self.assertRaises(Exception): CSVConverter(config_file_name=os.path.join(fo, 'non-existant-file-hfhffhjksdfhjksfhjk')) with self.assertRaises(Exception): CSVConverter(config_file_name=os.path.join(fo, 'real-but-invalid.json')) with self.assertRaises(Exception): # noinspection PyTypeChecker CSVConverter(config_dict=['This isn', 't a dict'])
def input_csv_to_df(self, input_file, date_range, plot_output_path): csv_converter = CSVConverter(self.parser, self.logger) # "0_0.csv" => "0_0" column_str = input_file.filename.split(".")[0] columns = [ column_str + '_' + column for column in ['GHI', 'DNI', 'DHI'] ] csv_converter.input_csv_to_df(input_file, date_range, columns) df = csv_converter.pandas_tools.df.copy() ParserSolarAnywhere.plot(plot_output_path, input_file.filename, df) self.pandas_tools.concat_df(csv_converter.pandas_tools.df)
class Window(Frame): def __init__(self, master = None): Frame.__init__(self, master) self.__master = master self.__init_window() self.__selected_file: str = '' self.__converter = CSVConverter() def __init_window(self): self.__master.title('KML Conversion Tool') self.__master.geometry('300x100') self.pack(fill = BOTH, expand = 1) self.__file_name = Label(self, text = 'No file has been selected yet', font = ('Roboto', 12)) self.__file_name.grid(padx = 20, pady = 20) self.__file_name.pack() select_file_button = Button(self, text = 'Select File', command = lambda: self.__open_file_dialog()) select_file_button.pack(fill = X) convert_button = Button(self, text = 'Convert File', command = lambda: self.__convert_file()) convert_button.pack(fill = X) def __open_file_dialog(self): self.__selected_file = filedialog.askopenfilename(initialdir = "/", title = "Select file", filetypes = (("kml files", "*.kml"), ("all files", "*.*"))) messagebox.showinfo('Selected File', 'You selected {}'.format(self.__selected_file)) prefix = self.__selected_file.rfind('/') file = self.__selected_file[prefix + 1:] if prefix != -1 else self.__selected_file self.__file_name['text'] = file def __convert_file(self): if not self.__selected_file: messagebox.showwarning('Error Converting File', 'Select a file first before converting it') else: self.__converter.convert(self.__selected_file)
def run(self): while True: t0 = time.time() # Reconnect very 10 minutes to prevent timeouts, 10 min is arbitrary. if self.ftp is None or self.ticks % 10 == 0: self.__connect_ftp() # Download every file for f in self.files_to_download: file_name = self.__download_ftp(f) # Incidents is different and has its own converter if f == "incidents.xml.gz": with gzip.open(file_name, 'rb') as compressed: with open(file_name[:-3], 'wb') as decompressed: for line in compressed: decompressed.write(line) IncidentConverter(file_name[:-3]) os.remove(file_name[:-3]) # Decompressed file os.remove(file_name) # Downloaded file # Put the file name in a queue so other threads know its done self.queue.put(str(file_name[:-6] + 'txt')) else: with gzip.open(file_name, 'rb') as compressed: with open(file_name[:-3], 'wb') as decompressed: for line in compressed: decompressed.write(line) CSVConverter(file_name[:-3]) os.remove(file_name[:-3]) # Decompressed file os.remove(file_name) # Downloaded file self.queue.put(str(file_name[:-6]) + 'txt') # Wait for a minute executing_time = 60 - (time.time() - t0) if executing_time > 0: time.sleep(60 - (time.time() - t0)) self.ticks += 1
def test_xlsx_simple_case_with_junk_before_heading(self): converter = CSVConverter(config_file_name=os.path.join(fo, 'valid-simple-header-change-with-hints.json')) output = converter.convert(input_file_name=os.path.join(fo, 'valid-simple-with-junk-before-heading.xlsx')) with open(os.path.join(fo, 'valid-simple-new.csv')) as output_file: self.assertEqual(output_file.read(), output.replace('\r\n', '\n'))
def test_xlsx_simple(self): converter = CSVConverter(config_file_name=os.path.join(fo, 'valid-simple-header-change.json')) output = converter.convert(input_file_name=os.path.join(fo, 'valid-simple.xlsx')) with open(os.path.join(fo, 'valid-simple-new.csv')) as output_file: self.assertEqual(output_file.read(), output.replace('\r\n', '\n'))
def test_append_two_simple(self): converter = CSVConverter(config_file_name=os.path.join(fo, 'valid-simple-header-change.json')) output = converter.convert(input_file_name=[os.path.join(fo, 'valid-simple.csv'), os.path.join(fo, 'valid-simple-two.csv')]) with open(os.path.join(fo, 'valid-simple-appended.csv')) as correct_file: self.assertEqual(correct_file.read(), output.replace('\r\n', '\n'))
def test_simple_with_funlinks(self): converter = CSVConverter(config_file_name=os.path.join(fo, 'valid-simple-with-funlink.json')) output = converter.convert(input_file_name=os.path.join(fo, 'valid-simple.csv')) with open(os.path.join(fo, 'valid-simple-double-digits.csv')) as correct_file: self.assertEqual(correct_file.read(), output.replace('\r\n', '\n'))
def input_csv_to_df(self, input_file, date_range): csv_converter = CSVConverter(self.parser, self.logger) # "TAO_T5N140W_D_SST_10min.ascii" => "T5N140W" column = input_file.filename.split("_")[1] csv_converter.input_csv_to_df(input_file, date_range, [column]) self.pandas_tools.concat_df(csv_converter.pandas_tools.df)
def test_simple_with_defaults(self): converter = CSVConverter(config_file_name=os.path.join(fo, 'valid-simple-with-defaults.json')) output = converter.convert(input_file_name=os.path.join(fo, 'valid-simple-with-missing.csv')) with open(os.path.join(fo, 'valid-simple-with-defaults.csv')) as output_file: self.assertEqual(output_file.read(), output.replace('\r\n', '\n'))
def test_simple_autogenerated_from_csv(self): output = CSVConverter(no_config=True).generate_json_headers(input_file_name=os.path.join(fo, 'valid-simple.csv')) with open(os.path.join(fo, 'valid-simple-autogenerated.json')) as output_file: self.assertEqual(json.load(output_file), output)
def test_error_if_no_config(self): with self.assertRaises(Exception): CSVConverter(config_json=None, config_file_name=None, config_dict=None) with self.assertRaises(Exception): CSVConverter()
def __init__(self, file): CSVConverter.__init__(self, file)
def __init__(self, master = None): Frame.__init__(self, master) self.__master = master self.__init_window() self.__selected_file: str = '' self.__converter = CSVConverter()
def test_simple_with_lambda(self): converter = CSVConverter(config_file_name=os.path.join(fo, 'valid-simple-with-lambda.json')) output = converter.convert(input_file_name=os.path.join(fo, 'valid-simple.csv')) with open(os.path.join(fo, 'valid-simple-to-lower.csv')) as output_file: self.assertEqual(output_file.read(), output.replace('\r\n', '\n'))