From 1e5f2259d787783c6a92ce23f4c9930744b193a6 Mon Sep 17 00:00:00 2001 From: davidm19 Date: Sat, 16 Feb 2019 17:25:53 -0800 Subject: [PATCH 1/8] fix: make Hiker objects serializable by calling serialize methods when possible --- back-end/application.py | 23 ++++++----------------- back-end/database_setup.py | 8 ++++++++ 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/back-end/application.py b/back-end/application.py index 6dcca70..4cd227a 100644 --- a/back-end/application.py +++ b/back-end/application.py @@ -20,7 +20,7 @@ # SQLALCHEMY_DATABASE_URI = os.environ['DB_URL'] # engine = create_engine('sqlite:///SQLALCHEMY_DATABASE_URI.db') -engine = create_engine('sqlite:///database.db') +engine = create_engine('sqlite:///database.db?check_same_thread=false') DBSession = sessionmaker(bind=engine) session = DBSession() @@ -32,30 +32,21 @@ def show_hostpage(): @app.route('/trips', methods=['GET']) def show_trips(): - session = DBSession() trip_list = [] all_trips = session.query(Trip).all() for trip in all_trips: - trip_info = {"trip_name": trip.trip_name, - "id": trip.id, - "trip_hikers": trip.hikers} - trip_list.append(trip_info) + trip_list.append(trip.serialize) return flask.jsonify(trip_list), 200 @app.route('/trips//detail', methods=['GET']) def show_trip(trip_id): - session = DBSession() trip = session.query(Trip).filter_by(id=trip_id).one() - trip_info = {"trip_name": trip.trip_name, - "id": trip.id, - "trip_hikers": trip.hikers} - return flask.jsonify(trip_info), 200 + return flask.jsonify(trip.serialize), 200 @app.route('/trips/new', methods=['POST']) -def addTrip(): - session = DBSession() +def add_trip(): post = request.get_json() if request.method == 'POST': new_trip = Trip(trip_name=post["trip_name"]) @@ -65,8 +56,7 @@ def addTrip(): @app.route('/trips//update', methods=['PUT']) -def updateTrip(id): - session = DBSession() +def update_trip(id): post = request.get_json() if "id" not in post: return "ERROR: Not a valid Customer ID \n", 404 @@ -80,8 +70,7 @@ def updateTrip(id): @app.route('/trips//delete', methods=['DELETE']) -def deleteTrip(trip_id): - session = DBSession() +def delete_trip(trip_id): post = request.get_json() trip_to_delete = session.query(Trip).filter_by(id=trip_id).one() session.delete(trip_to_delete) diff --git a/back-end/database_setup.py b/back-end/database_setup.py index 167129f..59966c5 100644 --- a/back-end/database_setup.py +++ b/back-end/database_setup.py @@ -37,6 +37,7 @@ def serialize(self): 'last_name': self.last_name, 'address': self.address, 'phone_number': self.phone_number, + 'email': self.email, 'emergency_contact1': self.emergency_contact1, 'emergency_contact2': self.emergency_contact2, 'expected_return': self.expected_return @@ -48,6 +49,13 @@ class Trip(Base): trip_name = Column(String(32)) hikers = relationship('Hiker', secondary=association_table, back_populates="trip") + @property + def serialize(self): + return { + 'trip_name': self.trip_name, + 'hikers': [ hiker.serialize for hiker in self.hikers ] + } + # parser = argparse.ArgumentParser() # parser.add_argument("-t", "--test", action="store_true") # args = parser.parse_args() From 6e46bb5c069724d2dc143b0443b3900c8ea5102d Mon Sep 17 00:00:00 2001 From: davidm19 Date: Sat, 16 Feb 2019 17:49:01 -0800 Subject: [PATCH 2/8] feat: change names for database_populator so that arrested development characters are added --- back-end/database_populator.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/back-end/database_populator.py b/back-end/database_populator.py index 83ea504..61f77b4 100644 --- a/back-end/database_populator.py +++ b/back-end/database_populator.py @@ -10,20 +10,35 @@ DBSession = sessionmaker(bind=engine) session = DBSession() -hiker1 = Hiker(first_name="Sam", last_name="Jamjar", address="123 Sesame Street", phone_number="12223334444", email="sjamjar@gmail.com", emergency_contact1="mommy", emergency_contact2="daddy", expected_return=datetime(2019, 2, 22, 16, 30)) -hiker2 = Hiker(first_name="Anna", last_name="McIntosh", address="456 Applebee Avenue", phone_number="15556778899", email="anna.mc@gmail.com", emergency_contact1="mama", emergency_contact2="papa", expected_return=datetime(2019, 2, 22, 16, 30)) -hiker3 = Hiker(first_name="Buster", last_name="Bluth", address="Mom's appartment", phone_number="12345675432", email="lucille.bluth@gmail.com", emergency_contact1="Lucille Bluth", emergency_contact2="Mother", expected_return=datetime(2019, 2, 22, 16, 30)) -hiker4 = Hiker(first_name="Tobias", last_name="Funke", address="The Model Home", phone_number="19873276543", email="ibluemyselfforthis@gmail.com", emergency_contact1="Lindsay Bluth", emergency_contact2="Michael Bluth", expected_return=datetime(2019, 2, 22, 16, 30)) +hiker1 = Hiker(first_name="Michael", last_name="Bluth", address="The model home", phone_number="12223334444", emergency_contact1="Lucille Bluth", emergency_contact2=None, expected_return=datetime(2019, 2, 22, 16, 30)) +hiker2 = Hiker(first_name="GOB", last_name="Bluth", address="The model home", phone_number="13334445555", emergency_contact1="Lucille Bluth", emergency_contact2="Michael Bluth", expected_return=datetime(2019, 2, 22, 16, 30)) +hiker3 = Hiker(first_name="Lindsay", last_name="Bluth-Funke", address="The model home", phone_number="14445556767", emergency_contact1="Lucille Bluth", emergency_contact2="Michael Bluth", expected_return=datetime(2019, 2, 22, 16, 30)) +hiker4 = Hiker(first_name="Buster", last_name="Bluth", address="The model home", phone_number="55567678999", emergency_contact1="Lucille Bluth", emergency_contact2="Mother", expected_return=datetime(2019, 2, 22, 16, 30)) +hiker5 = Hiker(first_name="Tobias", last_name="Funke", address="The model home", phone_number="14209696969", emergency_contact1="Lindsay Bluth-Funke", emergency_contact2="Michael Bluth", expected_return=datetime(2019, 2, 22, 16, 30)) +hiker6 = Hiker(first_name="Lucille", last_name="Bluth", address="123 Ocean View Appartments Unit 42", phone_number="19998887777", emergency_contact1="George Bluth Sr.", emergency_contact2="Oscar Bluth", expected_return=datetime(2019, 2, 22, 16, 30)) +hiker7 = Hiker(first_name="George", last_name="Bluth", address="Orange County Prison", phone_number="18887776565", emergency_contact1="Lucille Bluth", emergency_contact2="GOB Bluth", expected_return=datetime(2019, 2, 22, 16, 30)) +hiker8 = Hiker(first_name="Oscar", last_name="Bluth", address="123 Ocean View Appartments Unit 42", phone_number="17776565555", emergency_contact1="Lucille Bluth", emergency_contact2=None, expected_return=datetime(2019, 2, 22, 16, 30)) +hiker9 = Hiker(first_name="George-Michael", last_name="Bluth", address="The model home", phone_number="12223334444", emergency_contact1="Michael Bluth", emergency_contact2="Lindsay Bluth", expected_return=datetime(2019, 2, 22, 16, 30)) +hiker10 = Hiker(first_name="Maeby", last_name="Funke", address="The model home", phone_number="13334445555", emergency_contact1="Lindsay Bluth-Funke", emergency_contact2="Tobias Funke", expected_return=datetime(2019, 2, 22, 16, 30)) + session.add(hiker1) session.add(hiker2) session.add(hiker3) session.add(hiker4) +session.add(hiker5) +# session.add(hiker6) +# session.add(hiker7) +# session.add(hiker8) +# session.add(hiker9) +# session.add(hiker10) session.commit() -trip1 = Trip(trip_name="Big Loop around the Small Pond") +trip1 = Trip(trip_name="There's always money in the banana stand") +trip2 = Trip(trip_name="I just blew myself") trip1.hikers.append(hiker1) trip1.hikers.append(hiker2) trip1.hikers.append(hiker3) trip1.hikers.append(hiker4) +trip1.hikers.append(hiker5) session.add(trip1) session.commit() From d8b83651b99f30ba73a1c093fa8de109cf804314 Mon Sep 17 00:00:00 2001 From: davidm19 Date: Sat, 16 Feb 2019 18:24:49 -0800 Subject: [PATCH 3/8] feat: Add a new trip for database_populator feat: add student crud functionality fix: add ordered list indentations so that JSON doesn't automatically alphabetize --- back-end/application.py | 62 ++++++++++++++++++++++++++++++++-- back-end/database_populator.py | 20 +++++++---- back-end/database_setup.py | 22 ++++++------ 3 files changed, 84 insertions(+), 20 deletions(-) diff --git a/back-end/application.py b/back-end/application.py index 4cd227a..2e267fd 100644 --- a/back-end/application.py +++ b/back-end/application.py @@ -3,8 +3,7 @@ from flask import flash from sqlalchemy import create_engine, asc, desc from sqlalchemy.orm import sessionmaker -from database_setup import Base, Hiker, engine, Trip -# from database_setup import Trip +from database_setup import Base, Hiker, engine, Trip # from database_setup import Trip from flask import session as login_session import random import string @@ -23,6 +22,7 @@ engine = create_engine('sqlite:///database.db?check_same_thread=false') DBSession = sessionmaker(bind=engine) + session = DBSession() @app.route('/') @@ -39,7 +39,7 @@ def show_trips(): return flask.jsonify(trip_list), 200 -@app.route('/trips//detail', methods=['GET']) +@app.route('/trips/', methods=['GET']) def show_trip(trip_id): trip = session.query(Trip).filter_by(id=trip_id).one() return flask.jsonify(trip.serialize), 200 @@ -78,6 +78,62 @@ def delete_trip(trip_id): return flask.jsonify("Trip successfully deleted!"), 200 +@app.route('/hikers//', methods=['GET']) +def show_hiker(ID): + hiker = session.query(Hiker).filter_by(id=ID).one() + return flask.jsonify(hiker.serialize), 200 + + +@app.route('/hikers/new', methods=['POST']) +def new_hiker(): + post = request.get_json() + if request.method == 'POST': + new_hiker = Hiker(first_name=post["first_name"], last_name=post["last_name"], address=post["address"], phone_number=post["phone_number"], email=post["email"], emergency_contact1=post["emergency_contact1"], emergency_contact2=post["emergency_contact2"], expected_return=post["expected_return"]) + session.add(new_hiker) + session.commit() + return flask.jsonify("Hiker successfully added! \n"), 200 + + +@app.route('/hikers//edit', methods=['PUT']) +def edit_hiker(id): + post = request.get_json() + if "id" not in post: + return "ERROR: Not a valid Customer ID \n", 404 + hiker_id = post["id"] + edited_hiker = session.query(Hiker).filter_by(id=hiker_id).one() + if 'first_name' in post: + edited_hiker.first_name = post['first_name'] + elif 'last_name' in post: + edited_hiker.last_name = post['last_name'] + elif 'address' in post: + edited_hiker.address = post['address'] + elif 'phone_number' in post: + edited_hiker.phone_number = post['address'] + elif 'email' in post: + edited_hiker.email = post['email'] + elif 'emergency_contact1' in post: + edited_hiker.emergency_contact1 = post['emergency_contact1'] + elif 'emergency_contact2' in post: + edited_hiker.emergency_contact2 = post['emergency_contact2'] + elif 'expected_return' in post: + edited_hiker.expected_return = post['expected_return'] + session.add(edited_hiker) + session.commit() + return flask.jsonify("Hiker successfully updated! \n"), 200 + + +@app.route('/hikers//delete', methods=['PUT']) +def delete_hiker(id): + post = request.get_json() + if "id" not in post: + return "ERROR: Not a valid Customer ID \n", 404 + hiker_id = post["id"] + hiker_to_delete = session.query(Hiker).filter_by(id=id).one() + session.delete(hiker_to_delete) + session.commit() + return flask.jsonify("Hiker successfully deleted! \n"), 200 + + if __name__ == "__main__": app.debug = True diff --git a/back-end/database_populator.py b/back-end/database_populator.py index 61f77b4..d3d7819 100644 --- a/back-end/database_populator.py +++ b/back-end/database_populator.py @@ -26,19 +26,27 @@ session.add(hiker3) session.add(hiker4) session.add(hiker5) -# session.add(hiker6) -# session.add(hiker7) -# session.add(hiker8) -# session.add(hiker9) -# session.add(hiker10) +session.add(hiker6) +session.add(hiker7) +session.add(hiker8) +session.add(hiker9) +session.add(hiker10) session.commit() trip1 = Trip(trip_name="There's always money in the banana stand") -trip2 = Trip(trip_name="I just blew myself") trip1.hikers.append(hiker1) trip1.hikers.append(hiker2) trip1.hikers.append(hiker3) trip1.hikers.append(hiker4) trip1.hikers.append(hiker5) + +trip2 = Trip(trip_name="I just blew myself") +trip2.hikers.append(hiker1) +trip2.hikers.append(hiker2) +trip2.hikers.append(hiker3) +trip2.hikers.append(hiker4) +trip2.hikers.append(hiker5) + session.add(trip1) +session.add(trip2) session.commit() diff --git a/back-end/database_setup.py b/back-end/database_setup.py index 59966c5..c398c00 100644 --- a/back-end/database_setup.py +++ b/back-end/database_setup.py @@ -32,15 +32,15 @@ class Hiker(Base): @property def serialize(self): - return { - 'first_name': self.first_name, - 'last_name': self.last_name, - 'address': self.address, - 'phone_number': self.phone_number, - 'email': self.email, - 'emergency_contact1': self.emergency_contact1, - 'emergency_contact2': self.emergency_contact2, - 'expected_return': self.expected_return + return { # HOW TO UNALPHABETIZE JSON SERIALIZING???? + '1) first_name': self.first_name, + '2) last_name': self.last_name, + '3) address': self.address, + '4) phone_number': self.phone_number, + '5) email': self.email, + '6) emergency_contact1': self.emergency_contact1, + '7) emergency_contact2': self.emergency_contact2, + '8) expected_return': self.expected_return } class Trip(Base): @@ -52,8 +52,8 @@ class Trip(Base): @property def serialize(self): return { - 'trip_name': self.trip_name, - 'hikers': [ hiker.serialize for hiker in self.hikers ] + '1. trip_name': self.trip_name, + '2. hikers': [ hiker.serialize for hiker in self.hikers ] } # parser = argparse.ArgumentParser() From 9dbf0250a08640ca721774b06129bcc2af1b9f75 Mon Sep 17 00:00:00 2001 From: davidm19 Date: Sat, 16 Feb 2019 18:24:49 -0800 Subject: [PATCH 4/8] feat: Add a new trip for database_populator feat: add hiker crud functionality fix: add ordered list indentations so that JSON doesn't automatically alphabetize --- back-end/application.py | 62 ++++++++++++++++++++++++++++++++-- back-end/database_populator.py | 20 +++++++---- back-end/database_setup.py | 22 ++++++------ 3 files changed, 84 insertions(+), 20 deletions(-) diff --git a/back-end/application.py b/back-end/application.py index 4cd227a..2e267fd 100644 --- a/back-end/application.py +++ b/back-end/application.py @@ -3,8 +3,7 @@ from flask import flash from sqlalchemy import create_engine, asc, desc from sqlalchemy.orm import sessionmaker -from database_setup import Base, Hiker, engine, Trip -# from database_setup import Trip +from database_setup import Base, Hiker, engine, Trip # from database_setup import Trip from flask import session as login_session import random import string @@ -23,6 +22,7 @@ engine = create_engine('sqlite:///database.db?check_same_thread=false') DBSession = sessionmaker(bind=engine) + session = DBSession() @app.route('/') @@ -39,7 +39,7 @@ def show_trips(): return flask.jsonify(trip_list), 200 -@app.route('/trips//detail', methods=['GET']) +@app.route('/trips/', methods=['GET']) def show_trip(trip_id): trip = session.query(Trip).filter_by(id=trip_id).one() return flask.jsonify(trip.serialize), 200 @@ -78,6 +78,62 @@ def delete_trip(trip_id): return flask.jsonify("Trip successfully deleted!"), 200 +@app.route('/hikers//', methods=['GET']) +def show_hiker(ID): + hiker = session.query(Hiker).filter_by(id=ID).one() + return flask.jsonify(hiker.serialize), 200 + + +@app.route('/hikers/new', methods=['POST']) +def new_hiker(): + post = request.get_json() + if request.method == 'POST': + new_hiker = Hiker(first_name=post["first_name"], last_name=post["last_name"], address=post["address"], phone_number=post["phone_number"], email=post["email"], emergency_contact1=post["emergency_contact1"], emergency_contact2=post["emergency_contact2"], expected_return=post["expected_return"]) + session.add(new_hiker) + session.commit() + return flask.jsonify("Hiker successfully added! \n"), 200 + + +@app.route('/hikers//edit', methods=['PUT']) +def edit_hiker(id): + post = request.get_json() + if "id" not in post: + return "ERROR: Not a valid Customer ID \n", 404 + hiker_id = post["id"] + edited_hiker = session.query(Hiker).filter_by(id=hiker_id).one() + if 'first_name' in post: + edited_hiker.first_name = post['first_name'] + elif 'last_name' in post: + edited_hiker.last_name = post['last_name'] + elif 'address' in post: + edited_hiker.address = post['address'] + elif 'phone_number' in post: + edited_hiker.phone_number = post['address'] + elif 'email' in post: + edited_hiker.email = post['email'] + elif 'emergency_contact1' in post: + edited_hiker.emergency_contact1 = post['emergency_contact1'] + elif 'emergency_contact2' in post: + edited_hiker.emergency_contact2 = post['emergency_contact2'] + elif 'expected_return' in post: + edited_hiker.expected_return = post['expected_return'] + session.add(edited_hiker) + session.commit() + return flask.jsonify("Hiker successfully updated! \n"), 200 + + +@app.route('/hikers//delete', methods=['PUT']) +def delete_hiker(id): + post = request.get_json() + if "id" not in post: + return "ERROR: Not a valid Customer ID \n", 404 + hiker_id = post["id"] + hiker_to_delete = session.query(Hiker).filter_by(id=id).one() + session.delete(hiker_to_delete) + session.commit() + return flask.jsonify("Hiker successfully deleted! \n"), 200 + + if __name__ == "__main__": app.debug = True diff --git a/back-end/database_populator.py b/back-end/database_populator.py index 61f77b4..d3d7819 100644 --- a/back-end/database_populator.py +++ b/back-end/database_populator.py @@ -26,19 +26,27 @@ session.add(hiker3) session.add(hiker4) session.add(hiker5) -# session.add(hiker6) -# session.add(hiker7) -# session.add(hiker8) -# session.add(hiker9) -# session.add(hiker10) +session.add(hiker6) +session.add(hiker7) +session.add(hiker8) +session.add(hiker9) +session.add(hiker10) session.commit() trip1 = Trip(trip_name="There's always money in the banana stand") -trip2 = Trip(trip_name="I just blew myself") trip1.hikers.append(hiker1) trip1.hikers.append(hiker2) trip1.hikers.append(hiker3) trip1.hikers.append(hiker4) trip1.hikers.append(hiker5) + +trip2 = Trip(trip_name="I just blew myself") +trip2.hikers.append(hiker1) +trip2.hikers.append(hiker2) +trip2.hikers.append(hiker3) +trip2.hikers.append(hiker4) +trip2.hikers.append(hiker5) + session.add(trip1) +session.add(trip2) session.commit() diff --git a/back-end/database_setup.py b/back-end/database_setup.py index 59966c5..c398c00 100644 --- a/back-end/database_setup.py +++ b/back-end/database_setup.py @@ -32,15 +32,15 @@ class Hiker(Base): @property def serialize(self): - return { - 'first_name': self.first_name, - 'last_name': self.last_name, - 'address': self.address, - 'phone_number': self.phone_number, - 'email': self.email, - 'emergency_contact1': self.emergency_contact1, - 'emergency_contact2': self.emergency_contact2, - 'expected_return': self.expected_return + return { # HOW TO UNALPHABETIZE JSON SERIALIZING???? + '1) first_name': self.first_name, + '2) last_name': self.last_name, + '3) address': self.address, + '4) phone_number': self.phone_number, + '5) email': self.email, + '6) emergency_contact1': self.emergency_contact1, + '7) emergency_contact2': self.emergency_contact2, + '8) expected_return': self.expected_return } class Trip(Base): @@ -52,8 +52,8 @@ class Trip(Base): @property def serialize(self): return { - 'trip_name': self.trip_name, - 'hikers': [ hiker.serialize for hiker in self.hikers ] + '1. trip_name': self.trip_name, + '2. hikers': [ hiker.serialize for hiker in self.hikers ] } # parser = argparse.ArgumentParser() From 008017e3c2dcde4e9fad8b68279d570a8db4ed2a Mon Sep 17 00:00:00 2001 From: davidm19 Date: Sat, 16 Feb 2019 19:39:03 -0800 Subject: [PATCH 5/8] refactor: lint all code to pep8 standard --- back-end/application.py | 14 ++++++-- back-end/database_populator.py | 64 ++++++++++++++++++++++++++++------ back-end/database_setup.py | 25 +++++++------ 3 files changed, 79 insertions(+), 24 deletions(-) diff --git a/back-end/application.py b/back-end/application.py index 2e267fd..c00baa4 100644 --- a/back-end/application.py +++ b/back-end/application.py @@ -3,7 +3,7 @@ from flask import flash from sqlalchemy import create_engine, asc, desc from sqlalchemy.orm import sessionmaker -from database_setup import Base, Hiker, engine, Trip # from database_setup import Trip +from database_setup import Base, Hiker, engine, Trip from flask import session as login_session import random import string @@ -25,6 +25,7 @@ session = DBSession() + @app.route('/') def show_hostpage(): return "Hostpage" @@ -88,7 +89,15 @@ def show_hiker(ID): def new_hiker(): post = request.get_json() if request.method == 'POST': - new_hiker = Hiker(first_name=post["first_name"], last_name=post["last_name"], address=post["address"], phone_number=post["phone_number"], email=post["email"], emergency_contact1=post["emergency_contact1"], emergency_contact2=post["emergency_contact2"], expected_return=post["expected_return"]) + new_hiker = Hiker(first_name=post["first_name"], + last_name=post["last_name"], + address=post["address"], + phone_number=post["phone_number"], + email=post["email"], + emergency_contact1=post["emergency_contact1"], + emergency_contact2=post["emergency_contact2"], + expected_return=post["expected_return"] + ) session.add(new_hiker) session.commit() return flask.jsonify("Hiker successfully added! \n"), 200 @@ -134,7 +143,6 @@ def delete_hiker(id): return flask.jsonify("Hiker successfully deleted! \n"), 200 - if __name__ == "__main__": app.debug = True app.run(host='0.0.0.0', port=8000) diff --git a/back-end/database_populator.py b/back-end/database_populator.py index d3d7819..a5e2dc8 100644 --- a/back-end/database_populator.py +++ b/back-end/database_populator.py @@ -10,16 +10,60 @@ DBSession = sessionmaker(bind=engine) session = DBSession() -hiker1 = Hiker(first_name="Michael", last_name="Bluth", address="The model home", phone_number="12223334444", emergency_contact1="Lucille Bluth", emergency_contact2=None, expected_return=datetime(2019, 2, 22, 16, 30)) -hiker2 = Hiker(first_name="GOB", last_name="Bluth", address="The model home", phone_number="13334445555", emergency_contact1="Lucille Bluth", emergency_contact2="Michael Bluth", expected_return=datetime(2019, 2, 22, 16, 30)) -hiker3 = Hiker(first_name="Lindsay", last_name="Bluth-Funke", address="The model home", phone_number="14445556767", emergency_contact1="Lucille Bluth", emergency_contact2="Michael Bluth", expected_return=datetime(2019, 2, 22, 16, 30)) -hiker4 = Hiker(first_name="Buster", last_name="Bluth", address="The model home", phone_number="55567678999", emergency_contact1="Lucille Bluth", emergency_contact2="Mother", expected_return=datetime(2019, 2, 22, 16, 30)) -hiker5 = Hiker(first_name="Tobias", last_name="Funke", address="The model home", phone_number="14209696969", emergency_contact1="Lindsay Bluth-Funke", emergency_contact2="Michael Bluth", expected_return=datetime(2019, 2, 22, 16, 30)) -hiker6 = Hiker(first_name="Lucille", last_name="Bluth", address="123 Ocean View Appartments Unit 42", phone_number="19998887777", emergency_contact1="George Bluth Sr.", emergency_contact2="Oscar Bluth", expected_return=datetime(2019, 2, 22, 16, 30)) -hiker7 = Hiker(first_name="George", last_name="Bluth", address="Orange County Prison", phone_number="18887776565", emergency_contact1="Lucille Bluth", emergency_contact2="GOB Bluth", expected_return=datetime(2019, 2, 22, 16, 30)) -hiker8 = Hiker(first_name="Oscar", last_name="Bluth", address="123 Ocean View Appartments Unit 42", phone_number="17776565555", emergency_contact1="Lucille Bluth", emergency_contact2=None, expected_return=datetime(2019, 2, 22, 16, 30)) -hiker9 = Hiker(first_name="George-Michael", last_name="Bluth", address="The model home", phone_number="12223334444", emergency_contact1="Michael Bluth", emergency_contact2="Lindsay Bluth", expected_return=datetime(2019, 2, 22, 16, 30)) -hiker10 = Hiker(first_name="Maeby", last_name="Funke", address="The model home", phone_number="13334445555", emergency_contact1="Lindsay Bluth-Funke", emergency_contact2="Tobias Funke", expected_return=datetime(2019, 2, 22, 16, 30)) +hiker1 = Hiker(first_name="Michael", last_name="Bluth", + address="The model home", phone_number="12223334444", + emergency_contact1="Lucille Bluth", emergency_contact2=None, + expected_return=datetime(2019, 2, 22, 16, 30)) +hiker2 = Hiker(first_name="GOB", last_name="Bluth", + address="The model home", phone_number="13334445555", + emergency_contact1="Lucille Bluth", + emergency_contact2="Michael Bluth", + expected_return=datetime(2019, 2, 22, 16, 30)) +hiker3 = Hiker(first_name="Lindsay", last_name="Bluth-Funke", + address="The model home", phone_number="14445556767", + emergency_contact1="Lucille Bluth", + emergency_contact2="Michael Bluth", + expected_return=datetime(2019, 2, 22, 16, 30)) +hiker4 = Hiker(first_name="Buster", last_name="Bluth", + address="The model home", phone_number="55567678999", + emergency_contact1="Lucille Bluth", + emergency_contact2="Mother", + expected_return=datetime(2019, 2, 22, 16, 30)) +hiker5 = Hiker(first_name="Tobias", last_name="Funke", + address="The model home", phone_number="14209696969", + emergency_contact1="Lindsay Bluth-Funke", + emergency_contact2="Michael Bluth", + expected_return=datetime(2019, 2, 22, 16, 30)) +hiker6 = Hiker(first_name="Lucille", last_name="Bluth", + address="123 Ocean View Appartments Unit 42", + phone_number="19998887777", + emergency_contact1="George Bluth Sr.", + emergency_contact2="Oscar Bluth", + expected_return=datetime(2019, 2, 22, 16, 30)) +hiker7 = Hiker(first_name="George", last_name="Bluth", + address="Orange County Prison", + phone_number="18887776565", + emergency_contact1="Lucille Bluth", + emergency_contact2="GOB Bluth", + expected_return=datetime(2019, 2, 22, 16, 30)) +hiker8 = Hiker(first_name="Oscar", last_name="Bluth", + address="123 Ocean View Appartments Unit 42", + phone_number="17776565555", + emergency_contact1="Lucille Bluth", + emergency_contact2=None, + expected_return=datetime(2019, 2, 22, 16, 30)) +hiker9 = Hiker(first_name="George-Michael", last_name="Bluth", + address="The model home", + phone_number="12223334444", + emergency_contact1="Michael Bluth", + emergency_contact2="Lindsay Bluth", + expected_return=datetime(2019, 2, 22, 16, 30)) +hiker10 = Hiker(first_name="Maeby", last_name="Funke", + address="The model home", + phone_number="13334445555", + emergency_contact1="Lindsay Bluth-Funke", + emergency_contact2="Tobias Funke", + expected_return=datetime(2019, 2, 22, 16, 30)) session.add(hiker1) session.add(hiker2) diff --git a/back-end/database_setup.py b/back-end/database_setup.py index c398c00..ee1f315 100644 --- a/back-end/database_setup.py +++ b/back-end/database_setup.py @@ -11,12 +11,13 @@ Base = declarative_base() association_table = Table('association', Base.metadata, - Column('hiker_id', Integer, - ForeignKey('hiker.id')), - Column('trip_id', Integer, - ForeignKey('trip.id')) + Column('hiker_id', Integer, + ForeignKey('hiker.id')), + Column('trip_id', Integer, + ForeignKey('trip.id')) ) + class Hiker(Base): __tablename__ = 'hiker' id = Column(Integer, primary_key=True, autoincrement=True) @@ -27,12 +28,13 @@ class Hiker(Base): email = Column(String(32)) emergency_contact1 = Column(String(32)) emergency_contact2 = Column(String(32)) - expected_return = Column(DateTime()) # WHENEVER WE WANT TO ESTABLISH A DATE, YOU HAVE TO PASS IT IN - trip = relationship('Trip', secondary=association_table, back_populates="hikers") + expected_return = Column(DateTime()) + trip = relationship('Trip', secondary=association_table, + back_populates="hikers") @property def serialize(self): - return { # HOW TO UNALPHABETIZE JSON SERIALIZING???? + return { # HOW TO UNALPHABETIZE JSON SERIALIZING???? '1) first_name': self.first_name, '2) last_name': self.last_name, '3) address': self.address, @@ -43,17 +45,19 @@ def serialize(self): '8) expected_return': self.expected_return } + class Trip(Base): __tablename__ = 'trip' id = Column(Integer, primary_key=True, autoincrement=True) trip_name = Column(String(32)) - hikers = relationship('Hiker', secondary=association_table, back_populates="trip") + hikers = relationship('Hiker', secondary=association_table, + back_populates="trip") @property def serialize(self): return { '1. trip_name': self.trip_name, - '2. hikers': [ hiker.serialize for hiker in self.hikers ] + '2. hikers': [hiker.serialize for hiker in self.hikers] } # parser = argparse.ArgumentParser() @@ -66,7 +70,6 @@ def serialize(self): # print "Created regular database" # engine = create_engine('sqlite:///database.db') + engine = create_engine('sqlite:///database.db') Base.metadata.create_all(engine) - -# information (name, contact info, expected checkout date) and trips (groups of hikers) From bbcd55b346bde257cb2826d1ec5dfb89afcc98c3 Mon Sep 17 00:00:00 2001 From: davidm19 Date: Sun, 17 Feb 2019 07:41:31 -0800 Subject: [PATCH 6/8] feat: implement method checking if hiker is overdue --- back-end/application.py | 10 ++++++++++ back-end/database_populator.py | 20 ++++++++++---------- back-end/test.py | 31 +++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 back-end/test.py diff --git a/back-end/application.py b/back-end/application.py index c00baa4..1a72b3c 100644 --- a/back-end/application.py +++ b/back-end/application.py @@ -6,6 +6,7 @@ from database_setup import Base, Hiker, engine, Trip from flask import session as login_session import random +import datetime import string import json from flask import make_response @@ -142,6 +143,15 @@ def delete_hiker(id): session.commit() return flask.jsonify("Hiker successfully deleted! \n"), 200 +# IF THIS RETURNS TRUE THEN COLOR THE HIKER +def is_overdue(id): + hiker_to_check = session.query(Hiker).filter_by(id=id).one() + current_date = datetime.datetime.today() + if hiker_to_check.expected_return < current_date: + return True + else: + return False + if __name__ == "__main__": app.debug = True diff --git a/back-end/database_populator.py b/back-end/database_populator.py index a5e2dc8..3a2436f 100644 --- a/back-end/database_populator.py +++ b/back-end/database_populator.py @@ -13,57 +13,57 @@ hiker1 = Hiker(first_name="Michael", last_name="Bluth", address="The model home", phone_number="12223334444", emergency_contact1="Lucille Bluth", emergency_contact2=None, - expected_return=datetime(2019, 2, 22, 16, 30)) + expected_return=datetime(2019, 1, 22, 16, 30)) hiker2 = Hiker(first_name="GOB", last_name="Bluth", address="The model home", phone_number="13334445555", emergency_contact1="Lucille Bluth", emergency_contact2="Michael Bluth", - expected_return=datetime(2019, 2, 22, 16, 30)) + expected_return=datetime(2019, 1, 22, 16, 30)) hiker3 = Hiker(first_name="Lindsay", last_name="Bluth-Funke", address="The model home", phone_number="14445556767", emergency_contact1="Lucille Bluth", emergency_contact2="Michael Bluth", - expected_return=datetime(2019, 2, 22, 16, 30)) + expected_return=datetime(2019, 1, 22, 16, 30)) hiker4 = Hiker(first_name="Buster", last_name="Bluth", address="The model home", phone_number="55567678999", emergency_contact1="Lucille Bluth", emergency_contact2="Mother", - expected_return=datetime(2019, 2, 22, 16, 30)) + expected_return=datetime(2019, 1, 22, 16, 30)) hiker5 = Hiker(first_name="Tobias", last_name="Funke", address="The model home", phone_number="14209696969", emergency_contact1="Lindsay Bluth-Funke", emergency_contact2="Michael Bluth", - expected_return=datetime(2019, 2, 22, 16, 30)) + expected_return=datetime(2019, 1, 22, 16, 30)) hiker6 = Hiker(first_name="Lucille", last_name="Bluth", address="123 Ocean View Appartments Unit 42", phone_number="19998887777", emergency_contact1="George Bluth Sr.", emergency_contact2="Oscar Bluth", - expected_return=datetime(2019, 2, 22, 16, 30)) + expected_return=datetime(2019, 1, 22, 16, 30)) hiker7 = Hiker(first_name="George", last_name="Bluth", address="Orange County Prison", phone_number="18887776565", emergency_contact1="Lucille Bluth", emergency_contact2="GOB Bluth", - expected_return=datetime(2019, 2, 22, 16, 30)) + expected_return=datetime(2019, 1, 22, 16, 30)) hiker8 = Hiker(first_name="Oscar", last_name="Bluth", address="123 Ocean View Appartments Unit 42", phone_number="17776565555", emergency_contact1="Lucille Bluth", emergency_contact2=None, - expected_return=datetime(2019, 2, 22, 16, 30)) + expected_return=datetime(2019, 1, 22, 16, 30)) hiker9 = Hiker(first_name="George-Michael", last_name="Bluth", address="The model home", phone_number="12223334444", emergency_contact1="Michael Bluth", emergency_contact2="Lindsay Bluth", - expected_return=datetime(2019, 2, 22, 16, 30)) + expected_return=datetime(2019, 1, 22, 16, 30)) hiker10 = Hiker(first_name="Maeby", last_name="Funke", address="The model home", phone_number="13334445555", emergency_contact1="Lindsay Bluth-Funke", emergency_contact2="Tobias Funke", - expected_return=datetime(2019, 2, 22, 16, 30)) + expected_return=datetime(2019, 1, 22, 16, 30)) session.add(hiker1) session.add(hiker2) diff --git a/back-end/test.py b/back-end/test.py new file mode 100644 index 0000000..f47a150 --- /dev/null +++ b/back-end/test.py @@ -0,0 +1,31 @@ +# project/test_basic.py +from flask import Flask, render_template, request, redirect, url_for, jsonify +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from sqlalchemy.ext.automap import automap_base +from database_setup import Base, Hiker, Trip, engine +# from test_database_setup import Trip +import os +import unittest +import datetime +from application import * +from application import session, app +from flask import json + +app = Flask(__name__) +engine = create_engine('sqlite:///database.db') +Base.metadata.bind = engine +DBSession = sessionmaker(bind=engine) +session = DBSession() + + +class BasicTests(unittest.TestCase): + + def test_is_overdue(self): + # with app.app_context(): + results = is_overdue(1) + expected_results = True + self.assertEqual(results, expected_results) + +if __name__ == "__main__": + unittest.main() From f0c44ae9a6a85470ff3014443fa257acca93480e Mon Sep 17 00:00:00 2001 From: davidm19 Date: Sun, 17 Feb 2019 08:23:45 -0800 Subject: [PATCH 7/8] change script to suit current workload --- scripts/api.sh | 13 ------------- scripts/test.sh | 12 ------------ 2 files changed, 25 deletions(-) delete mode 100644 scripts/test.sh diff --git a/scripts/api.sh b/scripts/api.sh index a8f2b8f..debfc1f 100644 --- a/scripts/api.sh +++ b/scripts/api.sh @@ -1,14 +1,5 @@ #!/bin/bash -# Documentation -read -r -d '' DOCUMENTATION < Date: Sun, 17 Feb 2019 08:51:38 -0800 Subject: [PATCH 8/8] test: test add_hiker function --- back-end/database_setup.py | 2 +- back-end/test.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/back-end/database_setup.py b/back-end/database_setup.py index f34636e..904a33c 100644 --- a/back-end/database_setup.py +++ b/back-end/database_setup.py @@ -34,7 +34,7 @@ class Hiker(Base): @property def serialize(self): - return { # HOW TO UNALPHABETIZE JSON SERIALIZING???? + return { '1) first_name': self.first_name, '2) last_name': self.last_name, '3) address': self.address, diff --git a/back-end/test.py b/back-end/test.py index f47a150..874b6aa 100644 --- a/back-end/test.py +++ b/back-end/test.py @@ -27,5 +27,19 @@ def test_is_overdue(self): expected_results = True self.assertEqual(results, expected_results) + def test_new_hiker(self): + with app.app_context(): + expected_results = {'1) first_name': "Michael", + '2) last_name': "Bluth", + '3) address': "The model home", + '4) phone_number': "12223334444", + '5) emergency_contact1': "Lucille Bluth", + '6) emergency_contact2': None, + '7) expected_return': "some date" + } + results = show_hiker(1) + response_json = json.loads(results[0].data.decode('utf-8')) + self.assertEqual(response_json, expected_results) + if __name__ == "__main__": unittest.main()