import logging
# from pywps import LiteralInput
from pywps import ComplexInput, ComplexOutput
from pywps import Format
from pywps import Process
from pywps.app.Common import Metadata
LOGGER = logging.getLogger("PYWPS")
[docs]class FetchProcess(Process):
"""
TODO: rename process to Copy? Could be a base process (hummingbird).
TODO: Provide first output directly.
TODO: should provide urls of copied files.
TODO: Need a better way to provide multiple outputs (json file ... could be interpreted and displayed by UI),
COWS has done somthing like this with an xml output.
"""
def __init__(self):
inputs = [
ComplexInput('resource', 'Resource',
abstract="NetCDF Files or archive (tar/zip) containing netCDF files.",
min_occurs=1,
max_occurs=1000,
# maxmegabites=5000,
supported_formats=[Format('application/x-netcdf'),
Format('application/x-tar'),
Format('application/zip'),
]
)
]
outputs = [
ComplexOutput("output", "Fetched Files",
abstract="File containing the local pathes to downloades files.",
supported_formats=[Format('text/plain')],
as_reference=True,
),
ComplexOutput("output_log", "Logging information",
abstract="Collected logs during process run.",
supported_formats=[Format("text/plain")],
as_reference=True,
)
]
super(FetchProcess, self).__init__(
self._handler,
identifier="fetch_resources",
title="Fetch Resources",
version="0.10",
abstract="Fetch data resources (limited to 50GB) to the local file"
"system of the birdhouse compute provider.",
metadata=[
Metadata('Documentation', 'http://flyingpigeon.readthedocs.io/en/latest/'),
],
inputs=inputs,
outputs=outputs,
status_supported=True,
store_supported=True,
)
def _handler(self, request, response):
from flyingpigeon.log import init_process_logger
from flyingpigeon.utils import rename_complexinputs
from flyingpigeon.datafetch import write_fileinfo
response.update_status("start fetching resource", 10)
init_process_logger('log.txt')
response.outputs['output_log'].file = 'log.txt'
resource = rename_complexinputs(request.inputs['resource'])
response.outputs['output'].file = write_fileinfo(resource, filepath=True)
# filepathes = 'out.txt'
# with open(filepathes, 'w') as fp:
# fp.write('###############################################\n')
# fp.write('###############################################\n')
# fp.write('Following files are stored to your local discs: \n')
# fp.write('\n')
# for f in resources:
# fp.write('%s \n' % os.path.realpath(f))
# response.outputs['output'].file = filepathes
response.update_status("done", 100)
return response