ó
‚¾^Yc           @   s$  d  Z  d d l m Z d d l m Z d d l m Z m Z m Z m	 Z	 d d l
 m Z m Z d d l m Z m Z m Z d d l Z d d l Z d d l Z y d d l Z Wn e k
 rÇ d Z n Xy d d l Z Wn e k
 rñ d Z n Xe d k r&e d k r&d d l Z e j d ƒ n  d	 Z d
 d g 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 Z& d Z' d Z( d Z) d Z* e j+ dO k Z, e, r¼e- Z. n  d e/ f d  „  ƒ  YZ0 e. d! ƒ d" „ Z1 e, re j2 d# k re. d! ƒ d$ „ Z3 e1 j  e3 _  n e1 Z3 d Z4 d Z5 e j2 d# k re d k	 rÆd d% l m6 Z6 e j7 d ƒ j8 Z9 d Z: d& Z; d' Z< d( Z= e j> j? Z? e? j@ ZA e6 jB e jC e6 jD ƒ g eA _E e6 jF eA _G e? jH ZI e6 jF e jC e6 jD ƒ g eI _E e6 jJ eI _G e? jK ZK e6 jF g eK _E e6 jJ eK _G e jL d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 g ƒ ZM d8 „  ZN d9 „  ZO d: e/ f d; „  ƒ  YZP d< „  ZQ e. d! ƒ d= „ ZR e, r½e. d! ƒ d> „ Z5 eR j  e5 _  qÆeR Z5 n  e d k	 rÞe jS Z4 n  e d k	 róe4 ZS qÒe d k	 re5 ZS qÒe3 ZS nÁe j2 jT dP ƒ s2dB e j2 k rÌe j2 dA k ZU e d k	 reU rd d lV Z e j7 ZW dC e jX f dD „  ƒ  YZY d ZZ d Z[ dE Z\ dF Z] e jC eY ƒ Z^ e jC e^ ƒ Z_ e j` e ja jb dG ƒ dH ec ƒZd ed je Ze e jf g ee _E eW ee _G ed jg Zg eW e^ e_ g eg _E e jh eg _G ed ji Zi eW g ei _E e jh ei _G e jj ƒ  Zk dI e/ f dJ „  ƒ  YZl dK „  Zm e. d! ƒ dL „ Z5 n  e d k	 r™e jS Z4 n  e d k	 r®e4 ZS qÒe d k	 rÃe5 ZS qÒe3 ZS n e3 ZS ec d en dM „ Zo e, sùe j2 d# k reo Zp n e jj ƒ  Zk ec d en dN „ Zp d S(Q   sÄ  scandir, a better directory iterator and faster os.walk(), now in the Python 3.5 stdlib

scandir() is a generator version of os.listdir() that returns an
iterator over files in a directory, and also exposes the extra
information most OSes provide while iterating files in a directory
(such as type and stat information).

This module also includes a version of os.walk() that uses scandir()
to speed it up significantly.

See README.md or https://github.com/benhoyt/scandir for rationale and
docs, or read PEP 471 (https://www.python.org/dev/peps/pep-0471/) for
more details on its inclusion into Python 3.5

scandir is released under the new BSD 3-clause license. See
LICENSE.txt for the full license text.
iÿÿÿÿ(   t   division(   t   ENOENT(   t   listdirt   lstatt   statt   strerror(   t   joint   islink(   t   S_IFDIRt   S_IFLNKt   S_IFREGNsX   scandir can't find the compiled _scandir C module or ctypes, using slow generic fallbacks   1.5t   scandirt   walki    i   i@   i   i @  i   i €  i€   i    i   i   i   i   i   i   i   i   i   i    t   GenericDirEntryc           B   sk   e  Z d Z d „  Z e d „  ƒ Z e d „ Z e d „ Z e d	 „ Z	 d
 „  Z
 d „  Z d „  Z e Z RS(   t   namet   _statt   _lstatt   _scandir_patht   _pathc         C   s1   | |  _  | |  _ d  |  _ d  |  _ d  |  _ d  S(   N(   R   R   t   NoneR   R   R   (   t   selft   scandir_pathR   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt   __init__L   s
    				c         C   s1   |  j  d  k r* t |  j |  j ƒ |  _  n  |  j  S(   N(   R   R   R   R   R   (   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt   pathS   s    c         C   s`   | r1 |  j  d  k r* t |  j ƒ |  _  n  |  j  S|  j d  k rU t |  j ƒ |  _ n  |  j Sd  S(   N(   R   R   R   R   R   R   (   R   t   follow_symlinks(    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR   Y   s    c         C   sS   y |  j  d | ƒ } Wn) t k
 rA } | j t k r= ‚  n  t SX| j d @t k S(   NR   i ð  (   R   t   OSErrort   errnoR   t   Falset   st_modeR   (   R   R   t   stt   e(    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt   is_dirc   s    c         C   sS   y |  j  d | ƒ } Wn) t k
 rA } | j t k r= ‚  n  t SX| j d @t k S(   NR   i ð  (   R   R   R   R   R   R   R
   (   R   R   R   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt   is_filel   s    c         C   sS   y |  j  d t ƒ } Wn) t k
 rA } | j t k r= ‚  n  t SX| j d @t k S(   NR   i ð  (   R   R   R   R   R   R   R	   (   R   R   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt
   is_symlinku   s    c         C   s   |  j  d t ƒ } | j S(   NR   (   R   R   t   st_ino(   R   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt   inode~   s    c         C   s   d j  |  j j |  j ƒ S(   Ns   <{0}: {1!r}>(   t   formatt	   __class__t   __name__R   (   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt   __str__‚   s    (   s   names   _stats   _lstats   _scandir_paths   _path(   R&   t
   __module__t	   __slots__R   t   propertyR   t   TrueR   R   R    R!   R#   R'   t   __repr__(    (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR   I   s   	
						t   .c         c   s)   x" t  |  ƒ D] } t |  | ƒ Vq Wd S(   s\   Like os.listdir(), but yield DirEntry objects instead of returning
    a list of names.
    N(   R   R   (   R   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt   _scandir_genericˆ   s    t   win32c         C   s(   t  |  t ƒ r t d ƒ ‚ n  t |  ƒ S(   NsG   os.scandir() doesn't support bytes path on Windows, use Unicode instead(   t
   isinstancet   bytest	   TypeErrorR.   (   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt   scandir_generic‘   s    (   t   wintypesi   I       I ‘¶   t   Win32StatResultR   R"   t   st_devt   st_nlinkt   st_uidt   st_gidt   st_sizet   st_atimet   st_mtimet   st_ctimet   st_atime_nst   st_mtime_nst   st_ctime_nst   st_file_attributesc         C   s    |  j  d >|  j B} | d t S(   s;   Convert Win32 FILETIME to time since Unix epoch in seconds.i    i€–˜ (   t   dwHighDateTimet   dwLowDateTimet   SECONDS_BETWEEN_EPOCHS(   t   filetimet   total(    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt   filetime_to_timeÒ   s    c         C   s  |  j  } d } | t @r* | t d BO} n
 | t O} | t @rK | d O} n
 | d O} | t @r‰ |  j t k r‰ | | d @N} | t O} n  |  j	 d >|  j
 B} t |  j ƒ } t |  j ƒ } t |  j ƒ } t | d d d d d | | | | t | d ƒ t | d ƒ t | d ƒ | ƒ S(   s.   Convert Win32 FIND_DATA struct to stat_result.i    iI   i$  i¶  i ð  i    i Êš;(   t   dwFileAttributest   FILE_ATTRIBUTE_DIRECTORYR   R
   t   FILE_ATTRIBUTE_READONLYt   FILE_ATTRIBUTE_REPARSE_POINTt   dwReserved0t   IO_REPARSE_TAG_SYMLINKR	   t   nFileSizeHight   nFileSizeLowRG   t   ftLastAccessTimet   ftLastWriteTimet   ftCreationTimeR5   t   int(   t   datat
   attributesR   R:   R;   R<   R=   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt   find_data_to_stat×   s,    	




	t   Win32DirEntryPythonc           B   sk   e  Z d Z d „  Z e d „  ƒ Z e d	 „ Z e d
 „ Z e d „ Z	 d „  Z
 d „  Z d „  Z e Z RS(   R   R   R   t
   _find_dataR   R   t   _inodec         C   sC   | |  _  | |  _ d  |  _ d  |  _ | |  _ d  |  _ d  |  _ d  S(   N(   R   R   R   R   R   RX   R   RY   (   R   R   R   t	   find_data(    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR   ú   s    						c         C   s1   |  j  d  k r* t |  j |  j ƒ |  _  n  |  j  S(   N(   R   R   R   R   R   (   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR     s    c         C   sŸ   | rp |  j  d  k ri |  j ƒ  r6 t |  j ƒ |  _  qi |  j d  k rZ t |  j ƒ |  _ n  |  j |  _  n  |  j  S|  j d  k r” t |  j ƒ |  _ n  |  j Sd  S(   N(   R   R   R!   R   R   R   RV   RX   (   R   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR   	  s    c         C   s„   |  j  ƒ  } | rb | rb y |  j ƒ  j d @t k SWq€ t k
 r^ } | j t k rZ ‚  n  t SXn | rl t S|  j j	 t
 @d k Sd  S(   Ni ð  i    (   R!   R   R   R   R   R   R   R   RX   RH   RI   (   R   R   R!   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR     s    	c         C   s„   |  j  ƒ  } | rb | rb y |  j ƒ  j d @t k SWq€ t k
 r^ } | j t k rZ ‚  n  t SXn | rl t S|  j j	 t
 @d k Sd  S(   Ni ð  i    (   R!   R   R   R
   R   R   R   R   RX   RH   RI   (   R   R   R!   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR    +  s    	c         C   s&   |  j  j t @d k o% |  j  j t k S(   Ni    (   RX   RH   RK   RL   RM   (   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR!   :  s    	c         C   s.   |  j  d  k r' t |  j ƒ j |  _  n  |  j  S(   N(   RY   R   R   R   R"   (   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR#   ?  s    c         C   s   d j  |  j j |  j ƒ S(   Ns   <{0}: {1!r}>(   R$   R%   R&   R   (   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR'   D  s    (   s   names   _stats   _lstats
   _find_datas   _scandir_paths   _paths   _inode(   R&   R(   R)   R   R*   R   R+   R   R   R    R!   R#   R'   R,   (    (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyRW   ÷   s   					c         C   s%   t  |  t j |  ƒ ƒ } | | _ | S(   N(   t   WindowsErrort   ctypest   FormatErrort   filename(   t   errorR^   t   exc(    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt	   win_errorI  s    	c   	      c   s‹  t  |  t ƒ r3 t } t |  j d d ƒ d ƒ } n t } t |  d ƒ } t j ƒ  } t j	 | ƒ } t
 | | ƒ } | t k r¬ t j ƒ  } | t k rš d St | |  ƒ ‚ n  z³ x¬ t r]| j } | d k rü | rè | j d d ƒ } n  t |  | | ƒ Vn  t j ƒ  } t j	 | ƒ } t | | ƒ } | s² t j ƒ  } | t k rHPn  t | |  ƒ ‚ q² q² WWd t | ƒ s†t t j ƒ  |  ƒ ‚ n  Xd S(	   sl   Like os.listdir(), but yield DirEntry objects instead of returning
            a list of names.
            t   mbcst   stricts   *.*NR-   s   ..t   replace(   R-   s   ..(   R0   R1   R+   R   t   decodeR   R4   t   WIN32_FIND_DATAWR\   t   byreft   FindFirstFilet   INVALID_HANDLE_VALUEt   GetLastErrort   ERROR_FILE_NOT_FOUNDRa   t	   cFileNamet   encodeRW   t   FindNextFilet   ERROR_NO_MORE_FILESt	   FindClose(	   R   t   is_bytesR^   RT   t   data_pt   handleR_   R   t   success(    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt   _scandir_pythonN  s<    		c         C   s(   t  |  t ƒ r t d ƒ ‚ n  t |  ƒ S(   NsG   os.scandir() doesn't support bytes path on Windows, use Unicode instead(   R0   R1   R2   Ru   (   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt   scandir_python{  s    t   linuxt   darwint   sunos5t   bsdt   Direntc           B   s©   e  Z e j j d  ƒ ra d e j f d e j f d e j f d e j	 f d e j
 d f f Z nF d e j f d e j f d e j	 f d e j	 f d e j
 d f f Z RS(   Rw   t   d_inot   d_offt   d_reclent   d_typet   d_namei   t   d_namlen(   R&   R(   t   syst   platformt
   startswithR\   t   c_ulongt   c_longt   c_ushortt   c_bytet   c_chart   _fields_t   c_uint32(    (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR{   ™  s   i   i
   t   ct	   use_errnot   PosixDirEntryc           B   sk   e  Z d Z d „  Z e d „  ƒ Z e d	 „ Z e d
 „ Z e d „ Z	 d „  Z
 d „  Z d „  Z e Z RS(   R   t   _d_typeR   R   R   R   RY   c         C   sC   | |  _  | |  _ | |  _ | |  _ d  |  _ d  |  _ d  |  _ d  S(   N(   R   R   R   RY   R   R   R   R   (   R   R   R   R   R#   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR   Å  s    						c         C   s1   |  j  d  k r* t |  j |  j ƒ |  _  n  |  j  S(   N(   R   R   R   R   R   (   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR   Î  s    c         C   sŸ   | rp |  j  d  k ri |  j ƒ  r6 t |  j ƒ |  _  qi |  j d  k rZ t |  j ƒ |  _ n  |  j |  _  n  |  j  S|  j d  k r” t |  j ƒ |  _ n  |  j Sd  S(   N(   R   R   R!   R   R   R   R   (   R   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR   Ô  s    c         C   s…   |  j  t k s! | rt |  j ƒ  rt y |  j d | ƒ } Wn) t k
 rb } | j t k r^ ‚  n  t SX| j d @t	 k S|  j  t
 k Sd  S(   NR   i ð  (   R   t
   DT_UNKNOWNR!   R   R   R   R   R   R   R   t   DT_DIR(   R   R   R   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR   ã  s    c         C   s…   |  j  t k s! | rt |  j ƒ  rt y |  j d | ƒ } Wn) t k
 rb } | j t k r^ ‚  n  t SX| j d @t	 k S|  j  t
 k Sd  S(   NR   i ð  (   R   R   R!   R   R   R   R   R   R   R
   t   DT_REG(   R   R   R   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR    ð  s    c         C   ss   |  j  t k rb y |  j d t ƒ } Wn) t k
 rP } | j t k rL ‚  n  t SX| j d @t k S|  j  t	 k Sd  S(   NR   i ð  (
   R   R   R   R   R   R   R   R   R	   t   DT_LNK(   R   R   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR!   ý  s    c         C   s   |  j  S(   N(   RY   (   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR#   	  s    c         C   s   d j  |  j j |  j ƒ S(   Ns   <{0}: {1!r}>(   R$   R%   R&   R   (   R   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR'     s    (   s   names   _d_types   _stats   _lstats   _scandir_paths   _paths   _inode(   R&   R(   R)   R   R*   R   R+   R   R   R    R!   R#   R'   R,   (    (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyRŽ   Â  s   					c         C   s.   t  j ƒ  } t | t | ƒ ƒ } |  | _ | S(   N(   R\   t	   get_errnoR   R   R^   (   R^   R   R`   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt   posix_error  s    	c         c   s  t  |  t ƒ r |  } t } n |  j t ƒ } t } t | ƒ } | sT t |  ƒ ‚ n  z˜ t ƒ  } xˆ t rê t	 ƒ  } t
 | | | ƒ r“ t |  ƒ ‚ n  | s Pn  | j } | d k rc | sÊ | j t ƒ } n  t |  | | j | j ƒ Vqc qc WWd t | ƒ r
t |  ƒ ‚ n  Xd S(   sl   Like os.listdir(), but yield DirEntry objects instead of returning
            a list of names.
            R-   s   ..N(   R-   s   ..(   R0   R1   R+   Rm   t   file_system_encodingR   t   opendirR•   t   Dirent_pR{   t	   readdir_rR€   Re   RŽ   R   R|   t   closedir(   R   t   opendir_pathRq   t   dir_pt   resultt   entryR   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyRv     s.    					%c         c   s
  g  } g  } y t  |  ƒ } Wn- t k
 rK } | d k	 rG | | ƒ n  d SXx7t r…y) y t | ƒ } Wn t k
 r| Pn XWn- t k
 r­ } | d k	 r© | | ƒ n  d SXy | j ƒ  }	 Wn t k
 r× t }	 n X|	 rñ | j | j	 ƒ n | j | j	 ƒ | rO |	 rO | rt }
 n1 y | j
 ƒ  } Wn t k
 rFt } n X| }
 |
 r‚x( t | j | | | ƒ D] } | VqmWq‚qO qO W| rø|  | | f Vxi | D]P } t |  | ƒ } | sÉt | ƒ r¡x% t | | | | ƒ D] } | VqßWq¡q¡Wn |  | | f Vd S(   s   Like Python 3.5's implementation of os.walk() -- faster than
    the pre-Python 3.5 version as it uses scandir() internally.
    N(   R   R   R   R+   t   nextt   StopIterationR   R   t   appendR   R!   R   R   R   R   (   t   topt   topdownt   onerrort   followlinkst   dirst   nondirst
   scandir_itR_   Rž   R   t	   walk_intoR!   R   t   new_path(    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt   _walkE  sX    		
	
c         C   s4   t  |  t ƒ r! |  j t ƒ }  n  t |  | | | ƒ S(   N(   R0   R1   Re   R–   R«   (   R¢   R£   R¤   R¥   (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyR   œ  s    (   i   i    (   s   linuxs   darwinRy   (q   t   __doc__t
   __future__R    R   R   t   osR   R   R   R   t   os.pathR   R   R   R	   R
   t   collectionsR‚   t   _scandirt   ImportErrorR   R\   t   warningst   warnt   __version__t   __all__t   FILE_ATTRIBUTE_ARCHIVEt   FILE_ATTRIBUTE_COMPRESSEDt   FILE_ATTRIBUTE_DEVICERI   t   FILE_ATTRIBUTE_ENCRYPTEDt   FILE_ATTRIBUTE_HIDDENt   FILE_ATTRIBUTE_INTEGRITY_STREAMt   FILE_ATTRIBUTE_NORMALt"   FILE_ATTRIBUTE_NOT_CONTENT_INDEXEDt   FILE_ATTRIBUTE_NO_SCRUB_DATAt   FILE_ATTRIBUTE_OFFLINERJ   RK   t   FILE_ATTRIBUTE_SPARSE_FILEt   FILE_ATTRIBUTE_SYSTEMt   FILE_ATTRIBUTE_TEMPORARYt   FILE_ATTRIBUTE_VIRTUALt   version_infot   IS_PY3t   strt   unicodet   objectR   R.   Rƒ   R3   t	   scandir_cRv   R4   t   c_void_pt   valueRi   Rk   Ro   RM   RD   t   windllt   kernel32t   FindFirstFileWRh   t   LPCWSTRt   POINTERRf   t   argtypest   HANDLEt   restypet   FindNextFileWRn   t   BOOLRp   t
   namedtupleR5   RG   RV   RW   Ra   Ru   R   R„   t   have_dirent_d_typet   ctypes.utilt   DIR_pt	   StructureR{   R   R‘   R’   R“   R˜   t	   Dirent_ppt   CDLLt   utilt   find_libraryR+   t   libcR—   t   c_char_pR™   t   c_intRš   t   getfilesystemencodingR–   RŽ   R•   R   R«   R   (    (    (    s(   /tmp/pip-build-kpPAdC/scandir/scandir.pyt   <module>   s  "

	?						 R	,				!	!				O				P	