taken from esgf-api example: https://github.com/ESGF/esgf-compute-api/blob/master/examples/getting_started.ipynb
from owslib.wps import WebProcessingService
Get a new token from: https://aims2.llnl.gov/
Login with your ESGF OpendID (LLNL works).
# token
access_token = 'TOKEN'
# api_key should be in the HTTP headers
client = WebProcessingService('https://aims2.llnl.gov/wps/', verify=True, headers={'COMPUTE-TOKEN': access_token})
for p in client.processes:
print(p.identifier)
proc = client.describeprocess(
'CDAT.subset'
)
proc.identifier
for inpt in proc.dataInputs:
print(inpt.identifier, inpt.dataType)
from owslib_esgfwps import Domain, Dimension
d0 = Domain(dict(
time=Dimension(0, 2000, crs='values'),
lat=Dimension(-90, 0, crs='values'),
))
print(d0.json)
from owslib_esgfwps import Variable
# (122, 240, 480)
data_url = 'http://aims3.llnl.gov/thredds/dodsC/css03_data/CMIP6/CMIP/NASA-GISS/GISS-E2-1-G/historical/r10i1p1f1/Amon/tas/gn/v20180830/tas_Amon_GISS-E2-1-G_historical_r10i1p1f1_gn_185001-190012.nc'
v0 = Variable(uri=data_url, var_name='tas')
print(v0.json)
from owslib_esgfwps import Operation
op = Operation(name=proc.identifier, domain=d0, input=[v0])
op.json
from owslib_esgfwps import Variables, Domains, Operations
inputs = []
inputs.append(('domain', Domains([d0])))
inputs.append(('variable', Variables([v0])))
inputs.append(('operation', Operations([op])))
for inp in inputs:
print(inp[1])
from owslib.wps import SYNC, ASYNC
exec = client.execute(proc.identifier, inputs=inputs, mode=ASYNC)
print(exec.statusLocation)
# TODO sync option is not working
from owslib.wps import monitorExecution
monitorExecution(exec)
print("status: {}, progress: {}/100, message: {}".format(exec.status, exec.percentCompleted, exec.statusMessage))
for output in exec.processOutputs:
print(output.identifier, output.reference or output.data)
# TODO: fix outputs
import json
output = json.loads(exec.processOutputs[0].data[0])
output['uri']
import xarray as xr
ds = xr.open_dataset(output['uri'])
%matplotlib inline
ds.tas.isel(time=0).plot()
from owslib_esgfwps import Outputs
# *TODO*: returns a list of str instead of dict
# https://github.com/ESGF/esgf-compute-wps/issues/214
outputs = Outputs.from_owslib(exec.processOutputs)
# *TODO*: returns a list of str instead of dict
outputs = Outputs.from_owslib(exec.processOutputs)