72 lines
2.0 KiB
Python
72 lines
2.0 KiB
Python
from .core.scrapers.models import Property, ListingType
|
|
import pandas as pd
|
|
from .exceptions import InvalidListingType
|
|
|
|
ordered_properties = [
|
|
"property_url",
|
|
"mls",
|
|
"mls_id",
|
|
"status",
|
|
"style",
|
|
"street",
|
|
"unit",
|
|
"city",
|
|
"state",
|
|
"zip_code",
|
|
"beds",
|
|
"full_baths",
|
|
"half_baths",
|
|
"sqft",
|
|
"year_built",
|
|
"list_price",
|
|
"list_date",
|
|
"sold_price",
|
|
"last_sold_date",
|
|
"lot_sqft",
|
|
"price_per_sqft",
|
|
"latitude",
|
|
"longitude",
|
|
"stories",
|
|
"hoa_fee",
|
|
"parking_garage",
|
|
]
|
|
|
|
|
|
def process_result(result: Property) -> pd.DataFrame:
|
|
prop_data = {prop: None for prop in ordered_properties}
|
|
prop_data.update(result.__dict__)
|
|
|
|
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_code"] = address_data.zip
|
|
|
|
prop_data["price_per_sqft"] = prop_data["prc_sqft"]
|
|
|
|
description = result.description
|
|
prop_data["style"] = description.style
|
|
prop_data["beds"] = description.beds
|
|
prop_data["full_baths"] = description.baths_full
|
|
prop_data["half_baths"] = description.baths_half
|
|
prop_data["sqft"] = description.sqft
|
|
prop_data["lot_sqft"] = description.lot_sqft
|
|
prop_data["sold_price"] = description.sold_price
|
|
prop_data["year_built"] = description.year_built
|
|
prop_data["parking_garage"] = description.garage
|
|
prop_data["stories"] = description.stories
|
|
|
|
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."
|
|
)
|