mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
setting up push to db
This commit is contained in:
parent
81a77b26af
commit
b60112d75b
2 changed files with 62 additions and 3 deletions
27
backend/app/db/functions/energy_assessment_functions.py
Normal file
27
backend/app/db/functions/energy_assessment_functions.py
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
from backend.app.db.models.energy_assessments import EnergyAssessment
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
|
||||
def bulk_insert_energy_assessments(session: Session, data_list):
|
||||
"""
|
||||
This function inserts multiple energy assessment records into the database.
|
||||
|
||||
:param session: The database session
|
||||
:param data_list: A list of dictionaries containing energy assessment data.
|
||||
"""
|
||||
|
||||
try:
|
||||
# Map dictionaries to EnergyAssessment instances
|
||||
assessments = [EnergyAssessment(**data) for data in data_list]
|
||||
|
||||
# Add all instances to the session
|
||||
session.add_all(assessments)
|
||||
# Commit the transaction
|
||||
session.commit()
|
||||
print("All records inserted successfully.")
|
||||
|
||||
except IntegrityError as e:
|
||||
# Rollback the session in case of error
|
||||
session.rollback()
|
||||
print(f"Error occurred: {e}")
|
||||
|
|
@ -1,9 +1,11 @@
|
|||
from backend.app.db.functions.energy_assessment_functions import bulk_insert_energy_assessments
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from backend.app.db.connection import db_engine
|
||||
from utils.s3 import read_from_s3, list_files_and_subfolders_in_s3_folder, list_xmls_in_s3_folder
|
||||
from utils.logger import setup_logger
|
||||
from etl.xml_survey_extraction.XmlParser import XmlParser
|
||||
import os
|
||||
import pandas as pd
|
||||
from io import BytesIO
|
||||
|
||||
logger = setup_logger()
|
||||
|
|
@ -11,7 +13,8 @@ logger = setup_logger()
|
|||
SURVEYORS = "JAFFERSONS ENERGY CONSULTANTS"
|
||||
PROJECT_CODE = "VDE001"
|
||||
BUCKET = "retrofit-energy-assessments-dev"
|
||||
PORTFOLIO_ID = None
|
||||
PORTFOLIO_ID = 86
|
||||
USER_ID = 8
|
||||
|
||||
|
||||
def main():
|
||||
|
|
@ -59,7 +62,8 @@ def main():
|
|||
surveyor_company=SURVEYORS,
|
||||
)
|
||||
xml_parser.run()
|
||||
logger.info(f"Extracted data from {xml}")
|
||||
if xml_parser.is_lig:
|
||||
logger.info(f"Extracted data from {xml}")
|
||||
extracted_epc = xml_parser.epc
|
||||
extracted_additional_data = xml_parser.additional_data
|
||||
|
||||
|
|
@ -72,8 +76,36 @@ def main():
|
|||
|
||||
logger.info("Uploading data to the database")
|
||||
session = sessionmaker(bind=db_engine)()
|
||||
bulk_insert_energy_assessments(session, database_data)
|
||||
session.close()
|
||||
|
||||
# TODO: Set a portfolio ID, Target and Automatically upload the asset list and create the event for the portfolio
|
||||
# Create the asset list
|
||||
asset_list = [
|
||||
{"uprn": x["uprn"], "address": x["address1"], "postcode": x["postcode"]} for x in database_data
|
||||
]
|
||||
asset_list = pd.DataFrame(asset_list)
|
||||
|
||||
# Store the asset list in s3
|
||||
filename = f"{USER_ID}/{PORTFOLIO_ID}/non_intrusives.csv"
|
||||
save_csv_to_s3(
|
||||
dataframe=asset_list,
|
||||
bucket_name="retrofit-plan-inputs-dev",
|
||||
file_name=filename
|
||||
)
|
||||
|
||||
body = {
|
||||
"portfolio_id": str(PORTFOLIO_ID),
|
||||
"housing_type": "Private",
|
||||
"goal": "Increase EPC",
|
||||
"goal_value": "A",
|
||||
"trigger_file_path": filename,
|
||||
"already_installed_file_path": "",
|
||||
"patches_file_path": "",
|
||||
"non_invasive_recommendations_file_path": "",
|
||||
"exclusions": "",
|
||||
"budget": None,
|
||||
}
|
||||
print(body)
|
||||
|
||||
# TODO: In order to get the full data associated to the heating system, we need to download and parse the pcdb which
|
||||
# can be found here: https://www.ncm-pcdb.org.uk/pcdb/pcdb10.dat
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue