2020
2121from info_modules .sql import layer_info as sql_layer_info
2222from info_modules .wms import layer_info as wms_layer_info
23- from info_templates import default_info_template , layer_template
23+ from info_templates import layer_template
2424from utils import geom_center
2525
2626
@@ -87,6 +87,7 @@ def __init__(self, tenant, logger):
8787 config_handler = RuntimeConfig ("featureInfo" , logger )
8888 config = config_handler .tenant_config (tenant )
8989
90+ self .default_info_template = None
9091 self .default_info_template_dir = None
9192 if config .get ('default_info_template' ):
9293 self .default_info_template = config .get ('default_info_template' )
@@ -105,8 +106,6 @@ def __init__(self, tenant, logger):
105106 config .get ('default_info_template_base64' ),
106107 default_info_template , "default info template"
107108 )
108- else :
109- self .default_info_template = default_info_template
110109
111110 self .default_wms_url = config .get (
112111 'default_qgis_server_url' , 'http://localhost:8001/ows/' )
@@ -504,33 +503,34 @@ def get_layer_info(self, identity, origin, service_name, layer, style, x, y, crs
504503 geometry = feature .get ('geometry' )
505504
506505 info_html = None
507- try :
508- # render feature template
509- templateLoader = None
510- if template_dir :
511- templateLoader = jinja2 .FileSystemLoader (searchpath = template_dir )
512- templateEnv = jinja2 .Environment (loader = templateLoader , autoescape = True )
513- feature_template = templateEnv .from_string (template )
514- info_html = feature_template .render (
515- feature = info_feature , fid = fid , bbox = bbox ,
516- geometry = geometry , layer = layer , x = x , y = y , crs = crs ,
517- render_value = self .render_value ,
518- locale = locale
519- )
520- except jinja2 .TemplateSyntaxError as e :
521- error_msg = (
522- "TemplateSyntaxError on line %d: %s" % (e .lineno , e )
523- )
524- except jinja2 .TemplateError as e :
525- error_msg = "TemplateError: %s" % e
526- except Exception as e :
527- error_msg = "TemplateError: %s" % e
528- if error_msg is not None :
529- self .logger .error (error_msg )
530- info_html = (
531- '<span class="info_error" style="color: red">%s</span>' %
532- error_msg
533- )
506+ if template :
507+ try :
508+ # render feature template
509+ templateLoader = None
510+ if template_dir :
511+ templateLoader = jinja2 .FileSystemLoader (searchpath = template_dir )
512+ templateEnv = jinja2 .Environment (loader = templateLoader , autoescape = True )
513+ feature_template = templateEnv .from_string (template )
514+ info_html = feature_template .render (
515+ feature = info_feature , fid = fid , bbox = bbox ,
516+ geometry = geometry , layer = layer , x = x , y = y , crs = crs ,
517+ render_value = self .render_value ,
518+ locale = locale
519+ )
520+ except jinja2 .TemplateSyntaxError as e :
521+ error_msg = (
522+ "TemplateSyntaxError on line %d: %s" % (e .lineno , e )
523+ )
524+ except jinja2 .TemplateError as e :
525+ error_msg = "TemplateError: %s" % e
526+ except Exception as e :
527+ error_msg = "TemplateError: %s" % e
528+ if error_msg is not None :
529+ self .logger .error (error_msg )
530+ info_html = (
531+ '<span class="info_error" style="color: red">%s</span>' %
532+ error_msg
533+ )
534534
535535 if geomcentroid and geometry :
536536 gj = wkt .loads (geometry .upper ().replace ('Z' ,'' ))
@@ -542,7 +542,7 @@ def get_layer_info(self, identity, origin, service_name, layer, style, x, y, crs
542542
543543 features .append ({
544544 'fid' : fid ,
545- 'html_content' : self .html_content (info_html ) if with_htmlcontent else "" ,
545+ 'html_content' : self .html_content (info_html ) if with_htmlcontent and info_html else "" ,
546546 'plain_html' : info_html ,
547547 'bbox' : bbox if with_bbox else None ,
548548 'wkt_geom' : geometry ,
@@ -553,13 +553,19 @@ def get_layer_info(self, identity, origin, service_name, layer, style, x, y, crs
553553 output = ""
554554 for feature in features :
555555 output += "Feature: {fid}\n " .format (fid = feature ['fid' ])
556- output += '\n ' .join (map (lambda attr : "{alias}: {value}" . format ( alias = attr ['alias' ], value = attr ['value' ]) , feature ['attributes' ])) + '\n \n '
556+ output += '\n ' .join (map (lambda attr : f" { attr ['alias' ]} : { attr ['value' ]} " , feature ['attributes' ])) + '\n \n '
557557 return "Layer: {layer_title}\n \n {output}\n \n \n " .format (layer_title = layer_title , output = output )
558558 elif output_info_format == 'text/html' :
559559 output = ""
560560 for feature in features :
561- output += "<h2><i>Feature</i>: {fid}</h2>\n {plain_html}\n " .format (fid = feature ['fid' ], plain_html = feature ['plain_html' ])
562- return "<h1><i>Layer</i>: {layer_title}</h1>\n {output}\n <br />\n " .format (layer_title = layer_title , output = output )
561+ output += f"<h2><i>Feature</i>: { feature ['fid' ]} </h2>\n "
562+ if feature ['plain_html' ]:
563+ output += f"{ feature ['plain_html' ]} \n "
564+ else :
565+ output += "<table>\n "
566+ output += '\n ' .join (map (lambda attr : f"<tr><td>{ attr ['alias' ]} </td><td>{ attr ['value' ]} </td></tr>" , feature ['attributes' ])) + '\n '
567+ output += "</table>\n "
568+ return f"<h1><i>Layer</i>: { layer_title } </h1>\n { output } \n <br />\n "
563569 elif output_info_format == 'application/json' :
564570 return {
565571 "type" : "Feature" ,
0 commit comments