def delete_owns(database):
    delete_on = input("Deleting from owns. Specify deletion attribute: \n\t"
                      "Delete table: t\n\t"
                      "Delete on land_id: l\n\t"
                      "Delete on owner_id: o\n\t").lower()
    if delete_on == 'q':
        util.exit_TEAL(database)
    elif delete_on == 't':
        database.delete_table('owns')
    elif delete_on == 'l':
        delete_id = input('land id to delete: \t')
        if delete_id.isdigit():
            database.delete('owns', 'land_id', '=' + delete_id)
        else:
            sys.stdout.write('id must be an integer\t')
            delete_land(database)
    elif delete_on == 'o':
        delete_id = input('owner id to delete: \t')
        if delete_id.isdigit():
            database.delete('owns', 'owner_id', '=' + delete_id)
        else:
            sys.stdout.write('id must be an integer\t')
            delete_land(database)
    else:
        sys.stdout.write("Did not recognize selection.\t")
        delete_owner(database)

    repeat(database)
def delete_land(database):
    delete_on = input("Deleting from land. Specify deletion attribute: \n\t"
                      "Delete table: t\n\t"
                      "Delete on id: id\n\t"
                      "Delete on quality rating: r\n\t"
                      "Delete on area: a\n\t").lower()

    if delete_on == 'q':
        util.exit_TEAL(database)
    elif delete_on == 't':
        database.delete_table('land')
    elif delete_on == 'id':
        delete_id = input('id to delete: \t')
        if delete_id.isdigit():
            database.delete_item('land', 'id', '=' + delete_id)
        else:
            sys.stdout.write('id must be an integer')
            delete_land(database)
    elif delete_on == 'r':
        delete_rating = input('delete on rating (accepts range using <, >, =): \t')
        database.delete_item('land', 'rating', delete_rating)
    elif delete_on == 'a':
        delete_area = input('delete on area (accepts range using <, >, =): \t')
        database.delete_item('land', 'area', delete_area)
    else:
        sys.stdout.write("Did not recognize selection.\t")
        delete_land(database)

    repeat(database)
def initiate_delete(database):
    try:
        table = input('Delete: \n\t'
                      'Table name: \t').lower()
        if table == 'q':
            util.exit_TEAL(database)
        elif table == 'land':
            delete_land(database)
        elif table == 'county':
            delete_county(database)
        elif table == 'improvement':
            delete_improvement(database)
        elif table == 'owner':
            delete_owner(database)
        elif table == 'governs':
            delete_governs(database)
        elif table == 'owns':
            delete_owns(database)
        elif table == '':
            sys.stdout.write('Table must be specified for delete\t')
            initiate_delete(database)
        else:
            sys.stdout.write('Did not recognize table name. Please specify table in database: \n\t'
                             'land\n\t'
                             'county\n\t'
                             'improvement\n\t'
                             'owner\n\t')
            initiate_delete(database)
    except Exception as e:
        print("Encountered error: ", e, "while attempting delete.")
        initiate_delete(database)
    repeat(database)
def delete_county(database):
    delete_on = input("Deleting from county. Specify deletion attribute: \n\t"
                      "Delete table: t\n\t"
                      "Delete on id: id\n\t"
                      "Delete on name: n\n\t"
                      "Delete on population: p\n\t"
                      "Delete on growth rate: gr\n\t").lower()
    if delete_on == 'q':
        util.exit_TEAL(database)
    elif delete_on == 't':
        database.delete_table('county')
    elif delete_on == 'id':
        delete_id = input('id to delete: \t')
        if delete_id.isdigit():
            database.delete_item('county', 'id', '=' + delete_id)
        else:
            sys.stdout.write('id must be an integer\t')
            delete_land(database)
    elif delete_on == 'n':
        delete_name = input('name to delete: \t')
        database.delete_item('county', 'name', '= "' + delete_name + '"')
    elif delete_on == 'p':
        delete_pop = input('population to delete (accepts range using >, <, =): \t')
        database.delete_item('county', 'pop', delete_pop)
    elif delete_on == 'gr':
        delete_gr = input('growth rate to delete (accepts range using >, <, =): \t')
        database.delete_item('county', 'growth_rate', delete_gr)
    else:
        sys.stdout.write("\tDid not recognize selection.\t")
        delete_county(database)

    repeat(database)
def initiate_modify(database):
    table = input('Modify: \n\t' 'Table name: \t').lower()
    if table == 'q':
        util.exit_TEAL(database)
    elif table == 'land':
        modify_land(database)
    elif table == 'county':
        modify_county(database)
    elif table == 'improvement':
        modify_improvement(database)
    elif table == 'owner':
        modify_owner(database)
    elif table == '':
        sys.stdout.write('Table must be specified for modify\t')
        initiate_modify(database)
    else:
        sys.stdout.write(
            'Did not recognize table name. Please specify table in database: \n\t'
            'land\n\t'
            'county\n\t'
            'improvement\n\t'
            'owner\n\t')
        initiate_modify(database)

    repeat(database)
def delete_owner(database):
    delete_on = input("Deleting from owner. Specify deletion attribute: \n\t"
                      "Delete table: t\n\t"
                      "Delete on id: id\n\t"
                      "Delete on status: s\n\t"
                      "Delete on name: n\n\t").lower()
    if delete_on == 'q':
        util.exit_TEAL(database)
    elif delete_on == 't':
        database.delete_table('owner')
    elif delete_on == 'id':
        delete_id = input('id to delete: \t')
        if delete_id.isdigit():
            database.delete('land', 'id', '=' + delete_id)
        else:
            sys.stdout.write('id must be an integer\t')
            delete_land(database)
    elif delete_on == 's':
        delete_status = input('status to delete (private/public): \t')
        database.delete_item('owner', 'status', '= "' + delete_status + '"')
    elif delete_on == 'n':
        delete_name = input('name to delete: \t')
        database.delete_item('owner', 'name', '= "' + delete_name + '"')
    else:
        sys.stdout.write("Did not recognize selection.\t")
        delete_owner(database)

    repeat(database)
def delete_improvement(database):
    delete_on = input("Deleting from improvement. Specify deletion attribute: \n\t"
                      "Delete table: t\n\t"
                      "Delete on id: id\n\t"
                      "Delete on improvement_type: it\n\t"
                      "Delete on cost: c\n\t"
                      "Delete on improvement level: i\n\t").lower()
    if delete_on == 'q':
        util.exit_TEAL(database)
    elif delete_on == 't':
        database.delete_table('improvement')
    elif delete_on == 'id':
        delete_id = input('id to delete: \t')
        if delete_id.isdigit():
            database.delete_item('improvement', 'id', '=' + delete_id)
        else:
            sys.stdout.write('id must be an integer\t')
            delete_land(database)
    elif delete_on == 'it':
        delete_improvement_type = input("improvement type to delete: \t").lower()
        database.delete_item('improvement', 'improvement_type', '= "' + delete_improvement_type + '"')
    elif delete_on == 'c':
        delete_cost = input('cost to delete (accepts range using >, <, =): \t')
        database.delete_item('improvement', 'cost', delete_cost)
    elif delete_on == 'i':
        delete_i = input('improvement level to delete (accepts range using >, <, =): \t')
        database.delete_item('improvement', 'improvement', delete_i)
    else:
        sys.stdout.write("\tDid not recognize selection.\t")
        delete_improvement(database)

    repeat(database)
def repeat(database):
    repeat_modify = input("\tmodify again (y/n)?: ").lower()
    if repeat_modify == 'q':
        util.exit_TEAL(database)
    elif repeat_modify == 'y':
        initiate_modify(database)
    else:
        user_prompt.interact(database)
Пример #9
0
def repeat(database):
    repeat_input = input('Insert again (y/n)?: \n').lower()
    if repeat_input == 'q':
        util.exit_TEAL(database)
    elif repeat_input == 'y':
        initiate_insert(database)
    else:
        user_prompt.interact(database)
Пример #10
0
def repeat(database):
    repeat_modify = input("\tquery again (y/n)?: ").lower()
    if repeat_modify == 'q':
        util.exit_TEAL(database)
    elif repeat_modify == 'y':
        query_options(database)
    else:
        user_prompt.interact(database)
def repeat(database):
    repeat_delete = input("\tDelete again (y/n)?: ").lower()
    if repeat_delete == 'q':
        util.exit_TEAL(database)
    elif repeat_delete == 'y':
        initiate_delete(database)
    else:
        user_prompt.interact(database)
Пример #12
0
def get_csv(prompt, database):
    csv = input(prompt)
    if csv.lower() == 'q':
        util.exit_TEAL(database)

    if not csv.endswith('.csv'):
        get_csv("\tPlease provide the data in csv format: ", database)

    csv = util.get_base_dir() / 'final_project/input' / csv
    if not csv.is_file():
        get_csv(
            "File not found. Please provide name of csv in input directory: ",
            database)

    return csv
Пример #13
0
def interact(database):
    select = selection_prompt()

    while select != 'q':
        if select == 'i':
            input_prompt.initiate_insert(database)
        elif select == 'd':
            delete_prompt.initiate_delete(database)
        elif select == 'm':
            modify_prompt.initiate_modify(database)
        elif select == 'o':
            query_prompt.query_options(database)
        else:
            select = selection_prompt()

    util.exit_TEAL(database)
Пример #14
0
def get_database(prompt, database):
    database_file = input(prompt)
    if database_file.lower() == 'q':
        util.exit_TEAL(database)

    if not database_file.endswith('.sqlite'):
        get_database('\tPlease provide a path to a sqlite file: ', database)

    database_file = util.get_base_dir(
    ) / 'final_project/database' / database_file

    if not database_file.is_file():
        get_database(
            "\tDatabase file not found. Please provide sqlite file in database directory: ",
            database)

    return database_file
Пример #15
0
def user_prompt():
    sys.stdout.write("Welcome to TEAL (Texas Explorer for Arid Land)\n\t"
                     "To exit, press q\n"
                     "Database Setup: \t\n")

    defaults = input("\tUse Defaults (y/n): ").lower()

    if defaults == 'q':
        util.exit_TEAL(None)

    if defaults == 'y':
        database_file = util.get_base_dir(
        ) / 'final_project/database/TEAL.sqlite'
        land_csv = util.get_base_dir() / 'final_project/input/land.csv'
        county_csv = util.get_base_dir() / 'final_project/input/county.csv'
        owner_csv = util.get_base_dir() / 'final_project/input/owner.csv'
        improvement_csv = util.get_base_dir(
        ) / 'final_project/input/improvement.csv'
        governs_csv = util.get_base_dir() / 'final_project/input/governs.csv'
        owns_csv = util.get_base_dir() / 'final_project/input/owns.csv'

    else:
        database_file = get_database(
            "\tPlease provide a path to the database: ", None)
        land_csv = get_csv("\tPlease provide land data: ", None)
        county_csv = get_csv("\tPlease provide county data: ", None)
        owner_csv = get_csv("\tPlease provide land owner data: ", None)
        improvement_csv = get_csv("\tPlease provide land improvement data: ",
                                  None)
        governs_csv = get_csv("\tPlease provide land governance data: ", None)
        owns_csv = get_csv("\tPlease provide land ownership data: ", None)

    database = queries.Database(database_file)

    database.load_land_data(land_csv)
    database.load_county_data(county_csv)
    database.load_owner_data(owner_csv)
    database.load_improvement_data(improvement_csv)
    database.load_governs_data(governs_csv)
    database.load_owns_data(owns_csv)

    sys.stdout.write('\tDatabase successfully initialized.\n')

    interact(database)
Пример #16
0
def initiate_insert(database):
    try:
        table = input(
            'Insert: \n\t'
            'If you do not wish to specify an input, press enter \n\t'
            'Table name: ').lower()
        if table == 'q':
            util.exit_TEAL(database)
        elif table == 'land':
            insert_land(database)
        elif table == 'county':
            insert_county(database)
        elif table == 'improvement':
            insert_improvement(database)
        elif table == 'owner':
            insert_owner(database)
        elif table == 'governs':
            insert_governs(database)
        elif table == 'owns':
            insert_owns(database)
        elif table == '':
            sys.stdout.write('Table must be specified for insert\n')
            initiate_insert(database)
        else:
            sys.stdout.write(
                'Did not recognize table name. Please specify table in database: \n\t'
                'land\n\t'
                'county\n\t'
                'improvement\n\t'
                'owner\n')
            initiate_insert(database)
    except Exception as e:
        print('Encountered error: ', e, ' while attempting to insert.')
        initiate_insert(database)

    repeat(database)
Пример #17
0
def query_options(database):
    select = input('Query Options: \n\t'
                   'Get Land by County: 1\n\t'
                   'Get Land by Area: 2\n\t'
                   'Get Land by Owner: 3\n\t'
                   'Get Land by Quality: 4\n\t'
                   'View Land Details: 5\n\t'
                   'Get Average Land Rating by County: 6\n\t'
                   'Get Land Area by Owner: 7\n\t'
                   'Get Owners in County: 8\n\t'
                   'Get Critical Land Count by County: 9\n\t'
                   'Get Land by Owner Status: 10\n\t'
                   'Optimize Land Improvement: 11\n\t'
                   'Formulate Custom Query: 12\n\t').lower()

    if select == 'q':
        util.exit_TEAL(database)

    try:
        select = int(select)
    except Exception as e:
        print('Encountered error: ', e,
              'while processing user input. Integer expected')
        query_options(database)

    try:
        if select == 1:
            county_name = input('search county name: \t')
            database.get_land_by_county(county_name)
        elif select == 2:
            min_area = int(input('minimum area for search: \t'))
            max_area = int(input('maximum area for search: \t'))
            database.get_land_by_area(min_area, max_area)
        elif select == 3:
            owner_name = input('search owner name: \t')
            database.get_land_by_owner(owner_name)
        elif select == 4:
            min_ratiing = input('minimum rating for search: \t')
            max_rating = input('maximum rating for search: \t')
            database.get_land_by_quality_rating(min_ratiing, max_rating)
        elif select == 5:
            database.view_land_details()
        elif select == 6:
            database.get_average_rating_county()
        elif select == 7:
            database.get_area_by_owner()
        elif select == 8:
            county_name = input('county name for search: \t')
            database.get_owners_in_county(county_name)
        elif select == 9:
            critical_threshold = int(
                input('critical land quality threshold: \t'))
            database.get_critical_land_count_by_county(critical_threshold)
        elif select == 10:
            status = input('ownership status for search (public/private): \t')
            database.get_land_by_status(status)
        elif select == 11:
            owner_name = input('owner name for optimization: \t')
            county_name = input('county name for optimization: \t')
            database.optimize(owner_name, county_name)
        elif select == 12:
            table = input('table to perform query on: \t')
            distinct = input('DISTINCT (y/n): \t').lower() == 'y'
            compare_val = input('attribute to be queried: \t')
            condition = input(
                'condition on attribute (accepts range using >, <, =): ')

            database.generic_query(table, distinct, compare_val, condition)
        else:
            sys.stdout.write("Query selection not recognized.")
            query_options(database)

        database.write_result()

    except Exception as e:
        print("Encountered error: ", e, "while processing query")
        query_options(database)

    repeat(database)