from GeoHealthCheck.plugin import Plugin
from GeoHealthCheck.probe import Probe
[docs]class OwsGetCaps(Probe):
    """
    Fetch OWS capabilities doc
    """
    AUTHOR = 'GHC Team'
    NAME = 'OWS GetCapabilities'
    DESCRIPTION = 'Perform GetCapabilities Operation and check validity'
    # Abstract Base Class for OGC OWS GetCaps Probes
    # Needs specification in subclasses
    # RESOURCE_TYPE = 'OGC:ABC'
    REQUEST_METHOD = 'GET'
    REQUEST_TEMPLATE = \
        
'?SERVICE={service}&VERSION={version}&REQUEST=GetCapabilities'
    PARAM_DEFS = {
        'service': {
            'type': 'string',
            'description': 'The OWS service within resource endpoint',
            'default': None,
            'required': True
        },
        'version': {
            'type': 'string',
            'description': 'The OWS service version within resource endpoint',
            'default': None,
            'required': True,
            'range': None
        }
    }
    """Param defs, to be specified in subclasses"""
    CHECKS_AVAIL = {
        'GeoHealthCheck.plugins.check.checks.HttpStatusNoError': {
            'default': True
        },
        'GeoHealthCheck.plugins.check.checks.XmlParse': {
            'default': True
        },
        'GeoHealthCheck.plugins.check.checks.NotContainsOwsException': {
            'default': True
        },
        'GeoHealthCheck.plugins.check.checks.ContainsStrings': {
            'set_params': {
                'strings': {
                    'name': 'Contains Title Element',
                    'value': ['Title>']
                }
            },
            'default': True
        },
    }
    """
    Checks avail for all specific Caps checks.
    Optionally override Check PARAM_DEFS using set_params
    e.g. with specific `value`.
    """ 
[docs]class WmsGetCaps(OwsGetCaps):
    """Fetch WMS capabilities doc"""
    NAME = 'WMS GetCapabilities'
    RESOURCE_TYPE = 'OGC:WMS'
    PARAM_DEFS = Plugin.merge(OwsGetCaps.PARAM_DEFS, {
        'service': {
            'value': 'WMS'
        },
        'version': {
            'default': '1.3.0',
            'range': ['1.1.1', '1.3.0']
        }
    })
    """Param defs""" 
[docs]class WfsGetCaps(OwsGetCaps):
    """WFS GetCapabilities Probe"""
    NAME = 'WFS GetCapabilities'
    RESOURCE_TYPE = 'OGC:WFS'
    def __init__(self):
        OwsGetCaps.__init__(self)
    PARAM_DEFS = Plugin.merge(OwsGetCaps.PARAM_DEFS, {
        'service': {
            'value': 'WFS'
        },
        'version': {
            'default': '1.1.0',
            'range': ['1.0.0', '1.1.0', '2.0.2']
        }
    })
    """Param defs""" 
[docs]class WcsGetCaps(OwsGetCaps):
    """WCS GetCapabilities Probe"""
    NAME = 'WCS GetCapabilities'
    RESOURCE_TYPE = 'OGC:WCS'
    PARAM_DEFS = Plugin.merge(OwsGetCaps.PARAM_DEFS, {
        'service': {
            'value': 'WCS'
        },
        'version': {
            'default': '1.1.0',
            'range': ['1.1.0', '1.1.1', '2.0.1']
        }
    })
    """Param defs""" 
[docs]class CswGetCaps(OwsGetCaps):
    """CSW GetCapabilities Probe"""
    NAME = 'CSW GetCapabilities'
    RESOURCE_TYPE = 'OGC:CSW'
    PARAM_DEFS = Plugin.merge(OwsGetCaps.PARAM_DEFS, {
        'service': {
            'value': 'CSW'
        },
        'version': {
            'default': '2.0.2',
            'range': ['2.0.2']
        }
    })
    """Param defs""" 
[docs]class WmtsGetCaps(OwsGetCaps):
    """WMTS GetCapabilities Probe"""
    NAME = 'WMTS GetCapabilities'
    RESOURCE_TYPE = 'OGC:WMTS'
    def __init__(self):
        OwsGetCaps.__init__(self)
    PARAM_DEFS = Plugin.merge(OwsGetCaps.PARAM_DEFS, {
        'service': {
            'value': 'WMTS'
        },
        'version': {
            'default': '1.0.0',
            'range': ['1.0.0']
        }
    })
    """Param defs""" 
[docs]class WpsGetCaps(OwsGetCaps):
    """WPS GetCapabilities Probe"""
    NAME = 'WPS GetCapabilities'
    RESOURCE_TYPE = 'OGC:WPS'
    PARAM_DEFS = Plugin.merge(OwsGetCaps.PARAM_DEFS, {
        'service': {
            'value': 'WPS'
        },
        'version': {
            'default': '1.0.0',
            'range': ['1.0.0', '2.0.0']
        }
    })
    """Param defs""" 
[docs]class SosGetCaps(OwsGetCaps):
    """SOS GetCapabilities Probe"""
    NAME = 'SOS GetCapabilities'
    RESOURCE_TYPE = 'OGC:SOS'
    PARAM_DEFS = Plugin.merge(OwsGetCaps.PARAM_DEFS, {
        'service': {
            'value': 'SOS'
        },
        'version': {
            'default': '1.0.0',
            'range': ['1.0.0', '2.0.0']
        }
    })
    """Param defs"""