Esempio n. 1
0
    def get_boundaries(self, sets=None):
        r = {'boundaries_concordance': [], 'boundaries_centroid': []}

        concordances = PostcodeConcordance.objects.filter(
            code=self.code).values_list('boundary', flat=True)

        if sets:
            concordances = [
                boundary for boundary in concordances
                if boundary.split('/')[0] in sets
            ]

        concordance_sets = set()

        if concordances:
            q = ((models.Q(set=concordance.split('/')[0])
                  & models.Q(slug=concordance.split('/')[1]))
                 for concordance in concordances)

            boundaries = Boundary.objects.filter(reduce(lambda a, b: a | b, q))
            boundaries = Boundary.prepare_queryset_for_get_dicts(boundaries)
            boundaries = Boundary.get_dicts(boundaries)

            r['boundaries_concordance'] = boundaries

            for boundary in boundaries:
                concordance_sets.add(boundary['related']['boundary_set_url'])

        if self.centroid:
            q = models.Q(shape__contains=self.centroid)

            if sets:
                q &= models.Q(set__in=sets)

            boundaries = Boundary.objects.filter(q)
            boundaries = Boundary.prepare_queryset_for_get_dicts(boundaries)
            boundaries = Boundary.get_dicts(boundaries)

            r['boundaries_centroid'] = [
                boundary for boundary in boundaries if boundary['related']
                ['boundary_set_url'] not in concordance_sets
            ]

        return r
Esempio n. 2
0
    def get_boundaries(self, sets=None):
        r = {
            'boundaries_concordance': [],
            'boundaries_centroid': []
        }

        concordances = PostcodeConcordance.objects.filter(code=self.code).values_list('boundary', flat=True)

        if sets:
            concordances = [boundary for boundary in concordances if boundary.split('/')[0] in sets]

        concordance_sets = set()

        if concordances:
            q = ((models.Q(set=concordance.split('/')[0]) & models.Q(slug=concordance.split('/')[1])) for concordance in concordances)

            boundaries = Boundary.objects.filter(reduce(lambda a, b: a | b, q))
            boundaries = Boundary.prepare_queryset_for_get_dicts(boundaries)
            boundaries = Boundary.get_dicts(boundaries)

            r['boundaries_concordance'] = boundaries

            for boundary in boundaries:
                concordance_sets.add(boundary['related']['boundary_set_url'])

        if self.centroid:
            q = models.Q(shape__contains=self.centroid)

            if sets:
                q &= models.Q(set__in=sets)

            boundaries = Boundary.objects.filter(q)
            boundaries = Boundary.prepare_queryset_for_get_dicts(boundaries)
            boundaries = Boundary.get_dicts(boundaries)

            r['boundaries_centroid'] = [boundary for boundary in boundaries if boundary['related']['boundary_set_url'] not in concordance_sets]

        return r
 def test_prepare_queryset_for_get_dicts(self):
     Boundary.objects.create(
         slug='bar',
         set=BoundarySet(slug='foo'),
         name='Bar',
         set_name='Foo',
         external_id=1,
         shape=MultiPolygon(()),
         simple_shape=MultiPolygon(()),
     )
     # Coerce the django.contrib.gis.db.models.query.GeoValuesListQuerySet.
     self.assertEqual(list(Boundary.prepare_queryset_for_get_dicts(Boundary.objects)), [
         ('bar', 'foo', 'Bar', 'Foo', '1'),
     ])
Esempio n. 4
0
 def test_prepare_queryset_for_get_dicts(self):
     geom = GEOSGeometry('MULTIPOLYGON(((0 0,0 5,5 5,0 0)))')
     Boundary.objects.create(
         slug='bar',
         set=BoundarySet(slug='foo'),
         name='Bar',
         set_name='Foo',
         external_id=1,
         shape=geom,
         simple_shape=geom,
     )
     # Coerce the django.contrib.gis.db.models.query.GeoValuesListQuerySet.
     self.assertEqual(list(Boundary.prepare_queryset_for_get_dicts(Boundary.objects)), [
         ('bar', 'foo', 'Bar', 'Foo', '1'),
     ])
 def test_prepare_queryset_for_get_dicts(self):
     geom = GEOSGeometry('MULTIPOLYGON(((0 0,0 5,5 5,0 0)))')
     Boundary.objects.create(
         slug='bar',
         set=BoundarySet(slug='foo'),
         name='Bar',
         set_name='Foo',
         external_id=1,
         shape=geom,
         simple_shape=geom,
     )
     # Coerce the django.contrib.gis.db.models.query.GeoValuesListQuerySet.
     self.assertEqual(list(Boundary.prepare_queryset_for_get_dicts(Boundary.objects)), [
         ('bar', 'foo', 'Bar', 'Foo', '1'),
     ])