Example #1
0
    def test_isValid(self):
        poly_rel = QgsPolymorphicRelation()
        self.assertFalse(poly_rel.isValid())

        poly_rel.setId('poly_rel1')
        self.assertFalse(poly_rel.isValid())

        poly_rel.setName('Polymorphic Relation Number One')
        self.assertFalse(poly_rel.isValid())

        poly_rel.setReferencingLayer(self.referencingLayer.id())
        self.assertFalse(poly_rel.isValid())

        poly_rel.setReferencedLayerIds(
            [self.referencedLayer1.id(),
             self.referencedLayer2.id()])
        self.assertFalse(poly_rel.isValid())

        poly_rel.setReferencedLayerField('referenced_layer')
        self.assertFalse(poly_rel.isValid())

        poly_rel.setReferencedLayerExpression('@layer_name')
        self.assertFalse(poly_rel.isValid())

        poly_rel.addFieldPair('referenced_fid', 'fid')
        self.assertTrue(poly_rel.isValid())
Example #2
0
 def createPolymorphicRelation(self):
     polyRel = QgsPolymorphicRelation()
     polyRel.setReferencingLayer(self.referencingLayer.id())
     polyRel.setReferencedLayerIds([self.referencedLayer.id()])
     polyRel.setReferencedLayerField('referenced_layer')
     polyRel.setReferencedLayerExpression('@layer_name')
     polyRel.addFieldPair('referenced_fid', 'x')
     return polyRel
Example #3
0
    def test_layerRepresentation(self):
        poly_rel = QgsPolymorphicRelation()
        poly_rel.setId('poly_rel1')
        poly_rel.setName('Polymorphic Relation Number One')
        poly_rel.setReferencingLayer(self.referencingLayer.id())
        poly_rel.setReferencedLayerIds(
            [self.referencedLayer1.id(),
             self.referencedLayer2.id()])
        poly_rel.setReferencedLayerField('referenced_layer')
        poly_rel.setReferencedLayerExpression('@layer_name')
        poly_rel.addFieldPair('referenced_fid', 'fid')

        self.assertEqual(poly_rel.layerRepresentation(self.referencedLayer1),
                         'referencedlayer1')
Example #4
0
    def test_generateRelations(self):
        poly_rel = QgsPolymorphicRelation()
        poly_rel.setId('poly_rel1')
        poly_rel.setName('Polymorphic Relation Number One')
        poly_rel.setReferencingLayer(self.referencingLayer.id())
        poly_rel.setReferencedLayerIds(
            [self.referencedLayer1.id(),
             self.referencedLayer2.id()])
        poly_rel.setReferencedLayerField('referenced_layer')
        poly_rel.setReferencedLayerExpression('@layer_name')
        poly_rel.addFieldPair('referenced_fid', 'fid')

        QgsProject.instance().relationManager().addPolymorphicRelation(
            poly_rel)

        self.assertTrue(poly_rel.isValid())

        rels = poly_rel.generateRelations()

        self.assertEqual(len(rels), 2)

        rel1, rel2 = rels

        self.assertTrue(rel1.isValid())
        self.assertEqual(rel1.polymorphicRelationId(), poly_rel.id())
        self.assertEqual(rel1.referencingLayer(), poly_rel.referencingLayer())
        self.assertEqual(rel1.referencedLayer(), self.referencedLayer1)
        self.assertEqual(rel1.fieldPairs(), {'referenced_fid': 'fid'})

        features = list(self.referencedLayer1.getFeatures())
        self.assertEqual(len(features), 3)
        self.assertEqual(
            rel1.getRelatedFeaturesFilter(features[0]),
            '"referenced_layer" = \'referencedlayer1\' AND "referenced_fid" = \'foo\''
        )
        it = rel1.getRelatedFeatures(features[0])
        self.assertListEqual([f.attributes() for f in it], [
            [1, 'referencedlayer1', 'foo', './file1.jpg'],
            [2, 'referencedlayer1', 'foo', './file2.jpg'],
        ])

        self.assertEqual(
            rel1.getRelatedFeaturesFilter(features[1]),
            '"referenced_layer" = \'referencedlayer1\' AND "referenced_fid" = \'bar\''
        )
        it = rel1.getRelatedFeatures(features[1])
        self.assertListEqual([f.attributes() for f in it], [
            [3, 'referencedlayer1', 'bar', './file3.jpg'],
        ])

        self.assertEqual(
            rel1.getRelatedFeaturesFilter(features[2]),
            '"referenced_layer" = \'referencedlayer1\' AND "referenced_fid" = \'foobar\'\'bar\''
        )
        it = rel1.getRelatedFeatures(features[2])
        self.assertListEqual([f.attributes() for f in it], [])

        self.assertTrue(rel2.isValid())
        self.assertEqual(rel2.polymorphicRelationId(), poly_rel.id())
        self.assertEqual(rel2.polymorphicRelationId(), poly_rel.id())
        self.assertEqual(rel2.referencingLayer(), poly_rel.referencingLayer())
        self.assertEqual(rel2.referencedLayer(), self.referencedLayer2)
        self.assertEqual(rel2.fieldPairs(), {'referenced_fid': 'fid'})

        features = list(self.referencedLayer2.getFeatures())
        self.assertEqual(len(features), 3)
        self.assertEqual(
            rel2.getRelatedFeaturesFilter(features[0]),
            '"referenced_layer" = \'referencedlayer2\' AND "referenced_fid" = \'foo\''
        )
        it = rel2.getRelatedFeatures(features[0])
        self.assertListEqual([f.attributes() for f in it], [])

        self.assertEqual(
            rel2.getRelatedFeaturesFilter(features[1]),
            '"referenced_layer" = \'referencedlayer2\' AND "referenced_fid" = \'bar\''
        )
        it = rel2.getRelatedFeatures(features[1])
        self.assertListEqual([f.attributes() for f in it], [])

        self.assertEqual(
            rel2.getRelatedFeaturesFilter(features[2]),
            '"referenced_layer" = \'referencedlayer2\' AND "referenced_fid" = \'foobar\'\'bar\''
        )
        it = rel2.getRelatedFeatures(features[2])
        self.assertListEqual(
            [f.attributes() for f in it],
            [[4, 'referencedlayer2', "foobar'bar", './file4.jpg']])
Example #5
0
 def test_addFieldPair(self):
     poly_rel = QgsPolymorphicRelation()
     self.assertEqual(poly_rel.fieldPairs(), {})
     poly_rel.addFieldPair('referenced_fid', 'fid')
     self.assertEqual(poly_rel.fieldPairs(), {'referenced_fid': 'fid'})