def testSublayerDetails(self):
        ept_provider_metadata = QgsProviderRegistry.instance(
        ).providerMetadata('ept')
        ogr_provider_metadata = QgsProviderRegistry.instance(
        ).providerMetadata('ogr')

        if ept_provider_metadata is not None:
            # test querying a uri which should be blocklisted
            self.assertFalse(QgsProviderRegistry.instance().querySublayers(
                unitTestDataPath() +
                '/point_clouds/ept/sunshine-coast/ept-build.json'))

        if ept_provider_metadata is not None and ogr_provider_metadata is not None:
            # test querying a uri which is technically capable of being opened by two providers, but which one provider is preferred
            # in this case we are testing a ept.json file, which should ALWAYS be treated as a ept point cloud layer even though
            # the OGR provider CAN technically open json files

            # when we directly query ogr provider metadata it should report sublayers for the json file...
            self.assertEqual([
                l.providerKey() for l in ogr_provider_metadata.querySublayers(
                    unitTestDataPath() +
                    '/point_clouds/ept/sunshine-coast/ept.json',
                    Qgis.SublayerQueryFlags(Qgis.SublayerQueryFlag.FastScan))
            ], ['ogr'])

            # ...and when we query ept provider metadata directly it should also report sublayers for ept.json files...
            self.assertEqual([
                l.providerKey() for l in ept_provider_metadata.querySublayers(
                    unitTestDataPath() +
                    '/point_clouds/ept/sunshine-coast/ept.json',
                    Qgis.SublayerQueryFlags(Qgis.SublayerQueryFlag.FastScan))
            ], ['ept'])

            # ... but when we query the provider registry itself, it should ONLY report the ept provider sublayers
            self.assertEqual([
                l.providerKey()
                for l in QgsProviderRegistry.instance().querySublayers(
                    unitTestDataPath() +
                    '/point_clouds/ept/sunshine-coast/ept.json',
                    Qgis.SublayerQueryFlags(Qgis.SublayerQueryFlag.FastScan))
            ], ['ept'])

        provider1 = TestProviderMetadata('p1')
        provider2 = TestProviderMetadata('p2')

        self.assertFalse(
            QgsProviderRegistry.instance().querySublayers('test_uri'))

        self.assertTrue(
            QgsProviderRegistry.instance().registerProvider(provider1))
        self.assertTrue(
            QgsProviderRegistry.instance().registerProvider(provider2))

        self.assertCountEqual([
            p.providerKey()
            for p in QgsProviderRegistry.instance().querySublayers('test_uri')
        ], ['p1', 'p2'])
Beispiel #2
0
 def querySublayers(self,
                    uri: str,
                    flags=Qgis.SublayerQueryFlags(),
                    feedback=None):
     res = QgsProviderSublayerDetails()
     res.setProviderKey(self.key())
     return [res]
 def querySublayers(self,
                    uri: str,
                    flags=Qgis.SublayerQueryFlags(),
                    feedback=None):
     res = QgsProviderSublayerDetails()
     res.setProviderKey(self.key())
     res.setUri(uri)
     res.setName(QgsProviderUtils.suggestLayerNameFromFilePath(uri))
     return [res]