
    YR
h                     ^    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  G d de          Z	dS )    N)Path)settings)FileSystemStoragec                   ^    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZddZd ZdS )FSDataStoragec                 @    |                      |j        j                  S N)_extract_version_refgeojsonnameselfinstances     8/var/www/html/01_SiteInternet/03_Maps/umap/storage/fs.pyget_reference_versionz#FSDataStorage.get_reference_version   s    (()9)>???    c                     |                      |          }|j        dt          t          j                    dz            d}||z  S )N_i  .geojson)
_base_pathpkinttime)r   r   rootr   s       r   make_filenamezFSDataStorage.make_filename   sF    x(("*+++s49;;3E/F/F/F/FGd{r   c                                                      }                     |          d         } fd|D             } fd|D             }|                    dt          j        d                     |S )N   c                 @    g | ]}                     |          |S  )_is_valid_version.0r   r   r   s     r   
<listcomp>z/FSDataStorage.list_versions.<locals>.<listcomp>   s.    RRR$4+A+A$+Q+QRRRRr   c                 <    g | ]}                     |          S r   )_version_metadatar!   s     r   r#   z/FSDataStorage.list_versions.<locals>.<listcomp>   s)    MMMtD**4::MMMr   Tat)reversekey)r   listdirsortoperator
itemgetter)r   r   r   namesversionss   ``   r   list_versionszFSDataStorage.list_versions   s    x((T""1%RRRRR%RRRMMMMMuMMMd(;D(A(ABBBr   c                     |                      |                     ||          d          5 }|                                cd d d            S # 1 swxY w Y   d S )Nr)openget_version_pathread)r   refr   fs       r   get_versionzFSDataStorage.get_version   s    YYt,,S(;;SAA 	Q6688	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                 &   t          t          j                  |                     |          z  }||j         d| dz  }|j        r$|                                s||j         d| dz  }|                                st          d|           |S )Nr   r   zInvalid version reference: )r   r   
MEDIA_ROOTr   r   old_idexists
ValueError)r   r5   r   	base_pathfullpaths        r   r3   zFSDataStorage.get_version_path   s    ,--0I0II	(+======? 	F8??#4#4 	F ho#E#E#E#E#EEH   	B@3@@AAAr   c                 r    |                      |           |                     |t          j                   d S N)keep)_purge_gzip_purge_old_versionsr   UMAP_KEEP_VERSIONSr   s     r   onDatalayerSavezFSDataStorage.onDatalayerSave(   s8    """  0K LLLLLr   c                 ^    |                      |           |                     |d            d S r@   )rB   rC   r   s     r   onDatalayerDeletezFSDataStorage.onDatalayerDelete,   s5    """   55555r   c                 z    |                     d          d         }d|v r|                     d          d         S |S )N.r   r   )split)r   pathversions      r   r
   z"FSDataStorage._extract_version_ref0   s;    **S//!$'>>==%%b))r   c                    dt          |j        j                  d         g}t          t          |j        j                            dk    r2|                    t          |j        j                  d                    |                    t          |j        j                             t          t          j        j        |           S )N	datalayerrJ   r   )	strmapr   lenappendr   osrL   join)r   r   rL   s      r   r   zFSDataStorage._base_path6   s    S11"56s8<?##$$q((KKHLO,,R0111C(()))BGL$'(((r   c                     |                     d|j        z            g}|j        r0|                    |                     d|j        z                       t	          |          o|                    d          S )Nz%s_r   )
startswithr   r:   rT   anyendswith)r   r   r   valid_prefixess       r   r    zFSDataStorage._is_valid_version=   sn    //%(+*=>>?? 	L!!$//%(/2I"J"JKKK>""@t}}Z'@'@@r   c                     |                      |          }||||                     |                     |          |z            dS )N)r   r5   r&   size)r
   r]   r   )r   r   r   r5   s       r   r%   zFSDataStorage._version_metadataC   sM    ''--IIdooh77$>??	
 
 	
r   Nc                 "   |                      |          }|                     |          }|
||d          }|D ]U}|d         }| |j        j                            |          r,	 |                     ||z             F# t          $ r Y Rw xY wd S )Nr   )r   r/   r   r   rZ   deleteFileNotFoundError)r   r   rA   r   r.   rM   r   s          r   rC   z!FSDataStorage._purge_old_versionsL   s    x((%%h//H 		 		G6?D H$4$9$B$B4$H$HD4K(((($   		 		s   &A??
BBc                 p   |                      |          }|                     |          d         }|j         dg}|j        r|                    |j         d           t          |          }|D ]D}|                    |          r-|                    d          r|                     ||z             Ed S )Nr   r   z.gz)	r   r)   r   r:   rT   tuplerX   rZ   r_   )r   r   r   r-   prefixesr   s         r   rB   zFSDataStorage._purge_gzip\   s    x((T""1%{%%%&? 	3OOx111222?? 	) 	)Dx(( )T]]5-A-A )D4K(((	) 	)r   r	   )__name__
__module____qualname__r   r   r/   r7   r3   rE   rG   r
   r   r    r%   rC   rB   r   r   r   r   r   
   s        @ @ @  
      M M M6 6 6  ) ) )A A A
 
 
    	) 	) 	) 	) 	)r   r   )
r+   rU   r   pathlibr   django.confr   django.core.files.storager   r   r   r   r   <module>rj      s     				                    7 7 7 7 7 7[) [) [) [) [)% [) [) [) [) [)r   