From b45a4a3e72077447ee6dd9e2aa318a69047f5f80 Mon Sep 17 00:00:00 2001 From: Edwin Marte Date: Sun, 25 Jun 2017 10:28:41 -0400 Subject: [PATCH 1/3] Refactoring Python Files, Adding GitIgnore and Adding Bash File to fix Vagrant Halt Bug on GRU installation --- .gitignore | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Vagrantfile | 3 +- pg_config.sh | 1 + project.py | 31 +++++++++---------- 4 files changed, 102 insertions(+), 17 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..0f68321c --- /dev/null +++ b/.gitignore @@ -0,0 +1,84 @@ +.DS_Store +.idea + +__pycache__ +prank/ + + +# Created by https://www.gitignore.io/api/node + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +### grunt ### +# Grunt usually compiles files inside this directory +dist/ + +# Grunt usually preprocesses files such as coffeescript, compass... inside the .tmp directory +.tmp/ + +# End of https://www.gitignore.io/api/grunt +.vagrant + +# Python +*.pyc + +# Database +*.db diff --git a/Vagrantfile b/Vagrantfile index 6935ad01..ed843f49 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -5,10 +5,9 @@ VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| - config.vm.provision :shell, path: "pg_config.sh" config.vm.box = "bento/ubuntu-16.04-i386" - config.vm.network "forwarded_port", guest: 5000, host: 5000 + config.vm.network "forwarded_port", guest: 5040, host: 5040 # Work around disconnected virtual network cable. config.vm.provider "virtualbox" do |vb| diff --git a/pg_config.sh b/pg_config.sh index 6f78027b..b3f788d1 100644 --- a/pg_config.sh +++ b/pg_config.sh @@ -1,4 +1,5 @@ apt-get -qqy update +DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade apt-get -qqy upgrade apt-get -qqy install postgresql python-psycopg2 apt-get -qqy install python-sqlalchemy diff --git a/project.py b/project.py index 0c329b4e..a9ba8d53 100644 --- a/project.py +++ b/project.py @@ -6,7 +6,7 @@ from database_setup import Base, Restaurant, MenuItem -#Connect to Database and create database session +# Connect to Database and create database session engine = create_engine('sqlite:///restaurantmenu.db') Base.metadata.bind = engine @@ -14,7 +14,7 @@ session = DBSession() -#JSON APIs to view Restaurant Information +# JSON APIs to view Restaurant Information @app.route('/restaurant//menu/JSON') def restaurantMenuJSON(restaurant_id): restaurant = session.query(Restaurant).filter_by(id = restaurant_id).one() @@ -27,20 +27,22 @@ def menuItemJSON(restaurant_id, menu_id): Menu_Item = session.query(MenuItem).filter_by(id = menu_id).one() return jsonify(Menu_Item = Menu_Item.serialize) + @app.route('/restaurant/JSON') def restaurantsJSON(): restaurants = session.query(Restaurant).all() return jsonify(restaurants= [r.serialize for r in restaurants]) -#Show all restaurants +# Show all restaurants @app.route('/') @app.route('/restaurant/') def showRestaurants(): restaurants = session.query(Restaurant).order_by(asc(Restaurant.name)) return render_template('restaurants.html', restaurants = restaurants) -#Create a new restaurant + +# Create a new restaurant @app.route('/restaurant/new/', methods=['GET','POST']) def newRestaurant(): if request.method == 'POST': @@ -52,7 +54,8 @@ def newRestaurant(): else: return render_template('newRestaurant.html') -#Edit a restaurant + +# Edit a restaurant @app.route('/restaurant//edit/', methods = ['GET', 'POST']) def editRestaurant(restaurant_id): editedRestaurant = session.query(Restaurant).filter_by(id = restaurant_id).one() @@ -65,7 +68,7 @@ def editRestaurant(restaurant_id): return render_template('editRestaurant.html', restaurant = editedRestaurant) -#Delete a restaurant +# Delete a restaurant @app.route('/restaurant//delete/', methods = ['GET','POST']) def deleteRestaurant(restaurant_id): restaurantToDelete = session.query(Restaurant).filter_by(id = restaurant_id).one() @@ -77,7 +80,8 @@ def deleteRestaurant(restaurant_id): else: return render_template('deleteRestaurant.html',restaurant = restaurantToDelete) -#Show a restaurant menu + +# Show a restaurant menu @app.route('/restaurant//') @app.route('/restaurant//menu/') def showMenu(restaurant_id): @@ -86,8 +90,7 @@ def showMenu(restaurant_id): return render_template('menu.html', items = items, restaurant = restaurant) - -#Create a new menu item +# Create a new menu item @app.route('/restaurant//menu/new/',methods=['GET','POST']) def newMenuItem(restaurant_id): restaurant = session.query(Restaurant).filter_by(id = restaurant_id).one() @@ -100,10 +103,10 @@ def newMenuItem(restaurant_id): else: return render_template('newmenuitem.html', restaurant_id = restaurant_id) -#Edit a menu item + +# Edit a menu item @app.route('/restaurant//menu//edit', methods=['GET','POST']) def editMenuItem(restaurant_id, menu_id): - editedItem = session.query(MenuItem).filter_by(id = menu_id).one() restaurant = session.query(Restaurant).filter_by(id = restaurant_id).one() if request.method == 'POST': @@ -123,7 +126,7 @@ def editMenuItem(restaurant_id, menu_id): return render_template('editmenuitem.html', restaurant_id = restaurant_id, menu_id = menu_id, item = editedItem) -#Delete a menu item +# Delete a menu item @app.route('/restaurant//menu//delete', methods = ['GET','POST']) def deleteMenuItem(restaurant_id,menu_id): restaurant = session.query(Restaurant).filter_by(id = restaurant_id).one() @@ -137,9 +140,7 @@ def deleteMenuItem(restaurant_id,menu_id): return render_template('deleteMenuItem.html', item = itemToDelete) - - if __name__ == '__main__': app.secret_key = 'super_secret_key' app.debug = True - app.run(host = '0.0.0.0', port = 5000) + app.run(host = '0.0.0.0', port = 5040) From 089e0ddb06a6884de9a2ae1fc18da717145249ff Mon Sep 17 00:00:00 2001 From: Edwin Marte Date: Sun, 25 Jun 2017 10:41:26 -0400 Subject: [PATCH 2/3] Complying with PEP8 Standards --- Vagrantfile | 2 +- database_setup.py | 27 ++++++++--------- project.py | 74 +++++++++++++++++++++++++---------------------- 3 files changed, 53 insertions(+), 50 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index ed843f49..afc4e8be 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -7,7 +7,7 @@ VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.provision :shell, path: "pg_config.sh" config.vm.box = "bento/ubuntu-16.04-i386" - config.vm.network "forwarded_port", guest: 5040, host: 5040 + config.vm.network "forwarded_port", guest: 5000, host: 5000 # Work around disconnected virtual network cable. config.vm.provider "virtualbox" do |vb| diff --git a/database_setup.py b/database_setup.py index ec4d7295..b5971c0e 100644 --- a/database_setup.py +++ b/database_setup.py @@ -5,6 +5,7 @@ Base = declarative_base() + class Restaurant(Base): __tablename__ = 'restaurant' @@ -13,39 +14,35 @@ class Restaurant(Base): @property def serialize(self): - """Return object data in easily serializeable format""" + """ Return object data in easily serializeable format """ return { 'name' : self.name, 'id' : self.id, } - + + class MenuItem(Base): __tablename__ = 'menu_item' - - name =Column(String(80), nullable = False) - id = Column(Integer, primary_key = True) + name =Column(String(80), nullable=False) + id = Column(Integer, primary_key=True) description = Column(String(250)) price = Column(String(8)) course = Column(String(250)) - restaurant_id = Column(Integer,ForeignKey('restaurant.id')) + restaurant_id = Column(Integer, ForeignKey('restaurant.id')) restaurant = relationship(Restaurant) - @property def serialize(self): - """Return object data in easily serializeable format""" + """ Return object data in easily serializeable format """ return { 'name' : self.name, - 'description' : self.description, - 'id' : self.id, - 'price' : self.price, - 'course' : self.course, + 'description' : self.description, + 'id' : self.id, + 'price' : self.price, + 'course' : self.course, } - - engine = create_engine('sqlite:///restaurantmenu.db') - Base.metadata.create_all(engine) diff --git a/project.py b/project.py index a9ba8d53..0e7248d4 100644 --- a/project.py +++ b/project.py @@ -17,21 +17,21 @@ # JSON APIs to view Restaurant Information @app.route('/restaurant//menu/JSON') def restaurantMenuJSON(restaurant_id): - restaurant = session.query(Restaurant).filter_by(id = restaurant_id).one() - items = session.query(MenuItem).filter_by(restaurant_id = restaurant_id).all() + restaurant = session.query(Restaurant).filter_by(id=restaurant_id).one() + items = session.query(MenuItem).filter_by(restaurant_id=restaurant_id).all() return jsonify(MenuItems=[i.serialize for i in items]) @app.route('/restaurant//menu//JSON') def menuItemJSON(restaurant_id, menu_id): - Menu_Item = session.query(MenuItem).filter_by(id = menu_id).one() - return jsonify(Menu_Item = Menu_Item.serialize) + Menu_Item = session.query(MenuItem).filter_by(id=menu_id).one() + return jsonify(Menu_Item=Menu_Item.serialize) @app.route('/restaurant/JSON') def restaurantsJSON(): restaurants = session.query(Restaurant).all() - return jsonify(restaurants= [r.serialize for r in restaurants]) + return jsonify(restaurants=[r.serialize for r in restaurants]) # Show all restaurants @@ -39,14 +39,14 @@ def restaurantsJSON(): @app.route('/restaurant/') def showRestaurants(): restaurants = session.query(Restaurant).order_by(asc(Restaurant.name)) - return render_template('restaurants.html', restaurants = restaurants) + return render_template('restaurants.html', restaurants=restaurants) # Create a new restaurant -@app.route('/restaurant/new/', methods=['GET','POST']) +@app.route('/restaurant/new/', methods=['GET', 'POST']) def newRestaurant(): if request.method == 'POST': - newRestaurant = Restaurant(name = request.form['name']) + newRestaurant = Restaurant(name=request.form['name']) session.add(newRestaurant) flash('New Restaurant %s Successfully Created' % newRestaurant.name) session.commit() @@ -56,59 +56,65 @@ def newRestaurant(): # Edit a restaurant -@app.route('/restaurant//edit/', methods = ['GET', 'POST']) +@app.route('/restaurant//edit/', methods=['GET', 'POST']) def editRestaurant(restaurant_id): - editedRestaurant = session.query(Restaurant).filter_by(id = restaurant_id).one() + editedRestaurant = session.query(Restaurant).filter_by(id=restaurant_id).one() if request.method == 'POST': if request.form['name']: editedRestaurant.name = request.form['name'] flash('Restaurant Successfully Edited %s' % editedRestaurant.name) return redirect(url_for('showRestaurants')) else: - return render_template('editRestaurant.html', restaurant = editedRestaurant) + return render_template('editRestaurant.html', restaurant=editedRestaurant) # Delete a restaurant -@app.route('/restaurant//delete/', methods = ['GET','POST']) +@app.route('/restaurant//delete/', methods=['GET', 'POST']) def deleteRestaurant(restaurant_id): - restaurantToDelete = session.query(Restaurant).filter_by(id = restaurant_id).one() + restaurantToDelete = session.query(Restaurant).filter_by(id=restaurant_id).one() if request.method == 'POST': session.delete(restaurantToDelete) flash('%s Successfully Deleted' % restaurantToDelete.name) session.commit() - return redirect(url_for('showRestaurants', restaurant_id = restaurant_id)) + return redirect(url_for('showRestaurants', restaurant_id=restaurant_id)) else: - return render_template('deleteRestaurant.html',restaurant = restaurantToDelete) + return render_template('deleteRestaurant.html', restaurant=restaurantToDelete) # Show a restaurant menu @app.route('/restaurant//') @app.route('/restaurant//menu/') def showMenu(restaurant_id): - restaurant = session.query(Restaurant).filter_by(id = restaurant_id).one() - items = session.query(MenuItem).filter_by(restaurant_id = restaurant_id).all() - return render_template('menu.html', items = items, restaurant = restaurant) + restaurant = session.query(Restaurant).filter_by(id=restaurant_id).one() + items = session.query(MenuItem).filter_by(restaurant_id=restaurant_id).all() + return render_template('menu.html', items=items, restaurant=restaurant) # Create a new menu item -@app.route('/restaurant//menu/new/',methods=['GET','POST']) +@app.route('/restaurant//menu/new/', methods=['GET', 'POST']) def newMenuItem(restaurant_id): - restaurant = session.query(Restaurant).filter_by(id = restaurant_id).one() + restaurant = session.query(Restaurant).filter_by(id=restaurant_id).one() if request.method == 'POST': - newItem = MenuItem(name = request.form['name'], description = request.form['description'], price = request.form['price'], course = request.form['course'], restaurant_id = restaurant_id) + newItem = MenuItem( + name=request.form['name'], + description=request.form['description'], + price=request.form['price'], + course=request.form['course'], + restaurant_id=restaurant_id + ) session.add(newItem) session.commit() flash('New Menu %s Item Successfully Created' % (newItem.name)) - return redirect(url_for('showMenu', restaurant_id = restaurant_id)) + return redirect(url_for('showMenu', restaurant_id=restaurant_id)) else: - return render_template('newmenuitem.html', restaurant_id = restaurant_id) + return render_template('newmenuitem.html', restaurant_id=restaurant_id) # Edit a menu item -@app.route('/restaurant//menu//edit', methods=['GET','POST']) +@app.route('/restaurant//menu//edit', methods=['GET', 'POST']) def editMenuItem(restaurant_id, menu_id): - editedItem = session.query(MenuItem).filter_by(id = menu_id).one() - restaurant = session.query(Restaurant).filter_by(id = restaurant_id).one() + editedItem = session.query(MenuItem).filter_by(id=menu_id).one() + restaurant = session.query(Restaurant).filter_by(id=restaurant_id).one() if request.method == 'POST': if request.form['name']: editedItem.name = request.form['name'] @@ -121,26 +127,26 @@ def editMenuItem(restaurant_id, menu_id): session.add(editedItem) session.commit() flash('Menu Item Successfully Edited') - return redirect(url_for('showMenu', restaurant_id = restaurant_id)) + return redirect(url_for('showMenu', restaurant_id=restaurant_id)) else: - return render_template('editmenuitem.html', restaurant_id = restaurant_id, menu_id = menu_id, item = editedItem) + return render_template('editmenuitem.html', restaurant_id=restaurant_id, menu_id=menu_id, item=editedItem) # Delete a menu item -@app.route('/restaurant//menu//delete', methods = ['GET','POST']) +@app.route('/restaurant//menu//delete', methods=['GET', 'POST']) def deleteMenuItem(restaurant_id,menu_id): - restaurant = session.query(Restaurant).filter_by(id = restaurant_id).one() - itemToDelete = session.query(MenuItem).filter_by(id = menu_id).one() + restaurant = session.query(Restaurant).filter_by(id=restaurant_id).one() + itemToDelete = session.query(MenuItem).filter_by(id=menu_id).one() if request.method == 'POST': session.delete(itemToDelete) session.commit() flash('Menu Item Successfully Deleted') - return redirect(url_for('showMenu', restaurant_id = restaurant_id)) + return redirect(url_for('showMenu', restaurant_id=restaurant_id)) else: - return render_template('deleteMenuItem.html', item = itemToDelete) + return render_template('deleteMenuItem.html', item=itemToDelete) if __name__ == '__main__': app.secret_key = 'super_secret_key' app.debug = True - app.run(host = '0.0.0.0', port = 5040) + app.run(host='0.0.0.0', port=5000) From 66baad279149d3ade5b5df8af31abd0a1f12a52c Mon Sep 17 00:00:00 2001 From: Edwin Marte Date: Sun, 25 Jun 2017 11:12:36 -0400 Subject: [PATCH 3/3] Adding Project Auto Init lines in Bash File and Updating Ignore --- .gitignore | 80 ++++------------------------------------------------ pg_config.sh | 6 ++++ 2 files changed, 12 insertions(+), 74 deletions(-) diff --git a/.gitignore b/.gitignore index 0f68321c..b797b448 100644 --- a/.gitignore +++ b/.gitignore @@ -1,84 +1,16 @@ +# MacOS .DS_Store + +# JetBrains IDE .idea +# Python __pycache__ -prank/ - - -# Created by https://www.gitignore.io/api/node - -### Node ### -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file .env +*.pyc -### grunt ### -# Grunt usually compiles files inside this directory -dist/ - -# Grunt usually preprocesses files such as coffeescript, compass... inside the .tmp directory -.tmp/ - -# End of https://www.gitignore.io/api/grunt +# Vagrant .vagrant -# Python -*.pyc - # Database *.db diff --git a/pg_config.sh b/pg_config.sh index b3f788d1..f772c390 100644 --- a/pg_config.sh +++ b/pg_config.sh @@ -11,3 +11,9 @@ pip install Flask-Login==0.1.3 pip install oauth2client pip install requests pip install httplib2 + +cd /vagrant +python database_setup.py +python lotsofmenus.py +echo "Project Started and Running. You can press CTRL+C to close Shell Script and project will continue running inside vagrant" +python project.py