def test_raises_InvalidGeoJson_when_geometry_is_linestring(self): # arrange grid_json = get_canned_json("CHAI-Escuintla-West2.json") grid_dto = GridDTO(grid_json) grid_dto.clip_to_aoi = True # Act / Assert with self.assertRaises(InvalidGeoJson): GridService.merge_to_multi_polygon(grid_dto.area_of_interest, dissolve=True)
def test_trim_grid_to_aoi_noclip(self): # arrange grid_json = get_canned_json("test_grid.json") grid_dto = GridDTO(grid_json) grid_dto.clip_to_aoi = False expected = geojson.loads(json.dumps(get_canned_json("feature_collection.json"))) # act result = GridService.trim_grid_to_aoi(grid_dto) # assert self.assertEqual(str(expected), str(result))
def test_tasks_from_aoi_features(self): # arrange grid_json = get_canned_json("test_arbitrary.json") grid_dto = GridDTO(grid_json) expected = geojson.loads( json.dumps(get_canned_json("tasks_from_aoi_features.json"))) # act result = GridService.tasks_from_aoi_features(grid_dto.area_of_interest) # assert self.assertEqual(str(expected), str(result))
def test_feature_collection_to_multi_polygon_nodissolve(self): # arrange grid_json = get_canned_json("test_grid.json") grid_dto = GridDTO(grid_json) expected = geojson.loads(json.dumps(get_canned_json("multi_polygon.json"))) aoi_geojson = geojson.loads(json.dumps(grid_dto.area_of_interest)) # act result = GridService.merge_to_multi_polygon(aoi_geojson, False) # assert self.assertEqual(str(expected), str(result))
def post(self): """ Gets the tiles intersecting the aoi --- tags: - grid produces: - application/json parameters: - in: header name: Authorization description: Base64 encoded session token required: true type: string default: Token sessionTokenHere== - in: body name: body required: true description: JSON object containing aoi and tasks and bool flag for controlling clip grid to aoi schema: properties: clipToAoi: type: boolean default: true areaOfInterest: schema: properties: type: type: string default: FeatureCollection features: type: array items: schema: $ref: "#/definitions/GeoJsonFeature" grid: schema: properties: type: type: string default: FeatureCollection features: type: array items: schema: $ref: "#/definitions/GeoJsonFeature" responses: 200: description: Intersecting tasks found successfully 400: description: Client Error - Invalid Request 500: description: Internal Server Error """ try: grid_dto = GridDTO(request.get_json()) grid_dto.validate() except DataError as e: current_app.logger.error(f"error validating request: {str(e)}") return str(e), 400 try: grid = GridService.trim_grid_to_aoi(grid_dto) return grid, 200 except InvalidGeoJson as e: return {"error": f"{str(e)}"}, 400 except Exception as e: error_msg = f"IntersectingTiles GET API - unhandled error: {str(e)}" current_app.logger.critical(error_msg) return {"error": error_msg}, 500