HomeHarvest/homeharvest/utils.py

84 lines
2.4 KiB
Python

from .core.scrapers.models import Property, ListingType
import pandas as pd
ordered_properties = [
"PropertyURL",
"MLS",
"MLS #",
"Status",
"Style",
"Street",
"Unit",
"City",
"State",
"Zip",
"Beds",
"FB",
"NumHB",
"EstSF",
"YrBlt",
"ListPrice",
"Lst Date",
"Sold Price",
"COEDate",
"LotSFApx",
"PrcSqft",
"LATITUDE",
"LONGITUDE",
"Stories",
"HOAFee",
"PrkgGar",
"Community",
]
def process_result(result: Property) -> pd.DataFrame:
prop_data = {prop: None for prop in ordered_properties}
prop_data.update(result.__dict__)
prop_data["PropertyURL"] = prop_data["property_url"]
prop_data["MLS"] = prop_data["mls"]
prop_data["MLS #"] = prop_data["mls_id"]
prop_data["Status"] = prop_data["status"]
if "address" in prop_data:
address_data = prop_data["address"]
prop_data["Street"] = address_data.street
prop_data["Unit"] = address_data.unit
prop_data["City"] = address_data.city
prop_data["State"] = address_data.state
prop_data["Zip"] = address_data.zip
prop_data["ListPrice"] = prop_data["list_price"]
prop_data["Lst Date"] = prop_data["list_date"]
prop_data["COEDate"] = prop_data["last_sold_date"]
prop_data["PrcSqft"] = prop_data["prc_sqft"]
prop_data["HOAFee"] = prop_data["hoa_fee"]
description = result.description
prop_data["Style"] = description.style
prop_data["Beds"] = description.beds
prop_data["FB"] = description.baths_full
prop_data["NumHB"] = description.baths_half
prop_data["EstSF"] = description.sqft
prop_data["LotSFApx"] = description.lot_sqft
prop_data["Sold Price"] = description.sold_price
prop_data["YrBlt"] = description.year_built
prop_data["PrkgGar"] = description.garage
prop_data["Stories"] = description.stories
prop_data["LATITUDE"] = prop_data["latitude"]
prop_data["LONGITUDE"] = prop_data["longitude"]
prop_data["Community"] = prop_data["neighborhoods"]
properties_df = pd.DataFrame([prop_data])
properties_df = properties_df.reindex(columns=ordered_properties)
return properties_df[ordered_properties]
def validate_input(listing_type: str) -> None:
if listing_type.upper() not in ListingType.__members__:
raise InvalidListingType(
f"Provided listing type, '{listing_type}', does not exist."
)