Files
AR-House/scripts/test_court_records_duval.py
T
2026-07-03 12:24:58 -04:00

106 lines
3.5 KiB
Python

"""Test interactivo de court_records.py — solo Duval.
Empieza con sitios publicos:
1. Property Appraiser (paopropertysearch.coj.net) — sin login
2. Official Records (or.duvalclerk.com) — con disclaimer
Si los selectores no matchean, dump page.content() a un archivo para
inspeccionar la estructura real y ajustar.
"""
from __future__ import annotations
import io
import os
import sys
import time
from pathlib import Path
# Stdout UTF-8 para emojis
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")
ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT))
# Forzar el flag para esta sesion de test
os.environ["ENABLE_COURT_RECORDS"] = "true"
from data_fetchers.court_records import fetch_court_records # noqa: E402
def main() -> int:
print("=" * 70)
print("Test interactivo: court_records.py — Duval scraper")
print("=" * 70)
print(f"ENABLE_COURT_RECORDS: {os.getenv('ENABLE_COURT_RECORDS')}")
print()
test_addresses = [
("117 W Duval St, Jacksonville, FL 32202", "Jacksonville City Hall — confirma scraper funciona"),
("5005 N Pearl St, Jacksonville, FL 32206", "Pearl St real (encontrado en busqueda broad)"),
("3245 N Pearl St, Jacksonville, FL 32206", "Fictional address — expect no results (graceful)"),
]
for addr, desc in test_addresses:
print("─" * 70)
print(f"TEST: {addr}")
print(f" ({desc})")
print("─" * 70)
t0 = time.perf_counter()
result = fetch_court_records(address=addr, county_name="Duval")
elapsed = time.perf_counter() - t0
print(f" status: {result.get('status')}")
print(f" owner_name: {result.get('owner_name')}")
print(f" re_number: {result.get('re_number')}")
print(f" lis_pendens_count: {result.get('lis_pendens_count', 0)}")
print(f" sources_used: {result.get('sources_used', [])}")
print(f" errors: {len(result.get('errors', []))} errors")
for e in (result.get('errors') or [])[:3]:
print(f" - {e[:200]}")
print(f" elapsed: {elapsed:.1f}s")
print()
return 0
def main_OLD() -> int:
address = "3245 N Pearl St, Jacksonville, FL 32206"
print(f"Target address: {address}")
t0 = time.perf_counter()
result = fetch_court_records(address=address, county_name="Duval")
elapsed = time.perf_counter() - t0
print(f"Tiempo total: {elapsed:.1f}s")
print()
print("=" * 70)
print("RESULTADO")
print("=" * 70)
for k, v in result.items():
if k == "lis_pendens" and isinstance(v, list):
print(f" {k}: {len(v)} case(s)")
for i, c in enumerate(v, 1):
print(f" [{i}] {c}")
elif k == "errors":
print(f" {k}: ({len(v)} errores)")
for e in v:
print(f" - {e}")
else:
print(f" {k}: {v}")
print()
if result.get("status") == "LIS_PENDENS_ACTIVE":
print(" → DETECCION CONFIRMADA: foreclosure case activo en Duval")
return 0
elif result.get("status") == "CLEAN":
print(" → Sin lis pendens encontrado (puede ser limpio o owner_name no matchea)")
return 0
elif result.get("status") == "UNKNOWN":
print(" → UNKNOWN: scraper fallo en algun paso. Ver errors arriba.")
return 1
else:
print(f" → Status: {result.get('status')}")
return 1
if __name__ == "__main__":
sys.exit(main())