set up for pool data creation
This commit is contained in:
parent
a0c8b0eeab
commit
4238c47efc
@ -1,4 +1,4 @@
|
||||
FROM python:3.10 as real_base_image
|
||||
FROM python:3.10 as pool_base_image
|
||||
|
||||
WORKDIR /pool_data
|
||||
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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"]
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
||||
|
@ -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):
|
||||
|
@ -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,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 %}
|
||||
|
@ -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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user