def get_date_data(file_name): """ Returns a dictionary of date information in the given file. :param str file_name: The file to get the date from. :returns dict or None: (dict) or (None) keys: "day_of_week" (str) "month" (str) "day" (str) "year" (str) "time" (str) "period" (str) """ try: with open(file_name, 'r'): date = get_data(file_name)[0].split(' ') return { 'day_of_week': date[0].strip(','), 'month': date[1].strip(','), 'day': date[2].strip(','), 'year': date[3], 'time': date[4], 'period': date[5][0:2] } except FileNotFoundError: logger.error("File '{}' not found.".format(file_name))
def main(): """ Start of the program. """ if os.path.isdir('diary'): os.chdir('diary') else: logger.warning("Directory 'diary' not found.") print("Using current folder as no diary folder was found...\n") parser_description = "View, create and change data from a text file." parser = argparse.ArgumentParser(description=parser_description) group = parser.add_mutually_exclusive_group() parser.add_argument("-d", "--date", action="store", nargs=3, type=int, metavar=("DAY", "MONTH", "YEAR"), help="View data from a date") group.add_argument("-n", "--new", action="store_true", help="Create a new data entry") group.add_argument("-e", "--edit", action="store", nargs=3, type=int, metavar=("DAY", "MONTH", "YEAR"), help="Edit an existing data entry") args = parser.parse_args() # Create a new data entry for the current date and time if args.new: filename = "{} {} {} {}.docx".format(get_current_date()["day_name"], get_current_date()["month_name"], get_current_date()["day"], get_current_date()["year"]) if is_file(filename): print("Do you want to overwrite your current message? (y/n)") overwrite = input(">> ") if overwrite.lower() == "y": new_data(filename) else: new_data(filename) # View data from a date elif args.date is not None: day, month, year = args.date date_format = {'day': day, 'month': month, 'year': year} view_data(date_format) # Edit a data entry elif args.edit is not None: day, month, year = args.edit date_format = {'day': day, 'month': month, 'year': year} edit_data(date_format) else: logger.error("No arguments were entered!") print("No arguments were entered!") print("Please enter -h or --help for help.")
def edit_data(date): """ Opens the data file from a given date to be edited. :param date: (dict) :return: (None) """ try: file_name = get_filename(date) os.startfile("{}\{}".format(os.getcwd(), file_name)) except FileNotFoundError: logger.error("File could not be found: {}".format(get_filename(date))) date = "{}/{}/{}".format(date['day'], date['month'], date['year']) print("There is no data you can edit for the date '{}'.".format(date))
def get_data(filename): """ Return all the data from a file with the given filename. :param str filename: The name of the file in which to get data. :returns str full_data | None: Gets the data or else nothing. """ try: doc = docx.Document(filename) full_data = [] for para in doc.paragraphs: full_data.append(para.text) return full_data except Exception as e: logger.error(e)
def view_data(date): """ Displays the data from a given date. :param dict date: :return None: """ file_name = get_filename(date) try: if not os.path.exists(file_name): raise FileNotFoundError if check_file(file_name) is not False: data = get_data(file_name) else: raise Exception("Invalid file format of '{}'.".format(file_name)) with open(file_name, 'r'): day_of_week = get_date_data(file_name)['day_of_week'] month = get_date_data(file_name)['month'] day = get_date_data(file_name)['day'] year = get_date_data(file_name)['year'] file_date = "{} {} {} {}.docx".format(day_of_week, month, day, year) if file_name == file_date: print("-" * 45) print("Date: ", end=" ") for item in data: print(item) if item[len(item) - 1] == "M": print("Message: ", end="\n") print("-" * 45) else: logger.error( "File_date '{}' does not match the file_name '{}'".format( file_date, file_name)) return except FileNotFoundError: logger.error("File '{}' could not be found!".format(file_name)) print("There is no data for the date '{}/{}/{}'.".format( date['day'], date['month'], date['year']))
def check_file(data_file): """ Checks a given file to see if it is in a valid format by having at least 2 lines in the file. :param str data_file: The data file to check is valid. :return bool True | False: """ if is_file(data_file): with open(data_file, 'r'): doc = docx.Document(data_file) counter = 0 for para in doc.paragraphs: if para.text == "": break counter += 1 if counter == 1: logger.error("No message to read from.") elif counter < 1: logger.error("No date or message to read from.") else: return True else: return False