Ë
    ^]+jL  ã                   ó<   — d Z ddlZddlZddlZddlZ G d„ d«      Zy)z(File operations utility - Cross Platformé    Nc                   óV   — e Zd ZdZedd„«       Zedd„«       Zedd„«       Zed„ «       Zy)	Ú	FileUtilsz/Handles file operations with proper permissionsc                 óÞ   — 	 t        j                  | d¬«       t        j                  «       dk7  rt        j                  | |«       yy# t
        $ r}t        d| › d|› �«       Y d}~yd}~ww xY w)z9Create directory with proper permissions (platform-aware)T)Úexist_okÚWindowsz$Warning: Could not create directory z: N)ÚosÚmakedirsÚplatformÚsystemÚchmodÚ	ExceptionÚprint)ÚpathÚmodeÚes      ú2/var/www/html/moneyHeistClient/utils/file_utils.pyÚensure_directoryzFileUtils.ensure_directory   se   € ð	FÜ�K‰K˜ tÕ,ô �‰Ó  IÒ-Ü—‘˜˜tÕ$ð .øäò 	FÜÐ8¸¸¸bÀÀÐD×EÑEûð	Fús   ‚AA Á	A,ÁA'Á'A,c                 óä  — t         j                  t        j                  j	                  |«      «       t        j                  | |«       t        j                  «       dk7  rJ	 t        j                  ||«       t        j                  t        j                  j	                  |«      |«       t        j                  «       dk7  rt        j                  «        t        j                  d«       y#  Y ŒExY w)z4Copy file with specific permissions (platform-aware)r   gš™™™™™¹?N)r   r   r   r   ÚdirnameÚshutilÚcopy2r
   r   r   ÚsyncÚtimeÚsleep)ÚsrcÚdstr   s      r   Úcopy_file_with_permissionsz$FileUtils.copy_file_with_permissions   s�   € ô 	×"Ñ"¤2§7¡7§?¡?°3Ó#7Ô8ô 	�‰�S˜#Ôô �?‰?Ó 	Ò)ðÜ—‘˜˜dÔ#Ü—‘œŸ™Ÿ™¨Ó-¨tÔ4ô
 �?‰?Ó 	Ò)Ü�G‰GŒIä�
‰
�3�øðÙús   Á!A	C+ Ã+C/c                 ód  — t        j                   «       }d}t        j                   «       |z
  |k  r|t        j                  j                  | «      syt        j                  j	                  | «      }||k(  r|dkD  ry|}t        j
                  d«       t        j                   «       |z
  |k  rŒ||dkD  S )z(Check if file is fully written and readyéÿÿÿÿFr   Tg      à?)r   r   r   ÚexistsÚgetsizer   )Ú	file_pathÚtimeoutÚ
start_timeÚ	last_sizeÚcurrent_sizes        r   Úis_file_readyzFileUtils.is_file_ready.   s�   € ô —Y‘Y“[ˆ
Øˆ	ä�i‰i‹k˜JÑ&¨Ò0Ü—7‘7—>‘> )Ô,ØäŸ7™7Ÿ?™?¨9Ó5ˆLØ˜yÒ(¨\¸AÒ-=Øà$ˆIÜ�J‰J�sŒOô �i‰i‹k˜JÑ&¨Ó0ð ˜1‰}Ðó    c                 ó@   — t         j                  j                  | «      S )z#Normalize path for current platform)r   r   Únormpath)r   s    r   Únormalize_pathzFileUtils.normalize_pathA   s   € ô �w‰w×Ñ Ó%Ð%r(   N)iÿ  )é   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr   r   r'   r+   © r(   r   r   r      sU   „ Ù9àò	Fó ð	Fð òó ðð, òó ðð$ ñ&ó ñ&r(   r   )r0   r   r   r   r
   r   r2   r(   r   ú<module>r3      s   ðÙ .ã 	Û Û Û ÷<&ò <&r(   