set up for pool data creation

This commit is contained in:
2024-03-15 16:04:34 +10:00
parent a0c8b0eeab
commit 4238c47efc
10 changed files with 72 additions and 87 deletions
+22 -27
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
+3 -3
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)
+6 -6
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):
+17 -20
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__':
+1 -1
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 %}
+14 -22
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>