def do_select(self, line): """ Select a data source :param line: <String> Source name :return: None :Author: Zhiming Liu """ # Available data sources options = "-csv", "-db" args = list(arg.lower() for arg in str(line).split()) try: # Check if the input data source is available in this program or not if args[0] not in options: raise ValueError("The data resource is not available.") else: # Code for initialise CSV data source if args[0] == "-csv": try: if len(args) == 1: self._std.select_source(args[0][1:], "staffinfo.csv") View.warning( "No CSV file path specified. A default file \"staffinfo.csv\" will be used." ) elif len(args) == 2: self._std.select_source(args[0][1:], args[1]) elif len(args) == 3: if args[1] == "-a": self._std.select_source( args[0][1:], args[2], True) except (CSVError, OSError) as e: View.error(e) except Exception as e: View.error(e) else: View.success("Data source CSV is selected.") # Code for initialise database source elif args[0] == "-db": try: self._std.select_source(args[0][1:]) except (ConnectionError, TypeError) as e: View.error(e) except Exception as e: View.error(e) else: View.success("Data source Database is selected.") # Code for initialise XXXX data source else: pass # Catch and display error message except ValueError as e: View.error(str(e) + "\n") View.help_select() except Exception as e: View.error(e)
def do_save(self, arg): """ Save data to specified data source :param arg: arg :return: None """ # If no data source selected, prompt user to do so. try: self._std.save_data() except ValueError as e: View.info(e) except (OSError, AttributeError) as e: View.error(e) except Exception as e: View.error(e) else: View.success("Data is saved")
def select_csv(self, cmd): try: if not cmd.is_valid_command: View.error("Invalid command.") View.help_select() elif cmd.file_name is None: self._std.select_source(cmd.resource_type, cmd.default_csv_file) View.warning("No CSV file path specified. " "A default file \"{0}\" " "will be used.".format(cmd.default_csv_file)) else: self._std.select_source(cmd.resource_type, cmd.file_name, cmd.create_file) except Exception as e: View.error(e) else: View.success("Data source CSV is selected.")
def do_add(self, line): """ Add a new entry of data :param line: (String) [EMPID] [Age] [Gender] [Sales] [BMI] [Salary] [Birthday] :return: None :Author: Zhiming Liu """ # Split the input argument to obtain the data raw_data = list(arg.lower() for arg in str(line).split()) try: # Check if input data has 7 data fields if not len(raw_data) == len(Data): raise AttributeError("Please input correct data.") else: # Check and wash data by check_all() of DataValidator result = self._vld.check_all(raw_data) # Check if there is any None which stands for invalid input if None in result: key = 0 # build a list of name list items = list(map(lambda i: i.name, Data)) e_str = "" while key < len(result): if result[key] is None: # Left alignment e_str += "{:<10}".format(items[key]) key += 1 raise ValueError("The following field(s) " "is invalid:\n%s" % e_str) else: self._std.add_data(result) except (AttributeError, ValueError) as e: View.error(str(e) + "\n") View.help_add() except CSVError as e: View.error(e) except Exception as e: View.error(e) else: View.success("Add data")
def do_export(self, line): """ Export command :param line: (String) [-pk] [file path] :return: None :Author: Zhiming Liu """ args = list(arg.lower() for arg in str(line).split()) if args[0] == "-pk" and len(args) > 1: try: pk = PickleOperations() pk.pickle_dump(args[1], self._std.get_all_data()) except Exception as e: View.error(e) View.help_export() else: View.success("Data has been saved to %s" % args[1]) else: View.info("Invalid command") View.help_export()