feat: AR-House initial commit
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
"""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())
|
||||
Reference in New Issue
Block a user