
    shI                          d Z dZdZddlZddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZmZmZ dd	lmZmZmZmZmZmZmZmZ dd
lmZ ddlmZmZmZmZ ddl m!Z!m"Z" ddl#m$Z$  G d de      Z% G d de      Z&y)zCopyright 2021, 3LizzGPL version 3zinfo@3liz.org    N)Dict)gdal)Qgis
QgsProject)QgsServerInterfaceQgsServerRequestQgsServerResponse
QgsService)find_vector_layer_from_paramsget_lizmap_configget_lizmap_groupsget_lizmap_layers_configget_lizmap_override_filterget_lizmap_user_loginis_editing_contextwrite_json_response)ServiceError)ALL_FEATURESNO_FEATURESFilterByPolygon
FilterType)Logger	profiling)versionc                       e Zd Zy)LizmapServiceErrorN)__name__
__module____qualname__     </var/www/qgis-server/plugins/lizmap_server/lizmap_service.pyr   r   '   s     	r!   r   c            	            e Zd Zdeddf fdZdefdZdefdZdede	d	e
ddfd
Zedeeef   de	d	e
ddfd       Zdeeef   de	d	e
ddfdZ xZS )LizmapServiceserver_ifacereturnNc                 N    t         |           || _        t               | _        y )N)super__init__r%   r   logger)selfr%   	__class__s     r"   r)   zLizmapService.__init__/   s    (hr!   c                      y)z Service name
        LIZMAPr    r+   s    r"   namezLizmapService.name7   s     r!   c                      y)z Service version
        z1.0.0r    r/   s    r"   r   zLizmapService.version=   s     r!   requestresponseprojectc                    |j                         }	 |j                  dd      j                         }	 t        |j	                               j                          |dk(  r| j                  |||       y
|dk(  r| j                  |||       y
t        dd	j                  |      d      # t        $ r t        dd| dd      w xY w# t        $ r}|j                  |       Y d
}~y
d
}~wt        $ r{}| j                  j                  dt        j                                 | j                  j                  t!        |             t        dd      }|j                  |       Y d
}~y
d
}~ww xY w)z$ Execute a 'LIZMAP' request
        REQUEST Bad request errorzInvalid POST DATA for ''  GETSERVERSETTINGSGETSUBSETSTRINGzGInvalid REQUEST parameter: must be one of GETSERVERSETTINGS, found '{}'NzUnhandled exception:
zInternal server errorzInternal 'lizmap' service error)
parametersgetupperbytesdatadecode	Exceptionr   get_server_settingspolygon_filterformatformatResponser*   critical	traceback
format_excstr)r+   r2   r3   r4   params	req_paramerres           r"   executeRequestzLizmapService.executeRequestB   s\   
 ##%	)

9b1779Iglln%,,. //((7C//##FHg>(']dd!#	   ('-i[: " " 	)x(( 	)KK  #9):N:N:P9Q!RSKK  Q($%<>_`Cx((		)sG    C 'B( C 3C C (CC 	E,C%%E,1A1E''E,rL   c                 P   t        ||      \  }}|st        ddd      dt        dd}t        | j                  j                               rt        ||       yt        | j                  j                               }|st        ||       yt        |      }|st        ||       y|j                         }	|	|vrt        ||       y	 |j                  dd      j                         }
|
d	k(  rt        j                  }n<|
d
k(  rt        j                  }n&|
dk(  rt        j                   }nt        j                  }t#        | j                  j                               }t%        |j                  d      |||      }|j'                         r|j)                         s,t+        j,                  d       dt.        dd}t        ||       yt1        | j                  j                               }|}|j3                         r/t5        | j                  j                               }t7        |g      }|j9                  |      \  }}d||d}t        ||       yy# t:        $ rJ}t+        j<                  |       t+        j,                  d       dt.        dd}t        ||       Y d}~yd}~ww xY w)z' The subset string to use a on a layer.r8   zInvalid LAYER parameterr:   successr7   )statusfilterpolygonsNFILTER_TYPESQLSAFESQL
EXPRESSIONfilter_by_polygon)filter_typezKThe filter by polygon configuration is not valid.
 All features are hidden.zXAn error occurred when trying to read the filtering by polygon.
All features are hidden.)r   r   r   r   r%   requestHandlerr   r   configFilePathr   r0   r>   r?   r   PlainSqlQuerySafeSqlQueryQgisExpressionr   r   is_filteredis_validr   rH   r   r   is_filtered_by_userr   tuple
subset_sqlrC   log_exception)r+   rL   r3   r4   flaglayerbodycfg
cfg_layers
layer_namefilter_type_paramr[   edition_contextfilter_polygon_configgroupsgroups_or_user
user_loginsqlrU   rO   s                       r"   rE   zLizmapService.polygon_filterh   s    4FGDe24MsSS  "
 &d&7&7&F&F&HIh/   1 1 @ @ BCh/ .c2
h/ ZZ\
Z'h/<	0 &

=" = C C E E)(66"i/(55"l2(77(6601B1B1Q1Q1STO$3+,'	%! %002,557OOfh #,"-$&D
 (h7 /t/@/@/O/O/QRF
 &,N,@@B%:4;L;L;[;[;]%^
).
|)< %:$D$D^$TMC"+"%$,D
 (h7? 3B  		0  #OOkm $%D
  h//		0s!   C>I B
I 	J%A J  J%c                    |}|}i i g i d}t         j                  j                  d      }|d   |d   d<   |d   |d   d<   t         j                  |d   d<   t	        j
                  d	      |d
   d<   t	        j
                  d      |d
   d<   | j                  j                         }g d}|D ](  }	|j                  |	      s|d   j                  |	       * d|d   d<   t               |d   d<   t        ||       y)z$ Get Lizmap Server settings
        )qgisgdalogrserviceslizmap-r   ru   r      r0   version_intNAMErv   VERSION_NUM)WMSWFSWCSWMTSATLASCADASTRErY   r.   rw   Lizmaprx   N)r   QGIS_VERSIONsplitQGIS_VERSION_INTr   VersionInfor%   serviceRegistry
getServiceappendr   r   )
r+   rL   r3   r4   _ri   qgis_version_splitregrw   ss
             r"   rD   z!LizmapService.get_server_settings   s     	
 "..44S9"4Q"7VY1!4VV&*&;&;V]# #'"2"26":Y)-)9)9-)HY&//1] 	+A~~a Z ''*	+ "*Xv$+IXy!D(+r!   )r   r   r   r   r)   rK   r0   r   r   r	   r   rP   r   r   rE   rD   __classcell__)r,   s   @r"   r$   r$   -   s    %7 D c  
$)&6 $)BS $) *$)/3$)L c0sCx.c04Ec0PZc0_cc0 c0J#sCx.#4E#PZ#_c#r!   r$   )'__copyright____license__	__email__rI   typingr   osgeor   	qgis.corer   r   qgis.serverr   r   r	   r
   lizmap_server.corer   r   r   r   r   r   r   r   lizmap_server.exceptionr   lizmap_server.filter_by_polygonr   r   r   r   lizmap_server.loggerr   r   lizmap_server.toolsr   r   r$   r    r!   r"   <module>r      sj   &	    & 	 	 	 1  3 '	 	DJ Dr!   