+28
-6
@@ -55,7 +55,27 @@ async def get_or_fetch_similar_units(
|
||||
"""Get similar units (comps) from cache or fetch fresh."""
|
||||
# Similar units don't have a separate cache table; fetch fresh each time per PRD
|
||||
# (or cache them in search_runs if doing diff detection)
|
||||
return await get_similar_units(unit_code, listing_status=listing_status)
|
||||
unit = await get_or_fetch_eiendom_unit(unit_code)
|
||||
if unit is None:
|
||||
return []
|
||||
vector = build_unit_vector(unit)
|
||||
return await get_similar_units(vector, listing_status=listing_status)
|
||||
|
||||
|
||||
async def get_unit_images(unit_code: str, force_refresh: bool = False) -> dict[str, Any]:
|
||||
"""Fetch unit images for visual assessment."""
|
||||
unit = await get_or_fetch_eiendom_unit(unit_code, force_refresh=force_refresh)
|
||||
if unit is None:
|
||||
raise ValueError(f"Could not fetch Eiendom.no unit {unit_code}")
|
||||
|
||||
return {
|
||||
"unit_code": unit.unit_code,
|
||||
"address": unit.address,
|
||||
"unit_images": unit.unit_images or [],
|
||||
"property_type": unit.property_type,
|
||||
"rooms": unit.rooms,
|
||||
"usable_area": unit.usable_area,
|
||||
}
|
||||
|
||||
|
||||
async def resolve_eiendom_unit_from_finn_url(finn_url: str) -> EiendomUnit | None:
|
||||
@@ -75,7 +95,6 @@ async def analyze_search(
|
||||
detail_limit: int = 20,
|
||||
include_details: bool = True,
|
||||
include_eiendom_no: bool = True,
|
||||
include_similar_units_for_shortlist: bool = False,
|
||||
) -> dict[str, Any]:
|
||||
"""Analyze a FINN search URL and return a ranked shortlist."""
|
||||
return await run_analysis_search(
|
||||
@@ -84,7 +103,6 @@ async def analyze_search(
|
||||
fetch_details=include_details,
|
||||
detail_limit=detail_limit,
|
||||
include_eiendom_no=include_eiendom_no,
|
||||
include_similar_units_for_shortlist=include_similar_units_for_shortlist,
|
||||
)
|
||||
|
||||
|
||||
@@ -181,9 +199,13 @@ async def compare_ads(
|
||||
# ============================================================================
|
||||
|
||||
|
||||
def build_unit_vector_for_unit_code(unit_code: str) -> dict[str, Any]:
|
||||
"""Build a unit_vector dict for a unit_code (msgpack-encoded)."""
|
||||
return build_unit_vector(unit_code)
|
||||
async def build_unit_vector_for_unit_code(unit_code: str) -> dict[str, Any]:
|
||||
"""Build a unit_vector for a unit_code by fetching and encoding the unit data."""
|
||||
unit = await get_or_fetch_eiendom_unit(unit_code)
|
||||
if unit is None:
|
||||
raise ValueError(f"Could not fetch Eiendom.no unit {unit_code}")
|
||||
vector = build_unit_vector(unit)
|
||||
return {"unit_code": unit_code, "unit_vector": vector}
|
||||
|
||||
|
||||
def decode_unit_vector_to_dict(unit_vector: str) -> dict[str, Any]:
|
||||
|
||||
Reference in New Issue
Block a user