1
|
|
|
""" |
2
|
|
|
main - entry point of the package |
3
|
|
|
|
4
|
|
|
This file is performing CSV read into HYPER file and measures time elapsed (performance) |
5
|
|
|
""" |
6
|
|
|
|
7
|
|
|
# standard Python packages |
8
|
|
|
import os.path as os_path |
9
|
|
|
from datetime import timedelta |
10
|
|
|
# package to measure portions of code performance |
11
|
|
|
from codetiming import Timer |
12
|
|
|
|
13
|
|
|
# additional packages to be installed from PyPi |
14
|
|
|
import pandas as pd |
15
|
|
|
|
16
|
|
|
# Custom classes specific to this package |
17
|
|
|
from tableau_hyper_management.LoggingNeeds import LoggingNeeds as ClassLN |
18
|
|
|
from tableau_hyper_management.TypeDetermination import ClassBN |
19
|
|
|
from tableau_hyper_management.TypeDetermination import TypeDetermination as ClassTD |
20
|
|
|
from tableau_hyper_management.CommandLineArgumentsManagement import \ |
21
|
|
|
CommandLineArgumentsManagement as ClassCLAM |
22
|
|
|
from tableau_hyper_management.TableauHyperApiExtraLogic import \ |
23
|
|
|
TableauHyperApiExtraLogic as ClassTHAEL |
24
|
|
|
|
25
|
|
|
# main execution logic |
26
|
|
|
if __name__ == '__main__': |
27
|
|
|
ClassBN.fn_load_configuration(ClassBN) |
28
|
|
|
parameters_in = ClassCLAM.parse_arguments(ClassCLAM, |
29
|
|
|
ClassBN.cfg_dtls['input_options']['converter']) |
30
|
|
|
# initiate logger |
31
|
|
|
ClassLN.initiate_logger(ClassLN, parameters_in.output_log_file, 'thm_converter') |
32
|
|
|
# define global timer to use |
33
|
|
|
t = Timer('thm', |
34
|
|
|
text = 'Time spent is {seconds} ', |
35
|
|
|
logger = ClassLN.logger.debug |
36
|
|
|
) |
37
|
|
|
t.start() |
38
|
|
|
# marking start of the Log |
39
|
|
|
ClassLN.logger.info('='*50) |
40
|
|
|
ClassLN.logger.info('Tableau Hyper Management started') |
41
|
|
|
# reflect input parameters given values |
42
|
|
|
ClassCLAM.listing_parameter_values(ClassCLAM, ClassLN.logger, parameters_in) |
43
|
|
|
t.stop() |
44
|
|
|
# initiate Data Frame from specified CSV file |
45
|
|
|
if os_path.isfile(parameters_in.input_file): |
46
|
|
|
# intake given CSV file into a Pandas Data Frame |
47
|
|
|
t.start() |
48
|
|
|
csv_content_df = pd.read_csv(filepath_or_buffer = parameters_in.input_file, |
49
|
|
|
delimiter = parameters_in.csv_field_separator, |
50
|
|
|
cache_dates = True, |
51
|
|
|
index_col = None, |
52
|
|
|
memory_map = True, |
53
|
|
|
low_memory = False, |
54
|
|
|
encoding = 'utf-8', |
55
|
|
|
) |
56
|
|
|
ClassLN.logger.info('Given CSV file ' + parameters_in.input_file |
57
|
|
|
+ ' has been loaded into a Pandas Data Frame successfully') |
58
|
|
|
t.stop() |
59
|
|
|
t.start() |
60
|
|
|
# advanced detection of data type within Data Frame |
61
|
|
|
detected_csv_structure = ClassTD.fn_detect_csv_structure(ClassTD, ClassLN.logger, |
62
|
|
|
csv_content_df, parameters_in) |
63
|
|
|
t.stop() |
64
|
|
|
t.start() |
65
|
|
|
# create HYPER from Data Frame |
66
|
|
|
ClassTHAEL.fn_run_hyper_creation(ClassTHAEL, ClassLN.logger, csv_content_df, |
67
|
|
|
detected_csv_structure, parameters_in) |
68
|
|
|
t.stop() |
69
|
|
|
else: |
70
|
|
|
# doesn't exist |
71
|
|
|
ClassLN.logger.error('Given file ' + parameters_in.input_file |
72
|
|
|
+ ' does not exist, please check your inputs!') |
73
|
|
|
ClassBN.fn_final_message(ClassBN, ClassLN.logger, t, parameters_in.output_log_file) |
74
|
|
|
|