
    Xi              
       d   d dl Z d dlZd dlZd dlZddl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 ddlmZmZmZ ddlmZ ddlT ddlmZmZ dd	lmZ dd
lmZm Z m!Z! dddddddZ"dZ# e$ e%e           e%e#                    Z&ddZ'dej(        d dddddddf
dZ)ej(        dfdZ*ej(        fdZ+dS )    N   )timemachine)
XL_CELL_BLANKXL_CELL_BOOLEANXL_CELL_DATEXL_CELL_EMPTYXL_CELL_ERRORXL_CELL_NUMBERXL_CELL_TEXT	XLRDErrorbiff_text_from_numerror_text_from_code)Bookcolnameopen_workbook_xls)	SIGNATURE)*)__VERSION____version__)
empty_cell)XLDateErrorxldate_as_datetimexldate_as_tuplez	Excel xlszExcel 2007 xlsb filezExcel xlsx filezOpenoffice.org ODS filezUnknown ZIP filezUnknown file type)xlsxlsbxlsxodszipNs   PKc                    |r|dt                    }nat          j                            |           } t	          | d          5 }|                    t                     }ddd           n# 1 swxY w Y   |                    t                    rdS |                    t                    r\t          j
        |rt          j        |          n|           }d |                                D             }d|v rdS d|v rdS d	|v rd
S dS dS )a\  
    Inspect the content at the supplied path or the :class:`bytes` content provided
    and return the file's type as a :class:`str`, or ``None`` if it cannot
    be determined.

    :param path:
      A :class:`string <str>` path containing the content to inspect.
      ``~`` will be expanded.

    :param content:
      The :class:`bytes` content to inspect.

    :returns:
       A :class:`str`, or ``None`` if the format cannot be determined.
       The return value can always be looked up in :data:`FILE_FORMAT_DESCRIPTIONS`
       to return a human-readable description of the format found.
    Nrbr   c                 `    i | ]+}|                     d d                                          |,S )\/)replacelower).0names     8/usr/local/lib/python3.11/dist-packages/xlrd/__init__.py
<dictcomp>z"inspect_format.<locals>.<dictcomp>H   sD     6 6 6#  <<c2288::D 6 6 6    zxl/workbook.xmlr   zxl/workbook.binr   zcontent.xmlr   r   )	PEEK_SIZEospath
expanduseropenread
startswithXLS_SIGNATUREZIP_SIGNATUREzipfileZipFiler   BYTES_IOnamelist)r-   contentpeekfzfcomponent_namess         r(   inspect_formatr=   &   s^   $  %z	z"w!!$''$ 	%66)$$D	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% }%% u}%% _gO[1':::4PP
6 6'){{}}6 6 6 //6//6O++5u s   A))A-0A-TFc
                     t          | |          }
|
r#|
dk    rt          t          |
         dz             t          | |||||||||	
  
        }|S )a	  
    Open a spreadsheet file for data extraction.

    :param filename: The path to the spreadsheet file to be opened.

    :param logfile: An open file to which messages and diagnostics are written.

    :param verbosity: Increases the volume of trace material written to the
                      logfile.

    :param use_mmap:

      Whether to use the mmap module is determined heuristically.
      Use this arg to override the result.

      Current heuristic: mmap is used if it exists.

    :param file_contents:

      A string or an :class:`mmap.mmap` object or some other behave-alike
      object. If ``file_contents`` is supplied, ``filename`` will not be used,
      except (possibly) in messages.

    :param encoding_override:

      Used to overcome missing or bad codepage information
      in older-version files. See :doc:`unicode`.

    :param formatting_info:

      The default is ``False``, which saves memory.
      In this case, "Blank" cells, which are those with their own formatting
      information but no data, are treated as empty by ignoring the file's
      ``BLANK`` and ``MULBLANK`` records.
      This cuts off any bottom or right "margin" of rows of empty or blank
      cells.
      Only :meth:`~xlrd.sheet.Sheet.cell_value` and
      :meth:`~xlrd.sheet.Sheet.cell_type` are available.

      When ``True``, formatting information will be read from the spreadsheet
      file. This provides all cells, including empty and blank cells.
      Formatting information is available for each cell.

      Note that this will raise a NotImplementedError when used with an
      xlsx file.

    :param on_demand:

      Governs whether sheets are all loaded initially or when demanded
      by the caller. See :doc:`on_demand`.

    :param ragged_rows:

      The default of ``False`` means all rows are padded out with empty cells so
      that all rows have the same size as found in
      :attr:`~xlrd.sheet.Sheet.ncols`.

      ``True`` means that there are no empty cells at the ends of rows.
      This can result in substantial memory savings if rows are of widely
      varying sizes. See also the :meth:`~xlrd.sheet.Sheet.row_len` method.


    :param ignore_workbook_corruption:

      This option allows to read corrupted workbooks.
      When ``False`` you may face CompDocError: Workbook corruption.
      When ``True`` that exception will be ignored.

    :returns: An instance of the :class:`~xlrd.book.Book` class.
    r   z; not supported)
filenamelogfile	verbosityuse_mmapfile_contentsencoding_overrideformatting_info	on_demandragged_rowsignore_workbook_corruption)r=   r   FILE_FORMAT_DESCRIPTIONSr   )r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   file_formatbks               r(   open_workbookrL   T   s|    d !=99K  Q{e++0=>OOPPP	#+'#=
 
 
B Ir*   c                     ddl m} t                      }|                    | |            ||j        |j        |j        d||           dS )a  
    For debugging: dump an XLS file's BIFF records in char & hex.

    :param filename: The path to the file to be dumped.
    :param outfile: An open file, to which the dump is written.
    :param unnumbered: If true, omit offsets (for meaningful diffs).
    r   )	biff_dumpr?   r@   r   N)biffhrN   r   biff2_8_loadmembase
stream_len)r?   outfile
unnumberedrN   rK   s        r(   dumprW      s[     !     	BOOXwO999Ibfbgr}a*EEEEEr*   c                     ddl m} t                      }|                    | |            ||j        |j        |j        |           dS )a  
    For debugging and analysis: summarise the file's BIFF records.
    ie: produce a sorted file of ``(record_name, count)``.

    :param filename: The path to the file to be summarised.
    :param outfile: An open file, to which the summary is written.
    r   )biff_count_recordsrO   N)rP   rY   r   rQ   rR   rS   rT   )r?   rU   rY   rK   s       r(   count_recordsrZ      sX     *)))))	BOOXwO999rvrww?????r*   )NN),r,   pprintsysr4    r   rP   r   r   r   r   r	   r
   r   r   r   r   bookr   r   r   compdocr   r2   formulainfor   r   sheetr   xldater   r   r   rI   r3   maxlenr+   r=   stdoutrL   rW   rZ    r*   r(   <module>rh      s$   
			  



                              
 3 2 2 2 2 2 2 2 2 2 / / / / / /     * * * * * * * *       D D D D D D D D D D
 "$
   CM""CC$6$677	+ + + +\  * $$("'!#-2e e e eP :% F F F F %(J @ @ @ @ @ @r*   