def test_overlapping_returned_can_be_filtered(self):
        overlaps = Topology.overlapping(self.topo1)
        overlaps = overlaps.exclude(pk=self.topo1.pk)
        self.assertEqual(len(overlaps), 4)

        overlaps = Topology.overlapping(self.topo1)
        overlaps = overlaps.filter(pk__in=[self.point1.pk, self.point2.pk])
        self.assertEqual(len(overlaps), 2)
示例#2
0
    def test_overlapping_returned_can_be_filtered(self):
        overlaps = Topology.overlapping(self.topo1)
        overlaps = overlaps.exclude(pk=self.topo1.pk)
        self.assertEqual(len(overlaps), 4)

        overlaps = Topology.overlapping(self.topo1)
        overlaps = overlaps.filter(pk__in=[self.point1.pk, self.point2.pk])
        self.assertEqual(len(overlaps), 2)
示例#3
0
def filter(qs, edges):
    """
    This piece of code was moved from core, and should be rewritten nicely
    with managers : TODO !
    """
    # TODO: this is wrong, land should not depend on maintenance
    import geotrek.maintenance as maintenance

    overlapping = Topology.overlapping(edges)

    # In case, we filter on paths
    if qs.model == Path:
        paths = []
        for o in overlapping:
            paths.extend(o.paths.all())
        return qs.filter(pk__in=[path.pk for path in set(paths)])

    # TODO: This is (amazingly) ugly in terms of OOP. Should refactor overlapping()
    elif issubclass(qs.model, maintenance.models.Intervention):
        return qs.filter(topology__in=[topo.pk for topo in overlapping])
    elif issubclass(qs.model, maintenance.models.Project):
        # Find all interventions overlapping those edges
        interventions = filter(maintenance.models.Intervention.objects.existing()
                                                              .select_related(depth=1)
                                                              .filter(project__in=qs),
                               edges)
        # Return only the projects concerned by the interventions
        projects = []
        for intervention in interventions:
            projects.append(intervention.project.pk)
        return qs.filter(pk__in=set(projects))

    else:
        assert issubclass(qs.model, Topology), "%s is not a Topology as expected" % qs.model
        return qs.filter(pk__in=[topo.pk for topo in overlapping])
示例#4
0
 def get_interventions(cls, obj):
     blade_content_type = ContentType.objects.get_for_model(Blade)
     if settings.TREKKING_TOPOLOGY_ENABLED:
         topologies = list(Topology.overlapping(obj).values_list('pk', flat=True))
     else:
         area = obj.geom.buffer(settings.INTERVENTION_INTERSECTION_MARGIN)
         topologies = list(Topology.objects.existing().filter(geom__intersects=area).values_list('pk', flat=True))
     qs = Q(target_id__in=topologies) & ~Q(target_type=blade_content_type)
     if 'geotrek.signage' in settings.INSTALLED_APPS:
         blades = list(Blade.objects.filter(signage__in=topologies).values_list('id', flat=True))
         qs |= Q(target_id__in=blades, target_type=blade_content_type)
     return Intervention.objects.existing().filter(qs).distinct('pk')
示例#5
0
 def topology_interventions(cls, topology):
     topos = Topology.overlapping(topology).values_list('pk', flat=True)
     return cls.objects.existing().filter(topology__in=topos).distinct('pk')
示例#6
0
 def test_overlapping_return_sharing_path(self):
     overlaps = Topology.overlapping(self.topo1)
     self.assertTrue(self.topo1 in overlaps)
     self.assertTrue(self.topo2 in overlaps)
示例#7
0
 def test_overlapping_does_not_fail_if_no_records(self):
     from geotrek.trekking.models import Trek
     overlaps = Topology.overlapping(Trek.objects.all())
     self.assertEqual(list(overlaps), [])
示例#8
0
 def test_overlapping_sorts_when_path_is_reversed(self):
     overlaps = Topology.overlapping(self.topo1)
     self.assertEqual(
         list(overlaps),
         [self.topo1, self.point2, self.point3, self.point1, self.topo2])
示例#9
0
 def test_overlapping_sorts_by_order_of_progression(self):
     overlaps = Topology.overlapping(self.topo2)
     self.assertEqual(
         list(overlaps),
         [self.topo2, self.point1, self.point3, self.point2, self.topo1])
示例#10
0
 def test_overlapping_does_not_fail_if_no_records(self):
     from geotrek.trekking.models import Trek
     overlaps = Topology.overlapping(Trek.objects.all())
     self.assertEqual(list(overlaps), [])
示例#11
0
 def test_overlapping_sorts_when_path_is_reversed(self):
     overlaps = Topology.overlapping(self.topo1)
     self.assertEqual(list(overlaps), [self.topo1,
                                       self.point2, self.point3, self.point1, self.topo2])
示例#12
0
 def test_overlapping_sorts_by_order_of_progression(self):
     overlaps = Topology.overlapping(self.topo2)
     self.assertEqual(list(overlaps), [self.topo2,
                                       self.point1, self.point3, self.point2, self.topo1])
示例#13
0
 def test_overlapping_return_sharing_path(self):
     overlaps = Topology.overlapping(self.topo1)
     self.assertTrue(self.topo1 in overlaps)
     self.assertTrue(self.topo2 in overlaps)
示例#14
0
 def topology_interventions(cls, topology):
     topos = Topology.overlapping(topology).values_list('pk', flat=True)
     return cls.objects.existing().filter(topology__in=topos).distinct('pk')