Esempio n. 1
0
    def build_global_boundaries(cls):

        from django.conf import settings
        from temba_client.v1.types import Geometry as TembaGeometry, Boundary as TembaBoundary
        handle = open('%s/geojson/countries.json' % settings.MEDIA_ROOT, 'r+')
        contents = handle.read()
        handle.close()

        boundaries_json = json.loads(contents)

        boundaries = []
        for elt in boundaries_json['features']:
            temba_geometry = TembaGeometry.create(
                type=elt['geometry']['type'],
                coordinates=elt['geometry']['coordinates'])

            temba_boundary = TembaBoundary.create(
                level=0,
                name=elt['properties']['name'],
                boundary=elt['properties']['hc-a2'],
                geometry=temba_geometry)

            boundaries.append(temba_boundary)

        return boundaries
Esempio n. 2
0
    def test_kwargs_from_temba(self):
        geometry = TembaGeometry.create(type='MultiPolygon', coordinates=['COORDINATES'])
        country = TembaBoundary.create(boundary='R12345', name='Nigeria', parent=None, level=0, geometry=geometry)

        kwargs = Boundary.kwargs_from_temba(self.nigeria, country)
        self.assertEqual(kwargs, dict(org=self.nigeria, osm_id="R12345", name="Nigeria", level=0, parent=None,
                                      geometry=json.dumps(dict(type='MultiPolygon', coordinates=['COORDINATES']))))

        # try creating an object from the kwargs
        country_boundary = Boundary.objects.create(**kwargs)

        state = TembaBoundary.create(boundary='R23456', name='Lagos', parent="R12345", level=1, geometry=geometry)
        kwargs = Boundary.kwargs_from_temba(self.nigeria, state)
        self.assertEqual(kwargs, dict(org=self.nigeria, osm_id="R23456", name="Lagos", level=1, parent=country_boundary,
                                      geometry=json.dumps(dict(type='MultiPolygon', coordinates=['COORDINATES']))))

        # try creating an object from the kwargs
        Boundary.objects.create(**kwargs)
Esempio n. 3
0
    def test_local_kwargs(self):
        geometry = TembaGeometry.create(type='MultiPolygon', coordinates=['COORDINATES'])
        country = TembaBoundary.create(boundary='R12345', name='Nigeria', parent=None, level=0, geometry=geometry)

        kwargs = self.syncer.local_kwargs(self.nigeria, country)
        self.assertEqual(kwargs, {'org': self.nigeria,
                                  'geometry': json.dumps(dict(type=geometry.type, coordinates=geometry.coordinates)),
                                  'parent': None, 'level': 0,
                                  'name': 'Nigeria', 'osm_id': 'R12345'})

        # try creating an object from the kwargs
        country_boundary = Boundary.objects.create(**kwargs)

        state = TembaBoundary.create(boundary='R23456', name='Lagos', parent="R12345", level=1, geometry=geometry)
        kwargs = self.syncer.local_kwargs(self.nigeria, state)
        self.assertEqual(kwargs, {'org': self.nigeria, 'osm_id': "R23456", 'name': "Lagos", 'level': 1,
                                  'parent': country_boundary,
                                  'geometry':json.dumps(dict(type='MultiPolygon', coordinates=['COORDINATES']))})
Esempio n. 4
0
    def test_kwargs_from_temba(self):
        geometry = TembaGeometry.create(type='MultiPolygon', coordinates=['COORDINATES'])
        country = TembaBoundary.create(boundary='R12345', name='Nigeria', parent=None, level=0, geometry=geometry)

        kwargs = Boundary.kwargs_from_temba(self.nigeria, country)
        self.assertEqual(kwargs, dict(org=self.nigeria, osm_id="R12345", name="Nigeria", level=0, parent=None,
                                      geometry=json.dumps(dict(type='MultiPolygon', coordinates=['COORDINATES']))))

        # try creating an object from the kwargs
        country_boundary = Boundary.objects.create(**kwargs)

        state = TembaBoundary.create(boundary='R23456', name='Lagos', parent="R12345", level=1, geometry=geometry)
        kwargs = Boundary.kwargs_from_temba(self.nigeria, state)
        self.assertEqual(kwargs, dict(org=self.nigeria, osm_id="R23456", name="Lagos", level=1, parent=country_boundary,
                                      geometry=json.dumps(dict(type='MultiPolygon', coordinates=['COORDINATES']))))

        # try creating an object from the kwargs
        Boundary.objects.create(**kwargs)
Esempio n. 5
0
    def test_update_required(self):
        geometry = TembaGeometry.create(type='MultiPolygon', coordinates=[[1, 2]])

        local = Boundary.objects.create(org=self.nigeria, osm_id='OLD123', name='OLD', parent=None, level=0,
                                                   geometry='{"type":"MultiPolygon", "coordinates":[[1, 2]]}')

        remote = TembaBoundary.create(boundary='OLD123', name='OLD', parent=None, level=0, geometry=geometry)

        self.assertFalse(self.syncer.update_required(local, remote, self.syncer.local_kwargs(self.nigeria, remote)))

        remote = TembaBoundary.create(boundary='OLD123', name='NEW', parent=None, level=0, geometry=geometry)

        self.assertTrue(self.syncer.update_required(local, remote, self.syncer.local_kwargs(self.nigeria, remote)))

        remote = TembaBoundary.create(boundary='OLD123', name='NEW',parent=None, level=1, geometry=geometry)

        self.assertTrue(self.syncer.update_required(local, remote, self.syncer.local_kwargs(self.nigeria, remote)))

        geometry = TembaGeometry.create(type='MultiPolygon', coordinates=[[1, 3]])
        remote = TembaBoundary.create(boundary='OLD123', name='OLD', parent=None, level=0, geometry=geometry)

        self.assertTrue(self.syncer.update_required(local, remote, self.syncer.local_kwargs(self.nigeria, remote)))
Esempio n. 6
0
    def build_global_boundaries(cls):

        from django.conf import settings
        from temba_client.v1.types import Geometry as TembaGeometry, Boundary as TembaBoundary
        handle = open('%s/geojson/countries.json' % settings.MEDIA_ROOT, 'r+')
        contents = handle.read()
        handle.close()

        boundaries_json = json.loads(contents)

        boundaries = []
        for elt in boundaries_json['features']:
            temba_geometry = TembaGeometry.create(type=elt['geometry']['type'],
                                                  coordinates=elt['geometry']['coordinates'])

            temba_boundary = TembaBoundary.create(level=0, name=elt['properties']['name'],
                                                  boundary=elt['properties']['hc-a2'], geometry=temba_geometry)

            boundaries.append(temba_boundary)

        return boundaries
Esempio n. 7
0
    def test_pull_boundaries(self, mock_get_boundaries):

        Boundary.objects.all().delete()
        geometry = TembaGeometry.create(type='MultiPolygon', coordinates=[[1, 2]])
        remote = TembaBoundary.create(boundary='OLD123', name='OLD', parent=None, level=0, geometry=geometry)

        mock_get_boundaries.return_value = [remote]

        with self.assertNumQueries(4):
            num_created, num_updated, num_deleted, num_ignored = self.backend.pull_boundaries(self.nigeria)

        self.assertEqual((num_created, num_updated, num_deleted, num_ignored), (1, 0, 0, 0))

        Boundary.objects.all().delete()
        mock_get_boundaries.return_value = [
            TembaBoundary.create(boundary='OLD123', name='OLD', parent=None, level=0, geometry=geometry),
            TembaBoundary.create(boundary='NEW123', name='NEW', parent=None, level=0, geometry=geometry)
        ]

        with self.assertNumQueries(7):
            num_created, num_updated, num_deleted, num_ignored = self.backend.pull_boundaries(self.nigeria)

        self.assertEqual((num_created, num_updated, num_deleted, num_ignored), (2, 0, 0, 0))

        mock_get_boundaries.return_value = [
            TembaBoundary.create(boundary='OLD123', name='CHANGED', parent=None, level=0, geometry=geometry),
            TembaBoundary.create(boundary='NEW123', name='NEW', parent=None, level=0, geometry=geometry)
        ]

        with self.assertNumQueries(6):
            num_created, num_updated, num_deleted, num_ignored = self.backend.pull_boundaries(self.nigeria)

        self.assertEqual((num_created, num_updated, num_deleted, num_ignored), (0, 1, 0, 1))

        mock_get_boundaries.return_value = [
            TembaBoundary.create(boundary='OLD123', name='CHANGED2', parent=None, level=0, geometry=geometry),
            TembaBoundary.create(boundary='NEW123', name='NEW_CHANGE', parent=None, level=0, geometry=geometry)
        ]

        with self.assertNumQueries(7):
            num_created, num_updated, num_deleted, num_ignored = self.backend.pull_boundaries(self.nigeria)

        self.assertEqual((num_created, num_updated, num_deleted, num_ignored), (0, 2, 0, 0))
Esempio n. 8
0
 def get_boundaries(self, pager=None):
     geometry = TembaGeometry.create(type='MultiPolygon', coordinates=['COORDINATES'])
     return [TembaBoundary.create(boundary='R12345', name='Nigeria', parent=None, level=0, geometry=geometry),
             TembaBoundary.create(boundary='R23456', name='Lagos', parent="R12345", level=1, geometry=geometry)]
Esempio n. 9
0
 def get_boundaries(self, pager=None):
     geometry = TembaGeometry.create(type='MultiPolygon', coordinates=['COORDINATES'])
     return [TembaBoundary.create(boundary='R12345', name='Nigeria', parent=None, level=0, geometry=geometry),
             TembaBoundary.create(boundary='R23456', name='Lagos', parent="R12345", level=1, geometry=geometry)]
Esempio n. 10
0
 def get_boundaries(self, pager=None):
     geometry = TembaGeometry.create(type="MultiPolygon", coordinates=["COORDINATES"])
     return [
         TembaBoundary.create(boundary="R12345", name="Nigeria", parent=None, level=0, geometry=geometry),
         TembaBoundary.create(boundary="R23456", name="Lagos", parent="R12345", level=1, geometry=geometry),
     ]