
    Hf                     f    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e          Zd Z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                   x    e Zd ZdZddZddZd Zd Zd Zdd
Z	d Z
d Zd Zd Zd Zd Zd Zd Zd Z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                     d| _         g | _        d| _        t          j                    | _        |                     |||           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   s       N/var/www/ffwdstore.be/apps/py-env/lib/python3.11/site-packages/pyexcel/book.py__init__zBook.__init__   sH     +--		(	>>>>>    c                 L    || _         || _        |                     |           dS )z=indpendent function so that it could be called multiple timesN)r   r   load_from_sheetsr   s       r   r   z	Book.init*   s*     f%%%%%r   c                 x   |dS |                                 }|D ]s}||         }t          |t                    r
|}||_        nt          ||          }| j                            ||i           || j        |                    dd          <   tt          | 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sheets         r   r   zBook.load_from_sheets0   s     >F{{}} 	: 	:D4LE%'' +!

 eT**M  $///49DM$,,sC0011 !3!3!5!566r   c                      t          |           S Nr   r   s    r   __iter__zBook.__iter__H   s    T"""r   c                 *    t          | j                  S r)   )lenr   r*   s    r   __len__zBook.__len__K   s    4$%%%r   Fc                 >    t          | j        ||          | _        d S )N)keyreverse)sortedr   )r   r0   r1   s      r   sort_sheetszBook.sort_sheetsN   s"    "4#4#wOOOr   c                      t          |           S )z-
        Return the number of sheets
        )r-   r*   s    r   number_of_sheetszBook.number_of_sheetsQ   s     4yyr   c                     | j         S )z(
        Return all sheet names
        )r   r*   s    r   sheet_nameszBook.sheet_namesW   s       r   c                     | j         |         S )z7
        Get the sheet with the specified name
        )r   )r   r!   s     r   sheet_by_namezBook.sheet_by_name]   s     }T""r   c                 z    |t          | j                  k     r"| j        |         }|                     |          S dS )z8
        Get the sheet with the specified index
        N)r-   r   r9   )r   index
sheet_names      r   sheet_by_indexzBook.sheet_by_indexc   sC     3t())))*51J%%j111 *)r   c                    t          |t                    ra|t          | j                  k     rB| j        |         }| j        |= t          | j                                                  | _        dS t          t          |t                    rE|| j        v r5| j        |= t          | j                                                  | _        dS t          t          )z 
        Remove a sheet
        N)r    intr-   r   r   r%   r   
IndexErrorstrKeyError	TypeError)r   r'   r<   s      r   remove_sheetzBook.remove_sheetk   s     eS!! 	s4,----!.u5
M*-$(););)=)=$>$>!!!  s## 	)))M%($(););)=)=$>$>!!!Or   c                     t          |t                    r|                     |          S |                     |          S )zOverride operator[])r    r?   r=   r9   )r   r0   s     r   __getitem__zBook.__getitem__   s<    c3 	+&&s+++%%c***r   c                 0    |                      |           | S )z*
        Override del book[index]
        )rD   )r   others     r   __delitem__zBook.__delitem__   s     	%   r   c                    i }|                                  }|                                D ]@}|}t          |                                          dk    r| j        d|}||         ||<   At	          |t
                    r~|                                 }|                                D ]T}|}t          |                                          dk    r|j        }||v rt                      }|d|}||         ||<   UnLt	          |t                    r0|j        }||v rt                      }|j        d|}|j	        ||<   nt          t                      }	|	                    |           |	S )z
        Override operator +

        example::

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

           r   )to_dictr   r-   r   r    r	   
local_uuidr   r!   arrayrC   r   )
r   rH   contentcurrent_dictknew_key
other_dictr0   uidoutputs
             r   __add__zBook.__add__   s    ||~~""$$ 	/ 	/AG<$$&&''1,,%)]]]AA6+AGGeT"" 	J!(( 3 3z(())Q..#nGg%%$,,C),cc2G#-c?  3 u%% 	jG'!! ll%*ZZZ5${GGO(((r   c                 <   t          |t                    rw|                                }|D ]_}|}t          |          dk    r|j        }|| j        v rt                      }|d|}t          ||         j        |          | j	        |<   `ndt          |t                    rH|j
        }|| j        v rt                      }|j
        d|}t          |j        |          | j	        |<   nt          t          | j	                                                  | _        | S )z|
        Operator overloading +=

        example::

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

        rK   r   )r    r	   r7   r-   r   r   rM   r   rN   r   r!   rC   r%   r   )r   rH   namesr!   rR   rT   s         r   __iadd__zBook.__iadd__   s'    eT"" 	%%''E K Ku::??#nGd///$,,C)-ss3G).uT{/@')J)Jg&&K u%% 	jG$+++ ll%*ZZZ5%*5;%@%@DM'""O !3!3!5!566r   c                 x    t          j                    }| D ]#}|                    |j        |j        i           $|S )z Convert the book to a dictionary)r   r   r"   r!   rN   )r   the_dictr'   s      r   rL   zBook.to_dict   sB    &(( 	7 	7EOOUZ56666r   )Nr
   N)NF)__name__
__module____qualname____doc__r   r   r   r+   r.   r3   r5   r7   r9   r=   rD   rF   rI   rV   rY   rL    r   r   r	   r	      s"        ? ? ? ?"& & & &7 7 70# # #& & &P P P P  ! ! !# # #2 2 2  (+ + +  % % %N  >    r   r	   c                     t          | t                    r| S t          |                                 | j        | j                  S )zConvert a bookstream to Book)r   r   )r    r	   rL   r   r   )
bookstreams    r   to_bookrc      sK    *d## 
  (
 
 
 	
r   c                  $    t           dz   a t           S )zcreate home made uuidrK   )
LOCAL_UUIDr`   r   r   rM   rM      s     aJr   N)r_   pyexcelr   r   pyexcel.sheetr   pyexcel.internal.metar   pyexcel.internal.commonr   re   r	   rc   rM   r`   r   r   <module>rj      s     ( ' ' ' ' '       * * * * * * 1 1 1 1 1 1
F F F F F8 F F FR	
 	
 	
    r   