Skip to content

Commit

Permalink
Merge branch 'feature/google-floods-forecast-chart/1317' into feature…
Browse files Browse the repository at this point in the history
…/google-floods-inundation
  • Loading branch information
gislawill authored Oct 9, 2024
2 parents cdf65d2 + 481c409 commit f37026d
Show file tree
Hide file tree
Showing 7 changed files with 192 additions and 71 deletions.
46 changes: 46 additions & 0 deletions api/app/googleflood.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import os
import uuid
from concurrent.futures import ThreadPoolExecutor, as_completed
from datetime import datetime, timezone
from os import getenv
from typing import List
from urllib.parse import urlencode

Expand Down Expand Up @@ -93,6 +95,50 @@ def fetch_flood_status(region_code):
return status_response


def get_google_flood_dates(region_codes: list[str]):
"""
When more complex date support is needed, this can be used to fetch dates from the Google Floods API.
For now, we just return today's date at the region
"""
flood_statuses = []

# Retry 3 times due to intermittent API errors
with ThreadPoolExecutor() as executor:
future_to_region = {
executor.submit(fetch_flood_status, code): code for code in region_codes
}
for future in as_completed(future_to_region):
status_response = future.result()
if "error" in status_response:
logger.error("Error in response: %s", status_response["error"])
raise HTTPException(
status_code=500,
detail="Error fetching flood status data from Google API",
)
flood_statuses.extend(status_response.get("floodStatuses", []))

parsed_issued_times = [
datetime.strptime(status["issuedTime"], "%Y-%m-%dT%H:%M:%S.%fZ")
for status in flood_statuses
if "issuedTime" in status
]
parsed_issued_times.sort(reverse=True) # Sort in descending order

# Format only the most recent date
most_recent_date = (
{
"date": parsed_issued_times[0]
.replace(tzinfo=timezone.utc)
.strftime("%Y-%m-%d")
}
if parsed_issued_times
else {}
)

return [most_recent_date] if most_recent_date else []


def get_google_floods_gauges(
region_codes: list[str],
as_geojson: bool = True,
Expand Down
23 changes: 23 additions & 0 deletions api/app/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from app.database.database import AlertsDataBase
from app.database.user_info_model import UserInfoModel
from app.googleflood import (
get_google_flood_dates,
get_google_floods_gauge_forecast,
get_google_floods_gauges,
get_google_floods_inundations,
Expand Down Expand Up @@ -438,6 +439,28 @@ def get_google_floods_gauges_api(region_codes: list[str] = Query(...)):
return get_google_floods_gauges(iso2_codes)


@app.get("/google-floods/dates/")
def get_google_floods_dates_api(region_codes: list[str] = Query(...)):
"""
Get the Google Floods dates for a list of regions.
"""
if not region_codes:
raise HTTPException(
status_code=400,
detail="At least one region code must be provided.",
)

for region_code in region_codes:
if len(region_code) != 2:
raise HTTPException(
status_code=400,
detail=f"Region code '{region_code}' must be exactly two characters (iso2).",
)

iso2_codes = [region_code.upper() for region_code in region_codes]
return get_google_flood_dates(iso2_codes)


@app.get("/google-floods/gauges/forecasts")
def get_google_floods_gauge_forecast_api(
gauge_ids: str = Query(..., description="Comma-separated list of gauge IDs")
Expand Down
4 changes: 2 additions & 2 deletions frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
"@react-pdf/font": "2.5.1",
"@react-pdf/renderer": "3.4.4",
"@reduxjs/toolkit": "^1.4.0",
"@sentry/browser": "^5.15.5",
"@sentry/browser": "^7.119.1",
"@turf/bbox": "^7",
"@turf/bbox-polygon": "^7",
"@turf/boolean-point-in-polygon": "^7",
Expand Down Expand Up @@ -194,7 +194,7 @@
"ts-jest": "^29.1.1",
"ts-node": "^10.9.2",
"typescript": "^5.2.2",
"vite": "^5.2.0",
"vite": "^5.2.14",
"vite-plugin-node-polyfills": "^0.21.0"
},
"engines": {
Expand Down
1 change: 1 addition & 0 deletions frontend/src/config/cambodia/layers.json
Original file line number Diff line number Diff line change
Expand Up @@ -1998,6 +1998,7 @@
"detail_url": "https://prism-api.ovio.org/google-floods/gauges/forecasts",
"data_field": "severity",
"data_field_type": "text",
"date_url": "https://prism-api.ovio.org/google-floods/dates/?region_codes=KH",
"opacity": 0.9,
"legend_text": "Current flood status at verified gauges. Visit [Google Research](https://sites.research.google/floodforecasting/) about Google's AI Forecasting models.",
"legend": [
Expand Down
1 change: 1 addition & 0 deletions frontend/src/config/mozambique/layers.json
Original file line number Diff line number Diff line change
Expand Up @@ -2955,6 +2955,7 @@
"detail_url": "https://prism-api.ovio.org/google-floods/gauges/forecasts",
"data_field": "severity",
"data_field_type": "text",
"date_url": "https://prism-api.ovio.org/google-floods/dates/?region_codes=MZ",
"opacity": 0.9,
"legend_text": "Current flood status at verified gauges. Visit [Google Research](https://sites.research.google/floodforecasting/) about Google's AI Forecasting models.",
"legend": [
Expand Down
1 change: 1 addition & 0 deletions frontend/src/config/rbd/layers.json
Original file line number Diff line number Diff line change
Expand Up @@ -6541,6 +6541,7 @@
"detail_url": "https://prism-api.ovio.org/google-floods/gauges/forecasts",
"data_field": "severity",
"data_field_type": "text",
"date_url": "https://prism-api.ovio.org/google-floods/dates/?region_codes=BF&region_codes=CM&region_codes=TD&region_codes=GH&region_codes=ML&region_codes=MR&region_codes=NE&region_codes=SL&region_codes=CI&region_codes=GN&region_codes=SN&region_codes=GM&region_codes=GW&region_codes=LR&region_codes=TG&region_codes=BJ&region_codes=NG&region_codes=CF",
"opacity": 0.9,
"legend_text": "Current flood status at verified gauges. Visit [Google Research](https://sites.research.google/floodforecasting/) about Google's AI Forecasting models.",
"legend": [
Expand Down
187 changes: 118 additions & 69 deletions frontend/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2942,57 +2942,87 @@
resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.2.tgz#053f1540703faa81dea2966b768ee5581c66aeda"
integrity sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==

"@sentry/browser@^5.15.5":
version "5.30.0"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.30.0.tgz#c28f49d551db3172080caef9f18791a7fd39e3b3"
integrity sha512-rOb58ZNVJWh1VuMuBG1mL9r54nZqKeaIlwSlvzJfc89vyfd7n6tQ1UXMN383QBz/MS5H5z44Hy5eE+7pCrYAfw==
dependencies:
"@sentry/core" "5.30.0"
"@sentry/types" "5.30.0"
"@sentry/utils" "5.30.0"
tslib "^1.9.3"

"@sentry/[email protected]":
version "5.30.0"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3"
integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==
dependencies:
"@sentry/hub" "5.30.0"
"@sentry/minimal" "5.30.0"
"@sentry/types" "5.30.0"
"@sentry/utils" "5.30.0"
tslib "^1.9.3"

"@sentry/[email protected]":
version "5.30.0"
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100"
integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==
dependencies:
"@sentry/types" "5.30.0"
"@sentry/utils" "5.30.0"
tslib "^1.9.3"

"@sentry/[email protected]":
version "5.30.0"
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b"
integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==
dependencies:
"@sentry/hub" "5.30.0"
"@sentry/types" "5.30.0"
tslib "^1.9.3"

"@sentry/[email protected]":
version "5.30.0"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402"
integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==

"@sentry/[email protected]":
version "5.30.0"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980"
integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==
dependencies:
"@sentry/types" "5.30.0"
tslib "^1.9.3"
"@sentry-internal/[email protected]":
version "7.119.1"
resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.119.1.tgz#98285dc9dba0ab62369d758124901b00faf58697"
integrity sha512-EPyW6EKZmhKpw/OQUPRkTynXecZdYl4uhZwdZuGqnGMAzswPOgQvFrkwsOuPYvoMfXqCH7YuRqyJrox3uBOrTA==
dependencies:
"@sentry/core" "7.119.1"
"@sentry/types" "7.119.1"
"@sentry/utils" "7.119.1"

"@sentry-internal/[email protected]":
version "7.119.1"
resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.119.1.tgz#b1413fb37734d609b0745ac24d49ddf9d63b9c51"
integrity sha512-O/lrzENbMhP/UDr7LwmfOWTjD9PLNmdaCF408Wx8SDuj7Iwc+VasGfHg7fPH4Pdr4nJON6oh+UqoV4IoG05u+A==
dependencies:
"@sentry/core" "7.119.1"
"@sentry/replay" "7.119.1"
"@sentry/types" "7.119.1"
"@sentry/utils" "7.119.1"

"@sentry-internal/[email protected]":
version "7.119.1"
resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.119.1.tgz#500d50d451bfd0ce6b185e9f112208229739ab03"
integrity sha512-cI0YraPd6qBwvUA3wQdPGTy8PzAoK0NZiaTN1LM3IczdPegehWOaEG5GVTnpGnTsmBAzn1xnBXNBhgiU4dgcrQ==
dependencies:
"@sentry/core" "7.119.1"
"@sentry/types" "7.119.1"
"@sentry/utils" "7.119.1"

"@sentry/browser@^7.119.1":
version "7.119.1"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.119.1.tgz#260470dd7fd18de366017c3bf23a252a24d2ff05"
integrity sha512-aMwAnFU4iAPeLyZvqmOQaEDHt/Dkf8rpgYeJ0OEi50dmP6AjG+KIAMCXU7CYCCQDn70ITJo8QD5+KzCoZPYz0A==
dependencies:
"@sentry-internal/feedback" "7.119.1"
"@sentry-internal/replay-canvas" "7.119.1"
"@sentry-internal/tracing" "7.119.1"
"@sentry/core" "7.119.1"
"@sentry/integrations" "7.119.1"
"@sentry/replay" "7.119.1"
"@sentry/types" "7.119.1"
"@sentry/utils" "7.119.1"

"@sentry/[email protected]":
version "7.119.1"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.119.1.tgz#63e949cad167a0ee5e52986c93b96ff1d6a05b57"
integrity sha512-YUNnH7O7paVd+UmpArWCPH4Phlb5LwrkWVqzFWqL3xPyCcTSof2RL8UmvpkTjgYJjJ+NDfq5mPFkqv3aOEn5Sw==
dependencies:
"@sentry/types" "7.119.1"
"@sentry/utils" "7.119.1"

"@sentry/[email protected]":
version "7.119.1"
resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.119.1.tgz#9fc17aa9fcb942fbd2fc12eecd77a0f316897960"
integrity sha512-CGmLEPnaBqbUleVqrmGYjRjf5/OwjUXo57I9t0KKWViq81mWnYhaUhRZWFNoCNQHns+3+GPCOMvl0zlawt+evw==
dependencies:
"@sentry/core" "7.119.1"
"@sentry/types" "7.119.1"
"@sentry/utils" "7.119.1"
localforage "^1.8.1"

"@sentry/[email protected]":
version "7.119.1"
resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.119.1.tgz#117cf493a3008a39943b7d571d451c6218542847"
integrity sha512-4da+ruMEipuAZf35Ybt2StBdV1S+oJbSVccGpnl9w6RoeQoloT4ztR6ML3UcFDTXeTPT1FnHWDCyOfST0O7XMw==
dependencies:
"@sentry-internal/tracing" "7.119.1"
"@sentry/core" "7.119.1"
"@sentry/types" "7.119.1"
"@sentry/utils" "7.119.1"

"@sentry/[email protected]":
version "7.119.1"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.119.1.tgz#f9c3c12e217c9078a6d556c92590e42a39b750dd"
integrity sha512-4G2mcZNnYzK3pa2PuTq+M2GcwBRY/yy1rF+HfZU+LAPZr98nzq2X3+mJHNJoobeHRkvVh7YZMPi4ogXiIS5VNQ==

"@sentry/[email protected]":
version "7.119.1"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.119.1.tgz#08b28fa8170987a60e149e2102e83395a95e9a89"
integrity sha512-ju/Cvyeu/vkfC5/XBV30UNet5kLEicZmXSyuLwZu95hEbL+foPdxN+re7pCI/eNqfe3B2vz7lvz5afLVOlQ2Hg==
dependencies:
"@sentry/types" "7.119.1"

"@sinclair/typebox@^0.27.8":
version "0.27.8"
Expand Down Expand Up @@ -6022,12 +6052,12 @@ brace-expansion@^2.0.1:
dependencies:
balanced-match "^1.0.0"

braces@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
braces@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
dependencies:
fill-range "^7.0.1"
fill-range "^7.1.1"

brorand@^1.0.1, brorand@^1.1.0:
version "1.1.0"
Expand Down Expand Up @@ -7996,10 +8026,10 @@ file-entry-cache@^6.0.1:
dependencies:
flat-cache "^3.0.4"

fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
fill-range@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
dependencies:
to-regex-range "^5.0.1"

Expand Down Expand Up @@ -8658,6 +8688,11 @@ ignore@^5.2.0, ignore@^5.2.4:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==

immediate@~3.0.5:
version "3.0.6"
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==

immer@^9.0.21:
version "9.0.21"
resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176"
Expand Down Expand Up @@ -9835,6 +9870,13 @@ levn@~0.3.0:
prelude-ls "~1.1.2"
type-check "~0.3.2"

[email protected]:
version "3.1.1"
resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e"
integrity sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==
dependencies:
immediate "~3.0.5"

lines-and-columns@^1.1.6:
version "1.2.4"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
Expand Down Expand Up @@ -9875,6 +9917,13 @@ listr2@^3.2.2:
through "^2.3.8"
wrap-ansi "^7.0.0"

localforage@^1.8.1:
version "1.10.0"
resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4"
integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==
dependencies:
lie "3.1.1"

locate-path@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
Expand Down Expand Up @@ -10362,11 +10411,11 @@ micromark@^3.0.0:
uvu "^0.5.0"

micromatch@^4.0.2, micromatch@^4.0.4:
version "4.0.5"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
version "4.0.8"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
dependencies:
braces "^3.0.2"
braces "^3.0.3"
picomatch "^2.3.1"

miller-rabin@^4.0.0:
Expand Down Expand Up @@ -12727,7 +12776,7 @@ tsconfig-paths@^3.15.0:
minimist "^1.2.6"
strip-bom "^3.0.0"

tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
tslib@^1.8.1, tslib@^1.9.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
Expand Down Expand Up @@ -13140,10 +13189,10 @@ vite-plugin-node-polyfills@^0.21.0:
"@rollup/plugin-inject" "^5.0.5"
node-stdlib-browser "^1.2.0"

vite@^5.2.0:
version "5.2.10"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.10.tgz#2ac927c91e99d51b376a5c73c0e4b059705f5bd7"
integrity sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==
vite@^5.2.14:
version "5.2.14"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.14.tgz#fd5f60facf6b5f90ec7da6323c467a365d380c3d"
integrity sha512-TFQLuwWLPms+NBNlh0D9LZQ+HXW471COABxw/9TEUBrjuHMo9BrYBPrN/SYAwIuVL+rLerycxiLT41t4f5MZpA==
dependencies:
esbuild "^0.20.1"
postcss "^8.4.38"
Expand Down

0 comments on commit f37026d

Please sign in to comment.