Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bug] Fixing Vagrant Stuck #9

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# MacOS
.DS_Store

# JetBrains IDE
.idea

# Python
__pycache__
.env
*.pyc

# Vagrant
.vagrant

# Database
*.db
1 change: 0 additions & 1 deletion Vagrantfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
27 changes: 12 additions & 15 deletions database_setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

Base = declarative_base()


class Restaurant(Base):
__tablename__ = 'restaurant'

Expand All @@ -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)
7 changes: 7 additions & 0 deletions pg_config.sh
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
103 changes: 55 additions & 48 deletions project.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,106 +6,115 @@
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

DBSession = sessionmaker(bind=engine)
session = DBSession()


#JSON APIs to view Restaurant Information
# JSON APIs to view Restaurant Information
@app.route('/restaurant/<int:restaurant_id>/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/<int:restaurant_id>/menu/<int:menu_id>/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()
return redirect(url_for('showRestaurants'))
else:
return render_template('newRestaurant.html')

#Edit a restaurant
@app.route('/restaurant/<int:restaurant_id>/edit/', methods = ['GET', 'POST'])

# Edit a restaurant
@app.route('/restaurant/<int:restaurant_id>/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/<int:restaurant_id>/delete/', methods = ['GET','POST'])
# Delete a restaurant
@app.route('/restaurant/<int:restaurant_id>/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/<int:restaurant_id>/')
@app.route('/restaurant/<int:restaurant_id>/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/<int:restaurant_id>/menu/new/',methods=['GET','POST'])
# Create a new menu item
@app.route('/restaurant/<int:restaurant_id>/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/<int:restaurant_id>/menu/<int:menu_id>/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/<int:restaurant_id>/menu/<int:menu_id>/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']
Expand All @@ -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/<int:restaurant_id>/menu/<int:menu_id>/delete', methods = ['GET','POST'])
# Delete a menu item
@app.route('/restaurant/<int:restaurant_id>/menu/<int:menu_id>/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)