diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..b797b448 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# MacOS +.DS_Store + +# JetBrains IDE +.idea + +# Python +__pycache__ +.env +*.pyc + +# Vagrant +.vagrant + +# Database +*.db diff --git a/Vagrantfile b/Vagrantfile index 6935ad01..afc4e8be 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -5,7 +5,6 @@ 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 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/pg_config.sh b/pg_config.sh index 6f78027b..f772c390 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 @@ -10,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 diff --git a/project.py b/project.py index 0c329b4e..0e7248d4 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,37 +14,39 @@ 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() - 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 +# 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) + return render_template('restaurants.html', restaurants=restaurants) + -#Create a new restaurant -@app.route('/restaurant/new/', methods=['GET','POST']) +# Create a new restaurant +@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() @@ -52,60 +54,67 @@ def newRestaurant(): else: return render_template('newRestaurant.html') -#Edit a restaurant -@app.route('/restaurant//edit/', methods = ['GET', 'POST']) + +# Edit a restaurant +@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']) +# Delete a restaurant +@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 + +# 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']) +# 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() + 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']) -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() +# 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': if request.form['name']: editedItem.name = request.form['name'] @@ -118,28 +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']) +# 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() - 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 = 5000) + app.run(host='0.0.0.0', port=5000)