Files
fn_registry/python/functions/geo/add_basemap_with_timeout.py
egutierrez faac610745 feat: extraccion masiva footprint_aurgi (41 funcs + 4 types + stack Docker geo)
Extrae al registry funciones del proyecto interno footprint_aurgi:
- core (6): slugify_ascii, normalize_for_join, cp_provincia_es, infer_provincia_from_cp, safe_read_csv_fallback, csv_to_parquet_duckdb
- geo puras (7): haversine_km, point_in_ring, point_in_polygon, point_in_polygons_bbox, polygon_bbox, extent_with_padding, distance_bucket
- geo I/O (4): load_geojson_polygons, load_boundary_gdf, add_basemap_osm, add_basemap_with_timeout
- valhalla client (4): valhalla_route, valhalla_isochrone, valhalla_isochrones_async, valhalla_matrix_1_to_n
- datascience stats (7): trimmed_mean, geometric_mean, detect_distribution_type, best_central_tendency, summary_stats, kde_density_levels, alpha_shape_concave_hull
- datascience fuzzy (3): fuzzy_merge_adaptive (rapidfuzz), words_to_dataset, remove_words_from_column
- datascience viz (2): plot_kde_2d, plot_heatmap_log
- infra (4): compress_pdf_ghostscript, render_table_page_pdfpages, add_header_logo, osm2pgsql_ingest
- pipelines (4): setup_geo_stack_docker, compute_centers_reachability, generate_isochrones_by_zone, count_points_per_zone
- types geo (4): LonLat, BBox, IsochroneRequest, Centro

Incluye:
- apps/footprint_geo_stack/ (PostGIS + Martin + Valhalla via docker-compose)
- 131/132 tests pasan (1 skip esperado: osm2pgsql en PATH)
- Issue tracker dev/issues/0052-footprint-aurgi-extraction.md
- Atribucion uniforme: source_repo internal:footprint_aurgi, source_license internal-aurgi
- Build con 9 agentes en paralelo (8 wave 1 + 1 wave 2 pipelines)

Tambien commitea trabajo previo no commiteado: aggregate_extraction_results, chunk_with_overlap, clean_pdf_text, merge_entity_aliases, extract_graph_gliner2, extract_relations_mrebel, extract_triples_spacy_es, gliner2/mrebel/marianmt/rebel/spacy_es load_model, parse_rebel_output, translate_es_to_en, issue 0050/0051.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 23:35:22 +02:00

58 lines
1.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Add an OSM basemap with a SIGALRM-based timeout (Unix only)."""
from __future__ import annotations
import signal
from pathlib import Path
def add_basemap_with_timeout(
ax: "Axes",
zoom: int = 9,
cache_dir: "str | Path | None" = None,
timeout_s: float = 15.0,
) -> bool:
"""Add an OpenStreetMap basemap with a hard timeout (Unix only).
Uses SIGALRM to enforce a wall-clock timeout on the tile fetch. If the
download does not complete within ``timeout_s`` seconds the function
returns False without modifying the Axes further.
**Unix only** — SIGALRM is not available on Windows. On Windows this
function always returns False immediately.
Args:
ax: matplotlib Axes with projected extent (EPSG:3857).
zoom: Tile zoom level (119).
cache_dir: Optional tile cache directory.
timeout_s: Maximum seconds to wait for tiles. Default 15.0.
Returns:
True if the basemap was added successfully; False on timeout or error.
"""
if not hasattr(signal, "SIGALRM"):
# Windows — SIGALRM not available
return False
try:
import contextily as ctx # type: ignore
except ImportError:
return False
def _handler(signum: int, frame: object) -> None: # noqa: ARG001
raise TimeoutError("basemap fetch timed out")
old_handler = signal.signal(signal.SIGALRM, _handler)
signal.setitimer(signal.ITIMER_REAL, timeout_s)
try:
if cache_dir is not None:
ctx.set_cache_dir(str(cache_dir))
ctx.add_basemap(ax, source=ctx.providers.OpenStreetMap.Mapnik, zoom=zoom)
return True
except Exception: # noqa: BLE001
return False
finally:
signal.setitimer(signal.ITIMER_REAL, 0)
signal.signal(signal.SIGALRM, old_handler)