Example #1
0
    def test_get_remote_featurecataloge_baduuid(self, mp_remote_fc_notfound):
        """Test the owsutil.get_remote_featurecatalogue method with an
        inexistent feature catalogue uuid.

        Test whether a FeatureCatalogueNotFoundError is raised.

        Parameters
        ----------
        mp_remote_fc_notfound : pytest.fixture
            Monkeypatch the call to get an inexistent remote featurecatalogue.

        """
        with pytest.raises(FeatureCatalogueNotFoundError):
            owsutil.get_remote_featurecatalogue(
                'https://www.dov.vlaanderen.be/geonetwork/srv/nl/csw',
                'badfc000-0000-0000-0000-badfc00badfc')
Example #2
0
    def _init_fields(self):
        if self._fields is None:
            if SonderingSearch.__wfs_schema is None:
                SonderingSearch.__wfs_schema = self._get_schema()

            if SonderingSearch.__md_metadata is None:
                SonderingSearch.__md_metadata = self._get_remote_metadata()

            if SonderingSearch.__fc_featurecatalogue is None:
                csw_url = self._get_csw_base_url()
                fc_uuid = owsutil.get_featurecatalogue_uuid(
                    SonderingSearch.__md_metadata)

                SonderingSearch.__fc_featurecatalogue = \
                    owsutil.get_remote_featurecatalogue(csw_url, fc_uuid)

            if SonderingSearch.__xsd_schemas is None:
                SonderingSearch.__xsd_schemas = \
                    self._get_remote_xsd_schemas()

            fields = self._build_fields(SonderingSearch.__wfs_schema,
                                        SonderingSearch.__fc_featurecatalogue,
                                        SonderingSearch.__xsd_schemas)

            for field in fields.values():
                if field['name'] not in self._type.get_field_names(
                        include_wfs_injected=True):
                    self._type.fields.append(
                        _WfsInjectedField(name=field['name'],
                                          datatype=field['type']))

            self._fields = self._build_fields(
                SonderingSearch.__wfs_schema,
                SonderingSearch.__fc_featurecatalogue,
                SonderingSearch.__xsd_schemas)
Example #3
0
    def test_get_remote_featurecatalogue(self, mp_remote_fc):
        """Test the owsutil.get_remote_featurecatalogue method.

        Test whether the feature catalogue of the dov-pub:Boringen layer
        matches the format described in the docs.

        Parameters
        ----------
        mp_remote_fc : pytest.fixture
            Monkeypatch the call to get the remote feature catalogue of the
            dov-pub:Boringen layer.

        """
        fc = owsutil.get_remote_featurecatalogue(
            build_dov_url('geonetwork/srv/nl/csw'),
            'c0cbd397-520f-4ee1-aca7-d70e271eeed6')

        assert type(fc) is dict

        assert 'definition' in fc
        assert type(fc['definition']) in (str, unicode)

        assert 'attributes' in fc
        assert type(fc['attributes']) is dict

        attrs = fc['attributes']
        if len(attrs) > 0:
            for attr in attrs.values():
                assert type(attr) is dict

                assert 'definition' in attr
                assert type(attr['definition']) in (str, unicode)

                assert 'values' in attr

                if attr['values'] is not None:
                    assert type(attr['values']) is dict

                    for v in attr['values'].keys():
                        assert type(v) in (str, unicode)
                        assert type(attr['values'][v]) in (str, unicode) or \
                               attr['values'][v] is None
                    assert len(attr['values'].keys()) == len(
                        set(attr['values'].keys()))

                assert 'multiplicity' in attr
                mp = attr['multiplicity']
                assert type(mp) is tuple
                assert len(mp) == 2
                assert mp[0] in (0, 1)
                assert (type(mp[1]) is int and mp[1] > 0) or mp[1] == 'Inf'
Example #4
0
    def _init_fields(self):
        """Initialise the fields and their metadata available in this search
        class."""
        if self._fields is None:
            if InformeleHydrogeologischeStratigrafieSearch.__wfs_schema is \
                    None:
                InformeleHydrogeologischeStratigrafieSearch.__wfs_schema = \
                    self._get_schema()

            if InformeleHydrogeologischeStratigrafieSearch.__md_metadata is \
                    None:
                InformeleHydrogeologischeStratigrafieSearch.__md_metadata = \
                    self._get_remote_metadata()

            if InformeleHydrogeologischeStratigrafieSearch.\
                    __fc_featurecatalogue is None:
                csw_url = self._get_csw_base_url()
                fc_uuid = owsutil.get_featurecatalogue_uuid(
                    InformeleHydrogeologischeStratigrafieSearch.__md_metadata)

                InformeleHydrogeologischeStratigrafieSearch.\
                    __fc_featurecatalogue = \
                    owsutil.get_remote_featurecatalogue(csw_url, fc_uuid)

            if InformeleHydrogeologischeStratigrafieSearch.__xsd_schemas is \
                    None:
                InformeleHydrogeologischeStratigrafieSearch.__xsd_schemas = \
                    self._get_remote_xsd_schemas()

            fields = self._build_fields(
                InformeleHydrogeologischeStratigrafieSearch.__wfs_schema,
                InformeleHydrogeologischeStratigrafieSearch.
                __fc_featurecatalogue,
                InformeleHydrogeologischeStratigrafieSearch.__xsd_schemas)

            for field in fields.values():
                if field['name'] not in self._type.get_field_names(
                        include_wfs_injected=True):
                    self._type.fields.append(
                        _WfsInjectedField(name=field['name'],
                                          datatype=field['type']))

            self._fields = self._build_fields(
                InformeleHydrogeologischeStratigrafieSearch.__wfs_schema,
                InformeleHydrogeologischeStratigrafieSearch.
                __fc_featurecatalogue,
                InformeleHydrogeologischeStratigrafieSearch.__xsd_schemas)
Example #5
0
    def _init_fields(self):
        """Initialise the fields and their metadata available in this search
        class."""
        if self._fields is None:
            if GeotechnischeCoderingSearch.__wfs_schema is None:
                GeotechnischeCoderingSearch.__wfs_schema = \
                    self._get_schema()

            if GeotechnischeCoderingSearch.__md_metadata is None:
                GeotechnischeCoderingSearch.__md_metadata = \
                    self._get_remote_metadata()

            if GeotechnischeCoderingSearch.__fc_featurecatalogue \
                    is None:
                csw_url = self._get_csw_base_url()
                fc_uuid = owsutil.get_featurecatalogue_uuid(
                    GeotechnischeCoderingSearch.__md_metadata)

                GeotechnischeCoderingSearch.__fc_featurecatalogue = \
                    owsutil.get_remote_featurecatalogue(csw_url, fc_uuid)

            if GeotechnischeCoderingSearch.__xsd_schemas is None:
                GeotechnischeCoderingSearch.__xsd_schemas = \
                    self._get_remote_xsd_schemas()

            fields = self._build_fields(
                GeotechnischeCoderingSearch.__wfs_schema,
                GeotechnischeCoderingSearch.__fc_featurecatalogue,
                GeotechnischeCoderingSearch.__xsd_schemas)

            for field in fields.values():
                if field['name'] not in self._type.get_field_names(
                        include_wfs_injected=True):
                    self._type._fields.append({
                        'name': field['name'],
                        'source': 'wfs',
                        'sourcefield': field['name'],
                        'type': field['type'],
                        'wfs_injected': True
                    })

            self._fields = self._build_fields(
                GeotechnischeCoderingSearch.__wfs_schema,
                GeotechnischeCoderingSearch.__fc_featurecatalogue,
                GeotechnischeCoderingSearch.__xsd_schemas)
Example #6
0
    def _init_fields(self):
        """Initialise the fields and their metadata available in this search
        class.

        Raises
        ------
        NotImplementedError
            This is an abstract method that should be implemented in a
            subclass.

        """
        if self._fields is None:
            if self._wfs_schema is None:
                self._wfs_schema = self._get_schema()

            if self._md_metadata is None:
                self._md_metadata = self._get_remote_metadata()

            if self._fc_featurecatalogue is None:
                csw_url = self._get_csw_base_url()
                fc_uuid = owsutil.get_featurecatalogue_uuid(self._md_metadata)
                self._fc_featurecatalogue = \
                    owsutil.get_remote_featurecatalogue(csw_url, fc_uuid)

            if self._xsd_schemas is None:
                self._xsd_schemas = self._get_remote_xsd_schemas()

            fields = self._build_fields(self._wfs_schema,
                                        self._fc_featurecatalogue,
                                        self._xsd_schemas)

            for field in fields.values():
                if field['name'] not in self._type.get_field_names(
                        include_wfs_injected=True):
                    self._type.fields.append(
                        _WfsInjectedField(name=field['name'],
                                          datatype=field['type']))

            self._fields = self._build_fields(self._wfs_schema,
                                              self._fc_featurecatalogue,
                                              self._xsd_schemas)