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

Initial Upload #2

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
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
Next Next commit
Initial Upload
Initial Upload
karlastone4 committed Jul 22, 2019

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
commit 7bd6164f4353ad53d9d7b81b33b3827ecd4bbd8b
10 changes: 10 additions & 0 deletions NewPirate(Original Flask)/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# app.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mypyrats.db'
app.secret_key = "flask rocks!"

db = SQLAlchemy(app)
35 changes: 35 additions & 0 deletions NewPirate(Original Flask)/db_creator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from sqlalchemy import create_engine, ForeignKey
from sqlalchemy import Column, Date, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref

engine = create_engine('sqlite:///mypyrats.db', echo=True)
Base = declarative_base()


class Ship(Base):
__tablename__ = "ship"

id = Column(Integer, primary_key=True)
name = Column(String)

def __repr__(self):
return "<Ship: {}>".format(self.name)


class Pirate(Base):
""""""
__tablename__ = "pirates"

id = Column(Integer, primary_key=True)
name = Column(String)
port = Column(String)
good_or_evil = Column(String)

ship_id = Column(Integer, ForeignKey("ship.id"))
ship = relationship("Ship", backref=backref(
"pirate", order_by=id))


# create tables
Base.metadata.create_all(engine)
12 changes: 12 additions & 0 deletions NewPirate(Original Flask)/db_setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite:///mypyrats.db', convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()


21 changes: 21 additions & 0 deletions NewPirate(Original Flask)/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# forms.py

from wtforms import Form, StringField, SelectField, validators

class ShipForm(Form):
choices = [('Ship', 'Ship'),
('Pirate', 'Pirate'),
('Port', 'Port')]
select = SelectField('Search for Pirate:', choices=choices)
search = StringField('')


class PirateForm(Form):
good_or_evil = [('Good', 'Good'),
('Evil', 'Evil'),
('Depends', 'Depends')
]
name = StringField('Names')
ship = StringField('Ship')
port = StringField('Port')
good_or_evil = SelectField('Side', choices=good_or_evil)
134 changes: 134 additions & 0 deletions NewPirate(Original Flask)/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
# main.py

from app import app
from db_setup import db_session
from forms import PirateForm, ShipForm
from flask import flash, render_template, request, redirect
from models import Ship, Pirate
from tables import Results




@app.route('/', methods=['GET', 'POST'])
def index():
search = ShipForm(request.form)
if request.method == 'POST':
return search_results(search)

return render_template('index.html', form=search)


@app.route('/results')
def search_results(search):
results = []
search_string = search.data['search']

if search_string:
if search.data['select'] == 'Ship':
qry = db_session.query(Pirate, Ship).filter(
Ship.id==Pirate.ship_id).filter(
Ship.name.contains(search_string))
results = [item[0] for item in qry.all()]
elif search.data['select'] == 'Pirate':
qry = db_session.query(Pirate).filter(
Pirate.name.contains(search_string))
results = qry.all()
else:
qry = db_session.query(Pirate)
results = qry.all()
else:
qry = db_session.query(Pirate)
results = qry.all()

if not results:
flash('No results found!')
return redirect('/')
else:
# display results
table = Results(results)
table.border = True
return render_template('results.html', table=table)


@app.route('/new_pirate', methods=['GET', 'POST'])
def new_pirate():
"""
Add a new pirates
"""
form = PirateForm(request.form)

if request.method == 'POST' and form.validate():
# save the pirate
pirate = Pirate()
save_changes(pirate, form, new=True)
flash('Pirate created successfully!')
return redirect('/')

return render_template('new_pirate.html', form=form)

def save_changes(pirate, form, new=False):
"""
Save the changes to the database
"""
# Get data from form and assign it to the correct attributes
# of the SQLAlchemy table object
ship = Ship()
ship.name = form.ship.data

pirate.ship = ship
pirate.name = form.name.data
pirate.port = form.port.data
pirate.good_or_evil = form.good_or_evil.data

if new:
# Add the new album to the database
db_session.add(pirate)

# commit the data to the database
db_session.commit()

@app.route('/item/<int:id>', methods=['GET', 'POST'])
def edit(id):
qry = db_session.query(Pirate).filter(
Pirate.id==id)
pirate = qry.first()

if pirate:
form = PirateForm(formdata=request.form, obj=pirate)
if request.method == 'POST' and form.validate():
# save edits
save_changes(pirate, form)
flash('Pirate updated successfully!')
return redirect('/')
return render_template('edit_pirate.html', form=form)
else:
return 'Error loading #{id}'.format(id=id)

@app.route('/delete/<int:id>', methods=['GET', 'POST'])
def delete(id):
"""
Delete the item in the database that matches the specified
id in the url
"""
qry = db_session.query(Pirate).filter(
Pirate.id==id)
pirate = qry.first()

if pirate:
form = PirateForm(formdata=request.form, obj=pirate)
if request.method == 'POST' and form.validate():
db_session.delete(pirate)
db_session.commit()

flash('Pirate deleted successfully!')
return redirect('/')

return render_template('delete_pirate.html', form=form)
else:
'Error deleting #{id}'.format(id=id)


if __name__ == '__main__':
import os
app.run(debug=True)
25 changes: 25 additions & 0 deletions NewPirate(Original Flask)/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from app import db


class Ship(db.Model):
__tablename__ = "ship"

id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)

def __repr__(self):
return "{}".format(self.name)


class Pirate(db.Model):
""""""
__tablename__ = "pirates"

id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
port = db.Column(db.String)
good_or_evil = db.Column(db.String)

ship_id = db.Column(db.Integer, db.ForeignKey("ship.id"))
ship = db.relationship("Ship", backref=db.backref(
"ship", order_by=id), lazy=True)
10 changes: 10 additions & 0 deletions NewPirate(Original Flask)/tables.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from flask_table import Table, Col, LinkCol

class Results(Table):
id = Col('Id', show=False)
name = Col('Names')
ship = Col('Ship')
port = Col('Port')
good_or_evil = Col('Side')
edit = LinkCol('Edit', 'edit', url_kwargs=dict(id='id'))
delete = LinkCol('Delete', 'delete', url_kwargs=dict(id='id'))
12 changes: 12 additions & 0 deletions NewPirate(Original Flask)/templates/_formhelpers.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{% macro render_field(field) %}
<dt>{{ field.label }}
<dd>{{ field(**kwargs)|safe }}
{% if field.errors %}
<ul class=errors>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</dd>
{% endmacro %}
14 changes: 14 additions & 0 deletions NewPirate(Original Flask)/templates/delete_pirate.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<doctype html>
<title>Delete Pirate</title>
<h2>Delete Pirate</h2>

{% from "_formhelpers.html" import render_field %}
<form method=post>
<dl>
{{ render_field(form.name) }}
{{ render_field(form.ship) }}
{{ render_field(form.port) }}
{{ render_field(form.good_or_evil) }}
</dl>
<p><input type=submit value=Delete>
</form>
14 changes: 14 additions & 0 deletions NewPirate(Original Flask)/templates/edit_album.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<doctype html>
<title>Edit Pirate</title>
<h2>Edit Pirate</h2>

{% from "_formhelpers.html" import render_field %}
<form method=post>
<dl>
{{ render_field(form.names) }}
{{ render_field(form.ship) }}
{{ render_field(form.port) }}
{{ render_field(form.good_or_evil) }}
</dl>
<p><input type=submit value=Submit>
</form>
14 changes: 14 additions & 0 deletions NewPirate(Original Flask)/templates/edit_pirate.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<doctype html>
<title>Edit Pirate</title>
<h2>Edit Pirate</h2>

{% from "_formhelpers.html" import render_field %}
<form method=post>
<dl>
{{ render_field(form.name) }}
{{ render_field(form.ship) }}
{{ render_field(form.port) }}
{{ render_field(form.good_or_evil) }}
</dl>
<p><input type=submit value=Submit>
</form>
29 changes: 29 additions & 0 deletions NewPirate(Original Flask)/templates/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<doctype html>
<head>
<title>Pirates</title>
</head>

<h2>Pirates</h2>

<p><p>
<a href="{{ url_for('.new_pirate') }}"> New Pirate </a>

{% with messages = get_flashed_messages() %}
{% if messages %}
<ul class=flashes>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}

{% from "_formhelpers.html" import render_field %}
<form method=post>
<dl>
{{ render_field(form.select) }}
<p>
{{ render_field(form.search) }}
</dl>
<p><input type=submit value=Search>
</form>
14 changes: 14 additions & 0 deletions NewPirate(Original Flask)/templates/new_album.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<doctype html>
<title>New Pirate</title>
<h2>New Pirate</h2>

{% from "_formhelpers.html" import render_field %}
<form method=post>
<dl>
{{ render_field(form.names) }}
{{ render_field(form.ship) }}
{{ render_field(form.port) }}
{{ render_field(form.good_or_evil) }}
</dl>
<p><input type=submit value=Submit>
</form>
14 changes: 14 additions & 0 deletions NewPirate(Original Flask)/templates/new_pirate.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<doctype html>
<title>New Pirate</title>
<h2>New Pirate</h2>

{% from "_formhelpers.html" import render_field %}
<form method=post>
<dl>
{{ render_field(form.name) }}
{{ render_field(form.ship) }}
{{ render_field(form.port) }}
{{ render_field(form.good_or_evil) }}
</dl>
<p><input type=submit value=Submit>
</form>
14 changes: 14 additions & 0 deletions NewPirate(Original Flask)/templates/newpirate.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<doctype html>
<title>New Pirate</title>
<h2>New Pirate</h2>

{% from "_formhelpers.html" import render_field %}
<form method=post>
<dl>
{{ render_field(form.name) }}
{{ render_field(form.ship) }}
{{ render_field(form.port) }}
{{ render_field(form.good_or_evil) }}
</dl>
<p><input type=submit value=Submit>
</form>
3 changes: 3 additions & 0 deletions NewPirate(Original Flask)/templates/results.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<doctype html>
<title>Search Results</title>
{{ table }}