Switched from sqlite to mysql database. Moved feeding frequency to the settings table. Got the alert checkboxes working correctly. Started to add update feed method and button to site.
This commit is contained in:
75
app.py
75
app.py
@@ -1,8 +1,9 @@
|
|||||||
from flask import Flask, render_template, request, flash, redirect
|
from flask import Flask, render_template, request, flash, redirect
|
||||||
import datetime
|
import datetime
|
||||||
from sqlalchemy import create_engine, Column, Integer, String
|
from sqlalchemy import create_engine, Column, Integer, String, Date
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
from sqlalchemy.orm import sessionmaker
|
from sqlalchemy.orm import sessionmaker
|
||||||
|
import pymysql
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.config['SECRET_KEY'] = 'fa6166b0218186fb852429060105aca18e0f979240be8ebf'
|
app.config['SECRET_KEY'] = 'fa6166b0218186fb852429060105aca18e0f979240be8ebf'
|
||||||
@@ -14,31 +15,31 @@ class Dates(Base):
|
|||||||
__tablename__ = 'Dates'
|
__tablename__ = 'Dates'
|
||||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
dateTypeID = Column(Integer)
|
dateTypeID = Column(Integer)
|
||||||
dateValue = Column(String)
|
dateValue = Column(Date)
|
||||||
|
|
||||||
|
|
||||||
class DatesMetadata(Base):
|
class DatesMetadata(Base):
|
||||||
__tablename__ = 'DatesMetadata'
|
__tablename__ = 'DatesMetadata'
|
||||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
dateTypeID = Column(Integer)
|
dateTypeID = Column(Integer)
|
||||||
DateTypeName = Column(String)
|
DateTypeName = Column(String(50))
|
||||||
|
|
||||||
|
|
||||||
class Settings(Base):
|
class Settings(Base):
|
||||||
__tablename__ = 'Settings'
|
__tablename__ = 'Settings'
|
||||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
settingType = Column(Integer)
|
settingType = Column(Integer)
|
||||||
settingValue = Column(String)
|
settingValue = Column(String(50))
|
||||||
|
|
||||||
|
|
||||||
class SettingsMetadata(Base):
|
class SettingsMetadata(Base):
|
||||||
__tablename__ = 'SettingsMetadata'
|
__tablename__ = 'SettingsMetadata'
|
||||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
settingTypeID = Column(Integer)
|
settingTypeID = Column(Integer)
|
||||||
settingTypeName = Column(String)
|
settingTypeName = Column(String(50))
|
||||||
|
|
||||||
|
|
||||||
engine = create_engine('sqlite:///static/db.db')
|
engine = create_engine('mysql+pymysql://hydro:pRnCWH/M)dujdifi@db.dandembinski.com:3306/Hydro')
|
||||||
Dates.__table__.create(bind=engine, checkfirst=True)
|
Dates.__table__.create(bind=engine, checkfirst=True)
|
||||||
Settings.__table__.create(bind=engine, checkfirst=True)
|
Settings.__table__.create(bind=engine, checkfirst=True)
|
||||||
DatesMetadata.__table__.create(bind=engine, checkfirst=True)
|
DatesMetadata.__table__.create(bind=engine, checkfirst=True)
|
||||||
@@ -63,58 +64,92 @@ def index():
|
|||||||
# alerts = {'text': False, 'email': True}
|
# alerts = {'text': False, 'email': True}
|
||||||
|
|
||||||
# Get the feeding frequency and set it to an int
|
# Get the feeding frequency and set it to an int
|
||||||
dates['freq'] = int(session.query(Dates).filter_by(dateTypeID=4).first().dateValue)
|
dates['freq'] = int(session.query(Settings).filter_by(settingType=3).first().settingValue)
|
||||||
|
|
||||||
alerts = {'text': False, 'email': True}
|
alerts = {'text': False, 'email': False}
|
||||||
|
|
||||||
# If clicked the update button for dates, grab the new values and save them to the db. Then render the template
|
# If clicked the update button for dates, grab the new values and save them to the db. Then render the template
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
dates['plant'] = request.form['plantDate']
|
dates['plant'] = request.form['plantDate']
|
||||||
dates['last'] = request.form['lastDate']
|
dates['last'] = request.form['lastDate']
|
||||||
dates['next'] = datetime.datetime.strptime(dates['last'],'%Y-%m-%d') + datetime.timedelta(days=dates['freq'])
|
dates['next'] = datetime.datetime.strptime(dates['last'], '%Y-%m-%d') + datetime.timedelta(days=dates['freq'])
|
||||||
|
|
||||||
session.query(Dates).filter_by(dateTypeID=1).update({Dates.dateValue: dates['plant']})
|
session.query(Dates).filter_by(dateTypeID=1).update({Dates.dateValue: dates['plant']})
|
||||||
session.query(Dates).filter_by(dateTypeID=2).update({Dates.dateValue: dates['last']})
|
session.query(Dates).filter_by(dateTypeID=2).update({Dates.dateValue: dates['last']})
|
||||||
session.query(Dates).filter_by(dateTypeID=3).update({Dates.dateValue: dates['next']})
|
session.query(Dates).filter_by(dateTypeID=3).update({Dates.dateValue: dates['next']})
|
||||||
|
|
||||||
|
# grab text message alert box. Set 'True' if checked or null if unchecked
|
||||||
|
if request.form.get('AlertText'):
|
||||||
|
alerts['text'] = 'True'
|
||||||
|
else:
|
||||||
|
alerts['text'] = None
|
||||||
|
# grab email message alert box. Set 'True' if checked or null if unchecked
|
||||||
|
if request.form.get('AlertEmail'):
|
||||||
|
alerts['email'] = 'True'
|
||||||
|
else:
|
||||||
|
alerts['email'] = None
|
||||||
|
|
||||||
|
session.query(Settings).filter_by(settingType=1).update({Settings.settingValue: alerts['text']})
|
||||||
|
session.query(Settings).filter_by(settingType=2).update({Settings.settingValue: alerts['email']})
|
||||||
|
|
||||||
session.commit()
|
session.commit()
|
||||||
return render_template("index.html", plant=dates, alerts=alerts)
|
# return render_template("index.html", plant=dates, alerts=alerts)
|
||||||
|
return redirect('index.html')
|
||||||
# If regular page load, grab all the dates from the db and render the template
|
# If regular page load, grab all the dates from the db and render the template
|
||||||
else:
|
else:
|
||||||
# result = session.query(Dates).filter_by(dateTypeID=1).first()
|
|
||||||
dates['plant'] = session.query(Dates).filter_by(dateTypeID=1).first().dateValue
|
dates['plant'] = session.query(Dates).filter_by(dateTypeID=1).first().dateValue
|
||||||
dates['last'] = session.query(Dates).filter_by(dateTypeID=2).first().dateValue
|
dates['last'] = session.query(Dates).filter_by(dateTypeID=2).first().dateValue
|
||||||
dates['next'] = session.query(Dates).filter_by(dateTypeID=3).first().dateValue
|
dates['next'] = session.query(Dates).filter_by(dateTypeID=3).first().dateValue
|
||||||
# dates['freq'] = session.query(Dates).filter_by(dateTypeID=4).first().dateValue
|
|
||||||
# print(datetime.datetime.strptime(dates['plant'], '%Y-%m-%d'))
|
alerts['text'] = session.query(Settings).filter_by(settingType=1).first().settingValue
|
||||||
|
alerts['email'] = session.query(Settings).filter_by(settingType=2).first().settingValue
|
||||||
|
|
||||||
return render_template("index.html", plant=dates, alerts=alerts)
|
return render_template("index.html", plant=dates, alerts=alerts)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/updateFeed')
|
||||||
|
def updateFeed():
|
||||||
|
session = Session()
|
||||||
|
|
||||||
|
dates = {'plant': '', 'last': '', 'next': '', 'freq': ''}
|
||||||
|
dates['freq'] = int(session.query(Settings).filter_by(settingType=3).first().settingValue)
|
||||||
|
dates['last'] = datetime.date.today()
|
||||||
|
dates['next'] = dates['last'] + datetime.timedelta(days=dates['freq'])
|
||||||
|
session.query(Dates).filter_by(dateTypeID=2).update({Dates.dateValue: dates['last']})
|
||||||
|
session.query(Dates).filter_by(dateTypeID=3).update({Dates.dateValue: dates['next']})
|
||||||
|
|
||||||
|
session.commit()
|
||||||
|
session.close()
|
||||||
|
return redirect('/index.html')
|
||||||
|
|
||||||
|
|
||||||
@app.route('/install.html')
|
@app.route('/install.html')
|
||||||
def install():
|
def install():
|
||||||
session = Session()
|
session = Session()
|
||||||
|
|
||||||
populateDate = datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d')
|
populateDate = datetime.date.today()
|
||||||
|
|
||||||
# Populate Dates Table
|
# Populate Dates Table
|
||||||
session.add(Dates(dateTypeID=1, dateValue=populateDate))
|
session.add(Dates(dateTypeID=1, dateValue=populateDate))
|
||||||
session.add(Dates(dateTypeID=2, dateValue=populateDate))
|
session.add(Dates(dateTypeID=2, dateValue=populateDate))
|
||||||
session.add(Dates(dateTypeID=3, dateValue=populateDate))
|
session.add(Dates(dateTypeID=3, dateValue=populateDate))
|
||||||
session.add(Dates(dateTypeID=4, dateValue='14'))
|
|
||||||
|
|
||||||
#Populate DatesMetadata
|
# Populate DatesMetadata
|
||||||
session.add(DatesMetadata(dateTypeID=1, DateTypeName='Plant Date'))
|
session.add(DatesMetadata(dateTypeID=1, DateTypeName='Plant Date'))
|
||||||
session.add(DatesMetadata(dateTypeID=1, DateTypeName='Last Feeding Date'))
|
session.add(DatesMetadata(dateTypeID=2, DateTypeName='Last Feeding Date'))
|
||||||
session.add(DatesMetadata(dateTypeID=1, DateTypeName='Next Feeding Date'))
|
session.add(DatesMetadata(dateTypeID=3, DateTypeName='Next Feeding Date'))
|
||||||
session.add(DatesMetadata(dateTypeID=1, DateTypeName='Feeding Frequency'))
|
|
||||||
|
|
||||||
# Populate Settings
|
# Populate Settings
|
||||||
session.add(Settings(settingType=1, settingValue='False'))
|
session.add(Settings(settingType=1, settingValue='False'))
|
||||||
session.add(Settings(settingType=2, settingValue='False'))
|
session.add(Settings(settingType=2, settingValue='False'))
|
||||||
|
session.add(Settings(settingType=3, settingValue='14'))
|
||||||
|
|
||||||
# Populate SettingsMetadata
|
# Populate SettingsMetadata
|
||||||
session.add(SettingsMetadata(settingTypeID=1, settingTypeName='Text'))
|
session.add(SettingsMetadata(settingTypeID=1, settingTypeName='Text'))
|
||||||
session.add(SettingsMetadata(settingTypeID=2, settingTypeName='Email'))
|
session.add(SettingsMetadata(settingTypeID=2, settingTypeName='Email'))
|
||||||
|
session.add(SettingsMetadata(settingTypeID=3, settingTypeName='Feeding Frequency'))
|
||||||
|
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
return redirect('index.html')
|
return redirect('index.html')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,3 @@
|
|||||||
function updateAlerts() {
|
|
||||||
var text = document.querySelector('#alert_text');
|
|
||||||
var email = document.querySelector('#alert_email');
|
|
||||||
alert(text.checked);
|
|
||||||
alert(email.checked);
|
|
||||||
|
|
||||||
fetch('/updateAlerts')
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateFeed() {
|
function updateFeed() {
|
||||||
return null;
|
fetch('/updateFeed')
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>Hydro</title>
|
<title>Hydro</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<script type="text/javascript" src="/static/scripts.js"></script>
|
||||||
<div>Hydro: <a href="index.html">home</a></div>
|
<div>Hydro: <a href="index.html">home</a></div>
|
||||||
<br>
|
<br>
|
||||||
{% with messages = get_flashed_messages() %}
|
{% with messages = get_flashed_messages() %}
|
||||||
|
|||||||
@@ -1,38 +1,26 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<body>
|
|
||||||
<h1>Information</h1>
|
<h1>Information</h1>
|
||||||
<form method="post">
|
<form method="post">
|
||||||
<label>Plant Date</label>
|
<label>Plant Date</label>
|
||||||
<input type="date" name="plantDate"
|
<input type="date" name="plantDate" value= {{ plant.plant }}>
|
||||||
value= {{ plant.plant }}>
|
|
||||||
<br>
|
<br>
|
||||||
<label>Last Feed Date</label>
|
<label>Last Feed Date</label>
|
||||||
<input type="date" name="lastDate"
|
<input type="date" name="lastDate" value= {{ plant.last }}>
|
||||||
value= {{ plant.last }}>
|
|
||||||
<br>
|
<br>
|
||||||
<label>Next Feed Date</label>
|
<label>Next Feed Date</label>
|
||||||
<input type="date" name="nextDate"
|
<input type="date" name="nextDate" value= {{ plant.next }}>
|
||||||
value= {{ plant.next }}>
|
|
||||||
<br>
|
<br>
|
||||||
Feed Frequency: {{ plant.freq }} days
|
Feed Frequency: {{ plant.freq }} days
|
||||||
<br>
|
<br>
|
||||||
<button type="submit">Update</button>
|
<br>
|
||||||
</form>
|
|
||||||
|
|
||||||
<h1>Alerts</h1>
|
<h1>Alerts</h1>
|
||||||
<div>
|
<input type="checkbox" id="alert_text" name="AlertText" value={{ alerts.text }} {{ "checked" if alerts.text else "" }}>
|
||||||
<form method="post">
|
|
||||||
<input type="checkbox" id="alert_text" name="AlertText" value=alerts.text {{ "checked" if alerts.text else "" }}>
|
|
||||||
<label for="alert_text">Text Message</label>
|
<label for="alert_text">Text Message</label>
|
||||||
<input type="checkbox" id="alert_email" name="AlertEmail" value=alerts.email {{ "checked" if alerts.email else "" }}>
|
<input type="checkbox" id="alert_email" name="AlertEmail" value={{ alerts.email }} {{ "checked" if alerts.email else "" }}>
|
||||||
<label for="alert_email">Email</label><br>
|
<label for="alert_email">Email</label><br>
|
||||||
<button type="submit">Save</button>
|
<input type="submit" id="DateSubmitForm" name="DateSubmitForm" value="Save">
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
</div>
|
|
||||||
<br><br>
|
|
||||||
<div>
|
|
||||||
<button class=button onclick="updateFeed()">Update Feed</button>
|
<button class=button onclick="updateFeed()">Update Feed</button>
|
||||||
</div>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
Reference in New Issue
Block a user