Changelog¶
All notable changes to this project are documented here. The format follows Keep a Changelog and the project uses Semantic Versioning.
[Unreleased]¶
[0.7.0] - 2026-11-04¶
Added¶
- Extra
[warehouse](DuckDB) andispra_idrogeo.warehouse.Warehouse: the layers in one local DuckDB file, R-tree indexed, all in EPSG:32632, for work offline, many places at once and SQL of your own.sync()loads only the layers whose download changed, in one transaction;query()runs one read-only SELECT (geometries as WKT), with file and network access shut off when the warehouse is opened read-only;hazard_at(),landslides_near()andlandslides_in()answer the client's questions offline. The flood mosaic is reprojected from EPSG:3035; IFFI text is read as the ISO-8859-1 its.cstfile says. idrogeo syncandidrogeo sql; MCP toolswarehouse_schemaandwarehouse_sql.- MCP tools
rank_areas(top or bottom areas by any indicator, inside a region or province, summaries kept on disk 30 days) andcompare_areas(up to 20 areas side by side); both carry the source and licence. - MCP resources
idrogeo://indicators(what the indicator keys mean),idrogeo://datasetsandidrogeo://codes/{name}; promptsarea_profileandrecent_events. summaries()andmunicipalities()takeregionandprovince, andidrogeo municipalities--regionand--province, to ask only for the areas inside them;within(items, region=, province=)filters a list.- Documentation site on GitHub Pages (MkDocs Material, API reference from the
docstrings), built and deployed by the
docsworkflow;make docsandmake docs-serve. Pages reuse the README sections, so there is one source. - A Roadmap & AI page: improvements and AI features, prioritised.
llms.txton the site, for AI coding assistants.tests/live/: 51 contract tests against the live IdroGEO service (every layer and area published, the304, the fields the library reads, the traps of the README still being traps), excluded frommake check;make liveruns them. Theliveworkflow runs them every Monday and opens (or updates) an issue labelledlive-contractwhen one fails.
Changed¶
- README: the two hazard mosaics are CC BY-SA 4.0 (their licence PDF), not CC BY 4.0; the flood mosaic is in EPSG:3035; the API's landslide hazard areas do not add up like the downloadable mosaic.
find_areamatches names without accents and apostrophes (forlifinds Forlì) and answers an unknown name with "did you mean" suggestions instead of an empty list.
[0.6.0] - 2026-11-03¶
Added¶
IdroGEO.hazard_at(lat, lon): the PAI landslide hazard class, the flood scenarios, the municipality and the slope of a point, in one request to IdroGEO's public WMS (GetFeatureInfo);lithology=Trueadds the rock type (slower).idrogeo hazard, and the MCP toolhazard_at.IdroGEO.landslides_near(lat, lon, radius_m): the IFFI landslides around a point, nearest first, with the distance to their real outline.idrogeo near, and the MCP toollandslides_near.IdroGEO.iter_landslides_in(region=, province=, municipality=): every IFFI landslide of an area, checked on each record's own area fields since the search has no reliable area filter; exact counts (Campania 55,254).idrogeo landslides --region/--province/--municipality, and area arguments on the MCP toolsearch_landslides.idrogeo watch: prints the landslides, events and monitoring sites that change, once per change, resuming from<dir>/watch.json;--oncefor cron.ispra_idrogeo.watch(changes,Mark,load_marks,save_marks) is the engine.progress=callback(done, total)ondownloadandfetch, and a progress bar inidrogeo fetch(on stderr, when it is a terminal).idrogeo-mcp --transport streamable-http --host --port: the MCP server over HTTP at/mcp, withGET /health; every option also readsIDROGEO_MCP_TRANSPORT,IDROGEO_MCP_HOST,IDROGEO_MCP_PORTandIDROGEO_MCP_ALLOWED_HOSTS(DNS rebinding protection). stdio stays the default.-
ispra_idrogeo.wms: the pure request builders and parsers behind them, anddistance_mfrom a point to any GeoJSON geometry. -
examples/: three notebooks run on the live service (a town and its landslides, Italy in numbers, what changed).
Fixed¶
- README: IdroGEO's GeoServer is public over WMS; only the WFS asks for a login.
[0.5.0] - 2026-11-03¶
Added¶
IdroGEO.labels(name, lang)andIdroGEO.code_labels(fields, lang): the API's code lists as{code: label}, in Italian, English, French or German.decode(record, labels): a copy of a record (API, site or shapefile row) with<field>_labelnext to each coded field;CODE_DICTIONARIESsays which code list decodes which field.- Extra
[geo](geopandas, pyarrow) andispra_idrogeo.geo:readopens a downloaded file or folder as a GeoDataFrame,frameturns API rows into one in their own CRS (EPSG:4326 points, EPSG:32632 landslides, EPSG:3857 webcams),add_labelsadds<column>_labelcolumns;.to_parquetwrites GeoParquet. landslide_filter,event_filter,site_filter: search filters by movement, activity, district, area (ISTAT codes) and dates, in the syntax each search wants.- Extra
[mcp]and theidrogeo-mcpserver (MCP SDK 2.x, stdio): 10 tools for AI agents (find_area,area_risk,area_landslides,landslide,search_landslides,search_events,monitoring_sites,webcams,code_list,download_dataset), codes decoded, answers capped atlimitrows. IdroGEO.lookup(kind, text, limit)andidrogeo lookup: text search in the reference lists (geological units, aerial survey flights, bibliography, institutions, professional bodies, funding sources).- The
idrogeocommand:fetch,summary,municipalities,landslides,events,sites,webcams,landslide,labels,dictionaries,lookup; downloads print their path, the rest prints JSON Lines.
Fixed¶
- README: the code lists come in four languages, not five.
[0.4.0] - 2026-11-03¶
Added¶
modified_sinceoniter_landslides,iter_eventsandsites: only the records changed since a time-zone-aware datetime, for incremental updates of a local copy (select=["*"]brings the geometry).since_filter(filters, since): the pure filter behind it.
[0.3.0] - 2026-11-03¶
Added¶
IdroGEO.landslide(id_frana): the full record of a validated IFFI landslide;IdrogeoErrorfor an unknown id (IdroGEO answers 401).IdroGEO.iter_landslides/IdroGEO.iter_events: async iterators over every matching record, page after page, in a stable order.IdroGEO.sites,site(uid),stations(uid): the 1,063 landslide monitoring sites, one site, and its stations with instruments and sensors.IdroGEO.webcams: the webcams pointed at landslides (coordinates in EPSG:3857).
Fixed¶
- Search filters are typed
dict[str, Any]: landslide filters take plain values ({"tipo_movimento": 6}), not only strings. parsereturnsNonefor a JSONnullinstead of raising "did not return JSON".
[0.2.0] - 2026-11-03¶
Added¶
IdroGEO.municipalities(summary="pir")andIdroGEO.summaries(summary, level): the summary of every municipality (7,899), province or region,concurrencycalls at a time, saved one JSON per area under<directory>/<summary>_<level>/and asked again only when older thanmax_age; an interrupted run resumes.level_codes,CODE_FIELDS,read_json,write_json: the pure pieces behind it.
Fixed¶
- README:
/api/frana/{id}answers without a login; the detail endpoint that asks for one is/api/evento/{id}.
[0.1.0] - 2026-11-03¶
Added¶
opendata(layer, area, fmt),mosaic(name),sensor_data(): the IdroGEO open-data downloads (IFFI layers, events, reports, PAI and flood hazard mosaics, monitoring CSV) for Italy or one region or province.IdroGEO.download/IdroGEO.fetch: streamed downloads into a persistent folder (IDROGEO_DATA_DIR), revalidated with ETag / Last-Modified, unpacked atomically.IdroGEO.summary,dictionaries,dictionary,search_landslides,search_events: the public REST API.