Esempio n. 1
0
 def test_get_dicts(self):
     boundaries = [
         ('bar', 'foo', 'Bar', 'Foo', 1),
         ('bzz', 'baz', 'Bzz', 'Baz', 2),
     ]
     self.assertEqual(Boundary.get_dicts(boundaries), [
         {
             'url': '/boundaries/foo/bar/',
             'name': 'Bar',
             'related': {
                 'boundary_set_url': '/boundary-sets/foo/',
             },
             'boundary_set_name': 'Foo',
             'external_id': 1,
         },
         {
             'url': '/boundaries/baz/bzz/',
             'name': 'Bzz',
             'related': {
                 'boundary_set_url': '/boundary-sets/baz/',
             },
             'boundary_set_name': 'Baz',
             'external_id': 2,
         },
     ])
 def test_get_dicts(self):
     boundaries = [
         ('bar', 'foo', 'Bar', 'Foo', 1),
         ('bzz', 'baz', 'Bzz', 'Baz', 2),
     ]
     self.assertEqual(Boundary.get_dicts(boundaries), [
         {
             'url': '/boundaries/foo/bar/',
             'name': 'Bar',
             'related': {
                 'boundary_set_url': '/boundary-sets/foo/',
             },
             'boundary_set_name': 'Foo',
             'external_id': 1,
         },
         {
             'url': '/boundaries/baz/bzz/',
             'name': 'Bzz',
             'related': {
                 'boundary_set_url': '/boundary-sets/baz/',
             },
             'boundary_set_name': 'Baz',
             'external_id': 2,
         },
     ])
Esempio n. 3
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. 4
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