o
    pf>                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dl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ZG dd dejZejed	d
d Ze dd Ze ejddejddddd Ze ejddejdddejdejdejddejddejdejddejdejdddd Ze dd Ze ejddejdddejdd ee  d dd!d"ed#ed$ed%ed&ed'ed(ed)ed*d+d, Z!e d-d. Z"e" ejddejddded'ed(ed)ed*ejd/d0d1d2d3 Z#e" ejdejddded'ed(ed)ed*ejd/d0d1d4d5 Z$e" ejdejddded'ed(ed)ed*ejddejdd6ejd/d0d1d7d8 Z%e" ejdejddded'ed(ed)ed*ejd/d0d1d9d: Z&e ejddejdddejd;d<dd=d"ejd>d?dejd@dAejdd ee  d dd!d"ed#ed$ed%ed&ejdBdCd1ejd/d0d1dDdE Z'e ejddejdddejd;d<ddFd"ejd>d?dejd@dAejdd ee  d dd!d"ed#ed$ed%ed&ed'ed(ed)ed*ejdBdCd1dGdH Z(e ejd;d<ddFd"ejd>d?dejd@dAejdd ee  d dd!d"ed'ed(ed)ed*ejdBdCd1dIdJ Z)e ejd;dKddFd"ejd>edejd@dAed'ed(ed)ed*dLdM Z*dS )N    N)Tile)Tileset)Storage)Kilni'  c                   @   s$   e Zd Zdejdee fddZdS )OrderCommandsctxreturnc                 C   s
   t | jS N)listcommands)selfr    r   R/home/ertert/spirit/venv/lib/python3.10/site-packages/tilekiln/scripts/__init__.pylist_commands   s   
zOrderCommands.list_commandsN)__name__
__module____qualname__clickContextr
   strr   r   r   r   r   r      s    r   )clsc                   C   s   d S r	   r   r   r   r   r   cli   s   r   c                   C      dS )z,Commands to work with and check config filesNr   r   r   r   r   config"   s   r   z--configT)exists)requiredtypec                 C   s   t |  dS )zTests a config for validity.

    The process will exit with exit code 0 if tilekiln can load the config.

    This is intended for build and CI scripts used by configs.
    N)tilekilnload_config)r   r   r   r   test(   s   	r   z--layer)r   z--zoomz-z)r   r   z-xz-yc                 C   s   t | }|du r!|t|||D ]}t| qtd dS |jD ]9}|j	|kr]|
t|||}|du rStjd| d|j d|j d| d	dd	 td
 t| td q$tjd| ddd	 td
 dS )zPrint the SQL for a tile or layer.

    Prints the SQL that would be issued to generate a particular tile layer,
    or if no layer is given, the entire tile. This allows manual debugging of
    a tile query.
    Nr   zZoom z not between min zoom z and max zoom z for layer .T)err   zLayer 'z' not found in configuration)r   r   layer_queriesr   r   echosysexitlayersid
render_sqlminzoommaxzoom)r   layerzoomxycsqllcr   r   r   r1   4   s,   





r1   c                   C   r   )zCommands for tile generation.

    All tile generation commands run queries against the source database which has the
    geospatial data
    Nr   r   r   r   r   generateW   s   r3   z-nz--num-threadszNumber of worker processes.)defaultshow_defaulthelpz--source-dbnamez--source-hostz--source-portz--source-usernamez--storage-dbnamez--storage-hostz--storage-portz--storage-usernamec
                 C   s   t | }
dd tjD }t|t|}tdt| d| d tj	||||	dd}t
|}t||
}tj||||d}t|
|}|D ]}||}||| qGd	S )
zGenerate specific tiles.

    A list of z/x/y tiles is read from stdin and those tiles are generated and saved
    to storage.
    c                 S      h | ]}t |qS r   r   from_string.0tr   r   r   	<setcomp>w       ztiles.<locals>.<setcomp>z
Rendering z tiles over z threadsdbnamehostportuserkwargs)r@   rA   rB   usernameN)r   r   r%   stdinminlenr   r$   psycopg_poolNullConnectionPoolr   r   from_configpsycopgconnectr   render	save_tile)r   num_threadssource_dbnamesource_hostsource_portsource_usernamestorage_dbnamestorage_hoststorage_portstorage_usernamer0   tilesthreadspoolstoragetilesetgen_connkilntilemvtr   r   r   rZ   a   s&   



rZ   c                   C   r   )zzCommands working with tile storage.

    These commands allow creation and manipulation of the tile storage database.
    Nr   r   r   r   r   r]      s   r]   z--idzOverride YAML config ID)r6   c           
      C   sP   t | }tj||||dd}t|}|  t||}	|	  |	  dS )zInitialize storage for tiles.

    Creates the storage for a tile layer and stores its metadata in the database.
    If the metadata tables have not yet been created they will also be setup.
    r?   rD   N)
r   r   rJ   rK   r   create_schemar   rL   prepare_storageclose)
r   rV   rW   rX   rY   r(   r0   r\   r]   r^   r   r   r   init   s   

rf   c           	      C   sj   | du r|du rt dd}|du rt| }|j}tj||||dd}t|}|| |	  dS )z Destroy storage for tilesN+Missing one of '--id' or '--config' optionsr?   rD   )
r   
UsageErrorr   r   r(   rJ   rK   r   remove_tilesetre   )	r   rV   rW   rX   rY   r(   r0   r\   r]   r   r   r   destroy   s   	



rj   )r   multiplec           
      C   s   | du r|du rt dd}|du rt| }|j}tj||||dd}t|}	|dkr4|	| n|	|| |	  dS )zfMass-delete tiles from a tileset

    Deletes tiles from a tileset, by zoom, or delete all zooms.
    Nrg   r?   rD   r   )
r   rh   r   r   r(   rJ   rK   r   truncate_tablesre   )
r   rV   rW   rX   rY   r-   r(   r0   r\   r]   r   r   r   delete   s    


rm   c           
      C   s   | du r|du rt dd}|du rt| }|j}tj||||dd}t|}dd tj	D }	t 
dt|	 d |||	 dS )	zDelete specific tiles.

    A list of z/x/y tiles is read from stdin and those tiles are deleted from
    storage. The entire list is read before deletion starts.
    Nrg   r?   rD   c                 S   r7   r   r8   r:   r   r   r   r=     r>   ztiledelete.<locals>.<setcomp>z	Deleting z tiles)r   rh   r   r   r(   rJ   rK   r   r%   rG   r$   rI   delete_tiles)
r   rV   rW   rX   rY   r(   r0   r\   r]   rZ   r   r   r   
tiledelete   s   


ro   z--bind-hostz	127.0.0.1zBind socket to this host.z--bind-porti@  zBind socket to this port.)r4   r5   r   r6   z
--base-urlz;Defaults to http://127.0.0.1:8000 or the bind host and portc
           
      C   s   | t jtjj< |	pt| jt jtjj< |dur |t jtjj< nd| d| t jtjj< |dur6|t jd< |dur?|t jd< |durH|t jd< |durQ|t jd< t	j
d|||d	 dS )
z$Starts a server for development
    Nhttp://:
PGDATABASEPGHOSTPGPORTPGUSERztilekiln.dev:devrA   rB   workers)osenvironr   devTILEKILN_CONFIGr   r(   TILEKILN_IDTILEKILN_URLuvicornrun)
r   	bind_host	bind_portrQ   rR   rS   rT   rU   base_urlr(   r   r   r   rz     s   



rz   zBind socket to this host. c                 C   s   | t jtjj< t|t jtjj< |dur|t jtjj< nd| d| t jtjj< |dur2|t jd< |dur;|t jd< |durD|t jd< |durM|t jd< |durV|t jd< |	dur_|	t jd	< |
durh|
t jd
< |durq|t jd< t	j
d|||d dS )/Starts a server for pre-generated tiles from DBNrp   rq   GENERATE_PGDATABASEGENERATE_PGHOSTGENERATE_PGPORTGENERATE_PGUSERSTORAGE_PGDATABASESTORAGE_PGHOSTSTORAGE_PGPORTSTORAGE_PGUSERztilekiln.server:liverv   )rx   ry   r   serverr{   r   TILEKILN_THREADSrz   r}   r~   r   )r   r   r   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r   r   r   r   live7  s,   







r   c                 C   s   t |tjtjj< |dur|tjtjj< nd|  d| tjtjj< |dur+|tjd< |dur4|tjd< |dur=|tjd< |durF|tjd< tj	d| ||d	 dS )
r   Nrp   rq   rr   rs   rt   ru   ztilekiln.server:serverrv   )
r   rx   ry   r   r   r   rz   r}   r~   r   )r   r   rQ   rV   rW   rX   rY   r   r   r   r   servei  s   



r   z0.0.0.0c           	      C   sT   t j||||dd}t|}ddlm} td|  d| d ||| |d d	S )
z` Run a prometheus exporter which can be accessed for gathering metrics
        on stored tiles. r?   rD   r   )serve_prometheusz&Running prometheus exporter on http://rq   /   N)rJ   rK   r   tilekiln.prometheusr   r   r$   )	r   r   rV   rW   rX   rY   r\   r]   r   r   r   r   
prometheus  s   
r   )+rx   r%   r   rM   rJ   r~   r   tilekiln.devtilekiln.servertilekiln.tiler   tilekiln.tilesetr   tilekiln.storager   tilekiln.kilnr   PROMETHEUS_PORTGroupr   groupr   r   commandoptionPathr   STRINGINTr1   r3   rI   sched_getaffinityrZ   r]   rf   rj   rm   ro   rz   r   r   r   r   r   r   r   <module>   s&   




	




$ 



