ready for MVP deployment

This commit is contained in:
Andrew Ridgway 2024-03-27 16:33:08 +10:00
parent a21efb991e
commit 6617b81fe3
5 changed files with 93 additions and 35 deletions

View File

@ -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"]

View File

@ -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)

View File

@ -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>")

View 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>

View File

@ -12,18 +12,25 @@
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-10 col-lg-8 mx-lg-auto mx-md-auto">
<h1 class="pt-5 pb-2">Input Data you want to store</h1>
<div class="row">
<div class="col-md-6"> <div class="col-md-6">
<table border=6>( <table border=0>
<tr> <tr>
<td> <td>
{{ render_form(form) }} {{ render_form(form) }}
</td> </td>
<td> <td>
<table border = 1> <div class="container">
<div class="col-md-10 col-lg-8 mx-lg-auto mx-md-auto">
<table border = 0>
{% for row in list %} {% for row in list %}
<table border=2> <table border=0>
{% for key, value in row.items() %} {% for key, value in row.items() %}
<tr> <tr>
<th> {{ key }} </th> <th> {{ key }} </th>
@ -33,8 +40,13 @@
</table> </table>
{% endfor %} {% endfor %}
</table> </table>
</div>
</div>
</td> </td>
</tr> </tr>
</div> </div>
</div>
</div>
</div>
{% endblock %} {% endblock %}