
    i                    x    d Z ddlm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dZ
ddZddZddZddZddZdS )z;Persistent storage helpers for the Renaiss website runtime.    )annotationsN)Path)AnyFvaluestrdefaultboolreturnc                |    t          | pd                                                                          }|s|S |dv S )N >   1onyestrue)r   striplower)r   r   raws      /app/scripts/website_storage.py_truthyr      sD    
ekr


 
 
"
"
(
(
*
*C ,,,    c                 *    t          j        d          S )Nz%Y%m%d_%H%M%S)timestrftime r   r   
_timestampr      s    =)))r   pathr   c                j    	 t          |                                            S # t          $ r Y dS w xY w)NT)anyiterdir	Exception)r   s    r   _is_empty_dirr!      sB    t||~~&&&&   tts   !$ 
22website_rootc                    t          t          j        d          pd                                                                          }|dk    rt          d          S | dz  S )NAPP_ENVr   serverz/data/RENAISS_WEBSITEdata)r   osgetenvr   r   r   )r"   app_envs     r   default_data_rootr*      s[    ")I&&,"--3355;;==G(+,,,&  r   c                   t          t          j        d          pd                                          }|r3t	          |                                                                          n t          |                                           S )NWEBSITE_DATA_ROOTr   )r   r'   r(   r   r   
expanduserresolver*   )r"   r   s     r   get_website_data_dirr/   &   sn    
bi+,,2
3
3
9
9
;
;C/2a499!!))+++8I,8W8W8_8_8a8aar   dict[str, Any]c                x   | dz                                   }t          |           }t          t          j        dd          d          }||k    r8|                    dd           t          |          t          |          dddS |                    dd           d}|re|                                rQ|                                s=t          |          r.t          j        ||d	           d}t          d
| d|            |                                s|                                r|                                rj|j        t          j        |          z                                   }||k    r!t          |          t          |          d|dS |                                 n@|j        dt!                       z  }|                    |           t          d|            |                    |d           t          d| d|            t          |          t          |          d|dS )zMake website/data point at the configured persistent data root.

    This mirrors the Renaiss World pattern: migrate bundled data once when the
    mounted disk is empty, then keep existing relative frontend paths working.
    r&   WEBSITE_DATA_MIGRATE_ONCEr   T)r   )parentsexist_okF)data_dirwebsite_data_rootusing_symlinkmigrated)dirs_exist_okz)[website-storage] migrated initial data: z -> data_local_backup_z7[website-storage] existing local data moved to backup: )target_is_directoryz[website-storage] linked )r.   r/   r   r'   r(   mkdirr   exists
is_symlinkr!   shutilcopytreeprintparentreadlinkunlinkr   rename
symlink_to)r"   legacy_data_dirtarget_rootmigrate_oncer8   currentbackup_paths          r   setup_website_storagerL   +   s    $f,5577O&|44K29%@#FFPTUUULo%%$666O,,!$[!1!1"	
 
 	
 dT222H ^..00 ^9S9S9U9U ^ZghsZtZt ^DIIII\/\\{\\]]] [?#=#=#?#? [%%'' 	[&-O0L0LLUUWWG+%% #O 4 4),[)9)9%) (	   ""$$$$)03V
3V3VVK"";///YKYYZZZ{EEE	
Ho
H
H;
H
HIII(( --	  r   )F)r   r   r   r	   r
   r	   )r
   r   )r   r   r
   r	   )r"   r   r
   r   )r"   r   r
   r0   )__doc__
__future__r   r'   r?   r   pathlibr   typingr   r   r   r!   r*   r/   rL   r   r   r   <module>rQ      s    A A " " " " " " 				              - - - - -* * * *   ! ! ! !b b b b
3 3 3 3 3 3r   