
    shz$                         d Z dZdZdZddlZddlZddlmZ ddlm	Z	 ddl
mZmZmZ dd	lmZmZ dd
lmZ ddlmZ ddlmZ ddlmZmZ ddlmZ  edg d      Z G d de      Zy)zelpaso@itopen.itz
2022-10-27zGPL version 3zCopyright 2022, Gis3w    N)
namedtuple)Optional)QgsMapLayer
QgsProjectQgsVectorLayer)QBuffer	QIODevice)QImage)QgsServerFilter)
find_layer)Loggerexception_handler)to_boolCategoryruleKeycheckedparentRuleKeyscaleMaxDenomscaleMinDenom
expressiontitlec            
           e Zd ZdZdZededeej                     fd       Z
edefd       Zed        Ze	 dded	ed
edefd       Zy)GetLegendGraphicFilterz Add "ruleKey" to GetLegendGraphic for categorized and rule-based
    only works for single LAYER and STYLE(S) and JSON format.
    u   (.*) \[≈?(?:\d+|N/A)\]symbol_labelreturnc                 B    t        j                  | j                  |      S )z8Regexp for extracting the feature count from the label. )rematchFEATURE_COUNT_REGEXP)clsr   s     @/var/www/qgis-server/plugins/lizmap_server/get_legend_graphic.pymatch_label_feature_countz0GetLegendGraphicFilter.match_label_feature_count#   s     xx00,??    c                 (   t               }|j                  t        j                  j                         t        d      }|j                  |d       t        |j                         j                         j                               j                         S )z Warning icon as base 64. z(:/images/themes/default/mIconWarning.svgPNG)r   openr	   OpenModeFlag	WriteOnlyr
   savebytesdatatoBase64decode)r!   bufferqps      r"   warning_iconz#GetLegendGraphicFilter.warning_icon(   sh     I**445>?
V[[]++-2245<<>>r$   c           	      
   | j                         j                         }t               }|s|j                  d       y |j	                         }|j                  dd      j                         dk7  ry |j                  dd      j                         dvry |j                  dd      j                         dk7  ry |j                  d	d      }|dk(  ry d
|v ry t        j                         }|j                  dd      }|s|j                  dd      }t        |j                  d            }d}t        ||      }	|	sy |	j                         s|j                  d| d|j                          d       dd|| j                         ddgd}
|j                          |j!                  t#        j$                  |
      j'                  d             y |	j)                         t*        j,                  j.                  k7  r|j1                  d| d       y 	 |	j3                         j5                         }|r&|r$||k7  r|	j3                         j7                  |       |r"|	j9                         }|r|j;                          |	j=                         r |	j=                         j)                         dv r|j?                         }t#        j@                  tC        |            }
|
d   d   j                  d      }|s|
d   }g }| jE                  |	||j                               }tG        tI        |            D ]  }||   }|d   }|rS| jK                  |      }|r|jM                  d      }n.|j1                  djO                  | jP                  |d                	 ||   }|jR                  |d<   |jT                  |d <   |jV                  |d!<   d"|vr|jX                  dkD  r|jX                  |d"<   d#|vr|jZ                  dkD  r|jZ                  |d#<   |j\                  |d$<   |d   |j^                  k7  r|j^                  |d<   |je                  |        d|
d   d   v r||
d   d   d<   n||
d<   |j                          |j!                  t#        j$                  |
      j'                  d             |	r,|r)|r&||k7  r |	j3                         j7                  |       y y y y y # t`        tb        f$ r Y w xY w# tf        $ r4}|j                  d%jO                  |ti        |                   Y d }~|d }~ww xY w# |	r,|r)|r&||k7  r |	j3                         j7                  |       w w w w w xY w)&NzMGetLegendGraphicFilter plugin cannot be run in multithreading mode, skipping.SERVICE WMSREQUEST)GETLEGENDGRAPHICGETLEGENDGRAPHICSFORMATzAPPLICATION/JSONLAYER,STYLESSTYLESHOWFEATURECOUNTzLayer 'zD' is not valid, returning a warning icon in the legend for project ''layerF)typer   iconvalid)r   nodesutf8zSkipping the layer 'z!' because it's not a vector layer)categorizedSymbolRuleRenderergraduatedSymbolrD   r   symbolsr      z<GetLegendGraphic JSON: symbol label does not match '{}' '{}'r   r   r   r   r   r   zeError getting layer "{}" when setting up legend graphic for json output when configuring OWS call: {})5serverInterfacerequestHandlerr   criticalparameterMapgetupperr   instancer   r   isValidwarninghomePathr1   	clearBody
appendBodyjsondumpsencoderA   r   	LayerTypeVectorLayerinfostyleManagercurrentStylesetCurrentStylecountSymbolFeatureswaitForFinishedrendererbodyloadsr+   _extract_categoriesrangelenr#   groupformatr    r   r   r   r   r   r   r   
IndexErrorKeyErrorappend	Exceptionstr)selfhandlerloggerparams
layer_nameprojectstyleshow_feature_countcurrent_styler@   	json_datacounterrc   rI   new_symbols
categoriesidxsymbolr   match_labelcategoryexs                         r"   responseCompletez'GetLegendGraphicFilter.responseComplete1   sB   &&(779OO_a%%'::i$**,5::i$**,4]]::h#))+/AA ZZ,
* )113

8R(JJw+E$VZZ0B%CD:w/ }}NN* &$$&'q*
 #' --/"	 I tzz)4;;FCD::<;00<<<KK.zl:[\]J	D!..0==?M5M+A""$44U; "335++- ~~NN$))+/gg||~ JJuT{3	#G,Q/33I>'0G !55e=OQXQaQaQcd
 W. /C$S\F#)'?L)&*&D&D\&R&+6+<+<Q+?L"KK ^ e e$($=$=vg!PQ#-l#;,4,<,<y),4,<,<y)2:2H2H/ +&8X=S=SVW=W6>6L6LF?3*&8X=S=SVW=W6>6L6LF?3/7/B/B|,!'?hnn<.6nnF7O  &&v.=/@ 	' 21 557BIg&q))4)4Ig&!!#""4::i#8#?#?#GH =Um5K""$44]C 6L=u# '1   	<OO%vj#b':< <	<
 =Um5K""$44]C 6L=usQ   FS. B&S8A2S. S+(S. *S++S. .	T+7*T&!T. &T++T. .0Ur@   rv   project_pathc           
         |j                         }i }|j                         D ]  }|j                         }|rk|j                         j	                         j                         }|j                  |j                               }	|dj                  |rdnd|	dk7  r|	nd      z  }|j                  |j                         |      \  }
}|s,t        j                  d| d|j                          d       d}
|j                         |j                         v r;t        j                  d	|j                          d
| d|j                          d       t        |j                         |j                  |j                               |j!                         |j#                         |j%                         |
|      ||j                         <    |S )z+ Extract categories from the layer legend. z [{}{}]u   ≈r4   zN/AzThe expression in the project 'z
', layer 'zM' has not been generated correctly, setting the expression to an empty stringzThe label key 'z@' is not unique, expect the legend to be broken in the project 'z'.r   )rb   legendSymbolItemslabeldataProvideruriuseEstimatedMetadatafeatureCountr   ri   legendKeyToExpressionr   rS   namekeysr   legendSymbolItemCheckedr   r   r   )r!   r@   rv   r   rb   r{   itemr   estimated_countcountr   results               r"   re   z*GetLegendGraphicFilter._extract_categories   s    >>#
..0 #	D JJLE!"'"4"4"6":":"<"Q"Q"S**4<<>:)),E""b[Ee 
 "*!?!?PU!VJ5l^:ejjl^ \Z [  
zz|z00%djjl^ 4$~Z

~RA
 (0 88H"002"002"002%(Jtzz|$7#	H r$   N)Fr4   )__name__
__module____qualname____doc__r    classmethodrn   r   r   Matchr#   r1   r   r   r   booldictre    r$   r"   r   r      s     7@S @Xbhh=O @ @ ?S ? ? ND ND` ^`+&+<@+X[+	+ +r$   r   )
__author____date____license____copyright__rW   r   collectionsr   typingr   	qgis.corer   r   r   qgis.PyQt.QtCorer   r	   qgis.PyQt.QtGuir
   qgis.serverr   lizmap_server.corer   lizmap_server.loggerr   r   lizmap_server.toolsr   r   r   r   r$   r"   <module>r      s^   
'  	 "  = = / " ' ) : 'df
R_ Rr$   