ó
]„±Qc           @   st  d  Z  d d l Z d d l m Z m Z m Z d „  Z e d k rpd d l Z e	 d e d e j
 ƒ f d e d	 e j
 ƒ f d
 e d e j
 ƒ f d e d e j
 ƒ f d e d e j
 ƒ f d e d e j
 ƒ f d e d e j
 ƒ f d e d e j
 ƒ f d e d e j
 ƒ f d e d e j
 ƒ f d e d e j
 ƒ f d e d e j
 ƒ f g ƒ Z e e ƒ Z e j ƒ  n  d S(   s@  
#+
# NAME:
#	mirror
# PURPOSE:
#	Simple interface to Perl script 'mirror'
# CATEGORY:
#	smei/gen/python
# CALLING SEQUENCE:
#	From command line:
#
#	mirror.py job=<job> local_dir=<local_dir> remote_dir=<remote_dir>
#		remote_site=<remote_site> remote_user=<remote_user> remote_password=<remote_password>
#		recursive=<true|false> recurse_hard=<true|false> get_patt=<get_patt>
#
#	As module:
#
#	sts = mirror(job, local_dir, remote_site, remote_dir, remote_user,
#		remote_password, recursive, recurse_hard)
# OPTIONAL INPUT PARAMETERS:
#	<job>			default: 'job'
#				job name (used in the name of the temporary 
#				mirror package file in $TUB)
#	<local_dir>		default: environment variable 'SMEI'
#				local directory where the mirror copy is maintained
#				The default is the location $SMEI of the local copy
#				of the SMEI master tree.
#	<remote_site>		default: 'ips.ucsd.edu'
#				remote server
#	<remote_dir>		default: '/loc_smei'
#				directory tree on remote site to be mirrored
#				The default is a copy of the SMEI master accessible
#				by anonymous ftp only.
#	<remote_user>		default: 'anonymous'
#	<remote_password>	default: '$USER@$HOSTNAME'
#				user and password used by the mirror script to
#				log into the ftp server.
#				if remote_password='netrc' then an attempt is made
#				to obtain the password from $HOME/.netrc
#	recursive   =<true|false>
#				default: true
#	recurse_hard=<true|false>
#				default: true (if recursive is set)
#				false (if recursive is not set)
#	passive_ftp=<true|false>
#				default: false
#	get_patt = <pattern>
#	local_ignore = <local_ignore>
#	-save			if set the package file created for mirror.pl is not deleted
# OUTPUTS:
#	sts			return status of mirror module
#				= None : if mirror was aborted. This currently occurs
#				only if mirror is run on ips.
#				= [list] : list of files downloaded (this list may be empty!!)
#
#	<local_dir> updated by mirroring <remote_dir>. The results are appended
#	to the log file $TUB/<job>.log
# CALLS:
#	mirror
# RESTRICTIONS:
#	The following environment variables need to be defined:
#	SMEI	points to the local copy of the SMEI master tree
#	SSW	points to the root of the SolarSoft tree
#		(the Perl script mirror is part of SolarSoft).
# PROCEDURE:
#	Location of Perl script 'mirror' and name of
#	mirror package file used to mirror the remote directory.
#	(the package file is created on the fly and is deleted again).
# MODIFICATION HISTORY:
#	DEC-2002, Paul Hick (UCSD/CASS)
#		Finalized original version
#	DEC-2002, Paul Hick (UCSD/CASS)
#		Added a check to avoid overwriting the SMEI master tree
#		on ips.ucsd.edu
#	MAR-2003, Paul Hick (UCSD/CASS)
#		Modified to allow mirror to run as a module.
#	NOV-2003, Paul Hick (UCSD/CASS)
#		Instead of return 0 for failure and 1 for success, the return
#		value is now None for failure and a list of downloaded files for
#		success.
#	DEC-2003, Paul Hick (UCSD/CASS)
#		Changed default of recurse_hard to false if recursive is not set.
#		It looks like recursive=false is ignored if recurse_hard=true (the
#		previous default) overrides. 
#	JAN-2004, Paul Hick (UCSD/CASS)
#		Added check for existence of Perl script mirror.
#		Added check for presence of Perl using first line of mirror script.
#	OCT-2005, Paul Hick (UCSD/CASS)
#		Added local_ignore keyword.
#	NOV-2005, Paul Hick (UCSD/CASS; pphick@ucsd.edu)
#		Added passive_ftp keyword.
#-
iÿÿÿÿN(   t
   dict_entryt   startt   is_therec         C   s·  t  j j t  j d d d d ƒ } t  j j | ƒ r¤ t | d ƒ j ƒ  } | d t | ƒ d !} | j d ƒ d k r± | d	 } t  j j | ƒ s¡ d
 G| GHg  Sq± n d G| GHg  St  j d } t	 |  d d ƒ } t	 |  d t  j d d ƒ } t	 |  d d ƒ } t	 |  d d ƒ } t	 |  d d ƒ } t	 |  d t  j d d t  j d ƒ }	 t	 |  d d ƒ }
 t	 |  d d ƒ } t	 |  d d ƒ } t	 |  d  d! ƒ } t	 |  d" d! ƒ } t	 |  d# d ƒ } t  j d d k rò| t  j d d k ròd$ GHd% GHd  Sn  t  j j | | d& ƒ } t  j j | | d' ƒ } |
 d k r9d } n  |	 d( k r÷t t  j j t  j d) d* ƒ d ƒ j ƒ  } | j d+ ƒ } x] | D]U } | j ƒ  } t | ƒ d, k r†| d | k rÛ| d- | k rÛ| d. }	 PqÛq†q†W|	 d( k r÷d/ GHg  Sn  d0 | d1 | d2 | d3 | d4 | d5 |	 d6 |
 d7 | d8 d9 | d: d; t  j d d< d= d> d? d@ | g } | d! k rƒ| j dA | ƒ n  | d! k r£| j dB | ƒ n  t | dC ƒ j d+ j | ƒ d+ ƒ t  j j | ƒ rüt | d ƒ j ƒ  } t | ƒ } n d } t  j | dD | ƒ j ƒ  } | s5t  j | ƒ n  t  j j | ƒ r¤t | d ƒ j ƒ  | j d+ ƒ } g  | D]+ } | j dE ƒ d k rp| j ƒ  d ^ qp} n dF G| GHg  } | S(G   Nt   SSWt   gent   mirrors	   mirror.plt   ri    i   s   #!i   s   mirror, Perl not found:s   mirror, file not found:t   TUBt   jobt	   local_dirt   SMEIt   /t   remote_sites   ips.ucsd.edut
   remote_dirs
   /loc_smei/t   remote_usert	   anonymoust   remote_passwordt   USERt   @t   HOSTNAMEt	   recursivet   truet   recurse_hardt   passive_ftpt   falset   get_pattt    t   local_ignoret   saves9   ********** Trying to overwrite the SMEI master tree, hey?s    ********** Absolutely no way !!!s   .packages   .logt   netrct   HOMEs   .netrcs   
i   i   i   s0   mirror, could not determine password from .netrcs
   package=%ss   site=%ss   remote_dir=%ss   local_dir=%ss   remote_user=%ss   remote_password=%ss   recursive=%ss   recurse_hard=%ss   mode_copy=trues   passive_ftp=%ss   use_timelocal=falses   user=%ss   group=userss   delete_excl=.+s   max_delete_files=99%s   max_delete_dirs=99%s   update_log=%ss	   get_patt=s   local_ignore=t   wt    s   Got s   mirror, log file not found:(   t   ost   patht   joint   environt   isfilet   opent   readlinet   lent   findR    t   Nonet   readt   splitt   appendt   writet   popent   remove(   t   argst   perl_mirrort   perlt   tempR   R	   R   R   R   R   R   R   R   R   R   R   t   packaget
   update_logt   hostst   hostt   tmpt   linest   logt   log_lent   newt   got(    (    s)   /home/soft/smei/ucsd/gen/python/mirror.pyR   b   s     "
	
	(	+ 
#";	t   __main__R   s   job=R	   s
   local_dir=R   s   remote_site=R   s   remote_dir=R   s   remote_user=R   s   remote_password=R   s
   recursive=R   s   recurse_hard=R   s   passive_ftp=R   s	   get_patt=R   s   local_ignore=R   s   -save(   t   __doc__R!   t   tinyR    R   R   R   t   __name__t   syst   dictt   argvR1   t   statust   exit(    (    (    s)   /home/soft/smei/ucsd/gen/python/mirror.pyt   <module>^   s(   	z