U
    [e                     @   s\   d Z ddlmZ ddlmZ ddlmZ ddlm	Z	 da
G dd deZdd	 Zd
d ZdS )z
    pyexcel.book
    ~~~~~~~~~~~~~~~~~~~

    Excel book

    :copyright: (c) 2014-2022 by Onni Software Ltd.
    :license: New BSD License, see LICENSE for more details
    )_compact)Sheet)BookMetaSheetIteratorc                   @   s   e Zd ZdZd%ddZd&ddZdd	 Zd
d Zdd Zd'ddZ	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ ZdS )(Bookzh
    Read an excel book that has one or more sheets

    For csv file, there will be just one sheet
    Nmemoryc                 C   s0   d| _ g | _d| _t | _| j|||d dS )a4  
        Book constructor

        Selecting a specific book according to filename extension

        :param sheets: a dictionary of data
        :param filename: the physical file
        :param path: the relative path or absolute path
        :param keywords: additional parameters to be passed on
        N)sheetsfilenamepath)_Book__path_Book__name_arrayr
   compactOrderedDict_Book__sheetsinitselfr	   r
   r    r   N/var/www/html/services/stratfitenv/lib/python3.8/site-packages/pyexcel/book.py__init__   s
    
zBook.__init__c                 C   s   || _ || _| | dS )z=indpendent function so that it could be called multiple timesN)r   r
   load_from_sheetsr   r   r   r   r   *   s    z	Book.initc                 C   s|   |dkrdS |  }|D ]N}|| }t|tr:|}||_n
t||}| j||i || j|dd< qt| j  | _	dS )z
        Load content from existing sheets

        :param dict sheets: a dictionary of sheets. Each sheet is
                            a list of lists
        N _)
keys
isinstancer   namer   update__dict__replacelistr   )r   r	   r   r   valuesheetr   r   r   r   0   s    

zBook.load_from_sheetsc                 C   s   t | S Nr   r   r   r   r   __iter__H   s    zBook.__iter__c                 C   s
   t | jS r#   )lenr   r$   r   r   r   __len__K   s    zBook.__len__Fc                 C   s   t | j||d| _d S )N)keyreverse)sortedr   )r   r(   r)   r   r   r   sort_sheetsN   s    zBook.sort_sheetsc                 C   s   t | S )z-
        Return the number of sheets
        )r&   r$   r   r   r   number_of_sheetsQ   s    zBook.number_of_sheetsc                 C   s   | j S )z(
        Return all sheet names
        )r   r$   r   r   r   sheet_namesW   s    zBook.sheet_namesc                 C   s
   | j | S )z7
        Get the sheet with the specified name
        )r   )r   r   r   r   r   sheet_by_name]   s    zBook.sheet_by_namec                 C   s&   |t | jk r"| j| }| |S dS )z8
        Get the sheet with the specified index
        N)r&   r   r.   )r   index
sheet_namer   r   r   sheet_by_indexc   s    
zBook.sheet_by_indexc                 C   s~   t |trB|t| jk r<| j| }| j|= t| j | _qztn8t |trv|| jkrp| j|= t| j | _qzt	nt
dS )z 
        Remove a sheet
        N)r   intr&   r   r   r    r   
IndexErrorstrKeyError	TypeError)r   r"   r0   r   r   r   remove_sheetk   s    



zBook.remove_sheetc                 C   s"   t |tr| |S | |S dS )zOverride operator[]N)r   r2   r1   r.   )r   r(   r   r   r   __getitem__   s    

zBook.__getitem__c                 C   s   |  | | S )z*
        Override del book[index]
        )r7   )r   otherr   r   r   __delitem__   s    
zBook.__delitem__c           
      C   s   i }|   }| D ]2}|}t| dkr:d| j|f }|| ||< qt|tr|  }| D ]D}|}t| dkr|j}||krt }d||f }|| ||< qbn<t|tr|j}||krt }d|j|f }|j	||< nt
t }	|	| |	S )z
        Override operator +

        example::

            book3 = book1 + book2
            book3 = book1 + book2["Sheet 1"]

           %s_%s)to_dictr   r&   r
   r   r   
local_uuidr   r   arrayr6   r   )
r   r9   contentZcurrent_dictknew_key
other_dictr(   uidoutputr   r   r   __add__   s6    



zBook.__add__c                 C   s   t |trf| }|D ]L}|}t|dkr0|j}|| jkrLt }d||f }t|| j|| j	|< qnFt |tr|j
}|| jkrt }d|j
|f }t|j|| j	|< ntt| j	 | _| S )z|
        Operator overloading +=

        example::

            book += book2
            book += book2["Sheet1"]

        r;   r<   )r   r   r-   r&   r
   r   r>   r   r?   r   r   r6   r    r   )r   r9   namesr   rB   rD   r   r   r   __iadd__   s&    




zBook.__iadd__c                 C   s(   t  }| D ]}||j|ji q|S )z Convert the book to a dictionary)r   r   r   r   r?   )r   Zthe_dictr"   r   r   r   r=      s    zBook.to_dict)Nr   N)Nr   N)NF)__name__
__module____qualname____doc__r   r   r   r%   r'   r+   r,   r-   r.   r1   r7   r8   r:   rF   rH   r=   r   r   r   r   r      s"   


'r   c                 C   s(   t | tr| S t|  | j| jdS dS )zConvert a bookstream to Book)r
   r   N)r   r   r=   r
   r   )Z
bookstreamr   r   r   to_book   s    
rM   c                   C   s   t d a t S )zcreate home made uuidr;   )
LOCAL_UUIDr   r   r   r   r>      s    r>   N)rL   Zpyexcelr   r   Zpyexcel.sheetr   Zpyexcel.internal.metar   Zpyexcel.internal.commonr   rN   r   rM   r>   r   r   r   r   <module>   s   	 J