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 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 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