Пример #1
0
    def test_gpkg_field_domain_create(self):
        """
        Test creating field domains
        """
        gpkg_domains_original_path = '{}/domains.gpkg'.format(TEST_DATA_DIR)
        temp_domains_path = '{}/domains_create.gpkg'.format(self.temp_dir.path())
        shutil.copy(gpkg_domains_original_path, temp_domains_path)

        md = QgsProviderRegistry.instance().providerMetadata('ogr')
        conn = md.createConnection(temp_domains_path, {})

        domain = QgsRangeFieldDomain('my new domain', 'my new domain desc', QVariant.Int, 5, True, 15, True)
        conn.addFieldDomain(domain, '')

        # try retrieving result
        del conn
        conn = md.createConnection(temp_domains_path, {})

        res = conn.fieldDomain('my new domain')
        self.assertEqual(res.type(), Qgis.FieldDomainType.Range)
        self.assertEqual(res.name(), 'my new domain')

        self.assertEqual(res.minimum(), 5)
        self.assertEqual(res.maximum(), 15)

        # try adding another with a duplicate name, should fail
        with self.assertRaises(QgsProviderConnectionException) as e:
            conn.addFieldDomain(domain, '')
        self.assertEqual(str(e.exception), 'Could not create field domain: A domain of identical name already exists')

        domain = QgsGlobFieldDomain('my new glob domain', 'my new glob desc', QVariant.String, '*aaabc*')
        conn.addFieldDomain(domain, '')

        # try retrieving result
        del conn
        conn = md.createConnection(temp_domains_path, {})

        res = conn.fieldDomain('my new glob domain')
        self.assertEqual(res.type(), Qgis.FieldDomainType.Glob)
        self.assertEqual(res.name(), 'my new glob domain')
        self.assertEqual(res.description(), 'my new glob desc')
        self.assertEqual(res.glob(), '*aaabc*')

        # coded value
        domain = QgsCodedFieldDomain('my new coded domain', 'my new coded desc', QVariant.String, [QgsCodedValue('a', 'aa'), QgsCodedValue('b', 'bb')])
        conn.addFieldDomain(domain, '')

        # try retrieving result
        del conn
        conn = md.createConnection(temp_domains_path, {})

        res = conn.fieldDomain('my new coded domain')
        self.assertEqual(res.type(), Qgis.FieldDomainType.Coded)
        self.assertEqual(res.name(), 'my new coded domain')
        self.assertEqual(res.description(), 'my new coded desc')
        self.assertCountEqual(res.values(), [QgsCodedValue('a', 'aa'), QgsCodedValue('b', 'bb')])
Пример #2
0
    def testGlobWidget(self):
        w = QgsFieldDomainWidget(Qgis.FieldDomainType.Glob)

        domain = w.createFieldDomain()

        self.assertIsInstance(domain, QgsGlobFieldDomain)
        self.assertEqual(domain.fieldType(), QVariant.String)
        self.assertEqual(domain.splitPolicy(),
                         Qgis.FieldDomainSplitPolicy.DefaultValue)
        self.assertEqual(domain.mergePolicy(),
                         Qgis.FieldDomainMergePolicy.DefaultValue)
        self.assertEqual(domain.glob(), '')

        # set domain and test round trips
        domain = QgsGlobFieldDomain('name', 'desc', QVariant.Int, '*a*')
        domain.setSplitPolicy(Qgis.FieldDomainSplitPolicy.GeometryRatio)
        domain.setMergePolicy(Qgis.FieldDomainMergePolicy.Sum)
        w.setFieldDomain(domain)

        domain2 = w.createFieldDomain()
        self.assertIsInstance(domain2, QgsGlobFieldDomain)
        self.assertEqual(domain2.fieldType(), QVariant.Int)
        self.assertEqual(domain2.splitPolicy(),
                         Qgis.FieldDomainSplitPolicy.GeometryRatio)
        self.assertEqual(domain2.mergePolicy(),
                         Qgis.FieldDomainMergePolicy.Sum)
        self.assertEqual(domain2.glob(), '*a*')
Пример #3
0
    def testGlobFieldDomain(self):
        domain = QgsGlobFieldDomain('name', 'desc', QVariant.String, '*a*')

        self.assertEqual(str(domain), "<QgsGlobFieldDomain: name '*a*'>")

        self.assertEqual(domain.type(), Qgis.FieldDomainType.Glob)
        self.assertEqual(domain.name(), 'name')
        domain.setName('n')
        self.assertEqual(domain.name(), 'n')

        self.assertEqual(domain.description(), 'desc')
        domain.setDescription('desc 2')
        self.assertEqual(domain.description(), 'desc 2')

        self.assertEqual(domain.fieldType(), QVariant.String)
        domain.setFieldType(QVariant.Double)
        self.assertEqual(domain.fieldType(), QVariant.Double)

        self.assertEqual(domain.glob(), '*a*')
        domain.setGlob('*b*')
        self.assertEqual(domain.glob(), '*b*')

        domain.setSplitPolicy(Qgis.FieldDomainSplitPolicy.GeometryRatio)
        self.assertEqual(domain.splitPolicy(),
                         Qgis.FieldDomainSplitPolicy.GeometryRatio)

        domain.setMergePolicy(Qgis.FieldDomainMergePolicy.GeometryWeighted)
        self.assertEqual(domain.mergePolicy(),
                         Qgis.FieldDomainMergePolicy.GeometryWeighted)

        d2 = domain.clone()
        self.assertEqual(d2.name(), 'n')
        self.assertEqual(d2.description(), 'desc 2')
        self.assertEqual(d2.fieldType(), QVariant.Double)
        self.assertEqual(d2.glob(), '*b*')
        self.assertEqual(d2.splitPolicy(),
                         Qgis.FieldDomainSplitPolicy.GeometryRatio)
        self.assertEqual(d2.mergePolicy(),
                         Qgis.FieldDomainMergePolicy.GeometryWeighted)