set up for pool data creation

This commit is contained in:
Andrew Ridgway 2024-03-15 16:04:34 +10:00
parent a0c8b0eeab
commit 4238c47efc
10 changed files with 72 additions and 87 deletions

View File

@ -1,4 +1,4 @@
FROM python:3.10 as real_base_image
FROM python:3.10 as pool_base_image
WORKDIR /pool_data

View File

@ -2,6 +2,6 @@
docker-compose rm -f
docker system prune -f
docker volume prune -f
docker build -t real_base_image -f base.Dockerfile .
docker build -t pool_base_image -f base.Dockerfile .
docker-compose up --remove-orphans --build -d
docker logs -f realtracker_web
docker logs -f pool_data_web

View File

@ -2,13 +2,13 @@
version: '3.1'
services:
realtracker_web:
container_name: realtracker_web
pool_data_web:
container_name: pool_data_web
build:
context: .
dockerfile: flask.Dockerfile
volumes:
- ./src/flask:/realestate_tracker/src/flask
- ./src/flask:/pool_data_web/src/flask
ports:
- "80:80"
- "5000:5000"

View File

@ -1,8 +1,9 @@
FROM real_base_image as flask
FROM pool_base_image as flask
COPY requirements.txt .
ENV FLASK_ENV development
ENV FLASK_DEBUG 1
#ENTRYPOINT ["python", "src/flask/realtracker_web.py"]
ENTRYPOINT ["flask", "--app", "/pool_data_web/src/flask/pool_data", "run", "--host=0.0.0.0"]

View File

@ -14,16 +14,15 @@ class pool_data:
#already created from here
#we can get self.db.real_db etc
self.db = db_conn()
def record_exists(self, address):
def record_exists(self, date, test_user):
"""
This function will accept an address
if it find that address in the database it will return True
and set set the existing_record variable of the class to the
queried record
"""
query = { "address" : f"{address}" }
record = self.db.real_db.find_one(query)
query = { "date" : f"{date}", "test_user": f"{test_user}"}
record = self.db.pool_db.find_one(query)
if record:
self.existing_record = record
return True
@ -31,20 +30,18 @@ class pool_data:
return False
def create_re_record(self, address, rooms, pool_link, like_out_of_five,
pool = "", requested_price="", user_price="",
suburb="", actual_price=""):
def create_re_record(self, ph, total_chlorine, free_chlorine, alkalinity,
date, test_user, salt=""):
"""
create_re_record creates a whole new record
takes the required 8 inputs
1. address
2. rooms
3. pool
4. realeastate link
5. like out of 5
6. requested_price - THe price the current owner wants if known
7. user_price - what does the user think the price of hte house should be/what offer they've put down
8. actual_price - after sold what price the house went for
takes the required 7 inputs
1. ph
2. total_chlorine
3. free_chlorine
4. alkalinity
5. date
6. test_user
7. salt (optional)
It will autogenerate the id string
this string will be automatically selected
on view in future
@ -52,17 +49,15 @@ class pool_data:
key = self.create_id()
insert_record = {
"_id" : f"{key}",
"address": f"{address}",
"rooms": f"{rooms}",
"pool": f"{pool}",
"pool_link": f"{pool_link}",
"like_out_of_five": f"{like_out_of_five}",
"requested_price": f"{requested_price}",
"user_price": f"{user_price}",
"actual_price": f"{actual_price}",
"suburb" : f"{suburb}"
"ph": f"{ph}",
"total_chlorine": f"{total_chlorine}",
"free_chlorine": f"{free_chlorine}",
"alkalinity": f"{alkalinity}",
"salt": f"{salt}",
"date": f"{date}",
"test_user": f"{test_user}"
}
self.db.real_db.insert_one(insert_record)
self.db.pool_db.insert_one(insert_record)
def update_re_record(self, id, field, value):
"""
@ -74,7 +69,7 @@ class pool_data:
query = { "_id": f"{id}"}
update_val = {"$set": {f"{field}": f"{value}" }}
self.db.real_db.update_one(query, update_val)
self.db.pool_db.update_one(query, update_val)
def create_id(self):
alphabet = string.ascii_letters + string.digits

View File

@ -7,13 +7,13 @@ class db_conn:
self.db_pass = os.getenv('MONGO_PASS')
self.db_host = os.getenv('MONGO_HOST')
self.client = self.get_client()
self.db = self.client['realestate_db']
self.real_db = self.db['realestate_data']
self.db = self.client['pool_db']
self.pool_db = self.db['pool_data']
self.users = self.db['users']
self.inspections = self.db['inspections_db']
def get_client(self):
CONNECTION_STRING = f"mongodb://{self.db_user}:{self.db_pass}@{self.db_host}/realestate_db?authSource=admin"
CONNECTION_STRING = f"mongodb://{self.db_user}:{self.db_pass}@{self.db_host}/pool_db?authSource=admin"
return MongoClient(CONNECTION_STRING)

View File

@ -3,7 +3,7 @@ import secrets
from mongo.get_conn import db_conn
class realestate_query:
class pool_query:
"""
This class will allow us to
interact with our data to interact
@ -15,14 +15,14 @@ class realestate_query:
#we can get self.db.real_db etc
self.db = db_conn()
def record_exists(self, address):
def record_exists(self, test_user, date):
"""
This function will accept an address
if it find that address in the database it will return True
and set set the existing_record variable of the class to the
queried record
"""
query = { "address" : f"{address}" }
query = { "test_user" : f"{test_user}", "date" : f"{date}"}
record = self.db.real_db.find_one(query)
if record:
self.existing_record = record
@ -30,14 +30,14 @@ class realestate_query:
else:
return False
def get_top(self, num_limit):
def get_top(self, num_limit, value_field):
"""
This function will return the
top n records based on like_out_of_five
last n records of the chosen value field
It will take the number of records you want to
return as a parameter
"""
records = self.db.real_db.find({}, {"address": 1, "_id": 0, "realestate_link": 1, "user_price": 1}).sort("like_out_of_five", -1).limit(num_limit)
records = self.db.pool_db.find({}, {"test_user": 1, "_id": 0, "date": 1, f"{value_field}": 1}).sort("date", -1).limit(num_limit)
return records
def user_check(self, username, password):

View File

@ -21,31 +21,28 @@ def index():
@app.route("/updater", methods=["GET", "POST"])
def updater():
query_db = pool_database_query.pool_query()
query = query_db.get_top(10)
query = query_db.get_top(10, "ph")
if request.method == "POST":
database = pool_database.pool_data()
new_record = {
"address": f'{request.form["address"]}',
"rooms" : f'{request.form["rooms"]}',
"real_estate_link": f'{request.form["real_estate_link"]}',
"like_out_of_five": f'{request.form["like_out_of_five"]}',
"pool": f'{request.form["pool"]}',
"requested_price": f'{request.form["requested_price"]}',
"user_price": f'{request.form["user_price"]}',
"actual_price": f'{request.form["actual_price"]}',
"suburb" : f'{request.form["suburb"]}'
"ph": f'{request.form["ph"]}',
"total_chlorine" : f'{request.form["total_chlorine"]}',
"free_chlorine": f'{request.form["free_chlorine"]}',
"alkalinity": f'{request.form["alkalinity"]}',
"salt": f'{request.form["salt"]}',
"date": f'{request.form["date"]}',
"test_user": f'{request.form["test_user"]}',
}
if database.record_exists(new_record["address"]):
if database.record_exists(new_record["date"], new_record["test_user"]):
for field in database.existing_record:
for new_field in new_record:
if field == new_field:
if database.existing_record[field] != new_record[field]:
database.update_re_record(database.existing_record["_id"], field, new_record[field])
else:
database.create_re_record(new_record["address"], new_record["rooms"], new_record["real_estate_link"],
new_record["like_out_of_five"], new_record["pool"], new_record["requested_price"],
new_record["user_price"], new_record["actual_price"], new_record["suburb"])
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"])
return render_template("updater.html", list=query)
@ -56,21 +53,21 @@ def updater():
def pool_data_update():
database = pool_database.pool_data()
new_record = request.json
if database.record_exists(new_record["address"]):
if database.record_exists(new_record["date"], new_record["test_user"]):
for field in database.existing_record:
for new_field in new_record:
if field == new_field:
if database.existing_record[field] != new_record[field]:
database.update_re_record(database.existing_record["_id"], field, new_record[field])
else:
database.create_re_record(new_record["address"], new_record["rooms"], new_record["real_estate_link"],
new_record["like_out_of_five"], new_record["pool"], new_record["requested_price"],
new_record["user_price"], new_record["actual_price"])
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"])
@app.route("/pool_top/<int:return_number>")
@app.route("/pool_top/<int:return_number>/<string:field>")
def user_detail(id):
query_db = pool_database_query.pool_query()
query = query_db.get_top(return_number)
query = query_db.get_top(return_number, field)
return jsonify([row.to_json() for row in query])
if __name__ == '__main__':

View File

@ -1,5 +1,5 @@
<div class="log-form">
<h2>Login to Realestate Tracker</h2>
<h2>Login to Pool Data Tracker</h2>
{% if try_again %}
<h4>Login Failed Please try Again</h4>
{% endif %}

View File

@ -7,40 +7,32 @@
<td>
<form method="POST" action="/updater">
<div class="form-group">
<label for="address">Address:</label>
<input type="text" id="address" class="form-control" name="address" required><br><br>
<label for="test_user">Tester:</label>
<input type="text" id="test_user" class="form-control" name="test_user" /><br><br>
</div>
<div class="form-group">
<label for="rooms">Rooms:</label>
<input type="text" id="rooms" class="form-control" name="rooms" required><br><br>
<label for="date">Date:</label>
<input type="date" id="date" class="form-control" name="date" /><br><br>
</div>
<div class="form-group">
<label for="pool">Pool(True, False):</label>
<input type="text" class="form-control" id="pool" name="pool" /><br><br>
<label for="ph">PH:</label>
<input type="number" id="ph" class="form-control" name="ph" required><br><br>
</div>
<div class="form-group">
<label for="real_estate_link">Realestate.com Link:</label>
<input type="text" id="real_estate_link" class="form-control" name="real_estate_link" required><br><br>
<label for="total_chlorine">Total Chlorine:</label>
<input type="number" id="total_chlorine" class="form-control" name="total_chlorine" required><br><br>
</div>
<div class="form-group">
<label for="like_out_of_five">Like Out of 5:</label>
<input type="text" id="like_out_of_five" class="form-control" name="like_out_of_five" pattern="[1-5]{1}" required><br><br>
<label for="free_chlorine">Free Chlorine:</label>
<input type="number" class="form-control" id="free_chlorine" name="free_chlorine" /><br><br>
</div>
<div class="form-group">
<label for="requested_price">Request Price:</label>
<input type="text" id="requested_price" class="form-control" name="requested_price" /><br><br>
<label for="alkalinity">Alkalinity:</label>
<input type="number" id="alkalinity" class="form-control" name="alkalinity" required><br><br>
</div>
<div class="form-group">
<label for="user_price">What do you think its worth?:</label>
<input type="text" id="user_price" class="form-control" name="user_price" /><br><br>
</div>
<div class="form-group">
<label for="actual_price">What Price did it go for in the end?:</label>
<input type="text" id="actual_price" class="form-control" name="actual_price" /><br><br>
</div>
<div class="form-group">
<label for="suburb">What Suburb is it in?:</label>
<input type="text" id="suburb" class="form-control" name="suburb" /><br><br>
<label for="salt">Salt:</label>
<input type="number" id="salt" class="form-control" name="salt" ><br><br>
</div>
<input type="submit" class="btn btn-primary" name="action"/>
</form>