mirror of
https://github.com/Hestia-Homes/survey-extraction.git
synced 2026-06-08 11:17:29 +00:00
58 lines
2 KiB
Python
58 lines
2 KiB
Python
from sqlmodel import Field, SQLModel
|
|
from sqlalchemy import Column
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
import uuid
|
|
from pydantic import Field, field_validator, ValidationError, model_validator
|
|
from etl.utils.utils import get_sharepoint_path
|
|
from etl.scraper.scraper import SharePointScraper, SharePointInstaller
|
|
|
|
def string_to_installer(installer):
|
|
if installer.upper() == "J & J CRUMP":
|
|
return SharePointInstaller.JJC
|
|
elif installer.upper() == "SCIS":
|
|
return SharePointInstaller.SOUTH_COAST_INSULATION
|
|
elif installer.upper() == "SGEC":
|
|
return SharePointInstaller.SGEC
|
|
else:
|
|
return None
|
|
|
|
|
|
class BaseModel(SQLModel):
|
|
id: uuid.UUID = Field(
|
|
default_factory=uuid.uuid4,
|
|
sa_column=Column(UUID(as_uuid=True), primary_key=True)
|
|
)
|
|
|
|
|
|
class SubmissionInfoFromDeal(BaseModel):
|
|
deal_id: str = Field(..., min_length=1)
|
|
deal_name: str = Field(..., min_length=1)
|
|
work_type: str = Field(..., min_length=1)
|
|
needs_trickle_ventilation: bool
|
|
post_sap_score: int
|
|
existing_wall_insulation: str = Field(..., min_length=1)
|
|
no_of_wet_rooms: int
|
|
installer: str = Field(..., min_length=1)
|
|
submission_folder_path: str = Field(..., min_length=1)
|
|
landlord_id: str = Field(..., min_length=1)
|
|
domna_id: str = Field(..., min_length=1)
|
|
uprn: str = Field(..., min_length=1)
|
|
|
|
@field_validator('post_sap_score', 'no_of_wet_rooms')
|
|
@classmethod
|
|
def must_be_non_negative(cls, v):
|
|
if v < 0:
|
|
raise ValidationError("Must be non-negative for Post Sap Score")
|
|
return v
|
|
|
|
@model_validator(mode="after")
|
|
def check_submission_folder_path(self):
|
|
path = get_sharepoint_path(self.submission_folder_path)
|
|
installer = string_to_installer(self.installer)
|
|
sp = SharePointScraper(installer)
|
|
files = sp.get_folders_in_path(path)
|
|
if "value" in files:
|
|
if len(files["value"]) > 0:
|
|
return self
|
|
|
|
raise RuntimeError("Sharepoint URL invalid")
|