ó
J‰]c           @   s.  d  d l  Z  d  d l Z d  d l Z d  d l m Z d d l m Z d  d l m Z d d l	 m
 Z
 d d l m Z d d l m Z d d	 l m Z d d
 l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m  Z  d e! f d „  ƒ  YZ" d S(   iÿÿÿÿN(   t   copyi   (   t   StringIO(   t   BytesIO(   t   App(   t   ContentTypes(   t   Core(   t   Custom(   t   Relationships(   t   SharedStrings(   t   Styles(   t   Theme(   t   Vml(   t   Table(   t   Comments(   t   EmptyChartSeriest   Packagerc           B   s  e  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 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  RS(   s~  
    A class for writing the Excel XLSX Packager file.

    This module is used in conjunction with XlsxWriter to create an
    Excel XLSX container file.

    From Wikipedia: The Open Packaging Conventions (OPC) is a
    container-file technology initially created by Microsoft to store
    a combination of XML and non-XML files that together form a single
    entity such as an Open XML Paper Specification (OpenXPS)
    document. http://en.wikipedia.org/wiki/Open_Packaging_Conventions.

    At its simplest an Excel XLSX file contains the following elements::

         ____ [Content_Types].xml
        |
        |____ docProps
        | |____ app.xml
        | |____ core.xml
        |
        |____ xl
        | |____ workbook.xml
        | |____ worksheets
        | | |____ sheet1.xml
        | |
        | |____ styles.xml
        | |
        | |____ theme
        | | |____ theme1.xml
        | |
        | |_____rels
        | |____ workbook.xml.rels
        |
        |_____rels
          |____ .rels

    The Packager class coordinates the classes that represent the
    elements of the package and writes them into the XLSX file.

    c         C   sƒ   t  t |  ƒ j ƒ  d |  _ t |  _ d |  _ d |  _ d |  _	 d |  _
 d |  _ d |  _ d |  _ d |  _ g  |  _ g  |  _ d S(   s   
        Constructor.

        t    i    N(   t   superR   t   __init__t   tmpdirt   Falset	   in_memoryt   Nonet   workbookt   worksheet_countt   chartsheet_countt   chart_countt   drawing_countt   table_countt   num_vml_filest   num_comment_filest   named_rangest	   filenames(   t   self(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR   P   s    											c         C   s   | |  _  d  S(   N(   R   (   R!   R   (    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyt   _set_tmpdirk   s    c         C   s   | |  _  d  S(   N(   R   (   R!   R   (    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyt   _set_in_memoryo   s    c         C   s™   | |  _  t | j ƒ |  _ t | j ƒ |  _ | j |  _ | j |  _ | j |  _ xA |  j  j	 ƒ  D]0 } | j
 r‚ |  j d 7_ qa |  j d 7_ qa Wd  S(   Ni   (   R   t   lent   chartsR   t   drawingsR   R   R   R   t
   worksheetst   is_chartsheetR   R   (   R!   R   t	   worksheet(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyt   _add_workbooks   s    		c         C   sã   |  j  ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j	 ƒ  |  j
 ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j S(   N(   t   _write_content_types_filet   _write_root_rels_filet   _write_workbook_rels_filet   _write_worksheet_filest   _write_chartsheet_filest   _write_workbook_filet   _write_chart_filest   _write_drawing_filest   _write_vml_filest   _write_comment_filest   _write_table_filest   _write_shared_strings_filet   _write_styles_filet   _write_custom_filet   _write_theme_filet   _write_worksheet_rels_filest   _write_chartsheet_rels_filest   _write_drawing_rels_filest   _add_image_filest   _add_vba_projectt   _write_core_filet   _write_app_fileR    (   R!   (    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyt   _create_package‚   s.    





















c         C   sZ   |  j  r t ƒ  } n( t j d |  j ƒ \ } } t j | ƒ |  j j | | t	 f ƒ | S(   Nt   dir(
   R   R   t   tempfilet   mkstempR   t   ost   closeR    t   appendR   (   R!   t   xml_filenamet   os_filenamet   fd(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyt	   _filename   s    	c         C   s-   |  j  } | j |  j d ƒ ƒ | j ƒ  d  S(   Ns   xl/workbook.xml(   R   t   _set_xml_writerRK   t   _assemble_xml_file(   R!   R   (    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR0   ª   s    	c         C   s‹   d } x~ |  j  j ƒ  D]m } | j r+ q n  | j rK | j ƒ  | j ƒ  n  | j |  j d t | ƒ d ƒ ƒ | j	 ƒ  | d 7} q Wd  S(   Ni   s   xl/worksheets/sheets   .xml(
   R   R'   R(   t   constant_memoryt   _opt_reopent   _write_single_rowRL   RK   t   strRM   (   R!   t   indexR)   (    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR.   ±   s    		

c         C   sk   d } x^ |  j  j ƒ  D]M } | j s+ q n  | j |  j d t | ƒ d ƒ ƒ | j ƒ  | d 7} q Wd  S(   Ni   s   xl/chartsheets/sheets   .xml(   R   R'   R(   RL   RK   RQ   RM   (   R!   RR   R)   (    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR/   Á   s    	
c         C   s…   |  j  j s d  Sd } xh |  j  j D]Z } | j sE t d | ƒ ‚ n  | j |  j d t | ƒ d ƒ ƒ | j ƒ  | d 7} q# Wd  S(   Ni   sF   Chart%d must contain at least one data series. See chart.add_series().s   xl/charts/charts   .xml(   R   R%   t   seriesR   RL   RK   RQ   RM   (   R!   RR   t   chart(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR1   Í   s    	
c         C   sf   |  j  s d  Sd } xL |  j j D]> } | j |  j d t | ƒ d ƒ ƒ | j ƒ  | d 7} q  Wd  S(   Ni   s   xl/drawings/drawings   .xml(   R   R   R&   RL   RK   RQ   RM   (   R!   RR   t   drawing(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR2   ß   s    	
c         C   s  d } x|  j  j ƒ  D]þ } | j r6 | j r6 q n  | j r› t ƒ  } | j |  j d t | ƒ d ƒ ƒ | j | j	 | j
 | j | j ƒ | d 7} n  | j r t ƒ  } | j |  j d t | ƒ d ƒ ƒ | j | j | j d d  d  | j ƒ |  j | | ƒ | d 7} q q Wd  S(   Ni   s   xl/drawings/vmlDrawings   .vmli   (   R   R'   t   has_vmlt   has_header_vmlR   RL   RK   RQ   RM   t   vml_data_idt   vml_shape_idt   comments_listt   buttons_listt   vml_header_idR   t   header_images_listt   _write_vml_drawing_rels_file(   R!   RR   R)   t   vml(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR3   ë   s0    		
		

c         C   sz   d } xm |  j  j ƒ  D]\ } | j s+ q n  t ƒ  } | j |  j d t | ƒ d ƒ ƒ | j | j ƒ | d 7} q Wd  S(   Ni   s   xl/commentss   .xml(	   R   R'   t   has_commentsR   RL   RK   RQ   RM   RZ   (   R!   RR   R)   t   comment(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR4   	  s    		c         C   sO   t  ƒ  } |  j j | _ |  j j j s+ d  S| j |  j d ƒ ƒ | j ƒ  d  S(   Ns   xl/sharedStrings.xml(   R   R   t	   str_tablet   string_tablet   countRL   RK   RM   (   R!   t   sst(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR6     s    	c         C   s-  |  j  j } t ƒ  } | j d |  j g ƒ | j d |  j g ƒ x6 |  j  j ƒ  D]% } | j rf qQ n  | j | j	 ƒ qQ Wx6 |  j  j ƒ  D]% } | j sŸ qŠ n  | j | j	 ƒ qŠ W|  j
 rÛ | j d t |  j
 ƒ g ƒ n  x |  j
 D] } | j | ƒ qå W| j | ƒ | j |  j d ƒ ƒ | j ƒ  d  S(   Nt
   Worksheetst   Chartss   Named Rangess   docProps/app.xml(   R   t   doc_propertiesR   t   _add_heading_pairR   R   R'   R(   t   _add_part_namet   nameR   R$   t   _set_propertiesRL   RK   RM   (   R!   t
   propertiest   appR)   t   named_range(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR@   !  s&    				c         C   sF   |  j  j } t ƒ  } | j | ƒ | j |  j d ƒ ƒ | j ƒ  d  S(   Ns   docProps/core.xml(   R   Rh   R   Rl   RL   RK   RM   (   R!   Rm   t   core(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR?   E  s
    	c         C   sV   |  j  j } t ƒ  } t | ƒ s% d  S| j | ƒ | j |  j d ƒ ƒ | j ƒ  d  S(   Ns   docProps/custom.xml(   R   t   custom_propertiesR   R$   Rl   RL   RK   RM   (   R!   Rm   t   custom(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR8   N  s    	c         C   s  t  ƒ  } | j |  j j ƒ |  j ƒ  d } d } xe |  j j ƒ  D]T } | j ru | j d t | ƒ ƒ | d 7} qB | j	 d t | ƒ ƒ | d 7} qB Wx5 t
 d |  j d ƒ D] } | j d t | ƒ ƒ q± Wx5 t
 d |  j d ƒ D] } | j d t | ƒ ƒ qé W|  j r | j ƒ  n  x5 t
 d |  j d ƒ D] } | j d t | ƒ ƒ q7Wx5 t
 d |  j d ƒ D] } | j d t | ƒ ƒ qoW|  j j j r¬| j ƒ  n  |  j j rÅ| j ƒ  n  |  j j rÞ| j ƒ  n  | j |  j d ƒ ƒ | j ƒ  d  S(   Ni   t   sheetRT   RU   t   tablet   commentss   [Content_Types].xml(   R   t   _add_image_typesR   t   image_typest   _get_table_countR'   R(   t   _add_chartsheet_nameRQ   t   _add_worksheet_namet   rangeR   t   _add_chart_nameR   t   _add_drawing_nameR   t   _add_vml_nameR   t   _add_table_nameR   t   _add_comment_nameRb   Rd   t   _add_shared_stringst   vba_projectR>   Rq   t   _add_custom_propertiesRL   RK   RM   (   R!   t   contentt   worksheet_indext   chartsheet_indexR)   t   i(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR+   Z  s:    	
		c   
   	   C   s²   |  j  j } |  j  j } |  j  j } |  j  j } |  j  j } |  j  j } |  j  j } |  j  j } t	 ƒ  }	 |	 j
 | | | | | | | | g ƒ |	 j |  j d ƒ ƒ |	 j ƒ  d  S(   Ns   xl/styles.xml(   R   t
   xf_formatst   palettet
   font_countt   num_format_countt   border_countt
   fill_countt   custom_colorst   dxf_formatsR	   t   _set_style_propertiesRL   RK   RM   (
   R!   Rˆ   R‰   RŠ   R‹   RŒ   R   RŽ   R   t   styles(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR7   ‰  s(    	
c         C   s-   t  ƒ  } | j |  j d ƒ ƒ | j ƒ  d  S(   Ns   xl/theme/theme1.xml(   R
   RL   RK   RM   (   R!   t   theme(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR9   ¢  s    	c         C   s˜   d } x‹ |  j  j ƒ  D]z } | j } | s1 q n  x\ | D]T } t ƒ  } | j |  j d t | ƒ d ƒ ƒ | j | ƒ | j ƒ  | d 7} q8 Wq Wd  S(   Ni   s   xl/tables/tables   .xml(	   R   R'   t   tablesR   RL   RK   RQ   Rl   RM   (   R!   RR   R)   t   table_propsRt   (    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR5   ©  s    		
c         C   sA   x: |  j  j ƒ  D]) } x  | j D] } |  j d 7_ q  Wq Wd  S(   Ni   (   R   R'   R“   R   (   R!   R)   R”   (    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyRx   º  s    c         C   s|   t  ƒ  } | j d d ƒ | j d d ƒ | j d d ƒ |  j j rX | j d d ƒ n  | j |  j d	 ƒ ƒ | j ƒ  d  S(
   Ns   /officeDocuments   xl/workbook.xmls   /metadata/core-propertiess   docProps/core.xmls   /extended-propertiess   docProps/app.xmls   /custom-propertiess   docProps/custom.xmls   _rels/.rels(   R   t   _add_document_relationshipt   _add_package_relationshipR   Rq   RL   RK   RM   (   R!   t   rels(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR,   À  s    				
c         C   s  t  ƒ  } d } d } xs |  j j ƒ  D]b } | j r_ | j d d t | ƒ d ƒ | d 7} q% | j d d t | ƒ d ƒ | d 7} q% W| j d d ƒ | j d	 d
 ƒ |  j j j rÍ | j d d ƒ n  |  j j rì | j	 d d ƒ n  | j
 |  j d ƒ ƒ | j ƒ  d  S(   Ni   s   /chartsheets   chartsheets/sheets   .xmls
   /worksheets   worksheets/sheets   /themes   theme/theme1.xmls   /styless
   styles.xmls   /sharedStringss   sharedStrings.xmls   /vbaProjects   vbaProject.bins   xl/_rels/workbook.xml.rels(   R   R   R'   R(   R•   RQ   Rb   Rd   R‚   t   _add_ms_package_relationshipRL   RK   RM   (   R!   R—   R…   R†   R)   (    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR-   Ô  s(    					
c         C   sÃ   d } x¶ |  j  j ƒ  D]¥ } | j r+ q n  | d 7} | j | j | j | j | j } | sf q n  t ƒ  } x | D] } | j	 | Œ  qv W| j
 |  j d t | ƒ d ƒ ƒ | j ƒ  q Wd  S(   Ni    i   s   xl/worksheets/_rels/sheets	   .xml.rels(   R   R'   R(   t   external_hyper_linkst   external_drawing_linkst   external_vml_linkst   external_table_linkst   external_comment_linksR   t   _add_worksheet_relationshipRL   RK   RQ   RM   (   R!   RR   R)   t   external_linksR—   t	   link_data(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR:   ø  s    	

	c         C   s§   d } xš |  j  j ƒ  D]‰ } | j s+ q n  | d 7} | j } | sJ q n  t ƒ  } x | D] } | j | Œ  qZ W| j |  j d t | ƒ d ƒ ƒ | j	 ƒ  q Wd  S(   Ni    i   s   xl/chartsheets/_rels/sheets	   .xml.rels(
   R   R'   R(   Rš   R   Rž   RL   RK   RQ   RM   (   R!   RR   R)   RŸ   R—   R    (    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR;     s    	
		c         C   s¡   d } x” |  j  j ƒ  D]ƒ } | j r2 | d 7} n  | j sA q n  t ƒ  } x | j D] } | j | Œ  qT W| j |  j d t | ƒ d ƒ ƒ | j	 ƒ  q Wd  S(   Ni    i   s   xl/drawings/_rels/drawings	   .xml.rels(
   R   R'   RU   t   drawing_linksR   R•   RL   RK   RQ   RM   (   R!   RR   R)   R—   t   drawing_data(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR<   0  s    			c         C   s\   t  ƒ  } x | j D] } | j | Œ  q W| j |  j d t | ƒ d ƒ ƒ | j ƒ  d  S(   Ns   xl/drawings/_rels/vmlDrawings	   .vml.rels(   R   t   vml_drawing_linksR•   RL   RK   RQ   RM   (   R!   R)   RR   R—   R¢   (    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR^   E  s    	c         C   s^  |  j  } d } xH| j D]=} | d } d | d } | d } d t | ƒ | } |  j sð |  j | ƒ } | r¥ t | d d ƒ}	 |	 j | j ƒ  ƒ |	 j ƒ  qLt	 | | ƒ y' t
 j | t
 j | ƒ j t j Bƒ WqLt k
 rì qLXn\ | rÿ | } n4 t | d d ƒ}
 |
 j ƒ  } t | ƒ } |
 j ƒ  |  j j | | t f ƒ | d 7} q Wd  S(	   Ni   i    t   .i   s   xl/media/imaget   modet   wbt   rb(   R   t   imagesRQ   R   RK   t   opent   writet   getvalueRF   R    RE   t   chmodt   statt   st_modet   S_IWRITEt   OSErrort   readR   R    RG   t   True(   R!   R   RR   t   imaget   filenamet   extt
   image_datat   xml_image_nameRI   t   os_filet
   image_file(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR=   U  s6    	

			
c         C   sè   |  j  j } |  j  j } | s" d  Sd } |  j sˆ |  j | ƒ } | rx t | d d ƒ} | j | j ƒ  ƒ | j ƒ  qä t	 | | ƒ n\ | r— | } n4 t | d d ƒ} | j
 ƒ  } t | ƒ } | j ƒ  |  j j | | t f ƒ d  S(   Ns   xl/vbaProject.binR¥   R¦   R§   (   R   R‚   t   vba_is_streamR   RK   R©   Rª   R«   RF   R    R±   R   R    RG   R²   (   R!   R‚   Rº   t   xml_vba_nameRI   R¸   t   vba_filet   vba_data(    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR>   ‚  s&    		
(!   t   __name__t
   __module__t   __doc__R   R"   R#   R*   RA   RK   R0   R.   R/   R1   R2   R3   R4   R6   R@   R?   R8   R+   R7   R9   R5   Rx   R,   R-   R:   R;   R<   R^   R=   R>   (    (    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyR       s>   (															$				/						$					-(#   RE   R­   RC   t   shutilR    t   compatibilityR   t   ioR   Rn   R   t   contenttypesR   Rp   R   Rr   R   t   relationshipsR   t   sharedstringsR   R‘   R	   R’   R
   R_   R   Rt   R   Ru   R   t
   exceptionsR   t   objectR   (    (    (    s2   lib/python2.7/site-packages/xlsxwriter/packager.pyt   <module>	   s$   