Exemple #1
0
class BoundaryDatasetsIDsView(viewsets.ViewSet):
    serializer_class = BoundaryDatasetIDSerializer
    store = BoundaryStore()

    def list(self, request):
        try:
            boundaries_datasets_ids = self.store.boundary_datasets_ids()
        except:
            return Response({
                'status': 'Bad request',
            },
                            status=status.HTTP_500_INTERNAL_SERVER_ERROR)

        serializer = self.serializer_class(instance=boundaries_datasets_ids,
                                           many=True)
        return Response(serializer.data)

    def retrieve(self, request, pk=None):
        if pk == 'last':
            try:
                boundary_datasets_last_id = self.store.boundary_datasets_last_id(
                )
            except:
                return Response({
                    'status': 'Bad request',
                },
                                status=status.HTTP_500_INTERNAL_SERVER_ERROR)

            serializer = self.serializer_class(
                instance=boundary_datasets_last_id)
            return Response(serializer.data)
    def test_API_polygon_P11(self):

        print('TEST START')
        store = BoundaryStore()
        store.dropAll()

        for person in self.bds:
            if person['person'] == '11':
                bds = []
                for boundaries in person['boundaries']:
                    data = {}
                    boundary_id = ''
                    for polygon in boundaries:
                        boundary_id = boundary_id + polygon['properties']['id']
                        data[polygon['properties']['id']] = polygon['properties']
                    bds.append({'boundary': boundary_id, 'data': data})
                boundary_dataset = {"id": "persona11", 'boundary_data_set': bds}

                # POST BOUNDARY_DATASETS TEST
                r = requests.post('http://127.0.0.1:8000/bdatasets/', json=boundary_dataset)
                assert r.status_code == 201

        # GET BOUNDARY (POLYGON) TEST
        params = {
            'dlx': '-0.929656',
            'dly': '41.614571',
            'urx': '-0.920650',
            'ury': '41.627084'
        }
        boundaries = ['RP22220716588$)))))7326$))7$))8$)))38$)))42$))4$))5$))6$))7$))8$)))50$))1$))2$))3$))4$))5$))6$))7$))8$)))61$))2$))3$))4$))5$))6$))7$))8$)))70$))1$))2$))3$))4$))5$))6$))7$))8$)))80$))1$))2$))3$))4$))5$))6$))7$))8$))))406$)))30$))1$))2$))3$))4$))5$))6$))7$))8$)))43$))4$))6$))7$))8$)))56$)))60$))1$))2$))3$))4$))5$))6$))7$))8$)))70$))1$))2$))3$))4$))5$))6$))7$))8$)))80$))1$))2$))3$))4$))5$))6$))7$))8$))))563$))4$))6$))7$))8$)))76$))))601$))2$)))10$))1$))2$))3$))4$))5$))8$)))20$))1$))2$))3$))4$))5$))6$))7$))8$)))52$))))700$))1$))2$))3$))4$))5$))6$))7$))8$)))10$))1$))2$))3$))4$))5$))6$))7$))8$)))20$))1$))2$))3$))4$))5$))6$))7$)))30$))1$))2$)))40$))))800$))1$))2$))3$))4$)))10$))1$))))))22458$)))82$))5$))8$))))533$))4$))6$))7$))8$)))60$))1$))2$))3$))4$))5$))6$))7$))8$)))70$))3$))4$))6$))7$))8$)))86$))))721$))2$))4$))5$))7$))8$)))51$))2$))3$))4$))5$))6$))7$))8$)))78$)))80$))1$))2$))3$))4$))5$))6$))))800$))1$))2$))3$))4$))5$))6$))7$))8$)))10$))1$))2$))3$))4$))5$))6$))7$))8$)))20$))1$))3$))4$))5$))6$))7$))8$)))30$))1$))2$))3$))4$))5$))6$))7$))8$)))40$))1$))2$))3$))4$))5$))6$))7$)))50$))1$))2$))3$)))60$))1$))2$)))))4115$))6$))7$))8$)))23$))4$))6$))7$))8$)))31$))2$))4$))5$)))40$))1$))2$))3$))4$))5$))8$)))50$))1$))2$))3$))4$))5$))6$))7$))8$))))230$))3$))6$))7$)))60$))1$))2$)))))))800606$))))))))))))))',
                      'RP22220476527$))8$)))35$))7$))8$)))42$))3$))4$))5$))6$))7$))8$)))50$))1$))2$))3$))4$))5$))6$))7$))8$)))62$)))70$))1$))2$))3$))4$))5$))8$)))80$))1$))2$))3$))4$))5$))6$))7$))8$))))820$))1$))2$))5$)))))7304$))5$))6$))7$))8$)))10$))1$))2$))3$))4$))5$))6$))7$))8$)))26$)))30$))1$))2$))3$))4$))5$))6$))7$))8$)))40$))1$))2$))3$))4$))5$))6$))7$))8$)))50$))3$))6$)))60$))1$))2$))3$))4$))5$))6$))7$))8$)))70$))1$))2$))3$))4$))5$))6$))7$))8$)))80$))3$))6$))))600$))1$))2$))3$))4$))5$))6$))7$))8$)))10$))1$))2$))3$))4$))5$))6$))7$))8$)))20$))3$))6$)))32$)))40$))1$))2$))4$))5$)))))))708018$)))26$))7$))8$)))51$))2$))))103$))4$))5$))6$))7$))8$)))11$))2$))3$))4$))5$))6$))7$))8$)))20$))1$))2$))3$))4$))5$))6$))7$))8$)))30$))1$))2$)))40$))1$))2$))4$))5$)))50$))1$))2$))3$))4$))5$))))200$))3$))4$))6$))7$)))30$))1$))2$))3$))4$))5$))8$)))43$))6$))))))20014$))5$))8$)))23$))4$))5$))6$))7$))8$)))50$))1$))2$))4$))5$))8$))))103$))4$))6$))7$))8$)))16$))7$))8$)))26$))7$))8$)))30$))1$))2$))3$))4$))5$))6$))7$))8$)))40$))1$))2$))3$))4$))5$))6$))7$))8$)))50$))1$))2$))3$))4$))5$))6$))7$))8$)))60$))1$))2$))4$))5$))8$)))70$))1$))2$))3$))4$))5$))6$))7$))8$)))80$))1$))2$))3$))4$))6$))))206$))7$)))30$))1$))2$))3$))4$))5$))6$))7$))8$)))40$))1$))3$)))60$))))410$))1$))))))))))))))',
                      'RP22220713067$))8$)))76$))7$))8$)))86$))7$))8$))))166$))7$))8$)))76$))7$))8$)))86$))7$))8$))))266$))7$))8$))))302$)))10$))1$))2$))3$))4$))5$))7$))8$)))20$))1$))2$))3$))4$))5$))6$))7$))8$)))42$)))50$))1$))2$))4$))5$))8$))))400$))1$))2$))3$))4$))5$))6$))7$))8$)))10$))1$))2$))3$))4$))5$))6$))7$))8$)))20$))1$))2$))3$))4$))5$))6$))7$))8$)))30$))1$))2$))3$))4$))5$))6$))7$))8$)))40$))1$))2$))3$))4$))5$))6$))7$))8$)))50$))1$))2$))3$))4$))5$))6$))7$)))60$))1$))2$))4$))5$))8$)))70$))1$))2$))3$))4$))5$))6$))7$))8$)))80$))1$))3$))))500$))1$))3$))6$))))710$))1$))2$)))))4688$))))766$))7$))8$)))74$))5$))6$))7$))8$)))83$))4$))5$))6$))7$))8$))))863$))4$))5$))6$))7$))8$)))70$))1$))2$))3$))4$))5$))6$))7$))8$)))80$))1$))3$)))))7100$))1$))2$))5$)))10$))1$))2$))3$))4$))5$))8$)))20$))1$))2$))3$))4$))5$))6$))7$))8$)))51$))2$))))200$))1$))2$))3$))4$))5$))6$))7$))8$)))10$))1$))3$)))30$))1$))2$))4$))))))24357$))8$)))82$))))436$))7$)))60$))1$))2$))3$))4$))5$))7$))8$)))70$))1$))2$))3$))4$))5$))6$))7$))8$)))80$))1$))2$))3$))4$))5$))6$))7$))8$))))560$))1$))2$))3$))4$))5$))6$))7$))8$)))73$))4$))5$))6$))7$))8$)))83$))4$))5$))6$))7$))8$))))702$)))10$))1$))2$))3$))4$))5$))7$))8$)))20$))1$))2$))3$))4$))5$))6$))7$))8$)))42$)))50$))1$))2$))3$))4$))5$))7$))8$)))82$))))800$))1$))2$))3$))4$))5$))6$))7$))8$)))10$))1$))2$))3$))4$))5$))6$))7$))8$)))20$))1$))2$))3$))4$))5$))6$))7$))8$)))30$))1$))2$))3$))4$))5$))6$))7$))8$)))40$))1$))2$))3$))4$))5$))6$))7$))8$)))50$))1$))2$))3$))4$))5$))6$)))60$))1$))2$))3$))4$))5$))7$)))70$))1$))2$))3$)))))5363$))4$))5$))6$))7$))8$)))73$))6$))7$))8$)))86$))))600$))1$))2$))3$))4$))5$))6$))7$))8$)))10$))1$))2$))3$)))30$))))))))))))))']

        r = requests.get('http://127.0.0.1:8000/boundaries/', params=params)
        assert r.status_code == 200

        num_boundaries = 0
        for boundary in r.json():
            assert boundaries.__contains__(boundary['AUID'])
            num_boundaries = num_boundaries + 1
        assert num_boundaries == len(boundaries)

        store.dropAll()

        print('TEST FINISH')
    def test_API_polygon_P26(self):

        print('TEST START')
        store = BoundaryStore()
        store.dropAll()

        for person in self.bds:
            if person['person'] == '26':
                bds = []
                for boundaries in person['boundaries']:
                    data = {}
                    boundary_id = ''
                    for polygon in boundaries:
                        boundary_id = boundary_id + polygon['properties']['id']
                        data[polygon['properties']['id']] = polygon['properties']
                    bds.append({'boundary': boundary_id, 'data': data})
                boundary_dataset = {"id": "persona26", 'boundary_data_set': bds}

                # POST BOUNDARY_DATASETS TEST
                r = requests.post('http://127.0.0.1:8000/bdatasets/', json=boundary_dataset)
                assert r.status_code == 201

        # GET BOUNDARY (POLYGON) TEST
        params = {
            'dlx': '-0.869159',
            'dly': '41.643394',
            'urx': '-0.863760',
            'ury': '41.654733'
        }
        boundaries = ['RP22220488768$)))70$))1$))2$))3$))4$))5$))6$))7$))8$)))83$))4$))6$))7$))8$)))))))722102$)))10$))1$))2$))5$)))20$))1$))2$))3$))4$))5$)))64$))5$))6$))7$))8$)))70$))1$))2$))3$))4$))5$))6$))7$))8$)))80$))3$))4$))6$))7$))8$))))200$))1$))3$))4$))5$))6$))7$))8$)))13$))6$))7$))8$)))40$))1$))2$)))50$))1$))3$))4$))5$)))66$))))315$))6$))7$))8$)))21$))2$))3$))4$))5$))6$))7$))8$)))40$))1$))2$)))50$))1$))2$))))400$))1$))2$))3$))4$))5$))6$))7$))8$)))10$))1$))2$))3$))4$))5$))6$))7$))8$)))20$))1$))2$))3$))4$))5$))6$))7$))8$)))30$))1$))2$)))40$))1$))2$))4$))5$)))50$))1$))2$))3$))4$))5$))))500$))1$))3$))4$))5$))6$))7$))8$)))30$))1$)))))4482$))4$))5$))7$))8$))))536$))7$)))60$))1$))2$))3$))4$))5$))6$))7$))8$)))73$))4$))6$))7$))8$))))800$))1$))2$))4$))5$)))10$))1$))2$))3$))4$))5$))6$))7$))8$)))20$))3$))4$))5$))6$))7$))8$)))42$)))50$))1$)))))5606$)))))))800033$))6$))7$))))))))))))))',
                      'RP22220722576$))7$))8$)))83$))4$))5$))6$))7$))8$))))717$))8$)))24$))5$))6$))7$))8$)))41$))2$)))50$))1$))2$))3$))4$))5$))7$))8$)))82$))))800$))1$))2$))3$))4$))5$))6$))7$))8$)))10$))1$))2$))3$))4$))5$))6$))7$))8$)))20$))1$))2$))3$))4$))5$))6$))7$))8$)))30$))1$))2$))3$))4$))5$))6$))7$))8$)))40$))1$))2$))3$))4$))5$))6$))7$))8$)))50$))1$))2$))3$))4$))5$))6$))7$))8$)))60$))1$))2$))3$))4$))5$))7$))8$)))70$))1$))2$))3$))4$))5$))6$))7$))8$)))80$))1$))2$))3$))4$))5$))6$))7$)))))5202$)))10$))1$))2$)))))))800360$))1$))2$))3$))4$))5$))6$))7$))8$)))73$))4$))5$))6$))7$))8$)))86$))7$))8$))))600$))1$))2$))3$))4$))5$))6$))7$))8$)))10$))1$))2$))3$))4$))5$))6$))7$))8$)))20$))1$))2$))3$))4$))5$))6$))7$))8$)))30$))1$))2$))3$))4$))5$))6$))7$))8$)))40$))1$))2$))3$))4$))5$))6$)))50$))1$)))60$))1$))3$))))700$))1$))2$))3$))4$))6$))))))))))))))']
        r = requests.get('http://127.0.0.1:8000/boundaries/', params=params)
        assert r.status_code == 200

        num_boundaries = 0
        for boundary in r.json():
            assert boundaries.__contains__(boundary['AUID'])
            num_boundaries = num_boundaries + 1
        assert num_boundaries == len(boundaries)

        store.dropAll()

        print('TEST FINISH')
    def test_API_polygon_P21(self):

        print('TEST START')
        store = BoundaryStore()
        store.dropAll()

        for person in self.bds:
            if person['person'] == '21':
                bds = []
                for boundaries in person['boundaries']:
                    data = {}
                    boundary_id = ''
                    for polygon in boundaries:
                        boundary_id = boundary_id + polygon['properties']['id']
                        data[polygon['properties']['id']] = polygon['properties']
                    bds.append({'boundary': boundary_id, 'data': data})
                boundary_dataset = {"id": "persona21", 'boundary_data_set': bds}

                # POST BOUNDARY_DATASETS TEST
                r = requests.post('http://127.0.0.1:8000/bdatasets/', json=boundary_dataset)
                assert r.status_code == 201

        # GET BOUNDARY (POLYGON) TEST
        params = {
            'dlx': '-0.90267',
            'dly': '41.64054',
            'urx': '-0.89886',
            'ury': '41.64299'
        }
        boundaries = ['RP22220720638$)))46$))7$))8$)))53$))4$))5$))6$))7$))8$)))60$))1$))2$))3$))4$))5$))6$))7$))8$)))70$))1$))2$))3$))4$))5$))6$))7$))8$)))80$))1$))2$))3$))4$))5$))6$))7$))8$))))733$))4$))6$))7$))8$)))46$))7$)))60$))1$))2$))3$))4$))5$))6$))7$))8$)))70$))1$))2$))3$))4$))5$))6$))7$))8$)))80$))3$))4$))5$))6$))7$))8$))))866$)))))3001$))2$))5$)))10$))1$))2$))3$))4$))5$))7$))8$)))20$))1$))2$))3$))4$))5$))6$))7$))8$)))50$))1$))2$))5$))))100$))1$))2$))3$))4$))5$))6$))7$))8$)))10$))1$))2$))3$))4$))5$))6$))7$))8$)))20$))1$))2$))3$))4$)))30$))1$))2$))3$))4$))5$))7$))8$)))40$))1$))3$))4$))6$))))))))))))))']

        r = requests.get('http://127.0.0.1:8000/boundaries/', params=params)
        assert r.status_code == 200

        num_boundaries = 0
        for boundary in r.json():
            assert boundaries.__contains__(boundary['AUID'])
            num_boundaries = num_boundaries + 1
        assert num_boundaries == len(boundaries)

        store.dropAll()

        print('TEST FINISH')
    def test_API(self, n_person):

        print('TEST START')
        store = BoundaryStore()
        store.dropAll()

        boundary_dataset_test = {}
        all_bds_test = []
        all_boundaries = []
        boundary_test = []
        test_boundary_id = ''
        number_person = 0
        test_person_number = ''
        for person in self.bds[0:n_person]:
            number_person = number_person + 1
            bds = []
            bds_test = []
            for boundaries in person['boundaries']:
                data = {}
                boundary_id = ''
                for polygon in boundaries:
                    boundary_id = boundary_id + polygon['properties']['id']
                    data[polygon['properties']['id']] = polygon['properties']
                bds.append({'boundary': boundary_id, 'data': data})
                optB = Boundary(boundary_ID=BoundaryID(boundary_id)).optimize()
                bds_test.append({'AUID': optB.boundary_ID.value, 'boundary': optB.AUID_to_CUIDs(), 'data': data})
                all_boundaries.append({'AUID': optB.boundary_ID.value, 'boundary': optB.AUID_to_CUIDs(), 'data': data})
                test_boundary_id = boundary_id
                boundary_test = [{'AUID': optB.boundary_ID.value, 'boundary': optB.AUID_to_CUIDs(), 'data': data}]
            boundary_dataset = {"id": "persona" + str(number_person), 'boundary_data_set': bds}
            test_person_number = "persona" + str(number_person)
            boundary_dataset_test = {"id": "persona" + str(number_person), 'boundary_data_set': bds_test}
            all_bds_test.append(boundary_dataset_test)

            # POST BOUNDARY_DATASETS TEST
            r = requests.post('http://127.0.0.1:8000/bdatasets/', json=boundary_dataset)
            assert r.status_code == 201

        # GET ALL BOUNDARY_DATASETS TEST
        r = requests.get('http://127.0.0.1:8000/bdatasets/')
        assert r.status_code == 200
        json_test = json.dumps(all_bds_test)
        json_data = json.dumps(r.json())
        assert json_test == json_data

        # GET BOUNDARY_DATASET TEST
        r = requests.get('http://127.0.0.1:8000/bdatasets/' + test_person_number)
        assert r.status_code == 200
        json_test = json.dumps([boundary_dataset_test])
        json_data = json.dumps(r.json())
        assert json_test == json_data

        # GET BOUNDARY IN BOUNDARY_DATASET TEST
        r = requests.get('http://127.0.0.1:8000/bdatasets/' + test_person_number + "/" + test_boundary_id)
        assert r.status_code == 200
        boundary_in_boundary_dataset = {"id": test_person_number, 'boundary_data_set': boundary_test}
        json_test = json.dumps([boundary_in_boundary_dataset])
        json_data = json.dumps(r.json())
        assert json_test == json_data

        # GET ALL BOUNDARIES TEST
        r = requests.get('http://127.0.0.1:8000/boundaries/')
        assert r.status_code == 200
        json_test = json.dumps(all_boundaries)
        json_data = json.dumps(r.json())
        assert json_test == json_data

        # GET BOUNDARY TEST
        r = requests.get('http://127.0.0.1:8000/boundaries/' + test_boundary_id)
        assert r.status_code == 200
        json_test = json.dumps(boundary_test)
        json_data = json.dumps(r.json())
        assert json_test == json_data

        # DELETE BOUNDARY TEST
        r = requests.delete('http://127.0.0.1:8000/boundaries/' + test_boundary_id)
        assert r.status_code == 204

        r = requests.get('http://127.0.0.1:8000/boundaries/')
        assert r.status_code == 200
        all_boundaries.pop()
        json_test = json.dumps(all_boundaries)
        json_data = json.dumps(r.json())
        assert json_test == json_data

        store.dropAll()

        print('TEST FINISH')
Exemple #6
0
class BoundaryDatasetsView(viewsets.ViewSet):
    serializer_class = BoundaryDatasetSerializer
    update_bds_serializer_class = BoundaryDatasetUpdateSerializer
    update_boundary_serializer_class = BoundaryDataUpdateSerializer
    store = BoundaryStore()

    def list(self, request):
        try:
            boundaries_datasets = self.store.all_boundary_datasets()
        except:
            return Response({
                'status': 'Bad request',
            },
                            status=status.HTTP_500_INTERNAL_SERVER_ERROR)

        serializer = self.serializer_class(instance=boundaries_datasets,
                                           many=True)
        return Response(serializer.data)

    def create(self, request):
        serializer = self.serializer_class(data=request.data)
        if serializer.is_valid():
            try:
                serializer.save(store=self.store)
            except:
                return Response({
                    'status': 'Bad request',
                },
                                status=status.HTTP_500_INTERNAL_SERVER_ERROR)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response({
            'status': 'Bad request',
        },
                        status=status.HTTP_400_BAD_REQUEST)

    def retrieve(self, request, bds=None, pk=None):
        if bds is not None:
            if not re.match(r'^[A-Za-z0-9]+$', pk):
                return Response({
                    'status': 'Bad request',
                },
                                status=status.HTTP_400_BAD_REQUEST)

            try:
                boundary_dataset = self.store.query_by_boundary_in_boundary_datasets(
                    bds, Boundary(boundary_ID=BoundaryID(pk)))
            except:
                return Response({
                    'status': 'Bad request',
                },
                                status=status.HTTP_500_INTERNAL_SERVER_ERROR)
            serializer = self.serializer_class(instance=boundary_dataset,
                                               many=True)
        else:
            try:
                boundary_dataset = self.store.query_by_boundary_dataset_id(pk)
            except:
                return Response({
                    'status': 'Bad request',
                },
                                status=status.HTTP_500_INTERNAL_SERVER_ERROR)
            serializer = self.serializer_class(instance=boundary_dataset,
                                               many=True)
        return Response(serializer.data)

    def update(self, request, bds=None, pk=None):
        if bds is not None:
            print(request.data)
            serializer = self.update_boundary_serializer_class(
                data=request.data)
            if serializer.is_valid():
                try:
                    result = serializer.save(store=self.store,
                                             bds_id=bds,
                                             boundary_id=pk)
                    if result == 0:
                        return Response(status=status.HTTP_404_NOT_FOUND)
                except:
                    return Response(
                        {
                            'status': 'Bad request',
                        },
                        status=status.HTTP_500_INTERNAL_SERVER_ERROR)
                return Response(serializer.data,
                                status=status.HTTP_201_CREATED)
            return Response({
                'status': 'Bad request',
            },
                            status=status.HTTP_400_BAD_REQUEST)
        else:
            serializer = self.update_bds_serializer_class(data=request.data)
            if serializer.is_valid():
                try:
                    serializer.save(store=self.store, bds_id=pk)
                except:
                    return Response(
                        {
                            'status': 'Bad request',
                        },
                        status=status.HTTP_500_INTERNAL_SERVER_ERROR)
                return Response(serializer.data,
                                status=status.HTTP_201_CREATED)
            return Response({
                'status': 'Bad request',
            },
                            status=status.HTTP_400_BAD_REQUEST)

    def destroy(self, request, bds=None, pk=None):
        if bds is not None:
            if not re.match(r'^[A-Za-z0-9]+$', pk):
                return Response({
                    'status': 'Bad request',
                },
                                status=status.HTTP_400_BAD_REQUEST)

            try:
                result = self.store.delete_boundary_in_boundary_datasets(
                    bds, Boundary(boundary_ID=BoundaryID(pk)))
                if result == 0:
                    return Response(status=status.HTTP_404_NOT_FOUND)
                else:
                    return Response(status=status.HTTP_204_NO_CONTENT)
            except:
                return Response({
                    'status': 'Bad request',
                },
                                status=status.HTTP_500_INTERNAL_SERVER_ERROR)
        else:
            try:
                result = self.store.delete_boundary_dataset(pk)
                if result == 0:
                    return Response(status=status.HTTP_404_NOT_FOUND)
                else:
                    return Response(status=status.HTTP_204_NO_CONTENT)
            except:
                return Response({
                    'status': 'Bad request',
                },
                                status=status.HTTP_500_INTERNAL_SERVER_ERROR)
Exemple #7
0
class BoundaryView(viewsets.ViewSet):
    serializer_class = BoundaryDataSerializer
    store = BoundaryStore()

    def list(self, request):
        dlx = self.request.query_params.get('dlx', None)
        dly = self.request.query_params.get('dly', None)
        drx = self.request.query_params.get('drx', None)
        dry = self.request.query_params.get('dry', None)
        urx = self.request.query_params.get('urx', None)
        ury = self.request.query_params.get('ury', None)
        ulx = self.request.query_params.get('ulx', None)
        uly = self.request.query_params.get('uly', None)

        if (dlx and dly and drx and dry and urx and ury and ulx
                and uly) is not None:
            polygon = [[[float(dlx), float(dly)], [float(drx),
                                                   float(dry)],
                        [float(urx), float(ury)], [float(ulx),
                                                   float(uly)],
                        [float(dlx), float(dly)]]]
            try:
                boundaries = self.store.query_by_polygon(polygon)
            except:
                return Response({
                    'status': 'Bad request',
                },
                                status=status.HTTP_500_INTERNAL_SERVER_ERROR)

            serializer = self.serializer_class(instance=boundaries, many=True)
        elif ((dlx and dly and urx and ury)
              is not None) and ((drx and dry and ulx and uly) is None):
            polygon = [[[float(dlx), float(dly)], [float(urx),
                                                   float(dly)],
                        [float(urx), float(ury)], [float(dlx),
                                                   float(ury)],
                        [float(dlx), float(dly)]]]
            print(polygon)
            try:
                boundaries = self.store.query_by_polygon(polygon)
            except:
                return Response({
                    'status': 'Bad request',
                },
                                status=status.HTTP_500_INTERNAL_SERVER_ERROR)

            serializer = self.serializer_class(instance=boundaries, many=True)
        else:
            try:
                boundaries_datasets = self.store.all_boundaries()
            except:
                return Response({
                    'status': 'Bad request',
                },
                                status=status.HTTP_500_INTERNAL_SERVER_ERROR)

            serializer = self.serializer_class(instance=boundaries_datasets,
                                               many=True)

        return Response(serializer.data)

    def retrieve(self, request, pk=None, boundary=None):
        if not re.match(r'^[A-Za-z0-9]+$', pk):
            return Response({
                'status': 'Bad request',
            },
                            status=status.HTTP_400_BAD_REQUEST)

        try:
            boundaries = self.store.query_by_boundary(
                Boundary(boundary_ID=BoundaryID(pk)))
        except:
            return Response({
                'status': 'Bad request',
            },
                            status=status.HTTP_500_INTERNAL_SERVER_ERROR)

        serializer = self.serializer_class(instance=boundaries, many=True)
        return Response(serializer.data)

    def destroy(self, request, pk=None):

        if not re.match(r'^[A-Za-z0-9]+$', pk):
            return Response({
                'status': 'Bad request',
            },
                            status=status.HTTP_400_BAD_REQUEST)

        try:
            result = self.store.delete_boundary(
                Boundary(boundary_ID=BoundaryID(pk)))
            if result == 0:
                return Response(status=status.HTTP_404_NOT_FOUND)
            else:
                return Response(status=status.HTTP_204_NO_CONTENT)
        except:
            return Response({
                'status': 'Bad request',
            },
                            status=status.HTTP_500_INTERNAL_SERVER_ERROR)
Exemple #8
0
    def test_API_polygon_11(self):

        print('TEST START')
        store = BoundaryStore(MongoClient(port=27017).bds)
        store.dropAll()

        i = 0
        data = {}
        bds = []
        boundary_id = ''

        for polygon in self.shapes:
            if i != 0:
                bds.append({'boundary': boundary_id, 'data': data})
                optB = Boundary(boundary_ID=BoundaryID(boundary_id)).optimize()
                data = {}
                boundary_id = ''
            boundary_id = boundary_id + polygon['properties']['id']
            data[polygon['properties']['id']] = polygon['properties']
            i = i + 1
        boundary_dataset = {'boundary_data_set': bds}

        # POST BOUNDARY_DATASETS TEST
        r = requests.post('http://127.0.0.1:8000/bdatasets/',
                          json=boundary_dataset)
        assert r.status_code == 201

        # GET BOUNDARY (POLYGON) TEST
        params = {
            'dlx': '-0.903563',
            'dly': '41.644185',
            'urx': '-0.902558',
            'ury': '41.644762'
        }
        cells = [
            Boundary(boundary_ID=BoundaryID(
                'P22220720640')).optimize().boundary_ID.value,
            Boundary(boundary_ID=BoundaryID(
                'P22220720641')).optimize().boundary_ID.value,
            Boundary(boundary_ID=BoundaryID(
                'P22220720642')).optimize().boundary_ID.value,
            Boundary(boundary_ID=BoundaryID(
                'P22220720643')).optimize().boundary_ID.value,
            Boundary(boundary_ID=BoundaryID(
                'P22220720644')).optimize().boundary_ID.value,
            Boundary(boundary_ID=BoundaryID(
                'P22220720645')).optimize().boundary_ID.value
        ]

        r = requests.get('http://127.0.0.1:8000/boundaries/', params=params)
        assert r.status_code == 200

        num_cells = 0
        for boundary in r.json():
            assert cells.__contains__(boundary['AUID'])
            num_cells = num_cells + 1
        assert num_cells == len(cells)

        store.dropAll()

        print('TEST FINISH')
Exemple #9
0
    def test_API(self):

        print('TEST START')
        store = BoundaryStore(MongoClient(port=27017).bds)
        store.dropAll()

        i = 0
        data = {}
        bds = []
        boundary_id = ''
        bds_test = []
        boundary_test = []
        test_boundary_id = ''

        for polygon in self.shapes:
            if i % 10 == 0 and i != 0:
                bds.append({'boundary': boundary_id, 'data': data})
                optB = Boundary(boundary_ID=BoundaryID(boundary_id)).optimize()
                bds_test.append({
                    'AUID': optB.boundary_ID.value,
                    'boundary': optB.AUID_to_CUIDs(),
                    'data': data
                })
                test_boundary_id = boundary_id
                boundary_test = [{
                    'AUID': optB.boundary_ID.value,
                    'boundary': optB.AUID_to_CUIDs(),
                    'data': data
                }]
                data = {}
                boundary_id = ''
            boundary_id = boundary_id + polygon['properties']['id']
            data[polygon['properties']['id']] = polygon['properties']
            i = i + 1
        boundary_dataset = {'boundary_data_set': bds}
        boundary_dataset_test = {'boundary_data_set': bds_test}

        # POST BOUNDARY_DATASETS TEST
        r = requests.post('http://127.0.0.1:8000/bdatasets/',
                          json=boundary_dataset)
        assert r.status_code == 201

        # GET ALL BOUNDARY_DATASETS TEST
        r = requests.get('http://127.0.0.1:8000/bdatasets/')
        json_test = json.dumps([boundary_dataset_test])
        json_data = json.dumps(r.json())
        assert r.status_code == 200
        assert json_test == json_data

        # GET BOUNDARY IN BOUNDARY_DATASET TEST
        r = requests.get('http://127.0.0.1:8000/bdatasets/' + test_boundary_id)
        json_test = json.dumps([boundary_dataset_test])
        json_data = json.dumps(r.json())
        assert r.status_code == 200
        assert json_test == json_data

        # GET ALL BOUNDARIES TEST
        r = requests.get('http://127.0.0.1:8000/boundaries/')
        json_test = json.dumps(bds_test)
        json_data = json.dumps(r.json())
        assert r.status_code == 200
        assert json_test == json_data

        # GET BOUNDARY TEST
        r = requests.get('http://127.0.0.1:8000/boundaries/' +
                         test_boundary_id)
        json_test = json.dumps(boundary_test)
        json_data = json.dumps(r.json())
        assert r.status_code == 200
        assert json_test == json_data

        # DELETE BOUNDARY TEST
        r = requests.delete('http://127.0.0.1:8000/boundaries/' +
                            test_boundary_id)
        assert r.status_code == 204

        r = requests.get('http://127.0.0.1:8000/boundaries/')
        bds_test.pop()
        json_test = json.dumps(bds_test)
        json_data = json.dumps(r.json())
        assert r.status_code == 200
        assert json_test == json_data

        store.dropAll()

        print('TEST FINISH')
import unittest
from dggs.cellset.boundary import Boundary
from dggs.boundary_ID import BoundaryID
from dggs.dataset.boundary_dataset import BoundaryDataSet
from dggs.store.boundary_store import BoundaryStore
from dggs.dataset.data import Data

store = BoundaryStore()


class TestBoundaryStore(unittest.TestCase):
    def test_insert_and_all_boudnaries(self):
        store.dropAll()
        bds = BoundaryDataSet("id")
        boundaries = [
            'O23P12P34S56', 'P10P11P2', 'N0', 'N8O2P0', 'O6S0S1S2', 'Q'
        ]

        for boundary in boundaries:
            bds.add(Boundary(boundary_ID=BoundaryID(boundary)), Data(""))
        store.insert(bds)

        stored_boundaries = store.all_boundaries()
        num_boundaries = 0
        for boundary in stored_boundaries:
            assert boundaries.__contains__(boundary[0].AUID_to_CUIDs())
            num_boundaries = num_boundaries + 1
        self.assertEqual(num_boundaries, len(boundaries))
        store.dropAll()

    def test_query_by_boundary(self):