U
    TGh	                     @   s   d dl Z d dlmZmZ d dlmZmZmZ d dlmZm	Z	 d dl
mZmZmZmZmZmZmZ d dlmZ eeef eddd	ZG d
d de jZeG dd dZeddG dd dZeedddZG dd deZG dd deZdS )    N)ABCabstractmethod)asdict	dataclassis_dataclass)datetimetimezone)DictIteratorListOptionalSequenceTupleUnion)
QgsProject)dtreturnc                 C   s(   t | trt| } | tjjddS )NZmilliseconds)Ztimespec)
isinstancefloatr   ZfromtimestampZ
astimezoner   ZutcZ	isoformat)r    r   >/var/www/lizmap/lizmap/plugins/lizmap_server/context/common.py
to_iso8601   s    

r   c                       s   e Zd Z fddZ  ZS )DataclassEncoderc                    s   t |rt|S t |S N)r   r   superdefault)selfo	__class__r   r   r      s    zDataclassEncoder.default)__name__
__module____qualname__r   __classcell__r   r   r   r   r      s   r   c                   @   s6   e Zd ZU eed< eed< eed< eed< eed< dS )CatalogItemurinameZstoragelast_modifiedZ
public_uriN)r    r!   r"   str__annotations__r   r   r   r   r$      s
   
r$   T)frozenc                   @   sF   e Zd ZU eed< eed< eed< dZee ed< dZ	ee ed< dS )ServerMetadatar&   version	is_stableNbuild_id	commit_id)
r    r!   r"   r(   r)   boolr.   r   intr/   r   r   r   r   r+   "   s
   
r+   )r   r   c                 C   s   t j| tdS )N)cls)jsondumpsr   )r   r   r   r   model_dump_json+   s    r5   c                       s*   e Zd Zdeee d fddZ  ZS )ProjectCacheErrorN)codemsgc                    s   t  | || _|| _d S r   )r   __init__r8   r7   )r   r7   r8   r   r   r   r9   0   s    zProjectCacheError.__init__)N)r    r!   r"   r1   r   r(   r9   r#   r   r   r   r   r6   /   s   r6   c                   @   s   e Zd ZeeedddZeeedddZeeedddZeee	e ddd	Z
eeed
ddZedee e	e dddZedee ee eeeef  dddZeeee dddZdS )
ContextABC)r   c                 C   s   dS )z Return context name
        Nr   r   r   r   r   r&   8   s    zContextABC.namec                 C   s   dS )z# Return Git repository URL
        Nr   r;   r   r   r   git_repository_url?   s    zContextABC.git_repository_urlc                 C   s   dS )z" Return documentation URL
        Nr   r;   r   r   r   documentation_urlF   s    zContextABC.documentation_urlc                 C   s   dS )z* Return search paths for projects
        Nr   r;   r   r   r   search_pathsM   s    zContextABC.search_paths)r%   r   c                 C   s   dS )z/ Return the project specified by `uri`
        Nr   )r   r%   r   r   r   projectT   s    zContextABC.projectN)search_pathr   c                 C   s   dS )z% Return the projects catalog
        Nr   )r   r@   r   r   r   catalogZ   s    zContextABC.catalog)keysunknown_defaultr   c                 C   s   dS )z* return installed plugin metadata
        Nr   )r   rB   rC   r   r   r   installed_plugins`   s    zContextABC.installed_pluginsc                 C   s   dS )zX Return server metadata if the server
            is not a native (FCGI) server
        Nr   r;   r   r   r   metadataj   s    zContextABC.metadata)N)N)r    r!   r"   propertyr   r(   r&   r<   r=   r   r>   r   r?   r   r$   rA   r   r
   r   r	   rD   r+   rE   r   r   r   r   r:   6   s4    	r:   )r3   abcr   r   Zdataclassesr   r   r   r   r   typingr	   r
   r   r   r   r   r   	qgis.corer   r   r(   r   JSONEncoderr   r$   r+   r5   	Exceptionr6   r:   r   r   r   r   <module>   s   $