From 24d2550cb8deeefb3aab370658cea379f14590db Mon Sep 17 00:00:00 2001 From: Jun-te Kim Date: Thu, 19 Jun 2025 10:29:41 +0000 Subject: [PATCH] elevation has worked --- etl/models/conditionReport.py | 15 ++++++----- etl/surveyedData/surveryedData.py | 45 +++++++++++++++++++++++-------- migration_db.sh | 5 ++-- 3 files changed, 46 insertions(+), 19 deletions(-) diff --git a/etl/models/conditionReport.py b/etl/models/conditionReport.py index fcc5c4e..a891c4b 100644 --- a/etl/models/conditionReport.py +++ b/etl/models/conditionReport.py @@ -26,25 +26,28 @@ class TheProperty(BaseModel, table=True): exposure_zone: str main_wall_construction: str - class ElevationInfo(BaseModel, table=True): elevation_type: str cavity_wall_depth: str is_insulation_present: bool insulation_type: str - elevation_table: Optional["MainElevation"] = Relationship(back_populates="elevation_info") + main_elevation: Optional["MainElevation"] = Relationship(back_populates="elevation_info") + + elevation_id: Optional[uuid.UUID] = Field(foreign_key="elevation.id") + elevation_table: Optional["Elevation"] = Relationship(back_populates="info") + class MainElevation(BaseModel, table=True): elevation_info_id: uuid.UUID = Field(foreign_key="elevationinfo.id") #SQLAlcemy things - elevation_info: ElevationInfo = Relationship(back_populates="elevation_table") + elevation_info: ElevationInfo = Relationship(back_populates="main_elevation") -class Elevation(BaseModel): +class Elevation(BaseModel, table=True): protected_conservatory_or_aonb: bool material_type: str visible_signs_of_existing_wall_insulation: str ground_level_bridge_the_dpc: bool - - info: List[ElevationInfo] = Relationship(back_populates="") + + info: List["ElevationInfo"] = Relationship(back_populates="elevation_table") diff --git a/etl/surveyedData/surveryedData.py b/etl/surveyedData/surveryedData.py index f405a91..8610b87 100644 --- a/etl/surveyedData/surveryedData.py +++ b/etl/surveyedData/surveryedData.py @@ -16,7 +16,8 @@ from etl.models.conditionReport import ( AssessorDetails, InspectionAndProject, TheProperty, ElevationInfo, - MainElevation + MainElevation, + Elevation, ) from etl.models.topLevel import( @@ -112,13 +113,17 @@ class surveyedDataProcessor(): ) # Main elevation - elevation_info = self.condition_report.master_obj.general_information.main_elevation.elevation_info.model_dump() - elevation_info = self.upsert_record( - db_session=db_session, - model_class=ElevationInfo, - data_dict=elevation_info, - lookup_field=None - ) + def upload_elevation_and_return_elevation(data): + return self.upsert_record( + db_session=db_session, + model_class=ElevationInfo, + data_dict=data, + lookup_field=None + ) + + elevation_data = self.condition_report.master_obj.general_information.main_elevation.elevation_info.model_dump() + elevation_info = upload_elevation_and_return_elevation(elevation_data) + main_elevation = self.upsert_record( db_session=db_session, model_class=MainElevation, @@ -128,11 +133,27 @@ class surveyedDataProcessor(): lookup_field=None ) - # elevations multiple - for i, elevation in enumerate() - # Other elevations + # elevations multiple, elevation definition first then elevationInfo + elevations_data = self.condition_report.master_obj.general_information.elevations.model_dump() + elevations = self.upsert_record( + db_session=db_session, + model_class=Elevation, + data_dict={ + "protected_conservatory_or_aonb": elevations_data.get("protected_conservatory_or_aonb"), + "material_type": elevations_data.get("material_type"), + "visible_signs_of_existing_wall_insulation": elevations_data.get("are_there_any_visible_signs_of_existing_wall_insulation"), + "ground_level_bridge_the_dpc": elevations_data.get("does_the_existing_ground_level_on_any_elevation_bridge_the_dpc"), + }, + lookup_field=None, + ) + for i, elevation in enumerate(self.condition_report.master_obj.general_information.elevations.info): + data = elevation.model_dump() + data.update({"elevation_id": elevations.id}) + elevation_info = upload_elevation_and_return_elevation(data) + + print(elevations.info) print("Check database please") def load_pre_site_notes_summary_table(self, db_session): @@ -505,6 +526,7 @@ class surveyedDataProcessor(): # Merge additional fields if provided if additional_fields: clean_data.update(additional_fields) + print(clean_data) if lookup_field is not None: lookup_value = clean_data.get(lookup_field) @@ -526,6 +548,7 @@ class surveyedDataProcessor(): # Filter out invalid fields that don't exist in the model class valid_fields = [field for field in clean_data if hasattr(model_class, field)] + print(f"valid fields {valid_fields}") clean_data = {field: clean_data[field] for field in valid_fields} print(f'clean data is {clean_data}') diff --git a/migration_db.sh b/migration_db.sh index ec9c0ce..0adb6c8 100644 --- a/migration_db.sh +++ b/migration_db.sh @@ -1,5 +1,6 @@ -#poetry run alembic revision --autogenerate -m "delete everythign and start again" -poetry run alembic upgrade +1 +#poetry run alembic revision --autogenerate -m "added new column" + +poetry run alembic upgrade head # See which hash I'm at #poetry run alembic current