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