HomeHarvest/homeharvest/core/scrapers/models.py

100 lines
2.2 KiB
Python
Raw Normal View History

2023-09-15 15:17:37 -07:00
from dataclasses import dataclass
from enum import Enum
2023-09-17 16:30:37 -07:00
class SiteName(Enum):
ZILLOW = "zillow"
REDFIN = "redfin"
REALTOR = "realtor.com"
2023-09-15 15:17:37 -07:00
class ListingType(Enum):
2023-09-18 11:38:17 -07:00
FOR_SALE = "FOR_SALE"
FOR_RENT = "FOR_RENT"
SOLD = "SOLD"
2023-09-15 15:17:37 -07:00
2023-09-17 16:30:37 -07:00
class PropertyType(Enum):
HOUSE = "HOUSE"
2023-09-18 11:38:17 -07:00
BUILDING = "BUILDING"
2023-09-17 16:30:37 -07:00
CONDO = "CONDO"
2023-09-17 16:52:34 -07:00
TOWNHOUSE = "TOWNHOUSE"
2023-09-17 16:30:37 -07:00
SINGLE_FAMILY = "SINGLE_FAMILY"
MULTI_FAMILY = "MULTI_FAMILY"
2023-09-17 16:52:34 -07:00
MANUFACTURED = "MANUFACTURED"
2023-09-18 11:38:17 -07:00
NEW_CONSTRUCTION = "NEW_CONSTRUCTION"
2023-09-17 16:52:34 -07:00
APARTMENT = "APARTMENT"
2023-09-18 11:38:17 -07:00
APARTMENTS = "APARTMENTS"
2023-09-17 16:30:37 -07:00
LAND = "LAND"
2023-09-18 11:38:17 -07:00
LOT = "LOT"
2023-09-17 16:30:37 -07:00
OTHER = "OTHER"
2023-09-18 11:38:17 -07:00
BLANK = "BLANK"
2023-09-17 16:30:37 -07:00
@classmethod
def from_int_code(cls, code):
mapping = {
1: cls.HOUSE,
2: cls.CONDO,
3: cls.TOWNHOUSE,
4: cls.MULTI_FAMILY,
5: cls.LAND,
6: cls.OTHER,
8: cls.SINGLE_FAMILY,
13: cls.SINGLE_FAMILY,
}
2023-09-18 11:38:17 -07:00
return mapping.get(code, cls.BLANK)
2023-09-17 16:30:37 -07:00
2023-09-15 15:17:37 -07:00
@dataclass
class Address:
2023-09-18 11:38:17 -07:00
street_address: str
2023-09-15 15:17:37 -07:00
city: str
state: str
zip_code: str
unit: str | None = None
2023-09-18 11:38:17 -07:00
country: str | None = None
2023-09-15 15:17:37 -07:00
2023-09-18 11:38:17 -07:00
@dataclass
class Property:
property_url: str
2023-09-17 16:30:37 -07:00
site_name: SiteName
2023-09-18 11:38:17 -07:00
listing_type: ListingType
property_type: PropertyType
2023-09-15 15:17:37 -07:00
address: Address
2023-09-15 16:03:17 -07:00
2023-09-18 11:38:17 -07:00
# house for sale
2023-09-17 16:30:37 -07:00
price: int | None = None
2023-09-18 11:38:17 -07:00
tax_assessed_value: int | None = None
currency: str | None = None
square_feet: int | None = None
2023-09-15 16:03:17 -07:00
beds: int | None = None
2023-09-17 13:06:31 -07:00
baths: float | None = None
2023-09-18 11:38:17 -07:00
lot_area_value: float | None = None
lot_area_unit: str | None = None
2023-09-15 16:03:17 -07:00
stories: int | None = None
year_built: int | None = None
2023-09-18 11:38:17 -07:00
price_per_sqft: int | None = None
2023-09-17 13:06:31 -07:00
year_built: int | None = None
2023-09-15 16:03:17 -07:00
mls_id: str | None = None
2023-09-17 16:30:37 -07:00
agent_name: str | None = None
2023-09-18 11:38:17 -07:00
img_src: str | None = None
2023-09-17 13:06:31 -07:00
description: str | None = None
2023-09-18 11:38:17 -07:00
status_text: str | None = None
latitude: float | None = None
longitude: float | None = None
posted_time: str | None = None
# building for sale
bldg_name: str | None = None
bldg_unit_count: int | None = None
bldg_min_beds: int | None = None
bldg_min_baths: float | None = None
bldg_min_area: int | None = None
# apt
apt_min_price: int | None = None