ó
Ñ%�Tc           @   s°   d  Z  d d l Z d d l Z d d l Z d d l m Z m Z m Z d d l Z d d l m	 Z	 d „  Z
 d „  Z d „  Z d „  Z d	 „  Z d
 e f d „  ƒ  YZ e
 ƒ  d S(   s8   Install RCrane so that it runs every time Coot launches.iÿÿÿÿN(   t   basenamet   abspatht   dirname(   t   copyc          C   s8  y# t  ƒ  }  t |  ƒ t |  ƒ } Wnu t k
 rš } | GHt ƒ  r4d d l } | j d | j d | j d | ƒ } | j	 d ƒ | j
 ƒ  | j ƒ  q4nš Xd |  d } | GHt ƒ  r4t j j d	 ƒ sà t | ƒ | d
 7} n  d d l } | j d | j d | j d | ƒ } | j	 d ƒ | j
 ƒ  | j ƒ  n  d S(   s7   Install RCrane so that it runs every time Coot launchesiÿÿÿÿNt   typet   buttonst   message_formats   RCrane Installation Errors    RCrane installed successfully.  s	    created.t   rcranes   

Rcrane launched.s   RCrane Installation(   t   determineFilenamet	   checkFilet	   writeFilet   RCraneInstallErrort
   withinCoott   gtkt   MessageDialogt   MESSAGE_ERRORt
   BUTTONS_OKt	   set_titlet   runt   destroyt   syst   modulest   has_keyt   run_python_scriptt   MESSAGE_INFO(   t   filenamet	   launchLoct   errorR   t   errorDialogt   successMessaget   msg(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/rcrane/installRCrane.pyt   main   s.    	
	$
	
$
c          C   sË  d }  y t j d }  Wn t k
 r* n X|  d k r_ y t j d }  Wq_ t k
 r[ q_ Xn  |  d k rt j j d ƒ rœ t j j d ƒ rœ |  d k qt j j d ƒ rÍ t j j d ƒ rÍ |  d k qt j j d	 ƒ rt j j d
 ƒ r|  d k qn  |  d k rt d ƒ ‚ d St j j |  d ƒ } t j j | ƒ rpt j j	 | ƒ sµt d | d ƒ ‚ qµnE y t j
 | ƒ Wn1 t k
 r´} t d | d t | ƒ ƒ ‚ n Xt j j |  d d ƒ S(   sD  Determine the appropriate filename for an RCrane launch script
    
    ARGUMENTS:
        None
    RETURNS:
        None
    EXCEPTIONS:
        RCraneInstallError - if the appropriate filename cannot be determined
                             or if the .coot-preferences directory does not exist and cannot be created
    t   HOMEt	   COOT_HOMEs   C:\WinCootin\coots   C:\WinCootin\coot-real.exes
   C:\WinCoots    C:\Program Files\WinCootin\coots)   C:\Program Files\WinCootin\coot-real.exes   C:\Program Files\WinCoots&   C:\Program Files (x86)\WinCootin\coots/   C:\Program Files (x86)\WinCootin\coot-real.exes   C:\Program Files (x86)\WinCootsN   Can't determine home directory ($HOME or %COOT_HOME%).  Cannot install RCrane.Ns   .coot-preferencess-   Could not create Coot preferences directory: s'   
A file of the same name already existss   
Error: s	   rcrane.py(   t   Nonet   ost   environt   KeyErrort   patht   getsizeR   t   joint   existst   isdirt   mkdirt   OSErrort   str(   t   homedirt   preferencesDirR   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/rcrane/installRCrane.pyR   >   s:    $$$"c         C   sY  t  j j |  ƒ s d Sy t |  ƒ } Wn1 t k
 rY } t d |  d t | ƒ ƒ ‚ n XxG | D]; } d d l } | j d | ƒ s˜ | j d | ƒ ra Pqa qa Wd S|  d } xU d g t	 t t
 d	 d
 ƒ ƒ D]  } t  j j | | ƒ sÎ PqÎ qÎ Wt d t |  ƒ ƒ | | 7} y t |  | ƒ Wn1 t k
 rT} t d |  d t | ƒ ƒ ‚ n Xd S(   s~  Make sure that it's safe to overwrite any file at filename
    
    ARGUMENTS:
        filename - the filename to check
    RETURNS:
        None
    EFFECTS:
        will create a backup of filename if neccesary (if filename contains something other than the standard launch script)
    EXCEPTIONS:
        RCraneInstallError - if a backup is necessary and cannot be completed
    Ns   Could not open s    for reading
Error: iÿÿÿÿs-   ^run_python_script\(["'].*launch.py["']\)\s*$s   ^\s*$s   .bakt    i   ic   sS   Could not find a suitable backup filename for the existing rcrane.py.
Please check s   Could not backup existing s   
Error: (   R#   R&   R)   t   opent   IOErrort   RCraneInstallerErrorR-   t   ret   matcht   mapt   ranget   raiseRCraneInstallErrorR   R   R   (   R   t   inputR   t   curlineR4   t   backupFilenamet	   curSuffix(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/rcrane/installRCrane.pyR	   Š   s*    "%
&
c         C   s©   y t  |  d ƒ } Wn1 t k
 rF } t d |  d t | ƒ ƒ ‚ n Xt j ƒ  j j } t | ƒ } t	 | ƒ } t
 j j | d ƒ } | j d | d ƒ | j ƒ  | S(   s  Create an RCrane launch script
    
    ARGUMENTS:
        filename - the filename for the launch script
    RETURNS:
        launchLoc - the location of RCrane's launch.py
    EXCEPTIONS:
        RCraneInstallError - if the launch script cannot be created
    t   ws   Could not open s   
Error: s	   launch.pys   run_python_script(r"s   ")
(   R1   R2   R3   R-   t   inspectt   currentframet   f_codet   co_filenameR   R   R#   R&   R(   t   writet   close(   R   t   outR   t   fileloct	   rcranedirR   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/rcrane/installRCrane.pyR
   ¹   s    "
c           C   s(   y t  ƒ  Wn t k
 r t SXt Sd S(   sl   Figure out if we're running from within Coot
    
    ARGUMENTS:
        None
    RETURNS:
        None
    N(   t   coot_versiont	   NameErrort   Falset   True(    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/rcrane/installRCrane.pyR   Ú   s
    R   c           B   s    e  Z d  Z d „  Z d „  Z RS(   s1   Errors associated with the installation of RCranec         C   s   | |  _  d  S(   N(   t   value(   t   selfRK   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/rcrane/installRCrane.pyt   __init__ñ   s    c         C   s   |  j  S(   N(   RK   (   RL   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/rcrane/installRCrane.pyt   __str__ó   s    (   t   __name__t
   __module__t   __doc__RM   RN   (    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/rcrane/installRCrane.pyR   î   s   	(   RQ   R   R#   t   os.pathR    R   R   R>   t   shutilR   R   R   R	   R
   R   t	   ExceptionR   (    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/rcrane/installRCrane.pyt   <module>   s   	%	L	/	!		