o
    |	fu                  
   @   s  U d dl Z d dlZd dlZd dlZd dlmZmZmZ d dlZd dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ dZd	Zd
ZdZdZdddZeeef ed< eed< e
ed< eed< i aeeef ed< e Ze ZdededefddZe ddd Z!e ddd Z"e#de$de#de$dd d! Z%e#d"e$d"e#d"e$d"d#d$ Z&e#d%e$d%e#d%e$d%d&efd'dZ'e#d(e$d(d&ed)e(d*e(d+e(fd,d-Z)e#d(e$d(d&ed)e(d*e(d+e(fd.d/Z*dS )0    N)FastAPIResponseHTTPException)Config)Kiln)Tile)Tileset)Storagez%a, %d %b %Y %H:%M:%S GMTz"application/vnd.mapbox-vector-tileTILEKILN_CONFIGTILEKILN_URLTILEKILN_THREADS*z	GET, HEAD)zAccess-Control-Allow-OriginzAccess-Control-Allow-MethodsSTANDARD_HEADERSkilnconfigstoragetilesetstilejsonbaseurlreturnc                 C   s"   t | }|d g|d< t |S )Nz/{z}/{x}/{y}.mvttiles)jsonloadsdumps)r   r   modified_tilejson r   Q/home/ertert/spirit/venv/lib/python3.10/site-packages/tilekiln/server/__init__.pychange_tilejson_url(   s   

r   startupc                  C   s2   t jddd} t| at D ]}|t|j< qdS )z=Load the config for the server with static pre-rendered tiles   )min_sizemax_sizeN)psycopg_poolConnectionPoolr	   r   get_tilesetsr   id)pooltilesetr   r   r   load_server_config.   s
   r(   c                  C   s   t tjt ai } dtjv rtjd | d< dtjv r"tjd | d< dtjv r.tjd | d< dtjv r:tjd | d< i }d	tjv rHtjd	 |d< d
tjv rTtjd
 |d< dtjv r`tjd |d< dtjv rltjd |d< tjdd|d}t|a	t
t	tttj< tjdi | }tt|ad S )NGENERATE_PGDATABASEdbnameGENERATE_PGHOSThostGENERATE_PGPORTportGENERATE_PGUSERusernameSTORAGE_PGDATABASESTORAGE_PGHOSTSTORAGE_PGPORTSTORAGE_PGUSERr   )r    r!   kwargsr   )tilekilnload_configosenvironr
   r   r"   r#   r	   r   r   from_configr   r%   psycopgconnectr   r   )generate_argsstorage_argsstorage_poolconnr   r   r   load_live_config<   s0   







rA   /c                   C   s
   t dd)N  )status_code)r   r   r   r   r   roota   s   
rE   z/favicon.icoc                   C   s   t dS )N )r   r   r   r   r   faviconi   s   rG   z/{prefix}/tilejson.jsonprefixc                 C   sF   | t vrtdd|  ddttt |  jtjt d|   dtdS )NrC   Tileset  not found on server.rD   detailrB   zapplication/json)content
media_typeheaders)	r   r   r   r   r   r8   r9   r   r   )rH   r   r   r   r   q   s   z/{prefix}/{zoom}/{x}/{y}.mvtzoomxyc                 C   s   | t vrtdd|  ddt |  t|||\}}|d u r2tdd|  d| d| d| d	di }|d urC|t|dd	}t|tt|B d
S )NrC   rI   rJ   rK   zTile rB   z not found in storage.%s.%fzLast-ModifiedzE-tagrN   rO   )	r   r   get_tiler   strftime	HTTP_TIMEr   MVT_MIME_TYPEr   )rH   rP   rQ   rR   tile	generatedrO   r   r   r   
serve_tile   s   r\   c           	      C   s   | t vrtdd|  ddt |  t|||\}}|d ur9i }|d ur0|t|dd}t|tt|B dS t|||}t	
|}t |  ||}|d ur[|t|dd}t|tt|B dS )NrC   rI   rJ   rK   rS   rT   rU   )r   r   rV   r   rW   rX   r   rY   r   r   render	save_tile)	rH   rP   rQ   rR   existingr[   rO   rZ   responser   r   r   live_serve_tile   s.   
ra   )+r   r8   r;   r"   fastapir   r   r   r6   tilekiln.configr   tilekiln.kilnr   tilekiln.tiler   tilekiln.tilesetr   tilekiln.storager	   rX   rY   r
   r   r   r   dictstr__annotations__r   serverliver   on_eventr(   rA   headgetrE   rG   r   intr\   ra   r   r   r   r   <module>   sf   
 

$
"