PAVICS Web Processing Services using OGC-API integration with Weaver¶
Setting up the environment¶
Registering WPS providers with Weaver¶
When Weaver component is enabled, all WPS birds registered as process providers will be automatically accessible using the OGC-API - Processes interface from the endpoint where Weaver is defined.
import json
import os
import time
import requests
import urllib3
WEAVER_TEST_FQDN = os.getenv(
"WEAVER_TEST_FQDN", os.getenv("PAVICS_HOST", "pavics.ouranos.ca")
)
WEAVER_TEST_URL = os.getenv("WEAVER_TEST_URL", f"https://{WEAVER_TEST_FQDN}/weaver")
WEAVER_TEST_SSL_VERIFY = str(os.getenv("WEAVER_TEST_SSL_VERIFY", "true")).lower() in [
"true",
"1",
"on",
"yes",
]
WEAVER_TEST_DEFAULT_BIRDS = "finch, hummingbird, raven"
WEAVER_TEST_KNOWN_BIRDS = os.getenv(
"WEAVER_TEST_KNOWN_BIRDS", WEAVER_TEST_DEFAULT_BIRDS
)
WEAVER_TEST_KNOWN_BIRDS = list(
bird.strip() for bird in WEAVER_TEST_KNOWN_BIRDS.split(",")
)
WEAVER_TEST_DEFAULT_FILE = "/twitcher/ows/proxy/thredds/dodsC/birdhouse/testdata/ta_Amon_MRI-CGCM3_decadal1980_r1i1p1_199101-200012.nc"
WEAVER_TEST_FILE = os.getenv(
"WEAVER_TEST_FILE",
f"https://{WEAVER_TEST_FQDN}{WEAVER_TEST_DEFAULT_FILE}",
)
WEAVER_TEST_WPS_OUTPUTS = f"https://{WEAVER_TEST_FQDN}/wpsoutputs" # for validation
WEAVER_TEST_REQUEST_HEADERS = {
"Accept": "application/json",
"Content-Type": "application/json",
}
WEAVER_TEST_REQUEST_TIMEOUT = int(os.getenv("WEAVER_TEST_REQUEST_TIMEOUT") or 5)
WEAVER_TEST_REQUEST_XARGS = dict(
headers=WEAVER_TEST_REQUEST_HEADERS,
verify=WEAVER_TEST_SSL_VERIFY,
timeout=WEAVER_TEST_REQUEST_TIMEOUT,
)
if not WEAVER_TEST_SSL_VERIFY:
urllib3.disable_warnings()
print("Variables:")
variables = [
("WEAVER_TEST_FQDN", WEAVER_TEST_FQDN),
("WEAVER_TEST_URL", WEAVER_TEST_URL),
("WEAVER_TEST_WPS_OUTPUTS", WEAVER_TEST_WPS_OUTPUTS),
("WEAVER_TEST_SSL_VERIFY", WEAVER_TEST_SSL_VERIFY),
("WEAVER_TEST_FILE", WEAVER_TEST_FILE),
("WEAVER_TEST_KNOWN_BIRDS", WEAVER_TEST_KNOWN_BIRDS),
("WEAVER_TEST_REQUEST_TIMEOUT", WEAVER_TEST_REQUEST_TIMEOUT),
("WEAVER_TEST_REQUEST_XARGS", WEAVER_TEST_REQUEST_XARGS),
]
max_len = max(len(var[0]) for var in variables) + 2
msg = f" {{:{max_len}}}{{}}"
for var, val in variables:
print(msg.format(var, val))
assert (
len(WEAVER_TEST_KNOWN_BIRDS) >= 1
), "No test WPS provider provided in 'WEAVER_TEST_KNOWN_BIRDS'."
Variables:
WEAVER_TEST_FQDN pavics.ouranos.ca
WEAVER_TEST_URL https://pavics.ouranos.ca/weaver
WEAVER_TEST_WPS_OUTPUTS https://pavics.ouranos.ca/wpsoutputs
WEAVER_TEST_SSL_VERIFY True
WEAVER_TEST_FILE https://pavics.ouranos.ca/twitcher/ows/proxy/thredds/dodsC/birdhouse/testdata/ta_Amon_MRI-CGCM3_decadal1980_r1i1p1_199101-200012.nc
WEAVER_TEST_KNOWN_BIRDS ['finch', 'hummingbird', 'raven']
WEAVER_TEST_REQUEST_TIMEOUT 5
WEAVER_TEST_REQUEST_XARGS {'headers': {'Accept': 'application/json', 'Content-Type': 'application/json'}, 'verify': True, 'timeout': 5}
Defining utility functions for displaying test results¶
def json_dump(_json):
try:
if isinstance(_json, str):
_json = json.loads(_json)
return json.dumps(_json, indent=2, ensure_ascii=False)
except Exception:
return str(_json)
def json_print(_json):
print(json_dump(_json))
Running Weaver WPS tests¶
Simple listing of registered WPS providers in Weaver¶
print("Listing WPS providers registered under Weaver...\n")
path = f"{WEAVER_TEST_URL}/providers"
query = {
"detail": False,
"check": False,
} # skip pre-fetch to obtain results quickly (all checked in following cells)
resp = requests.get(path, params=query, **WEAVER_TEST_REQUEST_XARGS)
assert (
resp.status_code == 200
), f"Error during WPS bird providers listing from [{path}]:\n{json_dump(resp.text)}"
body = resp.json()
json_print(body)
assert "providers" in body and len(
body["providers"]
), f"Could not find Weaver WPS providers in response:\n{json_dump(body)}"
missing = []
for bird in sorted(WEAVER_TEST_KNOWN_BIRDS):
if bird not in body["providers"]:
missing.append(bird)
assert (
not missing
), f"Could not find all expected Weaver WPS providers.\nMissing: [{missing}]\nExpected: [{WEAVER_TEST_KNOWN_BIRDS}]"
bird_ids = body["providers"]
Listing WPS providers registered under Weaver...
{
"checked": false,
"providers": [
"finch",
"hummingbird",
"raven"
]
}
Obtaining OGC-API converted WPS processes by Weaver from original WPS providers endpoints¶
For each registered provider, Weaver sends a GetCapabilities WPS request to the remote endpoint and parses the XML result in order to form the corresponding OGC-API JSON content.
print("Listing WPS provider processes converted to OGC-API interface by Weaver:\n")
process_locations = []
for bird in sorted(WEAVER_TEST_KNOWN_BIRDS):
path = f"{WEAVER_TEST_URL}/providers/{bird}/processes"
resp = requests.get(path, **WEAVER_TEST_REQUEST_XARGS)
assert (
resp.status_code == 200
), f"Error during WPS bird processes retrieval on: [{path}]\n[{json_dump(resp.text)}]"
body = resp.json()
assert len(body["processes"]), f"WPS bird [{bird}] did not list any process!"
for process in sorted(body["processes"], key=lambda p: p["id"]):
process_desc_url = f"{path}/{process['id']}"
process_locations.append(process_desc_url)
print(" -", process_desc_url)
Listing WPS provider processes converted to OGC-API interface by Weaver:
- https://pavics.ouranos.ca/weaver/providers/finch/processes/average_polygon
- https://pavics.ouranos.ca/weaver/providers/finch/processes/base_flow_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/biologically_effective_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/blowing_snow
- https://pavics.ouranos.ca/weaver/providers/finch/processes/calm_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/cdd
- https://pavics.ouranos.ca/weaver/providers/finch/processes/cffwis
- https://pavics.ouranos.ca/weaver/providers/finch/processes/cold_and_dry_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/cold_and_wet_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/cold_spell_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/cold_spell_duration_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/cold_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/consecutive_frost_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/consecutive_frost_free_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/cool_night_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/cooling_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/corn_heat_units
- https://pavics.ouranos.ca/weaver/providers/finch/processes/cwd
- https://pavics.ouranos.ca/weaver/providers/finch/processes/days_over_precip_doy_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/days_over_precip_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/days_with_snow
- https://pavics.ouranos.ca/weaver/providers/finch/processes/degree_days_exceedance_date
- https://pavics.ouranos.ca/weaver/providers/finch/processes/df
- https://pavics.ouranos.ca/weaver/providers/finch/processes/discharge_distribution_fit
- https://pavics.ouranos.ca/weaver/providers/finch/processes/discharge_stats
- https://pavics.ouranos.ca/weaver/providers/finch/processes/dlyfrzthw
- https://pavics.ouranos.ca/weaver/providers/finch/processes/doy_qmax
- https://pavics.ouranos.ca/weaver/providers/finch/processes/doy_qmin
- https://pavics.ouranos.ca/weaver/providers/finch/processes/dry_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/dry_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/dry_spell_total_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/dryness_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/dtr
- https://pavics.ouranos.ca/weaver/providers/finch/processes/dtrmax
- https://pavics.ouranos.ca/weaver/providers/finch/processes/dtrvar
- https://pavics.ouranos.ca/weaver/providers/finch/processes/effective_growing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/empirical_quantile_mapping
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_cdd
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_cold_and_dry_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_cold_and_wet_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_cold_spell_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_cold_spell_duration_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_cold_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_consecutive_frost_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_consecutive_frost_free_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_cool_night_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_cooling_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_corn_heat_units
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_cwd
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_days_over_precip_doy_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_days_over_precip_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_degree_days_exceedance_date
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_dlyfrzthw
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_dry_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_dry_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_dry_spell_total_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_dtr
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_dtrmax
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_dtrvar
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_effective_growing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_etr
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_first_day_tg_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_first_day_tg_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_first_day_tn_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_first_day_tn_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_first_day_tx_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_first_day_tx_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_fraction_over_precip_doy_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_fraction_over_precip_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_freezethaw_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_freezethaw_spell_max_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_freezethaw_spell_mean_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_freezing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_freshet_start
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_frost_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_frost_free_season_end
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_frost_free_season_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_frost_free_season_start
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_frost_season_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_growing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_growing_season_end
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_growing_season_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_growing_season_start
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_heat_wave_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_heat_wave_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_heat_wave_max_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_heat_wave_total_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_heating_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_high_precip_low_temp
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_hot_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_hot_spell_max_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_hxmax_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_ice_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_last_spring_frost
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_liquid_precip_ratio
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_liquidprcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_max_n_day_precipitation_amount
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_max_pr_intensity
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_maximum_consecutive_warm_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_prcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_prlp
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_prsn
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_rain_frzgr
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_rx1day
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_sdii
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_solidprcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_spi
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tg
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tg10p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tg90p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tg_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tg_days_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tg_max
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tg_mean
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tg_min
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_thawing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tn10p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tn90p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tn_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tn_days_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tn_max
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tn_mean
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tn_min
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tropical_nights
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tx10p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tx90p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tx_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tx_days_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tx_max
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tx_mean
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tx_min
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_tx_tn_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_warm_and_dry_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_warm_and_wet_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_warm_spell_duration_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_wet_prcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_wetdays
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_bbox_wetdays_prop
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_cdd
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_cold_and_dry_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_cold_and_wet_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_cold_spell_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_cold_spell_duration_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_cold_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_consecutive_frost_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_consecutive_frost_free_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_cool_night_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_cooling_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_corn_heat_units
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_cwd
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_days_over_precip_doy_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_days_over_precip_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_degree_days_exceedance_date
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_dlyfrzthw
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_dry_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_dry_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_dry_spell_total_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_dtr
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_dtrmax
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_dtrvar
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_effective_growing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_etr
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_first_day_tg_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_first_day_tg_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_first_day_tn_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_first_day_tn_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_first_day_tx_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_first_day_tx_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_fraction_over_precip_doy_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_fraction_over_precip_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_freezethaw_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_freezethaw_spell_max_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_freezethaw_spell_mean_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_freezing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_freshet_start
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_frost_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_frost_free_season_end
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_frost_free_season_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_frost_free_season_start
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_frost_season_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_growing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_growing_season_end
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_growing_season_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_growing_season_start
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_heat_wave_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_heat_wave_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_heat_wave_max_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_heat_wave_total_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_heating_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_high_precip_low_temp
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_hot_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_hot_spell_max_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_hxmax_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_ice_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_last_spring_frost
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_liquid_precip_ratio
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_liquidprcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_max_n_day_precipitation_amount
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_max_pr_intensity
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_maximum_consecutive_warm_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_prcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_prlp
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_prsn
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_rain_frzgr
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_rx1day
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_sdii
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_solidprcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_spi
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tg
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tg10p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tg90p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tg_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tg_days_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tg_max
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tg_mean
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tg_min
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_thawing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tn10p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tn90p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tn_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tn_days_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tn_max
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tn_mean
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tn_min
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tropical_nights
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tx10p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tx90p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tx_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tx_days_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tx_max
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tx_mean
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tx_min
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_tx_tn_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_warm_and_dry_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_warm_and_wet_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_warm_spell_duration_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_wet_prcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_wetdays
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_grid_point_wetdays_prop
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_cdd
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_cold_and_dry_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_cold_and_wet_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_cold_spell_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_cold_spell_duration_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_cold_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_consecutive_frost_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_consecutive_frost_free_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_cool_night_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_cooling_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_corn_heat_units
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_cwd
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_days_over_precip_doy_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_days_over_precip_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_degree_days_exceedance_date
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_dlyfrzthw
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_dry_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_dry_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_dry_spell_total_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_dtr
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_dtrmax
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_dtrvar
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_effective_growing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_etr
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_first_day_tg_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_first_day_tg_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_first_day_tn_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_first_day_tn_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_first_day_tx_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_first_day_tx_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_fraction_over_precip_doy_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_fraction_over_precip_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_freezethaw_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_freezethaw_spell_max_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_freezethaw_spell_mean_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_freezing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_freshet_start
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_frost_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_frost_free_season_end
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_frost_free_season_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_frost_free_season_start
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_frost_season_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_growing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_growing_season_end
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_growing_season_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_growing_season_start
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_heat_wave_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_heat_wave_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_heat_wave_max_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_heat_wave_total_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_heating_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_high_precip_low_temp
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_hot_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_hot_spell_max_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_hxmax_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_ice_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_last_spring_frost
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_liquid_precip_ratio
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_liquidprcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_max_n_day_precipitation_amount
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_max_pr_intensity
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_maximum_consecutive_warm_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_prcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_prlp
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_prsn
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_rain_frzgr
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_rx1day
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_sdii
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_solidprcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_spi
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tg
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tg10p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tg90p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tg_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tg_days_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tg_max
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tg_mean
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tg_min
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_thawing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tn10p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tn90p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tn_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tn_days_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tn_max
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tn_mean
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tn_min
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tropical_nights
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tx10p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tx90p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tx_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tx_days_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tx_max
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tx_mean
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tx_min
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_tx_tn_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_warm_and_dry_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_warm_and_wet_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_warm_spell_duration_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_wet_prcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_wetdays
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ensemble_polygon_wetdays_prop
- https://pavics.ouranos.ca/weaver/providers/finch/processes/etr
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ffdi
- https://pavics.ouranos.ca/weaver/providers/finch/processes/fire_season
- https://pavics.ouranos.ca/weaver/providers/finch/processes/first_day_tg_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/first_day_tg_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/first_day_tn_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/first_day_tn_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/first_day_tx_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/first_day_tx_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/first_snowfall
- https://pavics.ouranos.ca/weaver/providers/finch/processes/fraction_over_precip_doy_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/fraction_over_precip_thresh
- https://pavics.ouranos.ca/weaver/providers/finch/processes/freezethaw_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/freezethaw_spell_max_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/freezethaw_spell_mean_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/freezing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/freq_analysis
- https://pavics.ouranos.ca/weaver/providers/finch/processes/freshet_start
- https://pavics.ouranos.ca/weaver/providers/finch/processes/frost_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/frost_free_season_end
- https://pavics.ouranos.ca/weaver/providers/finch/processes/frost_free_season_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/frost_free_season_start
- https://pavics.ouranos.ca/weaver/providers/finch/processes/frost_season_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/geoseries_to_netcdf
- https://pavics.ouranos.ca/weaver/providers/finch/processes/growing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/growing_season_end
- https://pavics.ouranos.ca/weaver/providers/finch/processes/growing_season_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/growing_season_start
- https://pavics.ouranos.ca/weaver/providers/finch/processes/heat_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/heat_wave_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/heat_wave_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/heat_wave_max_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/heat_wave_total_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/heating_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/high_precip_low_temp
- https://pavics.ouranos.ca/weaver/providers/finch/processes/hot_spell_frequency
- https://pavics.ouranos.ca/weaver/providers/finch/processes/hot_spell_max_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/hourly_to_daily
- https://pavics.ouranos.ca/weaver/providers/finch/processes/huglin_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/humidex
- https://pavics.ouranos.ca/weaver/providers/finch/processes/hurs
- https://pavics.ouranos.ca/weaver/providers/finch/processes/hurs_fromdewpoint
- https://pavics.ouranos.ca/weaver/providers/finch/processes/huss_fromdewpoint
- https://pavics.ouranos.ca/weaver/providers/finch/processes/hxmax_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/ice_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/jetstream_metric_woollings
- https://pavics.ouranos.ca/weaver/providers/finch/processes/kbdi
- https://pavics.ouranos.ca/weaver/providers/finch/processes/last_snowfall
- https://pavics.ouranos.ca/weaver/providers/finch/processes/last_spring_frost
- https://pavics.ouranos.ca/weaver/providers/finch/processes/latitude_temperature_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/liquid_precip_ratio
- https://pavics.ouranos.ca/weaver/providers/finch/processes/liquidprcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/longwave_upwelling_radiation_from_net_downwelling
- https://pavics.ouranos.ca/weaver/providers/finch/processes/max_n_day_precipitation_amount
- https://pavics.ouranos.ca/weaver/providers/finch/processes/max_pr_intensity
- https://pavics.ouranos.ca/weaver/providers/finch/processes/maximum_consecutive_warm_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/mean_radiant_temperature
- https://pavics.ouranos.ca/weaver/providers/finch/processes/melt_and_precip_max
- https://pavics.ouranos.ca/weaver/providers/finch/processes/potential_evapotranspiration
- https://pavics.ouranos.ca/weaver/providers/finch/processes/prcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/prlp
- https://pavics.ouranos.ca/weaver/providers/finch/processes/prsn
- https://pavics.ouranos.ca/weaver/providers/finch/processes/rain_frzgr
- https://pavics.ouranos.ca/weaver/providers/finch/processes/rb_flashiness_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/rprctot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/rx1day
- https://pavics.ouranos.ca/weaver/providers/finch/processes/sdii
- https://pavics.ouranos.ca/weaver/providers/finch/processes/sea_ice_area
- https://pavics.ouranos.ca/weaver/providers/finch/processes/sea_ice_extent
- https://pavics.ouranos.ca/weaver/providers/finch/processes/shortwave_upwelling_radiation_from_net_downwelling
- https://pavics.ouranos.ca/weaver/providers/finch/processes/snd_max_doy
- https://pavics.ouranos.ca/weaver/providers/finch/processes/snd_season_end
- https://pavics.ouranos.ca/weaver/providers/finch/processes/snd_season_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/snd_season_start
- https://pavics.ouranos.ca/weaver/providers/finch/processes/snd_to_snw
- https://pavics.ouranos.ca/weaver/providers/finch/processes/snow_depth
- https://pavics.ouranos.ca/weaver/providers/finch/processes/snow_melt_we_max
- https://pavics.ouranos.ca/weaver/providers/finch/processes/snw_max
- https://pavics.ouranos.ca/weaver/providers/finch/processes/snw_max_doy
- https://pavics.ouranos.ca/weaver/providers/finch/processes/snw_season_end
- https://pavics.ouranos.ca/weaver/providers/finch/processes/snw_season_length
- https://pavics.ouranos.ca/weaver/providers/finch/processes/snw_season_start
- https://pavics.ouranos.ca/weaver/providers/finch/processes/snw_to_snd
- https://pavics.ouranos.ca/weaver/providers/finch/processes/solidprcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/spei
- https://pavics.ouranos.ca/weaver/providers/finch/processes/spi
- https://pavics.ouranos.ca/weaver/providers/finch/processes/subset_bbox
- https://pavics.ouranos.ca/weaver/providers/finch/processes/subset_bbox_dataset
- https://pavics.ouranos.ca/weaver/providers/finch/processes/subset_grid_point_dataset
- https://pavics.ouranos.ca/weaver/providers/finch/processes/subset_gridpoint
- https://pavics.ouranos.ca/weaver/providers/finch/processes/subset_polygon
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tg
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tg10p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tg90p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tg_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tg_days_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tg_max
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tg_mean
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tg_min
- https://pavics.ouranos.ca/weaver/providers/finch/processes/thawing_degree_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tn10p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tn90p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tn_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tn_days_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tn_max
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tn_mean
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tn_min
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tropical_nights
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tx10p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tx90p
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tx_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tx_days_below
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tx_max
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tx_mean
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tx_min
- https://pavics.ouranos.ca/weaver/providers/finch/processes/tx_tn_days_above
- https://pavics.ouranos.ca/weaver/providers/finch/processes/utci
- https://pavics.ouranos.ca/weaver/providers/finch/processes/warm_and_dry_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/warm_and_wet_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/warm_spell_duration_index
- https://pavics.ouranos.ca/weaver/providers/finch/processes/water_budget
- https://pavics.ouranos.ca/weaver/providers/finch/processes/water_budget_from_tas
- https://pavics.ouranos.ca/weaver/providers/finch/processes/wet_prcptot
- https://pavics.ouranos.ca/weaver/providers/finch/processes/wetdays
- https://pavics.ouranos.ca/weaver/providers/finch/processes/wetdays_prop
- https://pavics.ouranos.ca/weaver/providers/finch/processes/wind_chill
- https://pavics.ouranos.ca/weaver/providers/finch/processes/wind_speed_from_vector
- https://pavics.ouranos.ca/weaver/providers/finch/processes/wind_vector_from_speed
- https://pavics.ouranos.ca/weaver/providers/finch/processes/windy_days
- https://pavics.ouranos.ca/weaver/providers/finch/processes/winter_storm
- https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/cchecker
- https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/cdo_bbox
- https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/cdo_copy
- https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/cdo_indices
- https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/cdo_inter_mpi
- https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/cdo_operation
- https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/cdo_sinfo
- https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/cfchecker
- https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/cmor_checker
- https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ensembles
- https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump
- https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/qa_cfchecker
- https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/qa_checker
- https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/spotchecker
- https://pavics.ouranos.ca/weaver/providers/raven/processes/hydrobasins-select
- https://pavics.ouranos.ca/weaver/providers/raven/processes/nalcms-zonal-stats
- https://pavics.ouranos.ca/weaver/providers/raven/processes/nalcms-zonal-stats-raster
- https://pavics.ouranos.ca/weaver/providers/raven/processes/raster-subset
- https://pavics.ouranos.ca/weaver/providers/raven/processes/shape-properties
- https://pavics.ouranos.ca/weaver/providers/raven/processes/terrain-analysis
- https://pavics.ouranos.ca/weaver/providers/raven/processes/zonal-stats
Dispatched execution of Hummingbird WPS process¶
Here, we attempt running the ncdump process defined Hummingbird.
This is analogous to the WPS_example notebook, but through the OGC-API interface provided by Weaver.
The process execution received by Weaver gets dispatched to the real WPS location. Weaver then monitors the process until completion and, once completed, returns the location where results can be retrieved.
assert (
"hummingbird" in WEAVER_TEST_KNOWN_BIRDS
), "Hummingbird not specified within known WPS provider birds by Weaver. Cannot test dispatched process execution..."
WEAVER_BIRD_URL = f"{WEAVER_TEST_URL}/providers/hummingbird"
WEAVER_BIRD_PROCESS_URL = f"{WEAVER_BIRD_URL}/processes/ncdump"
assert (
WEAVER_BIRD_PROCESS_URL in process_locations
), f"Could not find WPS bird process URL to test execution [{WEAVER_BIRD_PROCESS_URL}]."
print(f"Will run process: [{WEAVER_BIRD_PROCESS_URL}]")
Will run process: [https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump]
Obtaining the specific description of the test WPS process¶
This request will tell us the explicit details of the process such as its inputs, outputs, and other metadata. Weaver parses the results retrieved from the original WPS provider using DescribeProcess request to generate the corresponding outputs. Weaver also adds additional metadata when it can infer some missing details from returned description fields.
# NBVAL_IGNORE_OUTPUT
# ignore detailed description prone to changes, instead run a few basic manual validations
print("Getting WPS process description...\n")
resp = requests.get(WEAVER_BIRD_PROCESS_URL, **WEAVER_TEST_REQUEST_XARGS)
assert (
resp.status_code == 200
), f"Error getting WPS process description:\n[{json_dump(resp.text)}]"
body = resp.json()
json_print(body)
assert "hummingbird" in body["keywords"]
assert "wps-remote" in body["keywords"]
assert body["id"] == "ncdump"
Getting WPS process description...
{
"$schema": "https://schemas.opengis.net/ogcapi/processes/part1/1.0/openapi/schemas/process.yaml",
"id": "ncdump",
"title": "NCDump",
"version": "4.4.1.1",
"mutable": true,
"description": "Run ncdump to retrieve NetCDF header metadata.",
"keywords": [
"hummingbird",
"Hummingbird",
"wps-remote"
],
"metadata": [
{
"title": "Birdhouse",
"href": "http://bird-house.github.io/",
"rel": "birdhouse"
},
{
"title": "User Guide",
"href": "http://birdhouse-hummingbird.readthedocs.io/en/latest/",
"rel": "user-guide"
}
],
"inputs": {
"dataset": {
"title": "Dataset",
"description": "Enter a URL pointing to a NetCDF file (optional)",
"minOccurs": 0,
"maxOccurs": 100,
"schema": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 0,
"maxItems": 100
},
"formats": [
{
"default": true,
"mediaType": "application/x-netcdf"
}
]
},
"dataset_opendap": {
"title": "Remote OpenDAP Data URL",
"description": "Or provide a remote OpenDAP data URL, for example: http://my.opendap/thredds/dodsC/path/to/file.nc",
"minOccurs": 0,
"maxOccurs": 100,
"schema": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 0,
"maxItems": 100
},
"literalDataDomains": [
{
"default": true,
"dataType": {
"name": "string"
},
"valueDefinition": {
"anyValue": true
}
}
]
}
},
"outputs": {
"output": {
"title": "NetCDF Metadata",
"description": "NetCDF Metadata",
"schema": {
"type": "string"
},
"formats": [
{
"default": true,
"mediaType": "text/plain"
}
]
}
},
"visibility": "public",
"jobControlOptions": [
"async-execute"
],
"outputTransmission": [
"reference",
"value"
],
"processDescriptionURL": "https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump",
"processEndpointWPS1": "https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird?service=WPS&request=DescribeProcess&version=1.0.0&identifier=ncdump",
"executeEndpoint": "https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump/jobs",
"deploymentProfile": "http://www.opengis.net/profiles/eoc/wpsApplication",
"links": [
{
"title": "Current process description.",
"hreflang": "en-CA",
"href": "https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump:4.4.1",
"type": "application/json",
"rel": "self"
},
{
"title": "Alternate process description.",
"hreflang": "en-CA",
"href": "https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump?f=xml",
"type": "application/xml",
"rel": "alternate"
},
{
"title": "Alternate process description.",
"hreflang": "en-CA",
"href": "https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump?f=html",
"type": "text/html",
"rel": "alternate"
},
{
"title": "Process definition.",
"hreflang": "en-CA",
"href": "https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump",
"type": "application/json",
"rel": "process-meta"
},
{
"title": "Process execution endpoint for job submission.",
"hreflang": "en-CA",
"href": "https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump/execution",
"type": "application/json",
"rel": "http://www.opengis.net/def/rel/ogc/1.0/execute"
},
{
"title": "List of registered processes.",
"hreflang": "en-CA",
"href": "https://pavics.ouranos.ca/weaver/providers/hummingbird/processes",
"type": "application/json",
"rel": "http://www.opengis.net/def/rel/ogc/1.0/processes"
},
{
"title": "List of job executions corresponding to this process.",
"hreflang": "en-CA",
"href": "https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump/jobs",
"type": "application/json",
"rel": "http://www.opengis.net/def/rel/ogc/1.0/job-list"
},
{
"title": "List of processes registered under the service.",
"hreflang": "en-CA",
"href": "https://pavics.ouranos.ca/weaver/providers/hummingbird/processes",
"type": "application/json",
"rel": "up"
},
{
"title": "Tagged version of this process description.",
"hreflang": "en-CA",
"href": "https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump:4.4.1",
"type": "application/json",
"rel": "working-copy"
},
{
"title": "Most recent revision of this process.",
"hreflang": "en-CA",
"href": "https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump",
"type": "application/json",
"rel": "latest-version"
},
{
"title": "Listing of all revisions of this process.",
"hreflang": "en-CA",
"href": "https://pavics.ouranos.ca/weaver/providers/hummingbird/processes?detail=false&revisions=true&process=ncdump",
"type": "application/json",
"rel": "version-history"
},
{
"title": "Provider service description.",
"hreflang": "en-CA",
"href": "https://pavics.ouranos.ca/weaver/providers/hummingbird",
"type": "application/xml",
"rel": "service"
},
{
"title": "Provider service definition.",
"hreflang": "en-CA",
"href": "https://pavics.ouranos.ca/weaver/providers/hummingbird",
"type": "application/xml",
"rel": "service-meta"
},
{
"title": "Remote service description.",
"hreflang": "en-CA",
"href": "https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird?service=WPS&request=GetCapabilities&version=1.0.0",
"type": "application/xml",
"rel": "service-desc"
},
{
"title": "Remote process description.",
"hreflang": "en-CA",
"href": "https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird?service=WPS&request=DescribeProcess&version=1.0.0&identifier=ncdump",
"type": "application/xml",
"rel": "http://www.opengis.net/def/rel/ogc/1.0/process-desc"
}
]
}
Submitting the new process execution¶
Using OGC-API interface, WPS process execution are accomplished using a Job. That job will tell us the status location where we can monitor the process execution.
From the previous response, we can see that the process accepts many inputs and format variations.
In this case, we are interested in the input named dataset to submit the file defined by WEAVER_TEST_FILE.
Following execution of the process, we expect to obtain a raw text data dump of the test file content.
The location of the raw text file is expected be provided by output named output according to the process description.
print("Submitting process job with:")
print(f" File: [{WEAVER_TEST_FILE}]")
print(f" Process: [{WEAVER_BIRD_PROCESS_URL}]")
data = {
"mode": "async", # This tells Weaver to run the process asynchronously, such that we get non-blocking status location
"response": "document", # Type of status response (only this mode supported for the time being)
"inputs": [
{
"id": "dataset_opendap", # Target input of the process
# Note: even though this is an URL, the expected type is a 'string' (not a 'File')
# therefore, 'data' (or 'value') must be used instead of 'href'
"data": WEAVER_TEST_FILE,
}
],
"outputs": [
{
"id": "output", # Target output we want to retrieve
"transmissionMode": "reference", # Ask to provide the result as HTTP reference
}
],
}
# define a function to allow re-submitting later in case of error
def submit_job() -> str:
_path = f"{WEAVER_BIRD_PROCESS_URL}/jobs"
_resp = requests.post(_path, json=data, **WEAVER_TEST_REQUEST_XARGS)
assert _resp.status_code in [
200,
201,
], f"Error during WPS job submission:\n{json_dump(resp.text)}"
loc = _resp.headers.get("Location")
assert loc, "Could not find status location URL"
return loc
status_location = submit_job()
print(f"Job Status Location: [{status_location}]")
Submitting process job with:
File: [https://pavics.ouranos.ca/twitcher/ows/proxy/thredds/dodsC/birdhouse/testdata/ta_Amon_MRI-CGCM3_decadal1980_r1i1p1_199101-200012.nc]
Process: [https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump]
Job Status Location: [https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump/jobs/a5174a87-b026-4860-b822-fcdee46a4dba]
Monitoring execution until completion¶
Now, we wait until the process completes by periodically verifying the provided status location of the job. The job will be running asynchronously and will be gradually updated with progression and logging details.
Following job submission request, the status can be either accepted if it is still in queue pending execution, or already be running.
Once the job completes, the status should indicate it was either successful or failed.
For backward compatibility, succeeded and started are also considered as aliases that could be used by previous implementation of Weaver relying on pending drafts of OGC API - Processes.
# NBVAL_IGNORE_OUTPUT
# ignore status updates of job monitoring
print("Waiting for job completion with pooling monitoring of its status...")
# Define a timeout to abandon this monitoring. Process is relatively quick and shouldn't last too long.
# The process will be retried if failed to handle possible sporadic errors from the WPS remote provider.
# Stops on first maximum timout/retry reached, whichever happens first.
timeout = 60
retries = 10
attempt = retries
delta = 5
body = {}
while timeout >= 0:
resp = requests.get(status_location, **WEAVER_TEST_REQUEST_XARGS)
assert (
resp.status_code == 200
), f"Failed retrieving job status at location [{status_location}]"
body = resp.json()
timeout -= delta
status = body["status"]
if status in ["accepted", "running", "started"]:
print(f"Delay: {delta}s, Duration: {body['duration']}, Status: {status}")
time.sleep(delta)
continue
if status in ["failed", "succeeded", "successful"]:
print(f"Final job status: [{status}]")
if status == "failed":
if attempt > 0:
attempt -= 1
retry_msg = f"{retries - attempt}/{retries}"
print(f"Retrying execution... ({retry_msg})")
status_location = submit_job()
print(f"Job Status Location: [{status_location}] (retry: {retry_msg})")
continue
else:
print(f"Final retry attempt reached ({retries}). Aborting.")
break
raise ValueError(f"Unhandled job status during monitoring: [{status}]")
assert timeout > 0, "Timeout reached. Process job submission never finished."
# note: don't assert the process success/failure yet, to retrieve more details in case it failed
assert body and "status" in body, f"Could not retrieve job status [{status_location}]"
status = body["status"]
Waiting for job completion with pooling monitoring of its status...
Delay: 5s, Duration: 00:00:00, Status: accepted
Final job status: [failed]
Retrying execution... (1/10)
Job Status Location: [https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump/jobs/47456b79-75c5-4b1f-8a1a-ae92d9988a73] (retry: 1/10)
Delay: 5s, Duration: 00:00:00, Status: accepted
Final job status: [successful]
Obtaining job execution logs¶
Retrieve job logs listing execution steps accomplished by Weaver and the underlying process if it provided status messages. During job execution, Weaver attempts to collect any output the original WPS produces and integrates them within its own job logs in order to generate sequential chain of log events by each executed steps.
In case the job failed execution, this log will help us identify the cause of the problem.
Otherwise, we will have a summary of processing steps.
NOTE:
Job logs is a feature specific to Weaver that is not necessarily implemented by other implementations of OGC-API - Processes.
# NBVAL_IGNORE_OUTPUT
# ignore variable logs values that could easily change, only informative
print("Obtaining job logs from execution...")
path = f"{status_location}/logs"
resp = requests.get(path, **WEAVER_TEST_REQUEST_XARGS)
assert resp.status_code == 200, f"Failed to retrieve job logs [{path}]"
logs = resp.json()
log_lines = "\n".join(logs)
assert len(logs) > 1
assert status in [
"succeeded",
"successful",
], f"Job execution was not successful. Status: [{status}]\nFull Logs:\n\n{log_lines}"
assert "100%" in logs[-1] and (
"succeeded" in logs[-1] or "successful" in logs[-1]
), f"Log entry: [{logs[-1]}]\nFull Logs:\n\n{log_lines}"
print(f"Job logs retrieved from [{path}]:\n\n{log_lines}")
Obtaining job logs from execution...
Job logs retrieved from [https://pavics.ouranos.ca/weaver/providers/hummingbird/processes/ncdump/jobs/47456b79-75c5-4b1f-8a1a-ae92d9988a73/logs]:
[2025-08-21 22:49:00] INFO [weaver.datatype.Job] 00:00:00 0% accepted Job task submitted for execution.
[2025-08-21 22:49:01] INFO [weaver.datatype.Job] 00:00:00 0% running Job started.
[2025-08-21 22:49:01] INFO [weaver.datatype.Job] 00:00:00 0% running Job task setup initiated.
[2025-08-21 22:49:01] INFO [weaver.datatype.Job] 00:00:00 1% running Job task setup completed.
[2025-08-21 22:49:01] DEBUG [weaver.datatype.Job] 00:00:00 2% running Employed WPS URL: [https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird]
[2025-08-21 22:49:01] INFO [weaver.datatype.Job] 00:00:00 2% running Execute WPS request for process [ncdump]
[2025-08-21 22:49:01] INFO [weaver.datatype.Job] 00:00:00 3% running Fetching job input definitions.
[2025-08-21 22:49:01] INFO [weaver.datatype.Job] 00:00:00 10% running Fetching job output definitions.
[2025-08-21 22:49:01] INFO [weaver.datatype.Job] 00:00:00 11% running Starting job process execution.
[2025-08-21 22:49:01] INFO [weaver.datatype.Job] 00:00:00 11% running Following updates could take a while until the Application Package answers...
[2025-08-21 22:49:05] DEBUG [weaver.datatype.Job] 00:00:03 12% running Updated job status location: [/data/wps_outputs/weaver/public/47456b79-75c5-4b1f-8a1a-ae92d9988a73.xml].
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 13% running Starting monitoring of job execution.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 14% running [2025-08-21 22:49:01] INFO [weaver.processes.wps_package|ncdump] 1% running Preparing package logs done.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 16% running [2025-08-21 22:49:01] INFO [weaver.processes.wps_package|ncdump] 2% running Launching package...
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 19% running [2025-08-21 22:49:01] WARNING [weaver.processes.wps_package|ncdump] 2% running Visible application CWL euid:egid [0:0]
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 21% running [2025-08-21 22:49:01] INFO [cwltool] Resolved '/tmp/tmpxnoszcsx/ncdump' to 'file:///tmp/tmpxnoszcsx/ncdump'
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 24% running [2025-08-21 22:49:02] INFO [weaver.processes.wps_package|ncdump] 5% running Loading package content done.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 26% running [2025-08-21 22:49:02] INFO [weaver.processes.wps_package|ncdump] 6% running Retrieve package inputs done.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 29% running [2025-08-21 22:49:02] INFO [weaver.processes.wps_package|ncdump] 8% running Convert package inputs done.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 31% running [2025-08-21 22:49:02] INFO [weaver.processes.wps_package|ncdump] 9% running Checking package prerequisites... (operation could take a while depending on requirements)
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 34% running [2025-08-21 22:49:02] INFO [weaver.processes.wps_package|ncdump] 9% running Package ready for execution.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 37% running [2025-08-21 22:49:02] INFO [weaver.processes.wps_package|ncdump] 10% running Running package...
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 39% running [2025-08-21 22:49:02] INFO [weaver.processes.wps_package|ncdump] 10% running Preparing to launch package [ncdump].
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 42% running [2025-08-21 22:49:02] INFO [weaver.processes.wps_package|ncdump] 10% running WPS-1 Package resolved from [requirement/hint]: WPS1Requirement
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 44% running [2025-08-21 22:49:02] INFO [weaver.processes.wps_package|ncdump] 11% running [provider: https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird, step: ncdump] - Preparing process for remote execution.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 47% running [2025-08-21 22:49:02] INFO [weaver.processes.wps_package|ncdump] 14% running [provider: https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird, step: ncdump] - Process ready for execute remote process.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 49% running [2025-08-21 22:49:02] INFO [weaver.processes.wps_package|ncdump] 18% running [provider: https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird, step: ncdump] - Staging inputs for remote execution.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 52% running [2025-08-21 22:49:02] INFO [weaver.processes.wps_package|ncdump] 20% running [provider: https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird, step: ncdump] - Preparing inputs/outputs for remote execution.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 55% running [2025-08-21 22:49:02] INFO [weaver.processes.wps_package|ncdump] 22% running [provider: https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird, step: ncdump] - Executing remote process job.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 57% running [2025-08-21 22:49:02] INFO [weaver.processes.wps_package|ncdump] 27% running [provider: https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird, step: ncdump] - Monitoring remote process job until completion.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 60% running [2025-08-21 22:49:04] INFO [weaver.processes.wps_package|ncdump] 27% running [provider: https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird, step: ncdump] - 0% accepted PyWPS Process ncdump accepted
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 62% running [2025-08-21 22:49:04] INFO [weaver.processes.wps_package|ncdump] 82% running [provider: https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird, step: ncdump] - 100% successful PyWPS Process NCDump finished
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 65% running [2025-08-21 22:49:04] INFO [weaver.processes.wps_package|ncdump] 82% running [provider: https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird, step: ncdump] - Retrieving job results definitions.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 67% running [2025-08-21 22:49:04] INFO [weaver.processes.wps_package|ncdump] 82% running [provider: https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird, step: ncdump] - Retrieving job output definitions from remote WPS-1 provider.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 70% running [2025-08-21 22:49:04] INFO [weaver.processes.wps_package|ncdump] 86% running [provider: https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird, step: ncdump] - Staging job outputs from remote process.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 72% running [2025-08-21 22:49:04] INFO [weaver.processes.wps_package|ncdump] 90% running [provider: https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird, step: ncdump] - Running final cleanup operations before completion.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 75% running [2025-08-21 22:49:04] INFO [weaver.processes.wps_package|ncdump] 95% running [provider: https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird, step: ncdump] - Execution of remote process execution completed successfully.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 78% running [2025-08-21 22:49:04] INFO [weaver.processes.wps_package|ncdump] 95% running Package execution done.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 80% running [2025-08-21 22:49:04] WARNING [weaver.processes.wps_package|ncdump] 95% running Could not retrieve any internal application log.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 83% running [2025-08-21 22:49:04] INFO [weaver.processes.wps_package|ncdump] 95% running Resolved WPS output [output] as file reference: [/tmp/wps_workdir/weaver/pywps_process_ip8kvqxq/nc_dump_3Un3sR.txt]
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 85% running [2025-08-21 22:49:04] INFO [weaver.processes.wps_package|ncdump] 98% running Generate package outputs done.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 88% running [2025-08-21 22:49:04] INFO [cwltool] [provenance] Finalizing Research Object
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 90% running [2025-08-21 22:49:05] INFO [cwltool] [provenance] Research Object saved to /data/wps_outputs/weaver/public/47456b79-75c5-4b1f-8a1a-ae92d9988a73-prov
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 93% running [2025-08-21 22:49:05] INFO [weaver.processes.wps_package|ncdump] 100% successful Package operations complete.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 96% successful Job successful (status: Package operations complete.).
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 98% successful Job successful.
[2025-08-21 22:49:05] INFO [weaver.datatype.Job] 00:00:03 100% successful Job task complete.
Obtaining the result location and output the data¶
When job execution succeeded, the result endpoint under the corresponding job will provide the downloadable file references for each of the available output ID defined by the WPS process.
Since the sample NetCDF file provided as input is expected to be converted to raw text data, it can be displayed below.
# If execution succeeded, the results endpoint will return 200 with corresponding references.
# Otherwise, 400 occurs because results were not produced due to failing job, and requesting its outputs is an invalid request.
path = f"{status_location}/results"
resp = requests.get(path, **WEAVER_TEST_REQUEST_XARGS)
assert (
resp.status_code == 200
), f"Failed to retrieve job results location [{path}]. Code: [{resp.status_code}]."
print("\nJob was successful! Retrieving result location...")
body = resp.json()
# Here, our target output ID is named 'output' according to the process description
output = body.get("output")
assert isinstance(
output, dict
), f"Could not find result matching ID 'output' within:\n{json_dump(body)}"
href = output["href"]
assert isinstance(href, str) and href.startswith(
WEAVER_TEST_WPS_OUTPUTS
), f"Output result location does not have expected reference format: [{href}]"
print(f"Result is located at: [{href}]\n")
assert href.endswith(".txt")
print("Fetching output contents...")
resp = requests.get(href)
print(f"\nNCDUMP 'output' result content:\n\n{resp.text}")
Job was successful! Retrieving result location...
Result is located at: [https://pavics.ouranos.ca/wpsoutputs/weaver/public/47456b79-75c5-4b1f-8a1a-ae92d9988a73/output/nc_dump_3Un3sR.txt]
Fetching output contents...
NCDUMP 'output' result content:
netcdf ta_Amon_MRI-CGCM3_decadal1980_r1i1p1_199101-200012.nc {
dimensions:
time = UNLIMITED ; // (120 currently)
bnds = 2 ;
lat = 160 ;
lon = 320 ;
plev = 23 ;
variables:
double time(time) ;
time:bounds = "time_bnds" ;
time:units = "days since 1981-01-01" ;
time:calendar = "standard" ;
time:axis = "T" ;
time:long_name = "time" ;
time:standard_name = "time" ;
double time_bnds(time, bnds) ;
double plev(plev) ;
plev:units = "Pa" ;
plev:axis = "Z" ;
plev:positive = "down" ;
plev:long_name = "pressure" ;
plev:standard_name = "air_pressure" ;
double lat(lat) ;
lat:bounds = "lat_bnds" ;
lat:units = "degrees_north" ;
lat:axis = "Y" ;
lat:long_name = "latitude" ;
lat:standard_name = "latitude" ;
double lat_bnds(lat, bnds) ;
double lon(lon) ;
lon:bounds = "lon_bnds" ;
lon:units = "degrees_east" ;
lon:axis = "X" ;
lon:long_name = "longitude" ;
lon:standard_name = "longitude" ;
double lon_bnds(lon, bnds) ;
float ta(time, plev, lat, lon) ;
ta:standard_name = "air_temperature" ;
ta:long_name = "Air Temperature" ;
ta:units = "K" ;
ta:original_name = "T" ;
ta:cell_methods = "time: mean (interval: 30 minutes)" ;
ta:cell_measures = "area: areacella" ;
ta:history = "2011-08-12T05:05:34Z altered by CMOR: replaced missing value flag (-9.99e+33) with standard missing value (1e+20)." ;
ta:missing_value = 1.e+20f ;
ta:_FillValue = 1.e+20f ;
ta:associated_files = "baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation gridspecFile: gridspec_atmos_fx_MRI-CGCM3_decadal1980_r0i0p0.nc areacella: areacella_fx_MRI-CGCM3_decadal1980_r0i0p0.nc" ;
// global attributes:
:institution = "MRI (Meteorological Research Institute, Tsukuba, Japan)" ;
:institute_id = "MRI" ;
:experiment_id = "decadal1980" ;
:source = "MRI-CGCM3 2011 atmosphere: GSMUV (gsmuv-110112, TL159L48); ocean: MRI.COM3 (MRICOM-3_0-20101116, 1x0.5L51); sea ice: MRI.COM3; land: HAL (HAL_cmip5_v0.31_04); aerosol: MASINGAR-mk2 (masingar_mk2-20110111_0203, TL95L48)" ;
:model_id = "MRI-CGCM3" ;
:forcing = "GHG, SA, Oz, LU, Sl, Vl, BC, OC (GHG includes CO2, CH4, N2O, CFC-11, CFC-12, and HCFC-22)" ;
:parent_experiment_id = "N/A" ;
:parent_experiment_rip = "N/A" ;
:branch_time = 0. ;
:contact = "Seiji Yukimoto (yukimoto@mri-jma.go.jp)" ;
:history = "Output from /sharex3/cmip5/decadal1980/run-C3_decadal1980_01a/grads/atm_avr_mon.ctl 2011-08-12T05:05:34Z CMOR rewrote data to comply with CF standards and CMIP5 requirements." ;
:references = "Model described by Yukimoto et al. (Technical Report of the Meteorological Research Institute, 2011, 64, 83pp.)" ;
:initialization_method = 1 ;
:physics_version = 1 ;
:tracking_id = "ce91e727-5f22-44fc-b24d-5bb53393ac69" ;
:product = "output" ;
:experiment = "10- or 30-year run initialized in year 1980" ;
:frequency = "mon" ;
:creation_date = "2011-08-12T05:05:34Z" ;
:Conventions = "CF-1.4" ;
:project_id = "CMIP5" ;
:table_id = "Table Amon (26 July 2011) 976b7fd1d9e1be31dddd28f5dc79b7a1" ;
:title = "MRI-CGCM3 model output prepared for CMIP5 10- or 30-year run initialized in year 1980" ;
:parent_experiment = "N/A" ;
:modeling_realm = "atmos" ;
:realization = 1 ;
:cmor_version = "2.7.1" ;
:DODS_EXTRA.Unlimited_Dimension = "time" ;
}