ready for MVP deployment
This commit is contained in:
parent
a21efb991e
commit
6617b81fe3
@ -2,8 +2,8 @@ FROM pool_base_image as flask
|
|||||||
|
|
||||||
COPY requirements.txt .
|
COPY requirements.txt .
|
||||||
|
|
||||||
ENV FLASK_ENV development
|
#ENV FLASK_ENV development
|
||||||
ENV FLASK_DEBUG 1
|
#ENV FLASK_DEBUG 1
|
||||||
|
|
||||||
|
|
||||||
ENTRYPOINT ["flask", "--app", "/pool_data_web/src/flask/pool_data", "run", "--host=0.0.0.0"]
|
ENTRYPOINT ["flask", "--app", "/pool_data_web/src/flask/pool_data", "run", "--host=0.0.0.0"]
|
||||||
|
@ -31,7 +31,7 @@ class pool_data:
|
|||||||
|
|
||||||
|
|
||||||
def create_re_record(self, ph, total_chlorine, free_chlorine, alkalinity,
|
def create_re_record(self, ph, total_chlorine, free_chlorine, alkalinity,
|
||||||
date, test_user, salt=""):
|
date, test_user, temp, hardness, salt="", comment=""):
|
||||||
"""
|
"""
|
||||||
create_re_record creates a whole new record
|
create_re_record creates a whole new record
|
||||||
takes the required 7 inputs
|
takes the required 7 inputs
|
||||||
@ -41,7 +41,10 @@ class pool_data:
|
|||||||
4. alkalinity
|
4. alkalinity
|
||||||
5. date
|
5. date
|
||||||
6. test_user
|
6. test_user
|
||||||
7. salt (optional)
|
7. temp
|
||||||
|
8. hardness
|
||||||
|
9. salt (optional)
|
||||||
|
10. comment(optional)
|
||||||
It will autogenerate the id string
|
It will autogenerate the id string
|
||||||
this string will be automatically selected
|
this string will be automatically selected
|
||||||
on view in future
|
on view in future
|
||||||
@ -54,8 +57,12 @@ class pool_data:
|
|||||||
"free_chlorine": f"{free_chlorine}",
|
"free_chlorine": f"{free_chlorine}",
|
||||||
"alkalinity": f"{alkalinity}",
|
"alkalinity": f"{alkalinity}",
|
||||||
"salt": f"{salt}",
|
"salt": f"{salt}",
|
||||||
|
"temp": f"{temp}",
|
||||||
|
"hardness": f"{hardness}",
|
||||||
"date": f"{date}",
|
"date": f"{date}",
|
||||||
"test_user": f"{test_user}"
|
"test_user": f"{test_user}",
|
||||||
|
"comment": f"{comment}"
|
||||||
|
|
||||||
}
|
}
|
||||||
self.db.pool_db.insert_one(insert_record)
|
self.db.pool_db.insert_one(insert_record)
|
||||||
|
|
||||||
|
@ -2,8 +2,9 @@ import mongo.build_db as pool_database
|
|||||||
import mongo.query_db as pool_database_query
|
import mongo.query_db as pool_database_query
|
||||||
|
|
||||||
from flask import Flask, render_template, request, jsonify, redirect
|
from flask import Flask, render_template, request, jsonify, redirect
|
||||||
|
from flask_wtf import FlaskForm, CSRFProtect
|
||||||
from flask_bootstrap import Bootstrap5
|
from flask_bootstrap import Bootstrap5
|
||||||
from wtforms import StringField, SubmitField
|
from wtforms import StringField, SubmitField, DateField, IntegerField, PasswordField, DecimalField, RadioField, TextAreaField
|
||||||
from wtforms.validators import DataRequired, Length
|
from wtforms.validators import DataRequired, Length
|
||||||
|
|
||||||
|
|
||||||
@ -16,7 +17,7 @@ csrf = CSRFProtect(app)
|
|||||||
|
|
||||||
class userForm(FlaskForm):
|
class userForm(FlaskForm):
|
||||||
username = StringField("User Name?", validators=[DataRequired()])
|
username = StringField("User Name?", validators=[DataRequired()])
|
||||||
password = PasswordField("Password?", validators[DataRequired()])
|
password = PasswordField("Password?")
|
||||||
submit = SubmitField("Letsa GO!")
|
submit = SubmitField("Letsa GO!")
|
||||||
|
|
||||||
class dataForm(FlaskForm):
|
class dataForm(FlaskForm):
|
||||||
@ -28,12 +29,15 @@ class dataForm(FlaskForm):
|
|||||||
free_chlorine = IntegerField("Free Chlorine:")
|
free_chlorine = IntegerField("Free Chlorine:")
|
||||||
alkalinity = DecimalField("Alkalinity:")
|
alkalinity = DecimalField("Alkalinity:")
|
||||||
salt = IntegerField("Salt:")
|
salt = IntegerField("Salt:")
|
||||||
|
temp = DecimalField("Water Temperature")
|
||||||
|
hardness = IntegerField("Hardness")
|
||||||
|
comment = TextAreaField("Any Comments?")
|
||||||
submit = SubmitField("Write it, Write it REAAAAAAL GOOOD")
|
submit = SubmitField("Write it, Write it REAAAAAAL GOOOD")
|
||||||
|
|
||||||
@app.route("/", methods=["GET","POST"])
|
@app.route("/", methods=["GET","POST"])
|
||||||
def index():
|
def index():
|
||||||
form = userForm()
|
form = userForm()
|
||||||
if form.validate_on_submit()
|
if form.validate_on_submit():
|
||||||
username = form.username.data
|
username = form.username.data
|
||||||
password = form.password.data
|
password = form.password.data
|
||||||
db = pool_database_query.pool_query()
|
db = pool_database_query.pool_query()
|
||||||
@ -50,7 +54,7 @@ def updater():
|
|||||||
query = query_db.get_top(10, "ph")
|
query = query_db.get_top(10, "ph")
|
||||||
form = dataForm()
|
form = dataForm()
|
||||||
|
|
||||||
if form.validate_on_submit()
|
if form.validate_on_submit():
|
||||||
database = pool_database.pool_data()
|
database = pool_database.pool_data()
|
||||||
new_record = {
|
new_record = {
|
||||||
"ph": f'{form.PH.data}',
|
"ph": f'{form.PH.data}',
|
||||||
@ -60,6 +64,9 @@ def updater():
|
|||||||
"salt": f'{form.salt.data}',
|
"salt": f'{form.salt.data}',
|
||||||
"date": f'{form.Date.data}',
|
"date": f'{form.Date.data}',
|
||||||
"test_user": f'{form.test_user.data}',
|
"test_user": f'{form.test_user.data}',
|
||||||
|
"temp": f'{form.temp.data}',
|
||||||
|
"hardness": f'{form.hardness.data}',
|
||||||
|
"comment": f'{form.comment.data}'
|
||||||
}
|
}
|
||||||
if database.record_exists(new_record["date"], new_record["test_user"]):
|
if database.record_exists(new_record["date"], new_record["test_user"]):
|
||||||
for field in database.existing_record:
|
for field in database.existing_record:
|
||||||
@ -69,7 +76,8 @@ def updater():
|
|||||||
database.update_re_record(database.existing_record["_id"], field, new_record[field])
|
database.update_re_record(database.existing_record["_id"], field, new_record[field])
|
||||||
else:
|
else:
|
||||||
database.create_re_record(new_record["ph"], new_record["total_chlorine"], new_record["free_chlorine"],
|
database.create_re_record(new_record["ph"], new_record["total_chlorine"], new_record["free_chlorine"],
|
||||||
new_record["alkalinity"], new_record["date"], new_record["test_user"], new_record["salt"])
|
new_record["alkalinity"], new_record["date"], new_record["test_user"],
|
||||||
|
new_record["temp"], new_record["hardness"], new_record["salt"], new_record["comment"])
|
||||||
|
|
||||||
|
|
||||||
return render_template("updater.html", list=query, form=form)
|
return render_template("updater.html", list=query, form=form)
|
||||||
@ -88,7 +96,8 @@ def pool_data_update():
|
|||||||
database.update_re_record(database.existing_record["_id"], field, new_record[field])
|
database.update_re_record(database.existing_record["_id"], field, new_record[field])
|
||||||
else:
|
else:
|
||||||
database.create_re_record(new_record["ph"], new_record["total_chlorine"], new_record["free_chlorine"],
|
database.create_re_record(new_record["ph"], new_record["total_chlorine"], new_record["free_chlorine"],
|
||||||
new_record["alkalinity"], new_record["date"], new_record["test_user"], new_record["salt"])
|
new_record["alkalinity"], new_record["date"], new_record["test_user"],
|
||||||
|
new_record["temp"], new_record["hardness"], new_record["salt"], new_record["comment"])
|
||||||
|
|
||||||
|
|
||||||
@app.route("/pool_top/<int:return_number>/<string:field>")
|
@app.route("/pool_top/<int:return_number>/<string:field>")
|
||||||
|
30
src/flask/templates/base.html
Normal file
30
src/flask/templates/base.html
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
|
<title>
|
||||||
|
{% block title %}
|
||||||
|
Let there Be Pool Data
|
||||||
|
{% endblock %}
|
||||||
|
</title>
|
||||||
|
|
||||||
|
{{ bootstrap.load_css() }}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body { background: #e8f1f9; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!-- this is a base template using Bootstrap-Flask
|
||||||
|
https://bootstrap-flask.readthedocs.io/ -->
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
<!-- you can delete the next line if you're not using any Bootstrap JS -->
|
||||||
|
{{ bootstrap.load_js() }}
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -12,29 +12,41 @@
|
|||||||
https://bootstrap-flask.readthedocs.io/
|
https://bootstrap-flask.readthedocs.io/
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<h5>Input Data you want to store</h5>
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-10 col-lg-8 mx-lg-auto mx-md-auto">
|
||||||
<table border=6>(
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
{{ render_form(form) }}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<table border = 1>
|
|
||||||
{% for row in list %}
|
|
||||||
<table border=2>
|
|
||||||
{% for key, value in row.items() %}
|
|
||||||
<tr>
|
|
||||||
<th> {{ key }} </th>
|
|
||||||
<td> {{ value }} </td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</div>
|
<h1 class="pt-5 pb-2">Input Data you want to store</h1>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<table border=0>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
{{ render_form(form) }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div class="container">
|
||||||
|
<div class="col-md-10 col-lg-8 mx-lg-auto mx-md-auto">
|
||||||
|
|
||||||
|
<table border = 0>
|
||||||
|
{% for row in list %}
|
||||||
|
<table border=0>
|
||||||
|
{% for key, value in row.items() %}
|
||||||
|
<tr>
|
||||||
|
<th> {{ key }} </th>
|
||||||
|
<td> {{ value }} </td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user