-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* added dummy regrid operator * added regrid operator for workflow * added wps regrid input parameters method and grid * update regrid params to provenance
- Loading branch information
Showing
8 changed files
with
167 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
import logging | ||
|
||
from pywps import FORMATS, ComplexOutput, Format, LiteralInput, Process | ||
from pywps.app.Common import Metadata | ||
from pywps.app.exceptions import ProcessError | ||
from pywps.inout.outputs import MetaFile, MetaLink4 | ||
|
||
from ..director import wrap_director | ||
from ..utils.input_utils import parse_wps_input | ||
from ..utils.metalink_utils import build_metalink | ||
from ..utils.response_utils import populate_response | ||
from ..utils.regrid_utils import run_regrid | ||
|
||
LOGGER = logging.getLogger() | ||
|
||
|
||
class Regrid(Process): | ||
def __init__(self): | ||
inputs = [ | ||
LiteralInput( | ||
"collection", | ||
"Collection", | ||
abstract="A dataset identifier or list of comma separated identifiers. " | ||
"Example: c3s-cmip5.output1.ICHEC.EC-EARTH.historical.day.atmos.day.r1i1p1.tas.latest", | ||
data_type="string", | ||
min_occurs=1, | ||
max_occurs=1, | ||
), | ||
LiteralInput( | ||
"method", | ||
"Regrid method", | ||
abstract="Regrid method like consevative or bilinear. Default: nearest_s2d", | ||
data_type="string", | ||
min_occurs=0, | ||
max_occurs=1, | ||
allowed_values=["conservative", "patch", "nearest_s2d", "bilinear"], | ||
default="nearest_s2d", | ||
), | ||
LiteralInput( | ||
"grid", | ||
"Regrid target grid", | ||
abstract="Regrid target grid like 1deg. Default: 1deg", | ||
data_type="string", | ||
min_occurs=0, | ||
max_occurs=1, | ||
allowed_values=["1deg", "2deg_lsm", "0pt25deg_era5_lsm"], | ||
default="1deg", | ||
), | ||
] | ||
outputs = [ | ||
ComplexOutput( | ||
"output", | ||
"METALINK v4 output", | ||
abstract="Metalink v4 document with references to NetCDF files.", | ||
as_reference=True, | ||
supported_formats=[FORMATS.META4], | ||
), | ||
ComplexOutput( | ||
"prov", | ||
"Provenance", | ||
abstract="Provenance document using W3C standard.", | ||
as_reference=True, | ||
supported_formats=[FORMATS.JSON], | ||
), | ||
ComplexOutput( | ||
"prov_plot", | ||
"Provenance Diagram", | ||
abstract="Provenance document as diagram.", | ||
as_reference=True, | ||
supported_formats=[ | ||
Format("image/png", extension=".png", encoding="base64") | ||
], | ||
), | ||
] | ||
|
||
super(Regrid, self).__init__( | ||
self._handler, | ||
identifier="regrid", | ||
title="Regrid", | ||
abstract="Regridding operator for climate model data.", | ||
metadata=[ | ||
Metadata("DAOPS", "https://github.com/roocs/daops"), | ||
], | ||
version="1.0", | ||
inputs=inputs, | ||
outputs=outputs, | ||
store_supported=True, | ||
status_supported=True, | ||
) | ||
|
||
def _handler(self, request, response): | ||
# from roocs_utils.exceptions import InvalidParameterValue, MissingParameterValue | ||
collection = parse_wps_input( | ||
request.inputs, "collection", as_sequence=True, must_exist=True | ||
) | ||
|
||
inputs = { | ||
"collection": collection, | ||
"output_dir": self.workdir, | ||
"apply_fixes": False, | ||
"pre_checked": False, | ||
"method": parse_wps_input(request.inputs, "method", default="nearest_s2d"), | ||
"grid": parse_wps_input(request.inputs, "grid", default="1deg"), | ||
} | ||
# print(inputs) | ||
|
||
# Let the director manage the processing or redirection to original files | ||
director = wrap_director(collection, inputs, run_regrid) | ||
|
||
ml4 = build_metalink( | ||
"regrid-result", | ||
"regrid result as NetCDF files.", | ||
self.workdir, | ||
director.output_uris, | ||
) | ||
|
||
populate_response(response, "regrid", self.workdir, inputs, collection, ml4) | ||
return response |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
def run_regrid(args): | ||
from daops.ops.average import average_over_dims | ||
|
||
args["apply_fixes"] = False | ||
args["dims"] = ["latitude", "longitude"] | ||
|
||
result = average_over_dims(**args) | ||
return result.file_uris |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
import pytest | ||
|
||
from pywps import Service | ||
from pywps.tests import assert_response_success, client_for | ||
|
||
from rook.processes.wps_regrid import Regrid | ||
|
||
from .common import PYWPS_CFG, get_output | ||
|
||
|
||
def test_wps_regrid_cmip6(): | ||
# test the case where the inventory is used | ||
client = client_for(Service(processes=[Regrid()], cfgfiles=[PYWPS_CFG])) | ||
datainputs = "collection=c3s-cmip6.ScenarioMIP.INM.INM-CM5-0.ssp245.r1i1p1f1.Amon.rlds.gr1.v20190619" | ||
datainputs += ";method=nearest_s2d" | ||
datainputs += ";grid=1deg" | ||
resp = client.get( | ||
f"?service=WPS&request=Execute&version=1.0.0&identifier=regrid&datainputs={datainputs}" | ||
) | ||
print(resp) | ||
assert_response_success(resp) | ||
assert "output" in get_output(resp.xml) |