def test_map_custom_thumbs(self): bboxes = [ [-9072629.904175375, -9043966.018568434, 1491839.8773032012, 1507127.2829602365, "EPSG:3857"], [-9701812.234583871, -8784567.895161757, 1183222.3819935687, 1672419.363018697, "EPSG:3857"], [-84665859.2306568, 32741416.215373922, -33346586.656875588, 29270626.9143408, "EPSG:3857"], [-72434308.4190976, -43082489.55758992, -7279981.1852046205, 8374322.207599477, "EPSG:3857"], [-77007211.63038959, -18303573.90737422, 781254.9545387309, 32089861.740146928, "EPSG:3857"], ] expected_results_dir = f"{EXPECTED_RESULTS_DIR}thumbnails/" expected_thumbs_paths = [ f"{expected_results_dir}map_thumb1.png", f"{expected_results_dir}map_thumb2.png", f"{expected_results_dir}map_thumb3.png", f"{expected_results_dir}map_thumb4.png", f"{expected_results_dir}map_thumb5.png", ] for bbox, expected_thumb_path in zip(bboxes, expected_thumbs_paths): create_thumbnail(self.map_composition, bbox=bbox, overwrite=True) expected_thumb = Image.open(expected_thumb_path) self.map_composition.refresh_from_db() self._fetch_thumb_and_compare(self.map_composition.thumbnail_url, expected_thumb)
def _create_layer_thumbnail(self, geonode_layer): """Create a thumbnail with a WMS request.""" create_thumbnail( instance=geonode_layer, wms_version=self.parsed_service.version, bbox=geonode_layer.bbox, forced_crs=geonode_layer.srid, overwrite=True, )
def _create_dataset_thumbnail(self, geonode_dataset): """Create a thumbnail with a WMS request.""" create_thumbnail( instance=geonode_dataset, wms_version=self.parsed_service.version, bbox=geonode_dataset.bbox, forced_crs=geonode_dataset.srid if 'EPSG:' in str( geonode_dataset.srid) else f'EPSG:{geonode_dataset.srid}', overwrite=True, )
def test_create_map_thumbnail_using_ll_bbox_polygon(self): map = Map.objects.get(title_en="theaters_nyc_map") with patch("geonode.thumbs.thumbnails._datasets_locations") as _mck: _mck.return_value = [MagicMock(), MagicMock()] if not map.ll_bbox_polygon: thumbnails.create_thumbnail(map, overwrite=True) _mck.assert_called_with(map, compute_bbox=True, target_crs="EPSG:3857") ll_bbox_polygon = Polygon.from_bbox((0, 22, 0, 22)) map.ll_bbox_polygon = ll_bbox_polygon map.save() thumbnails.create_thumbnail(map, overwrite=True) _mck.assert_called_with(map, compute_bbox=False, target_crs="EPSG:3857")
def finalize_resource_update( self, geonode_resource: ResourceBase, harvested_info: base.HarvestedResourceInfo, harvestable_resource: HarvestableResource) -> ResourceBase: """Create a thumbnail with a WMS request.""" if not geonode_resource.srid: target_crs = settings.DEFAULT_MAP_CRS elif 'EPSG:' in str(geonode_resource.srid).upper() or 'CRS:' in str( geonode_resource.srid).upper(): target_crs = geonode_resource.srid else: target_crs = f'EPSG:{geonode_resource.srid}' create_thumbnail( instance=geonode_resource, # wms_version=harvested_info.resource_descriptor, bbox=geonode_resource.bbox, forced_crs=target_crs, overwrite=True, )
def set_thumbnail_from_bbox(self, request, resource_id): try: resource = ResourceBase.objects.get( id=ast.literal_eval(resource_id)) if not isinstance(resource.get_real_instance(), (Dataset, Map)): raise NotImplementedError( "Not implemented: Endpoint available only for Dataset and Maps" ) request_body = request.data if request.data else json.loads( request.body) bbox = request_body["bbox"] + [request_body["srid"]] zoom = request_body.get("zoom", None) thumbnail_url = create_thumbnail(resource.get_real_instance(), bbox=bbox, background_zoom=zoom, overwrite=True) return Response({"thumbnail_url": thumbnail_url}, status=200) except ResourceBase.DoesNotExist: logger.error( f"Resource selected with id {resource_id} does not exists") return Response(data={ "message": f"Resource selected with id {resource_id} does not exists" }, status=404, exception=True) except NotImplementedError as e: logger.error(e) return Response(data={"message": e.args[0]}, status=405, exception=True) except ThumbnailError as e: logger.error(e) return Response(data={"message": e.args[0]}, status=500, exception=True) except Exception as e: logger.error(e) return Response(data={"message": e.args[0]}, status=500, exception=True)
def set_thumbnail_from_bbox(self, request, resource_id): import traceback from django.utils.datastructures import MultiValueDictKeyError try: resource = ResourceBase.objects.get(id=ast.literal_eval(resource_id)) if not isinstance(resource.get_real_instance(), (Layer, Map)): raise NotImplementedError("Not implemented: Endpoint available only for Dataset and Maps") request_body = request.data if request.data else json.loads(request.body) try: bbox = request_body["bbox"] + [request_body["srid"]] zoom = request_body.get("zoom", None) except MultiValueDictKeyError: for _k, _v in request_body.items(): request_body = json.loads(_k) break bbox = request_body["bbox"] + [request_body["srid"]] zoom = request_body.get("zoom", None) thumbnail_url = create_thumbnail(resource.get_real_instance(), bbox=bbox, background_zoom=zoom, overwrite=True) return Response({"message": "Thumbnail correctly created.", "success": True, "thumbnail_url": thumbnail_url}, status=200) except ResourceBase.DoesNotExist: traceback.print_exc() logger.error(f"Resource selected with id {resource_id} does not exists") return Response( data={"message": f"Resource selected with id {resource_id} does not exists", "success": False}, status=404, exception=True) except NotImplementedError as e: traceback.print_exc() logger.error(e) return Response(data={"message": e.args[0], "success": False}, status=405, exception=True) except ThumbnailError as e: traceback.print_exc() logger.error(e) return Response(data={"message": e.args[0], "success": False}, status=500, exception=True) except Exception as e: traceback.print_exc() logger.error(e) return Response(data={"message": e.args[0], "success": False}, status=500, exception=True)