Code source de flyingpigeon.processes.wps_segetalflora

from os import mkdir, path, listdir
from datetime import datetime as dt
import time

from flyingpigeon import segetalflora as sf
from flyingpigeon.subset import countries  # REGION_EUROPE
from flyingpigeon.utils import rename_complexinputs
from flyingpigeon.utils import archive, archiveextract

from pywps import Process
from pywps import LiteralInput, LiteralOutput
from pywps import ComplexInput, ComplexOutput
from pywps import Format, FORMATS
from pywps.app.Common import Metadata
from flyingpigeon.log import init_process_logger

import logging
LOGGER = logging.getLogger("PYWPS")


[docs]class SegetalfloraProcess(Process): def __init__(self): inputs = [ ComplexInput('resource', 'Resource', abstract='NetCDF Files or archive (tar/zip) containing netCDF files.', metadata=[Metadata('Info')], min_occurs=1, max_occurs=1000, supported_formats=[ Format('application/x-netcdf'), Format('application/x-tar'), Format('application/zip'), ]), LiteralInput("climate_type", "Climate type", abstract="Select climate type", default='3', data_type='string', min_occurs=1, max_occurs=8, allowed_values=["1", "2", "3", "4", "5", "6", "7", "all"] ), LiteralInput("culture_type", "Culture type", abstract="Select culture type", default='fallow', data_type='string', min_occurs=1, max_occurs=8, allowed_values=["fallow", "intensive", "extensive"] # sem ), ] outputs = [ ComplexOutput("out_tasmean", "Yearly mean temperature", abstract="Tar archive containing the netCDF EUR tas mean files", supported_formats=[Format('application/x-tar'), Format('application/x-netcdf')], as_reference=True, ), ComplexOutput("out_segetalflora", "Segetalflora", abstract="Tar archive containing the segetalflora data", supported_formats=[Format('application/x-tar'), Format('application/x-netcdf')], as_reference=True, ), ComplexOutput('output_log', 'Logging information', abstract="Collected logs during process run.", as_reference=True, supported_formats=[Format('text/plain')] ), ] super(SegetalfloraProcess, self).__init__( self._handler, identifier="segetalflora", title="Segetal Flora", abstract="Species biodiversity of segetal flora. ", version="0.10", metadata=[ Metadata('LSCE', 'http://www.lsce.ipsl.fr/en/index.php'), Metadata('Doc', 'http://flyingpigeon.readthedocs.io/en/latest/'), ], inputs=inputs, outputs=outputs, status_supported=True, store_supported=True, ) def _handler(self, request, response): init_process_logger('log.txt') response.outputs['output_log'].file = 'log.txt' process_start_time = time.time() # measure process execution time ... response.update_status('execution started at : %s ' % dt.now(), 5) LOGGER.debug('starting segetalflora process execution') response.update_status('starting calcualtion segetalflora', 5) ############################ # read argments to variables ############################ try: resource = archiveextract(resource=rename_complexinputs(request.inputs['resource'])) climate_type = request.inputs['climate_type'][0].data culture_type = request.inputs['culture_type'][0].data LOGGER.info('urls for %s ncs found' % (len(resource))) LOGGER.info('culture type: %s ' % (culture_type)) except Exception: msg = 'Failed to read in the arguments.' LOGGER.exception(msg) raise Exception(msg) try: if type(climate_type) != list: climate_type = list([climate_type]) if type(culture_type) != list: culture_type = list([culture_type]) LOGGER.info('arguments are lists') except Exception: msg = 'Failed to transform arguments to lists.' LOGGER.exception(msg) raise Exception(msg) ############################# # get yearly mean temperature ############################# nc_tasmean = sf.get_yrmean(resource) ####################################### # main call for segetalflora processing ####################################### nc_sf = sf.get_segetalflora(resource=nc_tasmean, culture_type=culture_type, climate_type=climate_type) #################### # tar file archiving #################### try: response.update_status('preparting output', 99) LOGGER.debug('length of sf: %s', len(nc_sf)) if len(nc_sf) == 1: # TODO: fix pywps output formats OR use seperate output params. response.outputs['out_segetalflora'].file = nc_sf[0] response.outputs['out_segetalflora'].format = FORMATS.NETCDF else: response.outputs['out_segetalflora'].file = archive(nc_sf, format='tar', dir_output='.', mode='w') response.outputs['out_segetalflora'].format = Format('application/x-tar') if len(nc_tasmean) == 1: response.outputs['out_tasmean'].file = nc_tasmean[0] response.outputs['out_segetalflora'].format = FORMATS.NETCDF else: response.outputs['out_tasmean'].file = archive(nc_tasmean, format='tar', dir_output='.', mode='w') response.outputs['out_segetalflora'].format = Format('application/x-tar') except Exception: msg = 'Failed to prepare output files.' LOGGER.exception(msg) raise Exception(msg) response.update_status('done', 100) LOGGER.debug("total execution took %s seconds.", time.time() - process_start_time)
return response