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')])
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*')
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)