
    kch,              	          d dl mZ  G d d      Zd dlZd dlZd dlZd Z G d d      Zej                  dk(  r G d	 d
e      Z	 G d de      Z
 G d de      Z G d d      Zd Zd Zg dZdddddddddZd dlZd Zd Z G d d       Zy)!    )longc                   J    e Zd Zd Zd ZddZd Zd Zd Zd Z	d Z
d	 Zd
 Zy)abstract_filesystemc                      y N selfs    ;/usr/lib/python3/dist-packages/supervisor/medusa/filesys.py__init__zabstract_filesystem.__init__           c                      y)z3Return a string representing the current directory.Nr   r	   s    r   current_directoryz%abstract_filesystem.current_directory       r   c                      y)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   s      r   listdirzabstract_filesystem.listdir   s    
 	r   c                      y)zReturn an open file objectNr   )r
   r   modes      r   openzabstract_filesystem.open"   r   r   c                      y)z5Return the equivalent of os.stat() on the given path.Nr   r
   r   s     r   statzabstract_filesystem.stat&   r   r   c                      y)z$Does the path represent a directory?Nr   r   s     r   isdirzabstract_filesystem.isdir*   r   r   c                      y)z%Does the path represent a plain file?Nr   r   s     r   isfilezabstract_filesystem.isfile.   r   r   c                      y)zChange the working directory.Nr   r   s     r   cwdzabstract_filesystem.cwd2   r   r   c                      y)z.Change to the parent of the current directory.Nr   r	   s    r   cdupzabstract_filesystem.cdup6   r   r   c                      y)z[Return a 'long' representation of the filename
        [for the output of the LIST command]Nr   r   s     r   longifyzabstract_filesystem.longify;   s     	r   Nr   )__name__
__module____qualname__r   r   r   r   r   r   r   r!   r#   r%   r   r   r   r   r      s4    
r   r   Nc                 @    	 | t        j                  |       fS #  Y y xY wr   )osr   )r   s    r   	safe_statr,   N   s$    RWWd^##s    c                       e Zd Zej                  ZdZddZd Zd Z	d Z
d Zd ZddZd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zy)os_filesystem   c                      || _         || _        y r   rootwd)r
   r2   r3   s      r   r   zos_filesystem.__init__[   s    	r   c                     | j                   S r   )r3   r	   s    r   r   zos_filesystem.current_directory_   s    wwr   c                     | j                  | j                  j                  | j                  |            }| j                  j	                  | j                  |            S r   )	normalizepath_modulejoinr3   r   	translater
   r   ps      r   r   zos_filesystem.isfileb   sG    NND,,11477DAB&&q(9::r   c                     | j                  | j                  j                  | j                  |            }| j                  j	                  | j                  |            S r   )r6   r7   r8   r3   r   r9   r:   s      r   r   zos_filesystem.isdirf   sG    NND,,11477DAB%%t~~a'899r   c                    | j                  | j                  j                  | j                  |            }| j	                  |      }| j                  j                  |      syt        j                         }d}	 	 t        j                  |       d}|| _        |rt        j                  |       |S #  Y xY w# |rt        j                  |       w w xY w)Nr   r/   )	r6   r7   r8   r3   r9   r   r+   getcwdchdir)r
   r   r;   translated_pathold_dircans         r   r!   zos_filesystem.cwdj   s    NND,,11477DAB..+%%7iikG C	'HHo.CDG HHg&JHHg& s   ;B2 2B64B9 9Cc                 $    | j                  d      S )Nz..)r!   r	   s    r   r#   zos_filesystem.cdup   s    xxr   c                    | j                  |      }t        j                  |      }|st        |d       S t        j                         }	 t        j
                  |       t        t        |      D cg c]  }|s|	 }}t        j
                  |       t        || j                        S c c}w # t        j
                  |       w xY wr   )	r9   r+   r   list_producerr>   r?   mapr,   r%   )r
   r   r   r;   ldrA   _fresults           r   r   zos_filesystem.listdir   s    NND! ZZ^ "d++iikG#!'*Ir':Ab"AA'" &$,,77 B'"s$   
'B/ 1B*9B*=B/ *B/ /Cc                 N    | j                  |      }t        j                  |      S r   )r9   r+   r   r:   s      r   r   zos_filesystem.stat   s    NND!ww{r   c                 <    | j                  |      }t        ||      S r   )r9   r   )r
   r   r   r;   s       r   r   zos_filesystem.open   s    NND!Q~r   c                 N    | j                  |      }t        j                  |      S r   )r9   r+   unlinkr:   s      r   rM   zos_filesystem.unlink   s    NND!yy!}r   c                 N    | j                  |      }t        j                  |      S r   )r9   r+   mkdirr:   s      r   rO   zos_filesystem.mkdir       NND!xx|r   c                 N    | j                  |      }t        j                  |      S r   )r9   r+   rmdirr:   s      r   rR   zos_filesystem.rmdir   rP   r   c                 j    t        j                  | j                  |      | j                  |            S r   )r+   renamer9   )r
   srcdsts      r   rT   zos_filesystem.rename   s%    yy,T^^C-@AAr   c                     t        j                  dd|      }| j                  j                  |      }t	        |      dkD  r
|d d dk(  rd}|S )Nz/+/      z/..)resubr7   normpathlenr:   s      r   r6   zos_filesystem.normalize   sK    vvdC&%%t,q6A:!BQ%5.Ar   c                 <   t         j                  j                  |j                  d            }| j	                  | j
                  j                  | j                  |            }| j	                  | j
                  j                  | j                  |dd              }|S )NrX   r/   )r+   sepr8   splitr6   r7   r3   r2   r:   s      r   r9   zos_filesystem.translate   ss    
 vv{{4::c?+NND,,11477DABNND,,11499aeDEr   c                 $    |\  }}t        ||      S r   )unix_longifyr
   path_stat_info_tupler   	stat_infos       r   r%   zos_filesystem.longify   s    0yT9--r   c                 <    d| j                   d| j                  dS )Nz<unix-style fs root:z wd:>r1   r	   s    r   __repr__zos_filesystem.__repr__   s    		 	r   N)rX   r&   )r'   r(   r)   r+   r   r7   do_globbingr   r   r   r   r!   r#   r   r   r   rM   rO   rR   rT   r6   r9   r%   ri   r   r   r   r.   r.   T   sh    ''K K;:,8$B.r   r.   posixc                       e Zd Zy)unix_filesystemN)r'   r(   r)   r   r   r   rm   rm      s    r   rm   c                       e Zd Z ej                         Z ej                         Z ej                         Z	 ej                         Zd	dZd Zd Zd Zd Zd Zd
dZy)schizophrenic_unix_filesystemc                 @    t         j                  | ||       || _        y r   )r.   r   persona)r
   r2   r3   rq   s       r   r   z&schizophrenic_unix_filesystem.__init__   s    ""D$3"DLr   c                     | j                   dk7  r:| j                   \  }}t        j                  |       t        j                  |       y y NNN)rq   r+   setegidseteuid)r
   uidgids      r   become_personaz,schizophrenic_unix_filesystem.become_persona   s8    |||+<<S

C 

C 	 ,r   c                     | j                   dk7  r?t        j                  | j                         t        j                  | j
                         y y rs   )rq   r+   rv   PROCESS_UIDru   PROCESS_GIDr	   s    r   become_nobodyz+schizophrenic_unix_filesystem.become_nobody   s7    |||+

D,,-

D,,- ,r   c                     	 | j                          t        j                  | |      | j                          S # | j                          w xY wr   )ry   r.   r!   r}   r   s     r   r!   z!schizophrenic_unix_filesystem.cwd   s<    %##%$(($5""$""$s	   %8 A
c                     	 | j                          t        j                  |       | j                          S # | j                          w xY wr   )ry   r.   r#   r}   r	   s    r   r#   z"schizophrenic_unix_filesystem.cdup   s:    %##%$))40""$""$s	   $7 A	c                     	 | j                          t        j                  | ||      | j                          S # | j                          w xY wr   )ry   r.   r   r}   )r
   filenamer   s      r   r   z"schizophrenic_unix_filesystem.open   s>    %##%$))44@""$""$	   &9 Ac                     	 | j                          t        j                  | ||      | j                          S # | j                          w xY wr   )ry   r.   r   r}   r   s      r   r   z%schizophrenic_unix_filesystem.listdir   s>    %##%$,,dD$?""$""$r   N)rX   rt   r&   )r'   r(   r)   r+   getuidr{   geteuidPROCESS_EUIDgetgidr|   getegidPROCESS_EGIDr   ry   r}   r!   r#   r   r   r   r   r   ro   ro      sY    #"))+$"**,#"))+$"**,	#	!	.	%	%	%	%r   ro   c                       e Zd Zd Zy)msdos_filesystemc                 $    |\  }}t        ||      S r   )msdos_longifyrd   s       r   r%   zmsdos_filesystem.longify  s    0ydI..r   N)r'   r(   r)   r%   r   r   r   r   r     s    /r   r   c                       e Zd Zd Zy)merged_filesystemc                      y r   r   )r
   fsyss     r   r   zmerged_filesystem.__init__  r   r   N)r'   r(   r)   r   r   r   r   r   r     s    r   r   c                     t        j                  |t         j                           rd}nd}t        |t         j                           }d|||t         j
                     | fz  S )Nz<DIR>z     z%s       %s %8d %s)r   S_ISDIRST_MODE
msdos_dateST_MTIMEST_SIZE)filerf   dirdates       r   r   r     s[    ||Yt||,-y/0Ddll#	#  r   c                     	 t        j                  |       }|d   }|dkD  rd}|dz  }nd}d|d   |d	   |d   d
z  ||d   |fz  S #  t        j                  d      }Y GxY w)Nr   rZ      PM   AMz%02d-%02d-%02d  %02d:%02d%sr/   rY   d      )timegmtime)tinfohourmerids       r   r   r   '  s    {{A 7Dby
(GGGCKG,  {{As   A A)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           	         d|t         j                     z  dd  }dj                  |D cg c]  }t        |    c}      }t        j                  |t         j                           rd}nd}t        t        t        j                               |t         j                           }d|||t         j                     |t         j                     |t         j                     |t         j                     || fz  S c c}w )Nz%o d-z%s%s %3d %-8d %-8d %8d %s %s)r   r   r8   
mode_tabler   ls_dater   r   r   ST_NLINKST_UIDST_GIDr   )r   rf   r   xdircharr   s         r   rc   rc   L  s    9T\\**BC0D7740aJqM01D||Yt||,-D%y'?@D)dmm$dkk"dkk"dll#	- 	 	 1s   C4c                     	 t        j                  |      }| |z
  dkD  rdt        |d   dz
     |d   |d   fz  S dt        |d   dz
     |d   |d   |d   fz  S #  t        j                  d      }Y [xY w)	Nr   i	 z
%s %2d  %dr/   rY   z%s %2d %02d:%02drZ   r   )r   r   months)nowr   r   s      r   r   r   g  s    {{A 	a8tAwqy!QQ  	 "tAwqy!QQQ	%  	{{As   A A2c                       e Zd ZddZd Zy)rE   Nc                      || _         || _        y r   )listfunc)r
   r   r   s      r   r   zlist_producer.__init__  s    		r   c                     | j                   sy| j                   d d }| j                  t        | j                  |      }| j                   dd  | _         dj                  |      dz   S )Nr   2   z
)r   r   rF   r8   )r
   bunchs     r   morezlist_producer.more  s\    yy IIcrNEyy$TYY.		"#DI;;u%..r   r   )r'   r(   r)   r   r   r   r   r   rE   rE     s    
	/r   rE   )supervisor.compatr   r   r+   r   r[   r,   r.   namerm   ro   r   r   r   r   r   r   r   rc   r   rE   r   r   r   <module>r      s   " #+ +n 
  	t tl 77g= 1% 1%n/ / *
< 	

 60/ /r   