Ńň
ÎŃAHc           @   sT  d  Z  d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k l Z d d k	 l
 Z
 e i i   Z y e Wn d d k l Z n Xd Z d Z d   Z d	   Z d
   Z d   Z d   Z d Z d   Z d Z d   Z d Z d   Z d a d   Z  d   Z! d   Z" d   Z# d   Z$ d   Z% d Z& d   Z' d S(   sŕ    Implementations for various useful completers

See Extensions/ipy_stock_completers.py on examples of how to enable a completer,
but the basic idea is to do:

ip.set_hook('complete_command', svn_completer, str_key = 'svn')

i˙˙˙˙N(   t   time(   t   zipimporter(   t   Seti   i   c            sI   t    t  o   i     n   f d   } t i d | d |  d S(   sü   Easily create a trivial completer for a command.

    Takes either a list of completions, or all completions in string
    (that will be split on whitespace)
    
    Example::
    
        [d:\ipython]|1> import ipy_completers                                       
        [d:\ipython]|2> ipy_completers.quick_completer('foo', ['bar','baz'])        
        [d:\ipython]|3> foo b<TAB>
        bar baz                                                                     
        [d:\ipython]|3> foo ba
    c            s     S(   N(    (   t   selft   event(   t   completions(    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   do_complete*   s    t   complete_commandt   str_keyN(   t
   isinstancet
   basestringt   splitt   ipt   set_hook(   t   cmdR   R   (    (   R   sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   quick_completer   s    c          C   s$  g  }  t  i i d  o t  i d St   } t } x t i D]w } |  t |  7}  t   | t j o! | o t	 } d GHd d GHHn t   | t
 j o d GHHg  t  i d <g  Sq> W|  t i 7}  t t |    }  d |  j o |  i d  n t t |    }  | o |  t  i d <n |  S(   sp   
    Returns a list containing the names of all the modules available in the
    folders of the pythonpath.
    t   rootmoduless/   
Caching the list of root modules, please wait!s2   (This will only be done once - type '%rehashx' to s   reset cache!)s$   This is taking too long, we give up.t   __init__(   R   t   dbt   has_keyR    t   Falset   syst   patht
   moduleListt   TIMEOUT_STORAGEt   Truet   TIMEOUT_GIVEUPt   builtin_module_namest   listt   sett   remove(   t   modulest   tt   storeR   (    (    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   getRootModules/   s6    	
 	c         C   s(  t  i i |   o t  i |   } nY |  i d  oB y. g  } t |   i D] } | | qM ~ } Wq~ g  } q~ Xn g  } g  } | D]X } t  i i t  i i |  | d   p" | d d j p | d d j o | | q q ~ } g  } | D]& } | t  i i	 |  i
 d
  d qő ~ } | S(   s`   
    Return the list containing the names of the modules available in the given
    folder.
    s   .eggs   __init__.pyiý˙˙˙s   .pys   .soiü˙˙˙s   .pycs   .pyos   .pydt   .i    (   s   .pys   .so(   s   .pycs   .pyos   .pyd(   t   osR   t   isdirt   listdirt   endswithR   t   _filest   existst   joint   basenameR   (   R   t   folder_listt   _[1]t   ft   _[2]t   pt   _[3](    (    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyR   Q   s    .%%:c         C   sG  t  d  } |  i d  } t |  d j o | d d j o d g St |  d j  o° | d d j o t |  d j o t   S| d i d	  } t |  d
 j  o t   S| d	 i | d   t  } g  } | D]! } | d	 i | d  | g  qŰ ~ } | St |  d j o& | d d j o | d } | |  Sd S(   s    
    Returns a list containing the completion possibilities for an import line.
    The line looks like this :
    'import xml.d'
    'from xml.dom import'
    c   	         sh    f d   } y t  |   } Wn g  SX|  i d  } x! | d D] } t | |  } qD Wt | d  p(   p  t | d  oO d | i j o? g  } t |  D]! } | | |  o | | q§ q§ ~ } n | i t | d g    t | d  o6 d | i j o& | i t t i	 i
 | i    n t t |   } d | j o | i d  n | S(   Nc            sB     o t  i t |  |   S| d  d j o | d d j Sd  S(   Ni   t   __iţ˙˙˙(   t   inspectt   ismodulet   getattr(   t   modulet   attr(   t   only_modules(    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   isImportableq   s    R#   i   t   __file__R   t   __all__(   t
   __import__R   R5   t   hasattrR:   t   dirt   extendR   R$   R   t   dirnameR   R   R   (	   t   modR8   R9   t   mt   modsR6   R-   R7   t   completion_list(    (   R8   sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt	   tryImportp   s&      ? &t    i   i    t   froms   import t   importi   R#   i   i˙˙˙˙N(   s   imports   from(   R   R   t   lenR"   R*   R   (   t   lineRE   t   wordsRA   RD   R-   t   el(    (    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   moduleCompletioni   s     $$5$
c         C   s   | i  i   } | i  i d  o | i d  n | d d j o | d } n t |  d j p d | j o |  i   St i i i | i	  S(   sľ    utility to make writing typical version control app completers easier

    VCS command line apps typically have the format:

    [sudo ]PROGNAME [help] [command] file file...

    RF   t    i    t   sudoi   i   t   help(
   RJ   R   R'   t   appendRI   R   t   IPt	   Completert   file_matchest   symbol(   t   commandsR   t	   cmd_param(    (    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   vcs_completer   s    
 c         C   s   t  | i  S(   sA    Give completions after user has typed 'import ...' or 'from ...'(   RM   RJ   (   R   R   (    (    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   module_completerą   s    	s<  add blame praise annotate ann cat checkout co cleanup commit ci copy
cp delete del remove rm diff di export help ? h import info list ls
lock log merge mkdir move mv rename ren propdel pdel pd propedit pedit
pe propget pget pg proplist plist pl propset pset ps resolved revert
status stat st switch sw unlock update
c         C   s   t  t |  S(   N(   RX   t   svn_commands(   R   R   (    (    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   svn_completerĹ   s    sä  
add addremove annotate archive backout branch branches bundle cat
clone commit copy diff export grep heads help identify import incoming
init locate log manifest merge outgoing parents paths pull push
qapplied qclone qcommit qdelete qdiff qfold qguard qheader qimport
qinit qnew qnext qpop qprev qpush qrefresh qrename qrestore qsave
qselect qseries qtop qunapplied recover remove rename revert rollback
root serve showconfig status strip tag tags tip unbundle update verify
version
c         C   s   t  t |  S(   s"    Completer for mercurial commands (   RX   t   hg_commands(   R   R   (    (    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   hg_completerÔ   s    c          C   sP   t  d  j	 o t  St i d  }  g  } |  D] } | | i   d q, ~ a  t  S(   Ns   bzr help commandsi    (   t   __bzr_commandst   NoneR$   t   popenR   (   t   outR-   t   l(    (    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   bzr_commandsÝ   s
    +c         C   sś   | i  i   } | i  i d  o | i d  n t |  d j oi | d } | d } | d j } | d j o t   S| d j o | o g  St i i i	 | i
  Sn t   S(   s    Completer for bazaar commands RF   RN   i   i   i˙˙˙˙s	   --output=RP   s   bundle-revisionst	   conflictst   deletedt   nicks   register-brancht   servet   unbindt   upgradet   versiont   whoami(
   s   bundle-revisionsRd   Re   Rf   s   register-branchs   serveRh   s   upgrades   versionRk   (   RJ   R   R'   RQ   RI   Rc   R   RR   RS   RT   RU   (   R   R   RW   R   t   paramt   output_file(    (    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   bzr_completerĺ   s     

  c         C   s    g  } x |  d j oy yD t  i |   } t |  d j o | i d i |   n | SWq	 t j
 o" |  d g | } |  d  }  q	 Xq	 Wd i |  g S(   s-   Helper function to split lines into segments.RN   i   i˙˙˙˙(   t   shlexR   RI   RQ   R*   t
   ValueError(   t   xt	   endoflinet   comps(    (    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   shlex_splitý   s     c         C   sh  t  | i  } t |  d j o | d p d i d  } t i } t i i } | i d  o t i i	 |  } n g  } | | d  D]. } | |  o | | i
 d d  d q q ~ } t d	   |  o7 g  }	 | d  D] } |	 | i
 d d  qç ~	 }
 nT g  } | | d
  | | d  | | d  D] } | | i
 d d  q>~ }
 | |
 S(   Ni   i˙˙˙˙RN   s   '"t   ~t   *s   \t   /c         S   s-   |  i  d   p |  i  d  p |  i  d  S(   s   .pys   .ipys   .pyw(   R'   (   R.   (    (    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   <lambda>#  s    s   *.pys   *.ipys   *.pyw(   Rt   RJ   RI   t   stript   globR$   R   R%   t
   startswitht
   expandusert   replacet   filter(   R   R   Rs   t   relpatht   lglobR%   R-   R.   t   dirsR/   t   pysR1   (    (    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt	   runlistpy  s    -	1	
71c      	      sč  | i  } d | i j o  |  i i d h   } | i   S| i  d j o t t t t t i d  d    } d | d } g  } t	 t i d  D] \ } } | | | | f q ~ }	 t |	  d j o |	 Sg  S| i
 d  o" t i i |  i d	 d
  } n g  }
 x g  } t i | d  D]4 } t i i |  o | | i d	 d
  d
 q.q.~ D]0 } d | j o t i i  n |
 i |  qiW|
 p+ t i i |  o | g St i i  n   f d       |
  S(   Ns   -bt	   bookmarkst   -t   _dhi   s   -%0s   d [%s]Ru   s   \Rw   Rv   RF   c            sç   t  |   d j oĚ t i i |  d  oľ |  d } | d d j o | d  } n g  } t i |  D], } t i i | d |  o | | qg qg ~ } | o4 g  } | D] } | | d | qŽ ~ }    |   S|  Sn |  Sd S(   s7   Recursively expand match lists containing a single dir.i   i    i˙˙˙˙Rw   s   \N(   Rw   s   \(   RI   R$   R   R%   R&   (   t   matchest   dR-   R0   t   subdirsR/   (   t   single_dir_expand(    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyR   P  s    *
I)(   RU   RJ   R   t   gett   keyst   strRI   R   t   user_nst	   enumerateR{   R$   R   R|   R}   Rz   R%   t   IPythont   ipapit   TryNextRQ   (   R   R   R   t   bkmst   width_dht   fmtR-   t   it   st   entst   foundR/   R.   R   (    (   R   sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   cd_completer-  s4    	)>"!5 c         c   sC   t  i d  } x- | D]% } | i |   o | i   Vq q Wd  S(   Ns   apt-cache pkgnames(   R$   R`   R{   t   rstrip(   t   prefixRa   R0   (    (    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   apt_get_packagesf  s
     sg   update upgrade install remove purge source build-dep dist-upgrade
dselect-upgrade clean autoclean checkc         C   s   | i  i   } | i  i d  o | i d  n | d d j o | d } n t |  d j p d | j o t i   St t | i   S(   s8    Completer for apt-get (uses apt-cache internally)

    RF   RN   i    RO   i   i   RP   (	   RJ   R   R'   RQ   RI   t   apt_commandsR   R   RU   (   R   R   RW   (    (    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   apt_completerq  s     ((   t   __doc__t   IPython.ipapiR   Rz   R$   Ro   R   R3   R    t	   zipimportR   R   R   R   R   t   setsR   R   R   R   R"   R   RM   RX   R_   t	   pkg_cacheRY   RZ   R[   R\   R]   R^   Rc   Rn   Rt   R   R   R   R   R   (    (    (    sY   /u/d/b/dbachman/web/work/lib/python2.3/site-packages/IPython/Extensions/ipy_completers.pyt   <module>	   s@   0		"		/									9		