From 34c330c4f4c42c4b85df7649b499dfb94ecc055a Mon Sep 17 00:00:00 2001 From: MacPingu Date: Thu, 1 Apr 2021 18:15:27 +0200 Subject: [PATCH] Option lineage (#197) * added lineage option * updated roocs demo * renamed rook demo --- birdy/client/base.py | 9 +- notebooks/examples/c4cds.ipynb | 118 ----- notebooks/examples/roocs-demo.ipynb | 497 ------------------ .../{ecmwf-demo.ipynb => rook-demo.ipynb} | 66 +-- 4 files changed, 26 insertions(+), 664 deletions(-) delete mode 100644 notebooks/examples/c4cds.ipynb delete mode 100644 notebooks/examples/roocs-demo.ipynb rename notebooks/examples/{ecmwf-demo.ipynb => rook-demo.ipynb} (51%) diff --git a/birdy/client/base.py b/birdy/client/base.py index 0e1bc05..e41b87e 100644 --- a/birdy/client/base.py +++ b/birdy/client/base.py @@ -52,6 +52,7 @@ def __init__( caps_xml=None, desc_xml=None, language=None, + lineage=False, ): """ Args: @@ -72,10 +73,12 @@ def __init__( version (str): WPS version to use. language (str): passed to :class:`owslib.wps.WebProcessingService` ex: 'fr-CA', 'en_US'. + lineage: (bool): If True, the Execute operation includes lineage information. """ self._converters = converters self._interactive = progress self._mode = ASYNC if progress else SYNC + self._lineage = lineage self._notebook = notebook.is_notebook() self._inputs = {} self._outputs = {} @@ -350,7 +353,11 @@ def _execute(self, pid, **kwargs): try: wps_response = self._wps.execute( - pid, inputs=wps_inputs, output=wps_outputs, mode=mode + pid, + inputs=wps_inputs, + output=wps_outputs, + mode=mode, + lineage=self._lineage, ) if self._interactive and self._processes[pid].statusSupported: diff --git a/notebooks/examples/c4cds.ipynb b/notebooks/examples/c4cds.ipynb deleted file mode 100644 index 0f00b26..0000000 --- a/notebooks/examples/c4cds.ipynb +++ /dev/null @@ -1,118 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from birdy import WPSClient\n", - "from birdy.exceptions import ProcessIsNotComplete, ProcessFailed, ProcessCanceled\n", - "from IPython.display import Image\n", - "\n", - "cli = WPSClient('http://compute.mips.copernicus-climate.eu/wps') # progress=True" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "ename": "ServiceException", - "evalue": "\n\n\n \n Maximum number of parallel running processes reached. Please try later.\n \n", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mServiceException\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcli\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcordex_subsetter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0myear\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m2000\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'MOHC-HadRM3P'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvariable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'tas'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcountry\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'France'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m\u001b[0m in \u001b[0;36mcordex_subsetter\u001b[0;34m(self, country, model, experiment, variable, year)\u001b[0m\n", - "\u001b[0;32m~/src/birdy/birdy/client/base.py\u001b[0m in \u001b[0;36m_execute\u001b[0;34m(self, pid, **kwargs)\u001b[0m\n\u001b[1;32m 284\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 285\u001b[0m wps_response = self._wps.execute(\n\u001b[0;32m--> 286\u001b[0;31m \u001b[0mpid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mwps_inputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mwps_outputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmode\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 287\u001b[0m )\n\u001b[1;32m 288\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.conda/envs/birdy/lib/python3.7/site-packages/owslib/wps.py\u001b[0m in \u001b[0;36mexecute\u001b[0;34m(self, identifier, inputs, output, mode, lineage, request, response)\u001b[0m\n\u001b[1;32m 345\u001b[0m \u001b[0;31m# submit the request to the live server\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 346\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 347\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mexecution\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubmitRequest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 348\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 349\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0metree\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfromstring\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresponse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.conda/envs/birdy/lib/python3.7/site-packages/owslib/wps.py\u001b[0m in \u001b[0;36msubmitRequest\u001b[0;34m(self, request)\u001b[0m\n\u001b[1;32m 888\u001b[0m \u001b[0mreader\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mWPSExecuteReader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mverbose\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mauth\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mauth\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 889\u001b[0m response = reader.readFromUrl(\n\u001b[0;32m--> 890\u001b[0;31m self.url, request, method='Post', headers=self.headers)\n\u001b[0m\u001b[1;32m 891\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresponse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 892\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresponse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.conda/envs/birdy/lib/python3.7/site-packages/owslib/wps.py\u001b[0m in \u001b[0;36mreadFromUrl\u001b[0;34m(self, url, data, method, username, password, headers, verify, cert)\u001b[0m\n\u001b[1;32m 579\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 580\u001b[0m return self._readFromUrl(url, data, self.timeout, method, username=username, password=password,\n\u001b[0;32m--> 581\u001b[0;31m headers=headers, verify=verify, cert=cert)\n\u001b[0m\u001b[1;32m 582\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 583\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.conda/envs/birdy/lib/python3.7/site-packages/owslib/wps.py\u001b[0m in \u001b[0;36m_readFromUrl\u001b[0;34m(self, url, data, timeout, method, username, password, headers, verify, cert)\u001b[0m\n\u001b[1;32m 489\u001b[0m u = openURL(url, data, method='Post',\n\u001b[1;32m 490\u001b[0m \u001b[0musername\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0musername\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpassword\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpassword\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 491\u001b[0;31m headers=headers, verify=verify, cert=cert, timeout=timeout)\n\u001b[0m\u001b[1;32m 492\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0metree\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfromstring\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mu\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 493\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.conda/envs/birdy/lib/python3.7/site-packages/owslib/util.py\u001b[0m in \u001b[0;36mopenURL\u001b[0;34m(url_base, data, method, cookies, username, password, timeout, headers, verify, cert, auth)\u001b[0m\n\u001b[1;32m 199\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 200\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mreq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstatus_code\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m400\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m401\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 201\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mServiceException\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mreq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtext\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 202\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 203\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mreq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstatus_code\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m404\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m500\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m502\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m503\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m504\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# add more if needed\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mServiceException\u001b[0m: \n\n\n \n Maximum number of parallel running processes reached. Please try later.\n \n" - ] - } - ], - "source": [ - "result = cli.cordex_subsetter(year=2000, model='MOHC-HadRM3P', variable='tas', country='France')" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cordex_subsetterResponse(\n", - " output='http://cp4cds-cn1.dkrz.de:80/outputs/c4cds/08414acc-f5b3-11e9-ab6b-f2e4655a10b7/tas_EUR-44i_France_ECMWF-ERAINT_evaluation_r1i1p1_MOHC-HadRM3P_v1_mon_199101-200012.nc',\n", - " ncdump='http://cp4cds-cn1.dkrz.de:80/outputs/c4cds/08414acc-f5b3-11e9-ab6b-f2e4655a10b7/nc_dump.txt',\n", - " preview='http://cp4cds-cn1.dkrz.de:80/outputs/c4cds/08414acc-f5b3-11e9-ab6b-f2e4655a10b7/tas_EUR-44i_France_ECMWF-ERAINT_evaluation_r1i1p1_MOHC-HadRM3P_v1_mon_199101-200012.png'\n", - ")\n" - ] - } - ], - "source": [ - "try:\n", - " output = result.get()\n", - "except ProcessIsNotComplete:\n", - " print(\"Please wait ...\")\n", - "except ProcessFailed:\n", - " print(\"Sorry, somthing went somethrong ...\")\n", - "except ProcessCanceled:\n", - " # TODO: canceled exception is not raised yet\n", - " print(\"Job was canceled.\")\n", - "else:\n", - " print(output)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Image(output.preview)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/examples/roocs-demo.ipynb b/notebooks/examples/roocs-demo.ipynb deleted file mode 100644 index 028fd81..0000000 --- a/notebooks/examples/roocs-demo.ipynb +++ /dev/null @@ -1,497 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Use Birdy to access ROOS Demo WPS\n", - "https://github.com/roocs/roocs-wps-demo" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from birdy import WPSClient\n", - "url = 'https://bovec.dkrz.de/ows/proxy/roocs'\n", - "#url = 'http://localhost:5000/wps'\n", - "roocs = WPSClient(url)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Available processes" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[0;31mType:\u001b[0m WPSClient\n", - "\u001b[0;31mString form:\u001b[0m \n", - "\u001b[0;31mFile:\u001b[0m ~/Documents/GitHub/birdhouse/birdy/birdy/client/base.py\n", - "\u001b[0;31mDocstring:\u001b[0m \n", - "A demostrator for a WPS service for roocs.\n", - "\n", - "Processes\n", - "---------\n", - "\n", - "subset\n", - " Run subsetting on climate data.\n", - "\n", - "average\n", - " Run averaging on climate data.\n", - "\n", - "orchestrate\n", - " Run a workflow\n", - "\u001b[0;31mClass docstring:\u001b[0m\n", - "Returns a class where every public method is a WPS process available at\n", - "the given url.\n", - "\n", - "Example:\n", - " >>> emu = WPSClient(url='')\n", - " >>> emu.hello('stranger')\n", - " 'Hello stranger'\n", - "\u001b[0;31mInit docstring:\u001b[0m \n", - "Args:\n", - " url (str): Link to WPS provider. config (Config): an instance\n", - " processes: Specify a subset of processes to bind. Defaults to all\n", - " processes.\n", - " converters (dict): Correspondence of {mimetype: class} to convert\n", - " this mimetype to a python object.\n", - " username (str): passed to :class:`owslib.wps.WebProcessingService`\n", - " password (str): passed to :class:`owslib.wps.WebProcessingService`\n", - " headers (str): passed to :class:`owslib.wps.WebProcessingService`\n", - " auth (requests.auth.AuthBase): requests-style auth class to authenticate,\n", - " see https://2.python-requests.org/en/master/user/authentication/\n", - " verify (bool): passed to :class:`owslib.wps.WebProcessingService`\n", - " cert (str): passed to :class:`owslib.wps.WebProcessingService`\n", - " verbose (str): passed to :class:`owslib.wps.WebProcessingService`\n", - " progress (bool): If True, enable interactive user mode.\n", - " version (str): WPS version to use.\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "roocs?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Run subset" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[0;31mSignature:\u001b[0m\n", - "\u001b[0mroocs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mdata_ref\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'cmip5.output1.MOHC.HadGEM2-ES.rcp85.mon.atmos.Amon.r1i1p1.latest.tas'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'2085-01-01/2120-12-30'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mpre_checked\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mspace\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'-5.,49.,10.,65'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mlevel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1000\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mDocstring:\u001b[0m\n", - "Run subsetting on climate data.\n", - "\n", - "Parameters\n", - "----------\n", - "data_ref : string\n", - " Data references\n", - "time : string\n", - " Time Period\n", - "space : string\n", - " Bounding Box\n", - "level : integer\n", - " Level\n", - "pre_checked : boolean\n", - " Use checked data only.\n", - "\n", - "Returns\n", - "-------\n", - "output : ComplexData:mimetype:`application/x-netcdf`\n", - " Output\n", - "\u001b[0;31mFile:\u001b[0m ~/Documents/GitHub/birdhouse/birdy/notebooks/examples/\n", - "\u001b[0;31mType:\u001b[0m method\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "roocs.subset?" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "resp_subset = roocs.subset(\n", - " data_ref='cmip5.output1.MOHC.HadGEM2-ES.rcp85.mon.atmos.Amon.r1i1p1.latest.tas',\n", - " time='2085-01-01/2120-12-30',\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "subsetResponse(\n", - " output='https://bovec.dkrz.de/download/outputs/roocswps/142395f2-6481-11ea-bfdd-109836a7cf3a/output.nc'\n", - ")" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "resp_subset.get()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Show HTTP headers of output**" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'Server': 'nginx/1.17.5', 'Date': 'Thu, 12 Mar 2020 16:46:59 GMT', 'Content-Type': 'application/x-netcdf', 'Content-Length': '306623', 'Connection': 'keep-alive', 'Last-Modified': 'Thu, 12 Mar 2020 16:46:55 GMT', 'ETag': '\"5e6a677f-4adbf\"', 'Accept-Ranges': 'bytes'}" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import requests\n", - "response = requests.head(resp_subset.get()[0])\n", - "response.headers" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Run average" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[0;31mSignature:\u001b[0m\n", - "\u001b[0mroocs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maverage\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mdata_ref\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'cmip5.output1.MOHC.HadGEM2-ES.rcp85.mon.atmos.Amon.r1i1p1.latest.tas'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0maxes\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'time'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mpre_checked\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mDocstring:\u001b[0m\n", - "Run averaging on climate data.\n", - "\n", - "Parameters\n", - "----------\n", - "data_ref : string\n", - " Data references\n", - "axes : {'time', 'latitude', 'longitude'}string\n", - " Please choose an axes for averaging.\n", - "pre_checked : boolean\n", - " Use checked data only.\n", - "\n", - "Returns\n", - "-------\n", - "output : ComplexData:mimetype:`text/plain`\n", - " Output\n", - "\u001b[0;31mFile:\u001b[0m ~/Documents/GitHub/birdhouse/birdy/notebooks/examples/\n", - "\u001b[0;31mType:\u001b[0m method\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "roocs.average?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Run orchestrate workflow" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[0;31mSignature:\u001b[0m \u001b[0mroocs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0morchestrate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mworkflow\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'tree'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mDocstring:\u001b[0m\n", - "Run a workflow\n", - "\n", - "Parameters\n", - "----------\n", - "workflow : ComplexData:mimetype:`application/json`\n", - " Workflow\n", - "mode : {'tree', 'simple'}string\n", - " Mode\n", - "\n", - "Returns\n", - "-------\n", - "output : ComplexData:mimetype:`application/x-netcdf`\n", - " Output\n", - "\u001b[0;31mFile:\u001b[0m ~/Documents/GitHub/birdhouse/birdy/notebooks/examples/\n", - "\u001b[0;31mType:\u001b[0m method\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "roocs.orchestrate?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Simple Workflow Chain**" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "wf_simple = {\n", - " 'doc': \"simple workflow\",\n", - " 'inputs': {\n", - " 'data_ref': ['cmip5.output1.MOHC.HadGEM2-ES.rcp85.mon.atmos.Amon.r1i1p1.latest.tas'],\n", - " },\n", - " 'steps': [\n", - " {'subset': {\"time\": \"2085-01-01/2120-12-30\"}},\n", - " {'subset': {\"time\": \"2090-01-01/2100-12-30\"}},\n", - " {'average': {\"axes\": \"time\"}}\n", - " ]}" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'{\"doc\": \"simple workflow\", \"inputs\": {\"data_ref\": [\"cmip5.output1.MOHC.HadGEM2-ES.rcp85.mon.atmos.Amon.r1i1p1.latest.tas\"]}, \"steps\": [{\"subset\": {\"time\": \"2085-01-01/2120-12-30\"}}, {\"subset\": {\"time\": \"2090-01-01/2100-12-30\"}}, {\"average\": {\"axes\": \"time\"}}]}'" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import json\n", - "wf_simple_json = json.dumps(wf_simple)\n", - "wf_simple_json" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "resp_wf = roocs.orchestrate(workflow=wf_simple_json, mode='simple')" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "orchestrateResponse(\n", - " output='https://bovec.dkrz.de/download/outputs/roocswps/206ccfe0-6481-11ea-be91-109836a7cf3a/output.nc'\n", - ")" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "resp_wf.get()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Workflow with Function Tree**" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "wf_tree = {\n", - " 'doc': \"tree workflow\",\n", - " 'inputs': {\n", - " 'tas': ['cmip5.output1.MOHC.HadGEM2-ES.rcp85.mon.atmos.Amon.r1i1p1.latest.tas'],\n", - " },\n", - " \"outputs\": {\n", - " \"output\": \"average_tas/output\"\n", - " },\n", - " 'steps': {\n", - " \"subset_tas_1\": {\n", - " \"run\": \"subset\",\n", - " \"in\": {\n", - " \"data_ref\": \"inputs/tas\",\n", - " \"time\": \"2085-01-01/2120-12-30\"\n", - " }\n", - " },\n", - " \"subset_tas_2\": {\n", - " \"run\": \"subset\",\n", - " \"in\": {\n", - " \"data_ref\": \"subset_tas_1/output\",\n", - " \"time\": \"2090-01-01/2100-12-30\"\n", - " }\n", - " },\n", - " \"average_tas\": {\n", - " \"run\": \"average\",\n", - " \"in\": {\n", - " \"data_ref\": \"subset_tas_2/output\",\n", - " \"axes\": \"time\"\n", - " }\n", - " }\n", - " }}" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'{\"doc\": \"tree workflow\", \"inputs\": {\"tas\": [\"cmip5.output1.MOHC.HadGEM2-ES.rcp85.mon.atmos.Amon.r1i1p1.latest.tas\"]}, \"outputs\": {\"output\": \"average_tas/output\"}, \"steps\": {\"subset_tas_1\": {\"run\": \"subset\", \"in\": {\"data_ref\": \"inputs/tas\", \"time\": \"2085-01-01/2120-12-30\"}}, \"subset_tas_2\": {\"run\": \"subset\", \"in\": {\"data_ref\": \"subset_tas_1/output\", \"time\": \"2090-01-01/2100-12-30\"}}, \"average_tas\": {\"run\": \"average\", \"in\": {\"data_ref\": \"subset_tas_2/output\", \"axes\": \"time\"}}}}'" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wf_tree_json = json.dumps(wf_tree)\n", - "wf_tree_json" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "resp_wf = roocs.orchestrate(workflow=wf_tree_json, mode='tree')" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "orchestrateResponse(\n", - " output='https://bovec.dkrz.de/download/outputs/roocswps/ae84c9c2-6481-11ea-be91-109836a7cf3a/output.nc'\n", - ")" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "resp_wf.get()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.2" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/notebooks/examples/ecmwf-demo.ipynb b/notebooks/examples/rook-demo.ipynb similarity index 51% rename from notebooks/examples/ecmwf-demo.ipynb rename to notebooks/examples/rook-demo.ipynb index 9c43591..6a7e927 100644 --- a/notebooks/examples/ecmwf-demo.ipynb +++ b/notebooks/examples/rook-demo.ipynb @@ -1,46 +1,11 @@ { "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from birdy import WPSClient" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Emu Example" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "emu = WPSClient(\"https://bovec.dkrz.de/ows/proxy/emu\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "emu.binaryoperatorfornumbers?\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "result = emu.binaryoperatorfornumbers(1, 1, operator='add')" + "# Use Birdy to access ROOK WPS\n", + "https://github.com/roocs/rook" ] }, { @@ -49,14 +14,16 @@ "metadata": {}, "outputs": [], "source": [ - "result.get()" + "from birdy import WPSClient\n", + "url = 'http://rook.dkrz.de/wps'\n", + "rook = WPSClient(url, progress=True, lineage=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Cordex Subsetter with C4CDS" + "## Available processes" ] }, { @@ -65,16 +32,14 @@ "metadata": {}, "outputs": [], "source": [ - "cp4cds = WPSClient('http://cp4cds-cn1.dkrz.de/wps', progress=True) # async mode" + "rook?" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "result = cp4cds.cordex_subsetter(year=2000, model='MOHC-HadRM3P', variable='tas', country='France')" + "## Run subset" ] }, { @@ -83,7 +48,7 @@ "metadata": {}, "outputs": [], "source": [ - "result.get()" + "rook.subset?" ] }, { @@ -92,7 +57,11 @@ "metadata": {}, "outputs": [], "source": [ - "from IPython.display import Image" + "resp = rook.subset(\n", + " collection='c3s-cmip6.ScenarioMIP.NIMS-KMA.KACE-1-0-G.ssp245.r1i1p1f1.Amon.tas.gr.v20191217',\n", + " time='2021-01-01/2021-12-30',\n", + " area='-10,30,35,70'\n", + ")" ] }, { @@ -101,7 +70,8 @@ "metadata": {}, "outputs": [], "source": [ - "Image(result.get().preview)" + "ds = resp.get('output')[0][0]\n", + "ds" ] } ], @@ -121,7 +91,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.1" + "version": "3.9.2" } }, "nbformat": 4,