Exemple #1
0
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))
Exemple #2
0
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.")
Exemple #3
0
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))
Exemple #4
0
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)
Exemple #5
0
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']))
Exemple #6
0
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