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
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)))
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)
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']))})
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))
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
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)]
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), ]