All checks were successful
Build and Push Image / Build and push image (push) Has been skipped
91 lines
3.0 KiB
Python
91 lines
3.0 KiB
Python
import sys
|
|
|
|
from mongo.get_conn import db_conn
|
|
import pandas as pd
|
|
import duckdb
|
|
|
|
class TableBuilder():
|
|
def __init__(self) -> None:
|
|
self.db = db_conn()
|
|
data = self.db.beer_db
|
|
data = data.find({}).sort("date", -1)
|
|
df_dict = {}
|
|
df_dict["beer_run_id"]=[]
|
|
df_dict["sg"] = []
|
|
df_dict["date"] = []
|
|
df_dict["final_reading"] = []
|
|
|
|
for record in data:
|
|
df_dict["beer_run_id"].append(record["beer_run_id"])
|
|
df_dict["sg"].append(record["sg"])
|
|
df_dict["date"].append(record["date"])
|
|
df_dict["final_reading"].append(record["final_reading"])
|
|
|
|
self.df_dict = df_dict
|
|
self.df = pd.DataFrame(data=self.df_dict)
|
|
|
|
def done_runs_build(self, limit=10) -> pd.DataFrame:
|
|
|
|
df = self.df
|
|
sql = f"""
|
|
SELECT x.beer_run_id as beer_run_id,
|
|
max(sg) as max,
|
|
min(sg) as min,
|
|
y.date as final_reading_date
|
|
FROM df x
|
|
JOIN
|
|
( SELECT DISTINCT beer_run_id, date
|
|
FROM df
|
|
WHERE final_reading = 'True'
|
|
) y ON x.beer_run_id = y.beer_run_id
|
|
GROUP BY x.beer_run_id, y.date
|
|
ORDER BY x.beer_run_id desc
|
|
LIMIT {limit}
|
|
"""
|
|
df_sum = duckdb.sql(sql).df()
|
|
sql = f"""
|
|
SELECT x.beer_run_id as "Beer Run",
|
|
x.max as "Max",
|
|
x.min as "Min",
|
|
ROUND(((CAST (max AS INTEGER) - CAST(min AS INTEGER)) / 7.36) + 0.5, 2) AS "Alcohol Prediction +/- 0.5",
|
|
cast(final_reading_date as DATE) + INTERVAL 14 DAY as "Ready Date"
|
|
|
|
FROM df_sum x
|
|
"""
|
|
df_calc = duckdb.sql(sql).df()
|
|
return df_calc
|
|
|
|
def current_runs_build(self, limit=10) -> pd.DataFrame:
|
|
df = self.df
|
|
sql = f"""
|
|
SELECT x.beer_run_id as beer_run_id,
|
|
max(sg) as max,
|
|
min(sg) as min,
|
|
min(cast(x.date as DATE)) as first_reading_date
|
|
FROM df x
|
|
LEFT JOIN
|
|
( SELECT DISTINCT beer_run_id
|
|
FROM df
|
|
WHERE final_reading = 'True'
|
|
) y ON x.beer_run_id = y.beer_run_id
|
|
WHERE y.beer_run_id is null
|
|
GROUP BY x.beer_run_id
|
|
ORDER BY x.beer_run_id desc
|
|
LIMIT {limit}
|
|
"""
|
|
df_sum = duckdb.sql(sql).df()
|
|
sql = f"""
|
|
SELECT x.beer_run_id as "Beer Run",
|
|
x.max as "Max",
|
|
x.min as "Min",
|
|
ROUND(((CAST (max AS INTEGER) - 1012) / 7.36) + 0.5, 2) AS "Alcohol Prediction (1012) +/- 0.5",
|
|
first_reading_date + INTERVAL 7 DAY as "Earliest Bottling/Kegging Date"
|
|
|
|
FROM df_sum x
|
|
"""
|
|
df_calc = duckdb.sql(sql).df()
|
|
return df_calc
|
|
|
|
|
|
|