ó
2'[c           @  s»  d  d l  m Z m Z m Z d  d l m Z d  d l m Z m Z m	 Z	 m
 Z
 m Z m Z d d l m Z d d l m Z m Z d d l m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m  Z  m! Z! m" Z" m# Z# m$ Z$ m% Z% m& Z& m' Z' e d e( d	 „ ƒ Z) d
 e* f d „  ƒ  YZ+ e d d d „ ƒ Z- e d e e e e+ d d „ ƒ Z. e d e+ d d „ ƒ Z/ e d e+ d d „ ƒ Z0 e d e+ d d „ ƒ Z1 d S(   iÿÿÿÿ(   t   divisiont   print_functiont   unicode_literals(   t   contextmanager(   t   byreft   castt   c_chart   c_size_tt   c_void_pt   POINTERi   (   t   ffi(   t   ArchiveEntryt   new_archive_entry(   t   OPEN_CALLBACKt   WRITE_CALLBACKt   CLOSE_CALLBACKt   VOID_CBt   REGULAR_FILEt   DEFAULT_UNIX_PERMISSIONt   ARCHIVE_EOFt	   page_sizet   entry_sourcepatht   entry_cleart   read_disk_newt   read_disk_open_wt   read_next_header2t   read_disk_descendt	   read_freet   write_headert
   write_datat   write_finish_entryt   entry_set_sizet   entry_set_filetypet   entry_set_permt   read_disk_set_behaviori    c         c  sT   t  ƒ  } t | | ƒ | r, t j | ƒ n  t | |  ƒ z	 | VWd  t | ƒ Xd  S(   N(   R   R"   R
   t   read_disk_set_standard_lookupR   R   (   t   patht   flagst   lookupt	   archive_p(    (    s/   lib/python2.7/site-packages/libarchive/write.pyt   new_archive_read_disk   s    		t   ArchiveWritec           B  s2   e  Z d  „  Z d „  Z d „  Z e e d „ Z RS(   c         C  s   | |  _  d  S(   N(   t   _pointer(   t   selfR'   (    (    s/   lib/python2.7/site-packages/libarchive/write.pyt   __init__!   s    c         C  se   |  j  } xU | D]M } t | | j ƒ x* | j ƒ  D] } t | | t | ƒ ƒ q3 Wt | ƒ q Wd S(   u.   Add the given entries to the archive.
        N(   R*   R   t   _entry_pt
   get_blocksR   t   lenR   (   R+   t   entriest   write_pt   entryt   block(    (    s/   lib/python2.7/site-packages/libarchive/write.pyt   add_entries$   s    	c         O  sA  |  j  } t j | ƒ } | d k r- d } n  t ƒ  } t d | ƒ } xì | D]ä } t | |  Í } xÃ t | | ƒ }	 |	 t k r‰ Pn  | j	 j
 d ƒ | _	 t | ƒ t | | ƒ | j rt t | ƒ d ƒ = }
 x3 |
 j | ƒ } | sò Pn  t | | t | ƒ ƒ qÙ WWd QXn  t | ƒ t | ƒ qj WWd QXqO WWd QXd S(   u“   Read the given paths from disk and add them to the archive.

        The keyword arguments (`**kw`) are passed to `new_archive_read_disk`.
        i    i (  u   /u   rbN(   R*   R
   t   write_get_bytes_per_blockR   R   t   NoneR(   R   R   t   pathnamet   lstripR   R   t   isregt   openR   t   readR   R/   R   R   (   R+   t   pathst   kwR1   t
   block_sizet   entry_pR2   R$   t   read_pt   rt   ft   data(    (    s/   lib/python2.7/site-packages/libarchive/write.pyt	   add_files.   s0    		
	#
c   
   
   C  s°   |  j  } t ƒ  ˜ } t d | ƒ } | | _ t | | ƒ t | | ƒ t | | ƒ t | | ƒ x. | D]& }	 |	 sx Pn  t	 | |	 t
 |	 ƒ ƒ qh Wt | ƒ t | ƒ Wd QXd S(   u#  "Add file from memory to archive.

        :param entry_path: where entry should be places in archive
        :type entry_path: str
        :param entry_size: entire size of entry
        :type entry_size: int
        :param entry_data: content of entry
        :type entry_data: iterable
        :param filetype: which type of file: normal, symlink etc.
        should entry be created as
        :type filetype: octal number
        :param permission: with which permission should entry be created
        :type permission: octal number
        N(   R*   R   R   R6   R7   R   R    R!   R   R   R/   R   R   (
   R+   t
   entry_patht
   entry_sizet
   entry_datat   filetypet
   permissiont   archive_pointert   archive_entry_pointert   archive_entryt   chunk(    (    s/   lib/python2.7/site-packages/libarchive/write.pyt   add_file_from_memoryN   s    		
(   t   __name__t
   __module__R,   R4   RD   R   R   RN   (    (    (    s/   lib/python2.7/site-packages/libarchive/write.pyR)      s
   		
	"u    c         c  sÕ   t  j ƒ  } t t  d |  ƒ | ƒ | rC t t  d | ƒ | ƒ n  | r} t | t ƒ sj | j d ƒ } n  t  j | | ƒ n  y# | Vt  j | ƒ t  j | ƒ Wn. t	 k
 rÐ t  j
 | ƒ t  j | ƒ ‚  n Xd  S(   Nu   write_set_format_u   write_add_filter_u   utf-8(   R
   t	   write_newt   getattrt
   isinstancet   bytest   encodet   write_set_optionst   write_closet
   write_freet	   Exceptiont
   write_fail(   t   format_namet   filter_namet   optionsR'   (    (    s/   lib/python2.7/site-packages/libarchive/write.pyt   new_archive_writeu   s     c      
   #  s–   ‡  f d †  } t  | ƒ }	 t | ƒ }
 t | ƒ } t | | | ƒ K } t j | d ƒ t j | | ƒ t j | d  |	 |
 | ƒ | | ƒ VWd  QXd  S(   Nc           s'   t  | t t | ƒ ƒ d } ˆ  | ƒ S(   Ni    (   R   R	   R   (   R'   t   contextt   buffer_t   lengthRC   (   t
   write_func(    s/   lib/python2.7/site-packages/libarchive/write.pyt   write_cb_internal   s    i   (	   R   R   R   R^   R
   t   write_set_bytes_in_last_blockt   write_set_bytes_per_blockt
   write_openR6   (   Rb   R[   R\   t	   open_funct
   close_funcR>   t   archive_write_classR]   Rc   t   open_cbt   write_cbt   close_cbR'   (    (   Rb   s/   lib/python2.7/site-packages/libarchive/write.pyt   custom_writer‰   s    c         c  s:   t  | | | ƒ " } t j | |  ƒ | | ƒ VWd  QXd  S(   N(   R^   R
   t   write_open_fd(   t   fdR[   R\   Ri   R]   R'   (    (    s/   lib/python2.7/site-packages/libarchive/write.pyt	   fd_writerŸ   s    c         c  s:   t  | | | ƒ " } t j | |  ƒ | | ƒ VWd  QXd  S(   N(   R^   R
   t   write_open_filename_w(   t   filepathR[   R\   Ri   R]   R'   (    (    s/   lib/python2.7/site-packages/libarchive/write.pyt   file_writer©   s    c      	   c  sd   t  | | | ƒ L } t t ƒ  ƒ } t |  t ƒ } t j | | t |  ƒ | ƒ | | ƒ VWd  QXd  S(   N(   R^   R   R   R   R   R
   t   write_open_memoryR/   (   t   bufR[   R\   Ri   R]   R'   t   usedt   buf_p(    (    s/   lib/python2.7/site-packages/libarchive/write.pyt   memory_writer³   s
    N(2   t
   __future__R    R   R   t
   contextlibR   t   ctypesR   R   R   R   R   R	   t    R
   R2   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R    R!   R"   t   FalseR(   t   objectR)   R6   R^   Rm   Rp   Rs   Rx   (    (    (    s/   lib/python2.7/site-packages/libarchive/write.pyt   <module>   s.   .Ž
V	