o
    fh,                  	   @   s   d dl mZ G dd dZd dlZd dlZd dlZdd ZG dd dZejd	kr9G d
d deZ	G dd deZ
G dd deZG dd dZdd Zdd Zg dZdddddddddZd dlZd d! Zd"d# ZG d$d% d%ZdS )&    )longc                   @   s^   e Zd Zdd Zdd ZdddZdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd ZdS )abstract_filesystemc                 C      d S N selfr   r   L/var/www/html/venv/lib/python3.10/site-packages/supervisor/medusa/filesys.py__init__      zabstract_filesystem.__init__c                 C      dS )z3Return a string representing the current directory.Nr   r   r   r   r	   current_directory      z%abstract_filesystem.current_directoryr   c                 C   r   )zReturn a listing of the directory at 'path' The empty string
        indicates the current directory.  If 'long' is set, instead
        return a list of (name, stat_info) tuples
        Nr   r   pathr   r   r   r	   listdir   s   zabstract_filesystem.listdirc                 C   r   )zReturn an open file objectNr   )r   r   moder   r   r	   open"   r   zabstract_filesystem.openc                 C   r   )z5Return the equivalent of os.stat() on the given path.Nr   r   r   r   r   r	   stat&   r   zabstract_filesystem.statc                 C   r   )z$Does the path represent a directory?Nr   r   r   r   r	   isdir*   r   zabstract_filesystem.isdirc                 C   r   )z%Does the path represent a plain file?Nr   r   r   r   r	   isfile.   r   zabstract_filesystem.isfilec                 C   r   )zChange the working directory.Nr   r   r   r   r	   cwd2   r   zabstract_filesystem.cwdc                 C   r   )z.Change to the parent of the current directory.Nr   r   r   r   r	   cdup6   r   zabstract_filesystem.cdupc                 C   r   )z[Return a 'long' representation of the filename
        [for the output of the LIST command]Nr   r   r   r   r	   longify;   s   zabstract_filesystem.longifyNr   )__name__
__module____qualname__r
   r   r   r   r   r   r   r   r   r   r   r   r   r	   r      s    
r   Nc                 C   s   z| t | fW S    Y d S r   )osr   )r   r   r   r	   	safe_statN   s   r    c                   @   s   e Zd ZejZdZd'ddZdd Zdd Z	d	d
 Z
dd Zdd Zd(ddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&S ))os_filesystem   /c                 C      || _ || _d S r   rootwd)r   r&   r'   r   r   r	   r
   [      
zos_filesystem.__init__c                 C   s   | j S r   )r'   r   r   r   r	   r   _   s   zos_filesystem.current_directoryc                 C   (   |  | j| j|}| j| |S r   )	normalizepath_modulejoinr'   r   	translater   r   pr   r   r	   r   b      zos_filesystem.isfilec                 C   r)   r   )r*   r+   r,   r'   r   r-   r.   r   r   r	   r   f   r0   zos_filesystem.isdirc              	   C   s   |  | j| j|}| |}| j|sdS t }d}zzt| d}|| _W n   Y W |r8t| |S |rBt| w w )Nr   r"   )	r*   r+   r,   r'   r-   r   r   getcwdchdir)r   r   r/   translated_pathold_dircanr   r   r	   r   j   s(   



zos_filesystem.cwdc                 C   s
   |  dS )Nz..)r   r   r   r   r	   r      s   
zos_filesystem.cdupr   c              	   C   sp   |  |}t|}|st|d S t }zt| dd tt|D }W t| nt| w t|| jS )Nc                 S   s   g | ]}|r|qS r   r   ).0_fr   r   r	   
<listcomp>       z)os_filesystem.listdir.<locals>.<listcomp>)	r-   r   r   list_producerr1   r2   mapr    r   )r   r   r   r/   ldr4   resultr   r   r	   r      s   



zos_filesystem.listdirc                 C      |  |}t|S r   )r-   r   r   r.   r   r   r	   r         

zos_filesystem.statc                 C   s   |  |}t||S r   )r-   r   )r   r   r   r/   r   r   r	   r      r?   zos_filesystem.openc                 C   r>   r   )r-   r   unlinkr.   r   r   r	   r@      r?   zos_filesystem.unlinkc                 C   r>   r   )r-   r   mkdirr.   r   r   r	   rA      r?   zos_filesystem.mkdirc                 C   r>   r   )r-   r   rmdirr.   r   r   r	   rB      r?   zos_filesystem.rmdirc                 C   s   t | || |S r   )r   renamer-   )r   srcdstr   r   r	   rC      s   zos_filesystem.renamec                 C   s>   t dd|}| j|}t|dkr|d d dkrd}|S )Nz/+r#         z/..)resubr+   normpathlenr.   r   r   r	   r*      s
   zos_filesystem.normalizec                 C   sJ   t j|d}| | j| j|}| | j| j|dd  }|S )Nr#   r"   )r   sepr,   splitr*   r+   r'   r&   r.   r   r   r	   r-      s   zos_filesystem.translatec                 C      |\}}t ||S r   )unix_longifyr   path_stat_info_tupler   	stat_infor   r   r	   r         
zos_filesystem.longifyc                 C   s   d| j | jf S )Nz<unix-style fs root:%s wd:%s>r%   r   r   r   r	   __repr__   s   zos_filesystem.__repr__N)r#   r   )r   r   r   r   r   r+   do_globbingr
   r   r   r   r   r   r   r   r   r@   rA   rB   rC   r*   r-   r   rT   r   r   r   r	   r!   T   s(    

	
r!   posixc                   @   s   e Zd ZdS )unix_filesystemN)r   r   r   r   r   r   r	   rW      s    rW   c                   @   sh   e Zd Ze Ze Ze Z	e
 ZdddZdd Zdd Zd	d
 Zdd Zdd ZdddZdS )schizophrenic_unix_filesystemr#   NNc                 C   s   t | || || _d S r   )r!   r
   persona)r   r&   r'   rZ   r   r   r	   r
      s   
z&schizophrenic_unix_filesystem.__init__c                 C   s0   | j dkr| j \}}t| t| d S d S NrY   )rZ   r   setegidseteuid)r   uidgidr   r   r	   become_persona   s
   


z,schizophrenic_unix_filesystem.become_personac                 C   s*   | j dkrt| j t| j d S d S r[   )rZ   r   r]   PROCESS_UIDr\   PROCESS_GIDr   r   r   r	   become_nobody   s   
z+schizophrenic_unix_filesystem.become_nobodyc                 C   s*   z|    t| |W |   S |   w r   )r`   r!   r   rc   r   r   r   r	   r      s   z!schizophrenic_unix_filesystem.cwdc                 C   s(   z|    t| W |   S |   w r   )r`   r!   r   rc   r   r   r   r	   r      s   
z"schizophrenic_unix_filesystem.cdupc                 C   ,   z|    t| ||W |   S |   w r   )r`   r!   r   rc   )r   filenamer   r   r   r	   r         z"schizophrenic_unix_filesystem.openr   c                 C   rd   r   )r`   r!   r   rc   r   r   r   r	   r      rf   z%schizophrenic_unix_filesystem.listdirN)r#   rY   r   )r   r   r   r   getuidra   geteuidPROCESS_EUIDgetgidrb   getegidPROCESS_EGIDr
   r`   rc   r   r   r   r   r   r   r   r	   rX      s    
rX   c                   @      e Zd Zdd ZdS )msdos_filesystemc                 C   rN   r   )msdos_longifyrP   r   r   r	   r     rS   zmsdos_filesystem.longifyN)r   r   r   r   r   r   r   r	   rn         rn   c                   @   rm   )merged_filesystemc                 G   r   r   r   )r   fsysr   r   r	   r
     r   zmerged_filesystem.__init__N)r   r   r   r
   r   r   r   r	   rq     rp   rq   c                 C   s>   t |t j rd}nd}t|t j }d|||t j | f S )Nz<DIR>z     z%s       %s %8d %s)r   S_ISDIRST_MODE
msdos_dateST_MTIMEST_SIZE)filerR   dirdater   r   r	   ro     s   ro   c                 C   sl   zt | }W n	   t d}Y |d }|dkr d}|d8 }nd}d|d |d	 |d d
 ||d |f S )Nr   rG      PM   AMz%02d-%02d-%02d  %02d:%02d%sr"   rF   d      )timegmtime)tinfohourmeridr   r   r	   ru   '  s"   

ru   )JanFebMarAprMayJunJulAugSepOctNovDecz---z--xz-w-z-wxzr--zr-xzrw-rwx)01234567c              	   C   s   d|t j  dd  }ddd |D }t |t j r d}nd}ttt |t j }d|||t j |t j	 |t j
 |t j || f S )	Nz%o c                 S   s   g | ]}t | qS r   )
mode_table)r6   xr   r   r	   r8   O  r9   z unix_longify.<locals>.<listcomp>d-z%s%s %3d %-8d %-8d %8d %s %s)r   rt   r,   rs   ls_dater   r   rv   ST_NLINKST_UIDST_GIDrw   )rx   rR   r   dircharrz   r   r   r	   rO   L  s    rO   c                 C   sx   zt |}W n	   t d}Y | | dkr(dt|d d  |d |d f S dt|d d  |d |d |d f S )	Nr   i	 z
%s %2d  %dr"   rF   z%s %2d %02d:%02drG   r   )r   r   months)nowr   r   r   r   r	   r   g  s    r   c                   @   s   e Zd ZdddZdd ZdS )r:   Nc                 C   r$   r   )listfunc)r   r   r   r   r   r	   r
     r(   zlist_producer.__init__c                 C   sL   | j sdS | j d d }| jd urt| j|}| j dd  | _ d|d S )Nr   2   z
)r   r   r;   r,   )r   bunchr   r   r	   more  s   
zlist_producer.morer   )r   r   r   r
   r   r   r   r   r	   r:     s    
r:   )supervisor.compatr   r   r   r   rH   r    r!   namerW   rX   rn   rq   ro   ru   r   r   r   rO   r   r:   r   r   r   r	   <module>   s8   7
v7