From dda5fe13f0feac393111c34aa418e573ec3d2688 Mon Sep 17 00:00:00 2001 From: Drew Kirkman Date: Wed, 19 Feb 2020 14:28:17 -0500 Subject: [PATCH 1/9] add global config file --- api/app/config.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 api/app/config.py diff --git a/api/app/config.py b/api/app/config.py new file mode 100644 index 0000000..21b3ce1 --- /dev/null +++ b/api/app/config.py @@ -0,0 +1,4 @@ +db_host = 'honeycomb.at.hive13.org' +db_user = 'access' +db_name = 'door' +db_driver = 'pg8000' \ No newline at end of file From 535442b0c3af180a3caf139e65dc2354434c0748 Mon Sep 17 00:00:00 2001 From: Drew Kirkman Date: Wed, 19 Feb 2020 14:28:35 -0500 Subject: [PATCH 2/9] create database connection in __init__.py --- api/app/__init__.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/api/app/__init__.py b/api/app/__init__.py index 74c2126..08f594b 100644 --- a/api/app/__init__.py +++ b/api/app/__init__.py @@ -6,9 +6,29 @@ app = Flask(__name__) +# Import global config +from app import config + # Import credentials module from app import creds +# Initialize database +import sqlalchemy +import db + +db_url = "postgresql+{}://{}:{}@{}/{}".format( + config.db_driver, + config.db_user, + urllib.parse.quote_plus(creds.db_password), + config.db_host, + config.db_name, +) + +db_engine = sqlalchemy.create_engine(db_url, echo=True) + +db.metadata.bind = db_engine +db_conn = db_engine.connect() + # import endpoint packages from app import test from app import tool From b26cfeebaca2360ef40bfd4178f69e23231cc13e Mon Sep 17 00:00:00 2001 From: Drew Kirkman Date: Wed, 19 Feb 2020 14:45:15 -0500 Subject: [PATCH 3/9] forgot I also need urllib here --- api/app/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/api/app/__init__.py b/api/app/__init__.py index 08f594b..9b02f3d 100644 --- a/api/app/__init__.py +++ b/api/app/__init__.py @@ -15,6 +15,7 @@ # Initialize database import sqlalchemy import db +import urllib db_url = "postgresql+{}://{}:{}@{}/{}".format( config.db_driver, From e2b826e31b1dc6532a6413e01d492e092c20f357 Mon Sep 17 00:00:00 2001 From: Drew Kirkman Date: Wed, 19 Feb 2020 14:56:09 -0500 Subject: [PATCH 4/9] prevent vend from loading its own instance of the db engine --- api/app/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/app/__init__.py b/api/app/__init__.py index 9b02f3d..f354b47 100644 --- a/api/app/__init__.py +++ b/api/app/__init__.py @@ -35,4 +35,4 @@ from app import tool from app import index from app.admin.members import members -from app import vend \ No newline at end of file +#from app import vend \ No newline at end of file From 4360ee54e32793dc323577252a773955b1079b52 Mon Sep 17 00:00:00 2001 From: Drew Kirkman Date: Wed, 19 Feb 2020 14:59:38 -0500 Subject: [PATCH 5/9] move processing to centralized db instance --- api/app/admin/members/members.py | 31 ++----------------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/api/app/admin/members/members.py b/api/app/admin/members/members.py index 97c930c..4671661 100644 --- a/api/app/admin/members/members.py +++ b/api/app/admin/members/members.py @@ -2,35 +2,8 @@ import sqlalchemy import urllib.parse from flask import jsonify, request -import db -from app.creds import db_password, DEVICE, DEVICE_KEY - -#? is there a way for use to move this out of this file? -# I think a lot of files will be using this data along with the `url` var and db connection. -# can we do this in __init__.py? -user = "access" -host = "honeycomb.at.hive13.org" -dbname = "door" -driver = "pg8000" - -# designate url -# format is: dialect+driver://username:password@host:port/database -url = "postgresql+{}://{}:{}@{}/{}".format( - driver, - user, - urllib.parse.quote_plus(db_password), - host, - dbname, -) - -# create sqlalchemy engine -# ? Should echo be True here? -engine = sqlalchemy.create_engine(url, echo=True) - -# Bind to engine & connect (comment out for dev outisde of hive): -db.metadata.bind = engine -conn = engine.connect() +from app import db_conn # member profile @app.route('/api/admin/members/profile/', methods=['GET', 'POST']) @@ -46,7 +19,7 @@ def members(): # try to execute the query, except when it returns an error. try: - result = conn.execute(s, x=str(member_id)) + result = db_conn.execute(s, x=str(member_id)) rows = [dict(row) for row in result] return jsonify(rows) except: From 2fe5a19af2ffe5263245961e5c5bdb412bf9c339 Mon Sep 17 00:00:00 2001 From: Drew Kirkman Date: Wed, 19 Feb 2020 15:00:09 -0500 Subject: [PATCH 6/9] Flask got really touchy about this trailing slash --- api/app/admin/members/members.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/app/admin/members/members.py b/api/app/admin/members/members.py index 4671661..de90abf 100644 --- a/api/app/admin/members/members.py +++ b/api/app/admin/members/members.py @@ -6,7 +6,7 @@ from app import db_conn # member profile -@app.route('/api/admin/members/profile/', methods=['GET', 'POST']) +@app.route('/api/admin/members/profile', methods=['GET', 'POST']) def members(): req_data = request.get_json() From 8fe87a4eedf41097db438c1b1645c1e7529a8c45 Mon Sep 17 00:00:00 2001 From: Drew Kirkman Date: Wed, 19 Feb 2020 15:00:39 -0500 Subject: [PATCH 7/9] get more visibility into why this is failing (can revert later) --- api/app/admin/members/members.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/app/admin/members/members.py b/api/app/admin/members/members.py index de90abf..52d0a00 100644 --- a/api/app/admin/members/members.py +++ b/api/app/admin/members/members.py @@ -22,6 +22,6 @@ def members(): result = db_conn.execute(s, x=str(member_id)) rows = [dict(row) for row in result] return jsonify(rows) - except: - error_message = [{"result": 0, "message": "Invalid Member ID"}] + except Exception as ex: + error_message = [{"result": 0, "message": str(ex)}] return jsonify(error_message) From 968adf69269bcfb6c0246e31dd85f9dbce1ba927 Mon Sep 17 00:00:00 2001 From: Drew Kirkman Date: Wed, 19 Feb 2020 15:01:14 -0500 Subject: [PATCH 8/9] there are some columns that don't play nice with json serialization --- api/app/admin/members/members.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/app/admin/members/members.py b/api/app/admin/members/members.py index 52d0a00..927c3a8 100644 --- a/api/app/admin/members/members.py +++ b/api/app/admin/members/members.py @@ -12,8 +12,8 @@ def members(): member_id = req_data['member_id'] # build query, execute on get request - s = sqlalchemy.text("""SELECT * - FROM members + s = sqlalchemy.text("""SELECT lname, fname, phone, created_at + FROM public.members WHERE member_id = :x """) From 74a9d91702d51bee3b6ac40e39ad39e78204142d Mon Sep 17 00:00:00 2001 From: Heath Blandford Date: Thu, 20 Feb 2020 16:04:29 -0500 Subject: [PATCH 9/9] pull db connection outside of /app/ --- api/app/__init__.py | 24 ------------------------ api/app/admin/members/members.py | 3 +-- api/db/__init__.py | 23 +++++++++++++++++++++++ api/db/config.py | 4 ++++ api/{ => db}/db.py | 0 5 files changed, 28 insertions(+), 26 deletions(-) create mode 100644 api/db/__init__.py create mode 100644 api/db/config.py rename api/{ => db}/db.py (100%) diff --git a/api/app/__init__.py b/api/app/__init__.py index f354b47..5ca7f40 100644 --- a/api/app/__init__.py +++ b/api/app/__init__.py @@ -6,30 +6,6 @@ app = Flask(__name__) -# Import global config -from app import config - -# Import credentials module -from app import creds - -# Initialize database -import sqlalchemy -import db -import urllib - -db_url = "postgresql+{}://{}:{}@{}/{}".format( - config.db_driver, - config.db_user, - urllib.parse.quote_plus(creds.db_password), - config.db_host, - config.db_name, -) - -db_engine = sqlalchemy.create_engine(db_url, echo=True) - -db.metadata.bind = db_engine -db_conn = db_engine.connect() - # import endpoint packages from app import test from app import tool diff --git a/api/app/admin/members/members.py b/api/app/admin/members/members.py index 927c3a8..526f66f 100644 --- a/api/app/admin/members/members.py +++ b/api/app/admin/members/members.py @@ -1,9 +1,8 @@ from app import app import sqlalchemy -import urllib.parse from flask import jsonify, request -from app import db_conn +from db import db_conn # member profile @app.route('/api/admin/members/profile', methods=['GET', 'POST']) diff --git a/api/db/__init__.py b/api/db/__init__.py new file mode 100644 index 0000000..862c4ca --- /dev/null +++ b/api/db/__init__.py @@ -0,0 +1,23 @@ +# Import global config +from db import config + +# Import credentials module +from app import creds + +# Initialize database +import sqlalchemy +from db import db +import urllib + +db_url = "postgresql+{}://{}:{}@{}/{}".format( + config.db_driver, + config.db_user, + urllib.parse.quote_plus(creds.db_password), + config.db_host, + config.db_name, +) + +db_engine = sqlalchemy.create_engine(db_url, echo=True) + +db.metadata.bind = db_engine +db_conn = db_engine.connect() \ No newline at end of file diff --git a/api/db/config.py b/api/db/config.py new file mode 100644 index 0000000..21b3ce1 --- /dev/null +++ b/api/db/config.py @@ -0,0 +1,4 @@ +db_host = 'honeycomb.at.hive13.org' +db_user = 'access' +db_name = 'door' +db_driver = 'pg8000' \ No newline at end of file diff --git a/api/db.py b/api/db/db.py similarity index 100% rename from api/db.py rename to api/db/db.py