diff --git a/CHANGES.rst b/CHANGES.rst index 80ae282..c816cde 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,13 @@ Changes ******* +0.11.1 (2020-01-03) +=================== + +Changes: + +* pin PyWPS 4.2.x (#94). + 0.11.0 (2019-09-27) =================== diff --git a/Dockerfile b/Dockerfile index 013e839..a72ca73 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # vim:set ft=dockerfile: FROM continuumio/miniconda3 MAINTAINER https://github.com/bird-house/emu -LABEL Description="Emu: Demo PyWPS" Vendor="Birdhouse" Version="0.11.0" +LABEL Description="Emu: Demo PyWPS" Vendor="Birdhouse" Version="0.11.1" # Update Debian system RUN apt-get update && apt-get install -y \ diff --git a/docker-compose.yml b/docker-compose.yml index 2866a72..7231a4b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,13 +1,31 @@ version: '3' services: emu: + # http://localhost:5000/wps build: . - image: birdhouse/emu + image: birdhouse/emu:dev ports: - "5000:5000" + volumes: + - outputpath:/tmp + thredds: + # Thredds is used as DAP server for Emu outputs + # http://localhost:8080/thredds/catalog.html + image: unidata/thredds-docker:4.6.14 + ports: + - "8080:8080" + volumes: + - ./threddsCatalog.xml:/usr/local/tomcat/content/thredds/catalog.xml:ro + - outputpath:/wps_outputs:ro + +volumes: + outputpath: {} # docker-compose build # docker-compose up -# docker-compose down +# docker-compose down -v +# -v, --volumes Remove named volumes declared in the `volumes` section +# of the Compose file and anonymous volumes +# attached to containers. # docker-compose rm diff --git a/docs/source/conf.py b/docs/source/conf.py index ef6ab92..a4851d6 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -62,7 +62,7 @@ # The short X.Y version. version = '' # The full version, including alpha/beta/rc tags. -release = '0.11.0' +release = '0.11.1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/emu/__version__.py b/emu/__version__.py index 79e5cad..3701570 100644 --- a/emu/__version__.py +++ b/emu/__version__.py @@ -6,4 +6,4 @@ __author__ = """Carsten Ehbrecht""" __email__ = 'ehbrecht@dkrz.de' -__version__ = '0.11.0' +__version__ = '0.11.1' diff --git a/emu/default.cfg b/emu/default.cfg index fb8eafb..2ce8030 100644 --- a/emu/default.cfg +++ b/emu/default.cfg @@ -13,6 +13,7 @@ allowedinputpaths = / maxsingleinputsize = 200mb maxprocesses = 10 parallelprocesses = 2 +language = en-US,fr-CA,de-DE [logging] level = INFO diff --git a/emu/processes/__init__.py b/emu/processes/__init__.py index 777db95..474b4d9 100644 --- a/emu/processes/__init__.py +++ b/emu/processes/__init__.py @@ -17,7 +17,8 @@ from .wps_nonpyid import NonPyID from .wps_dry_run import SimpleDryRun from .wps_ncml import NcMLAgg -from .wps_nc_to_dap import NcToDap +from .wps_translation import Translation + processes = [ UltimateQuestion(), @@ -39,5 +40,5 @@ NonPyID(), SimpleDryRun(), NcMLAgg(), - NcToDap(), + Translation(), ] diff --git a/emu/processes/wps_nc_to_dap.py b/emu/processes/wps_nc_to_dap.py index cbc8d93..97b02d2 100644 --- a/emu/processes/wps_nc_to_dap.py +++ b/emu/processes/wps_nc_to_dap.py @@ -9,13 +9,16 @@ LOGGER = logging.getLogger("PYWPS") +# This needs some more thoughts before going live to decide how the WPS server should be configured to communicate +# with the DAP server. + class NcToDap(Process): def __init__(self): inputs = [ ComplexInput('resource', "NetCDF file", abstract="Link to NetCDF or NcML file on this server", - supported_formats=[FORMATS.NETCDF, FORMATS.NCML], + supported_formats=[FORMATS.NETCDF, ], # FORMATS.NCML], to become available in PyWPS 4.2.5 min_occurs=1, max_occurs=1) ] diff --git a/emu/processes/wps_ncml.py b/emu/processes/wps_ncml.py index 9d95b0b..0976653 100644 --- a/emu/processes/wps_ncml.py +++ b/emu/processes/wps_ncml.py @@ -1,5 +1,6 @@ import os - +import xarray +import xarray.tests.test_dataset as td from pywps import Process from pywps import ComplexOutput, FORMATS from pywps.app.Common import Metadata @@ -21,7 +22,7 @@ def __init__(self): supported_formats=[FORMATS.NETCDF]), ComplexOutput('ncml', 'NcML aggregation', as_reference=True, - supported_formats=[FORMATS.NCML, FORMATS.DODS]), + supported_formats=[FORMATS.DODS]), # FORMATS.NCML To become available in PyWPS 4.2.5 ] super(NcMLAgg, self).__init__( @@ -39,7 +40,6 @@ def __init__(self): status_supported=True) def _handler(self, request, response): - import xarray.tests.test_dataset as td # Create test datasets d1, d2, _ = td.create_append_test_data() @@ -64,8 +64,6 @@ def _handler(self, request, response): response.outputs["d1"].file = d1fn response.outputs["d2"].file = d2fn - with open(os.path.join(self.workdir, 'agg.ncml'), "w") as fp: - response.outputs['ncml'].file = fp.name - fp.write(ncml) + response.outputs['ncml'].data = ncml return response diff --git a/emu/processes/wps_translation.py b/emu/processes/wps_translation.py new file mode 100644 index 0000000..38c013c --- /dev/null +++ b/emu/processes/wps_translation.py @@ -0,0 +1,58 @@ +""" +Translation process to check WPS translations +""" +from pywps import Process, LiteralInput, LiteralOutput + +import logging +LOGGER = logging.getLogger("PYWPS") + + +class Translation(Process): + def __init__(self): + inputs = [ + LiteralInput('input1', 'Input1 number', + default='100', data_type='integer', + translations={ + "fr-CA": {"title": "Entrée #1", "abstract": "Entier #1"}, + "de-DE": {"title": "Eingabe #1", "abstract": "Eingabe #1"}, + }), + ] + outputs = [ + LiteralOutput('output1', 'Output1 add 1 result', + data_type='string', + translations={ + "fr-CA": {"title": "Sortie #1", "abstract": "Chaîne de charactères"}, + "de-DE": {"title": "Ausgabe #1", "abstract": "Ergebnis"} + }), + ] + + super(Translation, self).__init__( + self._handler, + identifier='translation', + title="Translated process", + abstract="Process including translations in other languages.", + version="1.0", + inputs=inputs, + outputs=outputs, + store_supported=True, + status_supported=True, + keywords=["languages"], + translations={ + "fr-CA": {"title": "Processus traduit", + "abstract": "Processus incluant des traductions", + "keywords": ["langues"]}, + "de-DE": {"title": "Mehrsprachiger Prozess", + "abstract": "Prozess mit mehreren Sprachen.", + "keywords": ["sprachen"]} + } + ) + + @staticmethod + def _handler(request, response): + response.update_status('PyWPS Process started.', 0) + + LOGGER.debug("input1 %s", request.inputs['input1'][0].data) + response.outputs['output1'].data = request.inputs['input1'][0].data + 1 + + response.update_status('PyWPS Process completed.', 100) + return response diff --git a/emu/templates/pywps.cfg b/emu/templates/pywps.cfg index 20951f8..561da9f 100644 --- a/emu/templates/pywps.cfg +++ b/emu/templates/pywps.cfg @@ -19,6 +19,8 @@ outputpath= {{ wps_outputpath }} {% if wps_workdir %} workdir={{ wps_workdir }} {% endif %} +languages = en-US,fr-CA,de-DE + [logging] level = {{ wps_log_level|default('INFO') }} diff --git a/environment.yml b/environment.yml index 115274b..5bb61e2 100644 --- a/environment.yml +++ b/environment.yml @@ -1,10 +1,11 @@ name: emu channels: -#- conda-forge +- conda-forge - defaults dependencies: - pip -#- pywps=4.2 +- python=3.6 +- pywps=4.2 - jinja2 - click - psutil @@ -15,5 +16,5 @@ dependencies: # tests - pytest - pip: - - -e git+https://github.com/geopython/pywps@master#egg=pywps + # - -e git+https://github.com/geopython/pywps@master#egg=pywps - geomet diff --git a/requirements.txt b/requirements.txt index e807be8..32ba6cc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,7 @@ -pywps>=4.2.0 +pywps>=4.2.4<4.3 jinja2 click psutil defusedxml geomet +netCDF4 diff --git a/setup.cfg b/setup.cfg index 9afa518..31463df 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.11.0 +current_version = 0.11.1 commit = True tag = True diff --git a/spec-file.txt b/spec-file.txt index 969ee11..9dae16d 100644 --- a/spec-file.txt +++ b/spec-file.txt @@ -2,88 +2,83 @@ # $ conda create --name --file # platform: linux-64 @EXPLICIT -https://repo.anaconda.com/pkgs/main/linux-64/blas-1.0-mkl.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/ca-certificates-2019.1.23-0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/intel-openmp-2019.3-199.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/libgcc-ng-8.2.0-hdf63c60_1.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/libgfortran-ng-7.3.0-hdf63c60_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/libstdcxx-ng-8.2.0-hdf63c60_1.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/bzip2-1.0.6-h14c3975_5.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/jpeg-9b-h024ee3a_2.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/libffi-3.2.1-hd88cf55_4.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/mkl-2019.3-199.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/ncurses-6.1-he6710b0_1.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/openssl-1.1.1b-h7b6447c_1.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/xz-5.2.4-h14c3975_4.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/zlib-1.2.11-h7b6447c_3.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/hdf4-4.2.13-h3ca952b_2.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/hdf5-1.10.4-hb1b8bf9_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/libedit-3.1.20181209-hc058e9b_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/libssh2-1.8.0-h1ba5d50_4.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/readline-7.0-h7b6447c_5.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/tk-8.6.8-hbc83047_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/krb5-1.16.1-h173b8e3_7.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/sqlite-3.27.2-h7b6447c_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/libcurl-7.64.0-h20c2e04_2.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/libpq-11.2-h20c2e04_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/python-3.7.3-h0371630_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/alabaster-0.7.12-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/asn1crypto-0.24.0-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/atomicwrites-1.3.0-py37_1.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/attrs-19.1.0-py37_1.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/certifi-2019.3.9-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/chardet-3.0.4-py37_1.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/click-7.0-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/curl-7.64.0-hbc83047_2.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/defusedxml-0.5.0-py37_1.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/docutils-0.14-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/entrypoints-0.3-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/idna-2.8-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/imagesize-1.1.0-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/markupsafe-1.1.1-py37h7b6447c_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/mccabe-0.6.1-py37_1.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/more-itertools-6.0.0-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/numpy-base-1.16.2-py37hde5b4d6_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/pluggy-0.9.0-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/psutil-5.6.1-py37h7b6447c_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/psycopg2-2.7.6.1-py37h1ba5d50_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/py-1.8.0-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/pycodestyle-2.5.0-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/pycparser-2.19-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/pyflakes-2.1.1-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/noarch/pyparsing-2.4.0-py_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/pysocks-1.6.8-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/noarch/pytz-2019.1-py_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/six-1.12.0-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/snowballstemmer-1.2.1-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/noarch/sphinxcontrib-applehelp-1.0.1-py_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/noarch/sphinxcontrib-devhelp-1.0.1-py_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/noarch/sphinxcontrib-htmlhelp-1.0.2-py_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/noarch/sphinxcontrib-jsmath-1.0.1-py_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/noarch/sphinxcontrib-qthelp-1.0.2-py_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/noarch/sphinxcontrib-serializinghtml-1.1.1-py_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/babel-2.6.0-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/cffi-1.12.2-py37h2e261b9_1.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/libnetcdf-4.6.1-h11d0813_2.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/mkl_random-1.0.2-py37hd81dba3_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/packaging-19.0-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/python-dateutil-2.8.0-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/setuptools-41.0.0-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/cryptography-2.6.1-py37h1ba5d50_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/flake8-3.7.7-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/gunicorn-19.9.0-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/jinja2-2.10.1-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/pygments-2.3.1-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/pytest-4.4.0-py37_1.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/wheel-0.33.1-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/pip-19.0.3-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/pyopenssl-19.0.0-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/urllib3-1.24.1-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/requests-2.21.0-py37_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/noarch/sphinx-2.0.1-py_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/cftime-1.0.3.4-py37hdd07704_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/mkl_fft-1.0.10-py37ha843d7b_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/numpy-1.16.2-py37h7e9f1db_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/netcdf4-1.4.2-py37h808af73_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/pandas-0.24.2-py37he6710b0_0.tar.bz2 -https://repo.anaconda.com/pkgs/main/linux-64/xarray-0.11.3-py37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-main.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2019.11.28-hecc5488_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.33.1-h53a641e_7.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-7.3.0-hdf63c60_2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-9.2.0-hdf63c60_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-9.2.0-hdf63c60_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h516909a_2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/icu-64.2-he1b5a44_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/jpeg-9c-h14c3975_1001.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libffi-3.2.1-he1b5a44_1006.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.15-h516909a_1005.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.7-h5ec1e0e_6.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.1-hf484d3e_1002.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/openssl-1.1.1d-h516909a_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.4-h14c3975_1001.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.11-h516909a_1006.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.13-hf30be14_1003.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.10.5-nompi_h3c11f04_1104.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.8.0-14_openblas.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20170329-hf8c457e_1001.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.8.2-h22169c7_2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.9.10-hee79883_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/readline-8.0-hf8c457e_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.10-hed695b0_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/krb5-1.16.4-h2fd8d38_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.8.0-14_openblas.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.8.0-14_openblas.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.33-h31b3aaa_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.30.1-hcee41ef_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libcurl-7.65.3-hda55be3_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/proj-6.2.1-hc80f0dc_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/python-3.7.6-h357f687_1.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/atomicwrites-1.3.0-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/attrs-19.3.0-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/certifi-2019.11.28-py37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/chardet-3.0.4-py37_1003.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/click-7.0-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/curl-7.65.3-hf8cf82a_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.6.0-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/idna-2.8-py37_1000.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/lxml-4.4.2-py37h7ec2d77_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-1.1.1-py37h516909a_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/more-itertools-8.0.2-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.17.3-py37h95a1406_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pathlib-1.0.1-py37_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.6.7-py37h516909a_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/py-1.8.1-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pycparser-2.19-py37_1.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/pyparsing-2.4.6-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pyproj-2.4.2.post1-py37h12732c1_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pysocks-1.7.1-py37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/pytz-2019.3-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/six-1.13.0-py37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-1.3.11-py37h516909a_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.1.7-py_1.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/werkzeug-0.16.0-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.13.2-py37h8022711_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/cftime-1.0.4.2-py37hc1659b7_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.7.3-nompi_h94020b1_100.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/packaging-19.2-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pyrsistent-0.15.6-py37h516909a_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.1-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/setuptools-44.0.0-py37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/zipp-0.6.0-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/cryptography-2.8-py37h72c5cf5_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/importlib_metadata-1.3.0-py37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/jinja2-2.10.3-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.5.3-nompi_py37hd35fb8e_102.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pandas-0.25.3-py37hb3f55d8_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/wheel-0.33.6-py37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/jsonschema-3.2.0-py37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pip-19.3.1-py37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pluggy-0.13.0-py37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pyopenssl-19.1.0-py37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/xarray-0.14.1-py_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pytest-5.0.1-py37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/urllib3-1.25.7-py37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/requests-2.22.0-py37_1.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/owslib-0.19.0-py_2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pywps-4.2.3-py37_0.tar.bz2 diff --git a/tests/test.cfg b/tests/test.cfg index a72d88b..f092411 100644 --- a/tests/test.cfg +++ b/tests/test.cfg @@ -1,2 +1,3 @@ [server] allowedinputpaths=/ +language = en-US,fr-CA,de-DE diff --git a/tests/test_wps_caps.py b/tests/test_wps_caps.py index 382d079..f2a3af3 100644 --- a/tests/test_wps_caps.py +++ b/tests/test_wps_caps.py @@ -7,7 +7,7 @@ def test_wps_caps(): client = client_for(Service(processes=processes)) - resp = client.get(service='wps', request='getcapabilities', version='1.0.0') + resp = client.get(service='wps', request='getcapabilities', version='1.0.0', language='en-US') names = resp.xpath_text('/wps:Capabilities' '/wps:ProcessOfferings' '/wps:Process' @@ -22,7 +22,7 @@ def test_wps_caps(): 'inout', 'multiple_outputs', 'nap', - 'nc_to_dap', + #'nc_to_dap', 'ncmeta', 'ncml', 'non.py-id', @@ -31,6 +31,19 @@ def test_wps_caps(): 'show_error', 'simple_dry_run', 'sleep', + 'translation', 'ultimate_question', 'wordcounter', ] + + # caps language + assert resp.xpath('/wps:Capabilities/@xml:lang')[0] == "en-US" + + # supported languages + languages = resp.xpath_text('/wps:Capabilities' + '/wps:Languages' + '/wps:Supported' + '/ows:Language') + assert 'en-US' in languages + assert 'fr-CA' in languages + assert 'de-DE' in languages diff --git a/tests/test_wps_nc_to_dap.py b/tests/test_wps_nc_to_dap.py index bb030e7..fd12638 100644 --- a/tests/test_wps_nc_to_dap.py +++ b/tests/test_wps_nc_to_dap.py @@ -8,7 +8,7 @@ from emu.processes.wps_output_formats import OutputFormats -@pytest.mark.online +@pytest.mark.skip def test_wps_nc_to_dap(): # Create netCDF file on server client = client_for(Service(processes=[OutputFormats()])) diff --git a/tests/test_wps_ncml.py b/tests/test_wps_ncml.py index 324d819..67d2844 100644 --- a/tests/test_wps_ncml.py +++ b/tests/test_wps_ncml.py @@ -2,17 +2,26 @@ from pywps import Service from pywps.tests import assert_response_success - -from .common import client_for from emu.processes.wps_ncml import NcMLAgg +from .common import client_for, CFG_FILE +# from owslib.wps import WPSExecution @pytest.mark.online def test_wps_ncml(): - client = client_for(Service(processes=[NcMLAgg()])) + + client = client_for(Service(processes=[NcMLAgg()], cfgfiles=CFG_FILE)) resp = client.get( service='wps', request='execute', version='1.0.0', identifier='ncml') - print(resp.response) + assert_response_success(resp) + + # ex = WPSExecution() + # ex.parseResponse(resp.xml) + # d1, d2, d3 = ex.processOutputs + # ncml = d3.retrieveData() + # assert ncml.strip().startswith("<") + + diff --git a/tests/test_wps_output_formats.py b/tests/test_wps_output_formats.py index 621d5eb..fa66580 100644 --- a/tests/test_wps_output_formats.py +++ b/tests/test_wps_output_formats.py @@ -1,12 +1,12 @@ from pywps import Service from pywps.tests import assert_response_success -from .common import client_for +from .common import client_for, CFG_FILE from emu.processes.wps_output_formats import OutputFormats def test_wps_output_formats(): - client = client_for(Service(processes=[OutputFormats()])) + client = client_for(Service(processes=[OutputFormats()], cfgfiles=CFG_FILE)) resp = client.get( service='WPS', request='Execute', version='1.0.0', identifier='output_formats',) diff --git a/tests/test_wps_translation.py b/tests/test_wps_translation.py new file mode 100644 index 0000000..af20436 --- /dev/null +++ b/tests/test_wps_translation.py @@ -0,0 +1,50 @@ +from pywps import Service +from pywps.tests import assert_response_success + +from .common import client_for +from emu.processes.wps_translation import Translation + + +def test_wps_translation_describe_fr(): + client = client_for(Service(processes=[Translation()])) + resp = client.get( + service='wps', request='DescribeProcess', version='1.0.0', + identifier='translation', + language="fr-CA") + print(resp.data) + title = resp.xpath_text( + '/wps:ProcessDescriptions' + '/ProcessDescription' + '/ows:Title' + ) + assert title == 'Processus traduit' + + +def test_wps_translation_describe_de(): + client = client_for(Service(processes=[Translation()])) + resp = client.get( + service='wps', request='DescribeProcess', version='1.0.0', + identifier='translation', + language="de-DE") + print(resp.data) + title = resp.xpath_text( + '/wps:ProcessDescriptions' + '/ProcessDescription' + '/ows:Title' + ) + assert title == 'Mehrsprachiger Prozess' + + +def test_wps_translation_execute(): + client = client_for(Service(processes=[Translation()])) + datainputs = "input1=10" + resp = client.get( + service='wps', request='execute', version='1.0.0', + identifier='translation', + datainputs=datainputs, + language="fr-CA") + print(resp.data) + assert_response_success(resp) + + outputs = list(resp.xpath('/wps:ExecuteResponse/wps:ProcessOutputs/wps:Output')[0]) + assert outputs[1].text == "Sortie #1" diff --git a/threddsCatalog.xml b/threddsCatalog.xml new file mode 100644 index 0000000..63a34b0 --- /dev/null +++ b/threddsCatalog.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + all + + + + + + + + + + + + + + + + + + + + +