628 строки
36 KiB
Python
Исполняемый файл
628 строки
36 KiB
Python
Исполняемый файл
#!/usr/bin/env pytest
|
|
# -*- coding: utf-8 -*-
|
|
###############################################################################
|
|
# $Id$
|
|
#
|
|
# Project: GDAL/OGR Test Suite
|
|
# Purpose: CSW driver testing.
|
|
# Author: Even Rouault <even dot rouault at spatialys dot com>
|
|
#
|
|
###############################################################################
|
|
# Copyright (c) 2015, Even Rouault <even dot rouault at spatialys dot com>
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
# copy of this software and associated documentation files (the "Software"),
|
|
# to deal in the Software without restriction, including without limitation
|
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
# and/or sell copies of the Software, and to permit persons to whom the
|
|
# Software is furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included
|
|
# in all copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
# DEALINGS IN THE SOFTWARE.
|
|
###############################################################################
|
|
|
|
|
|
import gdaltest
|
|
import pytest
|
|
|
|
from osgeo import gdal, ogr
|
|
|
|
|
|
###############################################################################
|
|
@pytest.fixture(autouse=True, scope="module")
|
|
def module_disable_exceptions():
|
|
with gdaltest.disable_exceptions():
|
|
yield
|
|
|
|
|
|
###############################################################################
|
|
@pytest.fixture(autouse=True, scope="module")
|
|
def setup_and_cleanup():
|
|
with gdal.config_option("CPL_CURL_ENABLE_VSIMEM", "YES"):
|
|
yield
|
|
|
|
|
|
###############################################################################
|
|
# Test underlying OGR drivers
|
|
#
|
|
|
|
pytestmark = pytest.mark.require_driver("CSW")
|
|
|
|
|
|
@pytest.fixture(autouse=True, scope="module")
|
|
def ogr_csw_init():
|
|
|
|
gml_ds = ogr.Open("data/gml/ionic_wfs.gml")
|
|
if gml_ds is None:
|
|
if gdal.GetLastErrorMsg().find("Xerces") != -1:
|
|
pytest.skip()
|
|
pytest.skip("failed to open test file.")
|
|
|
|
|
|
###############################################################################
|
|
# Test reading a pyCSW server
|
|
|
|
|
|
@pytest.mark.skip()
|
|
def test_ogr_csw_pycsw():
|
|
ds = ogr.Open("CSW:http://catalog.data.gov/csw")
|
|
if ds is None:
|
|
if gdaltest.gdalurlopen("http://catalog.data.gov/csw") is None:
|
|
pytest.skip("cannot open URL")
|
|
pytest.skip("did not managed to open CSW datastore")
|
|
lyr = ds.GetLayer(0)
|
|
f = lyr.GetNextFeature()
|
|
assert f is not None, "did not get expected layer name"
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
def test_ogr_csw_vsimem_fail_because_not_enabled():
|
|
with gdal.config_option("CPL_CURL_ENABLE_VSIMEM", "NO"):
|
|
ds = ogr.Open("CSW:/vsimem/csw_endpoint")
|
|
assert ds is None
|
|
|
|
|
|
###############################################################################
|
|
def test_ogr_csw_vsimem_fail_because_no_get_capabilities():
|
|
ds = ogr.Open("CSW:/vsimem/csw_endpoint")
|
|
assert ds is None
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
def test_ogr_csw_vsimem_fail_because_empty_response():
|
|
gdal.FileFromMemBuffer(
|
|
"/vsimem/csw_endpoint?SERVICE=CSW&REQUEST=GetCapabilities", ""
|
|
)
|
|
with gdaltest.error_handler():
|
|
ds = ogr.Open("CSW:/vsimem/csw_endpoint")
|
|
assert ds is None
|
|
assert gdal.GetLastErrorMsg().find("Empty content returned by server") >= 0
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
def test_ogr_csw_vsimem_fail_because_no_CSW_Capabilities():
|
|
gdal.FileFromMemBuffer(
|
|
"/vsimem/csw_endpoint?SERVICE=CSW&REQUEST=GetCapabilities", "<foo/>"
|
|
)
|
|
with gdaltest.error_handler():
|
|
ds = ogr.Open("CSW:/vsimem/csw_endpoint")
|
|
assert ds is None
|
|
assert gdal.GetLastErrorMsg().find("Cannot find Capabilities.version") >= 0
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
def test_ogr_csw_vsimem_fail_because_exception():
|
|
gdal.FileFromMemBuffer(
|
|
"/vsimem/csw_endpoint?SERVICE=CSW&REQUEST=GetCapabilities",
|
|
"<ServiceExceptionReport/>",
|
|
)
|
|
with gdaltest.error_handler():
|
|
ds = ogr.Open("CSW:/vsimem/csw_endpoint")
|
|
assert ds is None
|
|
assert (
|
|
gdal.GetLastErrorMsg().find(
|
|
"Error returned by server : <ServiceExceptionReport/>"
|
|
)
|
|
>= 0
|
|
)
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
def test_ogr_csw_vsimem_fail_because_invalid_xml_capabilities():
|
|
gdal.FileFromMemBuffer(
|
|
"/vsimem/csw_endpoint?SERVICE=CSW&REQUEST=GetCapabilities", "<invalid_xml"
|
|
)
|
|
with gdaltest.error_handler():
|
|
ds = ogr.Open("CSW:/vsimem/csw_endpoint")
|
|
assert ds is None
|
|
assert gdal.GetLastErrorMsg().find("Invalid XML content : <invalid_xml") >= 0
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
def test_ogr_csw_vsimem_fail_because_missing_version():
|
|
gdal.FileFromMemBuffer(
|
|
"/vsimem/csw_endpoint?SERVICE=CSW&REQUEST=GetCapabilities",
|
|
"""<Capabilities>
|
|
</Capabilities>
|
|
""",
|
|
)
|
|
with gdaltest.error_handler():
|
|
ds = ogr.Open("CSW:/vsimem/csw_endpoint")
|
|
assert ds is None
|
|
assert gdal.GetLastErrorMsg().find("Cannot find Capabilities.version") >= 0
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
def test_ogr_csw_vsimem_csw_minimal_instance():
|
|
# Invalid response, but enough for use
|
|
gdal.FileFromMemBuffer(
|
|
"/vsimem/csw_endpoint?SERVICE=CSW&REQUEST=GetCapabilities",
|
|
"""
|
|
<Capabilities version="2.0.2"/>
|
|
""",
|
|
)
|
|
ds = ogr.Open("CSW:/vsimem/csw_endpoint")
|
|
assert ds is not None
|
|
ds.TestCapability("foo")
|
|
assert ds.GetLayerCount() == 1
|
|
assert ds.GetLayer(-1) is None and ds.GetLayer(1) is None
|
|
|
|
lyr = ds.GetLayer(0)
|
|
lyr.TestCapability("foo")
|
|
with gdaltest.error_handler():
|
|
f = lyr.GetNextFeature()
|
|
assert f is None
|
|
|
|
with gdaltest.error_handler():
|
|
fc = lyr.GetFeatureCount()
|
|
assert fc == 0
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="results" service="CSW" version="2.0.2" startPosition="1" maxRecords="500" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""""",
|
|
)
|
|
lyr.ResetReading()
|
|
with gdaltest.error_handler():
|
|
f = lyr.GetNextFeature()
|
|
assert (
|
|
f is None
|
|
and gdal.GetLastErrorMsg().find("Empty content returned by server") >= 0
|
|
)
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="results" service="CSW" version="2.0.2" startPosition="1" maxRecords="500" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""<invalid_xml""",
|
|
)
|
|
lyr.ResetReading()
|
|
with gdaltest.error_handler():
|
|
f = lyr.GetNextFeature()
|
|
assert f is None and gdal.GetLastErrorMsg().find("Error: cannot parse") >= 0
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="results" service="CSW" version="2.0.2" startPosition="1" maxRecords="500" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""<dummy_xml/>""",
|
|
)
|
|
lyr.ResetReading()
|
|
with gdaltest.error_handler():
|
|
f = lyr.GetNextFeature()
|
|
assert f is None and gdal.GetLastErrorMsg().find("Error: cannot parse") >= 0
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="results" service="CSW" version="2.0.2" startPosition="1" maxRecords="500" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""<ServiceExceptionReport/>""",
|
|
)
|
|
lyr.ResetReading()
|
|
with gdaltest.error_handler():
|
|
f = lyr.GetNextFeature()
|
|
assert f is None and gdal.GetLastErrorMsg().find("Error returned by server") >= 0
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="results" service="CSW" version="2.0.2" startPosition="1" maxRecords="500" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
<csw:GetRecordsResponse
|
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
xmlns:dct="http://purl.org/dc/terms/"
|
|
xmlns:ows="http://www.opengis.net/ows"
|
|
xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
version="2.0.2"
|
|
xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd">
|
|
<csw:SearchStatus timestamp="2015-04-27T00:46:35Z"/>
|
|
<csw:SearchResults nextRecord="3" numberOfRecordsMatched="2" numberOfRecordsReturned="3" recordSchema="http://www.opengis.net/cat/csw/2.0.2" elementSet="full">
|
|
<csw:Record>
|
|
<dc:identifier>an_identifier</dc:identifier>
|
|
<dc:identifier>another_identifier</dc:identifier>
|
|
<dc:title>a_title</dc:title>
|
|
<dc:type>dataset</dc:type>
|
|
<dc:subject>a_subject</dc:subject>
|
|
<dc:subject>another_subject</dc:subject>
|
|
<dct:references scheme="None">http://foo/</dct:references>
|
|
<dct:references scheme="None">http://bar/</dct:references>
|
|
<dct:modified>2015-04-27</dct:modified>
|
|
<dct:abstract>an_abstract</dct:abstract>
|
|
<dc:date>2015-04-27</dc:date>
|
|
<dc:language>eng</dc:language>
|
|
<dc:format>a_format</dc:format>
|
|
<dc:format>another_format</dc:format>
|
|
<ows:BoundingBox crs="urn:x-ogc:def:crs:EPSG:6.11:4326" dimensions="2">
|
|
<ows:LowerCorner>-90 -180</ows:LowerCorner>
|
|
<ows:UpperCorner>90 180</ows:UpperCorner>
|
|
</ows:BoundingBox>
|
|
</csw:Record>
|
|
<csw:Record>
|
|
</csw:Record>
|
|
</csw:SearchResults>
|
|
</csw:GetRecordsResponse>
|
|
""",
|
|
)
|
|
lyr.ResetReading()
|
|
f = lyr.GetNextFeature()
|
|
assert f is not None
|
|
if (
|
|
f["identifier"] != "an_identifier"
|
|
or f["other_identifiers"] != ["another_identifier"]
|
|
or f["subject"] != "a_subject"
|
|
or f["other_subjects"] != ["another_subject"]
|
|
or f["references"] != "http://foo/"
|
|
or f["other_references"] != ["http://bar/"]
|
|
or f["format"] != "a_format"
|
|
or f["other_formats"] != ["another_format"]
|
|
or f["boundingbox"].ExportToWkt()
|
|
!= "POLYGON ((-180 -90,-180 90,180 90,180 -90,-180 -90))"
|
|
):
|
|
f.DumpReadable()
|
|
pytest.fail()
|
|
f = lyr.GetNextFeature()
|
|
assert f is not None
|
|
with gdaltest.error_handler():
|
|
f = lyr.GetNextFeature()
|
|
assert f is None
|
|
|
|
with gdaltest.error_handler():
|
|
fc = lyr.GetFeatureCount()
|
|
assert fc == 2
|
|
|
|
lyr.ResetReading()
|
|
f = lyr.GetNextFeature()
|
|
assert f is not None
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="results" service="CSW" version="2.0.2" startPosition="3" maxRecords="500" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
<csw:GetRecordsResponse
|
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
xmlns:dct="http://purl.org/dc/terms/"
|
|
xmlns:ows="http://www.opengis.net/ows"
|
|
xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
version="2.0.2"
|
|
xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd">
|
|
<csw:SearchStatus timestamp="2015-04-27T00:46:35Z"/>
|
|
<csw:SearchResults nextRecord="0" numberOfRecordsMatched="3" numberOfRecordsReturned="1" recordSchema="http://www.opengis.net/cat/csw/2.0.2" elementSet="full">
|
|
<csw:Record>
|
|
</csw:Record>
|
|
</csw:SearchResults>
|
|
</csw:GetRecordsResponse>
|
|
""",
|
|
)
|
|
f = lyr.GetNextFeature()
|
|
assert f is not None
|
|
f = lyr.GetNextFeature()
|
|
assert f is not None
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="results" service="CSW" version="2.0.2" startPosition="4" maxRecords="500" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
<csw:GetRecordsResponse
|
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
xmlns:dct="http://purl.org/dc/terms/"
|
|
xmlns:ows="http://www.opengis.net/ows"
|
|
xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
version="2.0.2"
|
|
xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd">
|
|
<csw:SearchStatus timestamp="2015-04-27T00:46:35Z"/>
|
|
<csw:SearchResults nextRecord="0" numberOfRecordsMatched="3" numberOfRecordsReturned="0" recordSchema="http://www.opengis.net/cat/csw/2.0.2" elementSet="full">
|
|
</csw:SearchResults>
|
|
</csw:GetRecordsResponse>
|
|
""",
|
|
)
|
|
f = lyr.GetNextFeature()
|
|
assert f is None
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="hits" service="CSW" version="2.0.2" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""""",
|
|
)
|
|
with gdaltest.error_handler():
|
|
fc = lyr.GetFeatureCount()
|
|
assert fc == 3, gdal.GetLastErrorMsg()
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="hits" service="CSW" version="2.0.2" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""<dummy_xml/>""",
|
|
)
|
|
with gdaltest.error_handler():
|
|
fc = lyr.GetFeatureCount()
|
|
assert fc == 3, gdal.GetLastErrorMsg()
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="hits" service="CSW" version="2.0.2" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""<invalid_xml>""",
|
|
)
|
|
with gdaltest.error_handler():
|
|
fc = lyr.GetFeatureCount()
|
|
assert fc == 3, gdal.GetLastErrorMsg()
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="hits" service="CSW" version="2.0.2" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""<ServiceExceptionReport/>""",
|
|
)
|
|
with gdaltest.error_handler():
|
|
fc = lyr.GetFeatureCount()
|
|
assert fc == 3, gdal.GetLastErrorMsg()
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="hits" service="CSW" version="2.0.2" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
<csw:GetRecordsResponse
|
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
xmlns:dct="http://purl.org/dc/terms/"
|
|
xmlns:ows="http://www.opengis.net/ows"
|
|
xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
version="2.0.2"
|
|
xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd">
|
|
<csw:SearchStatus timestamp="2015-04-27T00:46:35Z"/>
|
|
<csw:SearchResults nextRecord="0" numberOfRecordsMatched="200" numberOfRecordsReturned="0" recordSchema="http://www.opengis.net/cat/csw/2.0.2" elementSet="full">
|
|
</csw:SearchResults>
|
|
</csw:GetRecordsResponse>
|
|
""",
|
|
)
|
|
fc = lyr.GetFeatureCount()
|
|
assert fc == 200
|
|
|
|
lyr.SetAttributeFilter("identifier = 'an_identifier'")
|
|
lyr.SetSpatialFilterRect(-180, -90, 180, 90)
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="results" service="CSW" version="2.0.2" startPosition="1" maxRecords="500" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName><csw:Constraint version="1.1.0"><ogc:Filter><ogc:And><ogc:BBOX><ogc:PropertyName>ows:BoundingBox</ogc:PropertyName><gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326"><gml:lowerCorner>-90 -180</gml:lowerCorner><gml:upperCorner>90 180</gml:upperCorner></gml:Envelope></ogc:BBOX><ogc:PropertyIsEqualTo><ogc:PropertyName>dc:identifier</ogc:PropertyName><ogc:Literal>an_identifier</ogc:Literal></ogc:PropertyIsEqualTo></ogc:And></ogc:Filter></csw:Constraint></csw:Query></csw:GetRecords>""",
|
|
"""<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
<csw:GetRecordsResponse
|
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
xmlns:dct="http://purl.org/dc/terms/"
|
|
xmlns:ows="http://www.opengis.net/ows"
|
|
xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
version="2.0.2"
|
|
xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd">
|
|
<csw:SearchStatus timestamp="2015-04-27T00:46:35Z"/>
|
|
<csw:SearchResults nextRecord="0" numberOfRecordsMatched="3" numberOfRecordsReturned="1" recordSchema="http://www.opengis.net/cat/csw/2.0.2" elementSet="full">
|
|
<csw:Record>
|
|
</csw:Record>
|
|
</csw:SearchResults>
|
|
</csw:GetRecordsResponse>
|
|
""",
|
|
)
|
|
f = lyr.GetNextFeature()
|
|
assert f is not None
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="hits" service="CSW" version="2.0.2" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName><csw:Constraint version="1.1.0"><ogc:Filter><ogc:And><ogc:BBOX><ogc:PropertyName>ows:BoundingBox</ogc:PropertyName><gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326"><gml:lowerCorner>-90 -180</gml:lowerCorner><gml:upperCorner>90 180</gml:upperCorner></gml:Envelope></ogc:BBOX><ogc:PropertyIsEqualTo><ogc:PropertyName>dc:identifier</ogc:PropertyName><ogc:Literal>an_identifier</ogc:Literal></ogc:PropertyIsEqualTo></ogc:And></ogc:Filter></csw:Constraint></csw:Query></csw:GetRecords>""",
|
|
"""<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
<csw:GetRecordsResponse
|
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
xmlns:dct="http://purl.org/dc/terms/"
|
|
xmlns:ows="http://www.opengis.net/ows"
|
|
xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
version="2.0.2"
|
|
xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd">
|
|
<csw:SearchStatus timestamp="2015-04-27T00:46:35Z"/>
|
|
<csw:SearchResults nextRecord="0" numberOfRecordsMatched="300" numberOfRecordsReturned="0" recordSchema="http://www.opengis.net/cat/csw/2.0.2" elementSet="full">
|
|
</csw:SearchResults>
|
|
</csw:GetRecordsResponse>
|
|
""",
|
|
)
|
|
fc = lyr.GetFeatureCount()
|
|
assert fc == 300
|
|
|
|
lyr.SetAttributeFilter(
|
|
"identifier = 'an_identifier' AND "
|
|
+ "references = 'http://foo/' AND "
|
|
+ "anytext LIKE '%%foo%%' AND "
|
|
+ "other_identifiers = '' AND "
|
|
+ "other_subjects = '' AND "
|
|
+ "other_formats = '' AND "
|
|
+ "other_references = '' AND "
|
|
+ "ST_Intersects(boundingbox, ST_MakeEnvelope(2,49,2,49,4326))"
|
|
)
|
|
lyr.SetAttributeFilter(None)
|
|
lyr.SetSpatialFilter(None)
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
def test_ogr_csw_vsimem_csw_output_schema_csw():
|
|
ds = gdal.OpenEx("CSW:/vsimem/csw_endpoint", open_options=["OUTPUT_SCHEMA=CSW"])
|
|
lyr = ds.GetLayer(0)
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="results" service="CSW" version="2.0.2" outputSchema="http://www.opengis.net/cat/csw/2.0.2" startPosition="1" maxRecords="500" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""<invalid_xml
|
|
""",
|
|
)
|
|
lyr.ResetReading()
|
|
with gdaltest.error_handler():
|
|
f = lyr.GetNextFeature()
|
|
assert f is None
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="results" service="CSW" version="2.0.2" outputSchema="http://www.opengis.net/cat/csw/2.0.2" startPosition="1" maxRecords="500" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""<csw:GetRecordsResponse/>""",
|
|
)
|
|
lyr.ResetReading()
|
|
with gdaltest.error_handler():
|
|
f = lyr.GetNextFeature()
|
|
assert f is None
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="results" service="CSW" version="2.0.2" outputSchema="http://www.opengis.net/cat/csw/2.0.2" startPosition="1" maxRecords="500" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
<csw:GetRecordsResponse
|
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
xmlns:dct="http://purl.org/dc/terms/"
|
|
xmlns:ows="http://www.opengis.net/ows"
|
|
xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
version="2.0.2"
|
|
xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd">
|
|
<csw:SearchStatus timestamp="2015-04-27T00:46:35Z"/>
|
|
<csw:SearchResults nextRecord="0" numberOfRecordsMatched="1" numberOfRecordsReturned="1" recordSchema="http://www.isotc211.org/2005/gmd" elementSet="full">
|
|
<csw:Record>
|
|
<!-- lots of missing stuff -->
|
|
<ows:BoundingBox crs="urn:x-ogc:def:crs:EPSG:6.11:4326" dimensions="2">
|
|
<ows:LowerCorner>-90 -180</ows:LowerCorner>
|
|
<ows:UpperCorner>90 180</ows:UpperCorner>
|
|
</ows:BoundingBox>
|
|
<!-- lots of missing stuff -->
|
|
</csw:Record>
|
|
</csw:SearchResults>
|
|
</csw:GetRecordsResponse>
|
|
""",
|
|
)
|
|
lyr.ResetReading()
|
|
f = lyr.GetNextFeature()
|
|
if (
|
|
f["raw_xml"].find("<csw:Record") != 0
|
|
or f["boundingbox"].ExportToWkt()
|
|
!= "POLYGON ((-180 -90,-180 90,180 90,180 -90,-180 -90))"
|
|
):
|
|
f.DumpReadable()
|
|
pytest.fail()
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
def test_ogr_csw_vsimem_csw_output_schema_gmd():
|
|
ds = gdal.OpenEx("CSW:/vsimem/csw_endpoint", open_options=["OUTPUT_SCHEMA=GMD"])
|
|
lyr = ds.GetLayer(0)
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="results" service="CSW" version="2.0.2" outputSchema="http://www.isotc211.org/2005/gmd" startPosition="1" maxRecords="500" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
<csw:GetRecordsResponse
|
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
xmlns:dct="http://purl.org/dc/terms/"
|
|
xmlns:ows="http://www.opengis.net/ows"
|
|
xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
version="2.0.2"
|
|
xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd">
|
|
<csw:SearchStatus timestamp="2015-04-27T00:46:35Z"/>
|
|
<csw:SearchResults nextRecord="0" numberOfRecordsMatched="1" numberOfRecordsReturned="1" recordSchema="http://www.isotc211.org/2005/gmd" elementSet="full">
|
|
<gmd:MD_Metadata xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gsr="http://www.isotc211.org/2005/gsr" xmlns:gss="http://www.isotc211.org/2005/gss" xmlns:gts="http://www.isotc211.org/2005/gts" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:gmx="http://www.isotc211.org/2005/gmx" xmlns:geonet="http://www.fao.org/geonetwork" xsi:schemaLocation="http://www.isotc211.org/2005/gmd http://www.isotc211.org/2005/gmd/gmd.xsd">
|
|
<!-- lots of missing stuff -->
|
|
<gmd:extent><gmd:EX_Extent><gmd:geographicElement><gmd:EX_GeographicBoundingBox>
|
|
<gmd:westBoundLongitude><gco:Decimal>-180</gco:Decimal></gmd:westBoundLongitude>
|
|
<gmd:eastBoundLongitude><gco:Decimal>180</gco:Decimal></gmd:eastBoundLongitude>
|
|
<gmd:southBoundLatitude><gco:Decimal>-90</gco:Decimal></gmd:southBoundLatitude>
|
|
<gmd:northBoundLatitude><gco:Decimal>90</gco:Decimal></gmd:northBoundLatitude>
|
|
</gmd:EX_GeographicBoundingBox></gmd:geographicElement></gmd:EX_Extent></gmd:extent>
|
|
<!-- lots of missing stuff -->
|
|
</gmd:MD_Metadata>
|
|
</csw:SearchResults>
|
|
</csw:GetRecordsResponse>
|
|
""",
|
|
)
|
|
|
|
f = lyr.GetNextFeature()
|
|
if (
|
|
f["raw_xml"].find("<gmd:MD_Metadata") != 0
|
|
or f["boundingbox"].ExportToWkt()
|
|
!= "POLYGON ((-180 -90,-180 90,180 90,180 -90,-180 -90))"
|
|
):
|
|
f.DumpReadable()
|
|
pytest.fail()
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
def test_ogr_csw_vsimem_csw_output_schema_fgdc():
|
|
ds = gdal.OpenEx(
|
|
"CSW:/vsimem/csw_endpoint",
|
|
open_options=["OUTPUT_SCHEMA=http://www.opengis.net/cat/csw/csdgm"],
|
|
)
|
|
lyr = ds.GetLayer(0)
|
|
|
|
gdal.FileFromMemBuffer(
|
|
"""/vsimem/csw_endpoint&POSTFIELDS=<?xml version="1.0" encoding="UTF-8"?><csw:GetRecords resultType="results" service="CSW" version="2.0.2" outputSchema="http://www.opengis.net/cat/csw/csdgm" startPosition="1" maxRecords="500" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"><csw:Query typeNames="csw:Record"><csw:ElementSetName>full</csw:ElementSetName></csw:Query></csw:GetRecords>""",
|
|
"""<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
<csw:GetRecordsResponse
|
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
xmlns:dct="http://purl.org/dc/terms/"
|
|
xmlns:ows="http://www.opengis.net/ows"
|
|
xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
version="2.0.2"
|
|
xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd">
|
|
<csw:SearchStatus timestamp="2015-04-27T00:46:35Z"/>
|
|
<csw:SearchResults nextRecord="0" numberOfRecordsMatched="1" numberOfRecordsReturned="1" recordSchema="http://www.opengis.net/cat/csw/csdgm" elementSet="full">
|
|
<metadata xsi:noNamespaceSchemaLocation="http://www.fgdc.gov/metadata/fgdc-std-001-1998.xsd">
|
|
<!-- lots of missing stuff -->
|
|
<spdom>
|
|
<bounding>
|
|
<westbc>-180</westbc>
|
|
<eastbc>180</eastbc>
|
|
<northbc>90</northbc>
|
|
<southbc>-90</southbc>
|
|
</bounding>
|
|
</spdom>
|
|
<!-- lots of missing stuff -->
|
|
</metadata>
|
|
</csw:SearchResults>
|
|
</csw:GetRecordsResponse>
|
|
""",
|
|
)
|
|
|
|
f = lyr.GetNextFeature()
|
|
if (
|
|
f["raw_xml"].find("<metadata") != 0
|
|
or f["boundingbox"].ExportToWkt()
|
|
!= "POLYGON ((-180 -90,-180 90,180 90,180 -90,-180 -90))"
|
|
):
|
|
f.DumpReadable()
|
|
pytest.fail()
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
def test_ogr_csw_vsimem_cleanup():
|
|
|
|
for f in gdal.ReadDir("/vsimem/"):
|
|
gdal.Unlink("/vsimem/" + f)
|