o
    ל_                     @   s\  d dl Z d dlZd dlmZ d dlZd dlZd dlmZ ejdk r$e	Z
neZeZ
eZeZdd Zdd Zd	d
 ZzeZW n eyG   eZY nw edZG dd deZedZG dd deZdd Ze dfddZ!edZ"e dfddZ#dd Z$dd Z%g dZ&g dZ'e e(e&e'Z)dd Z*G d d! d!eZ+G d"d# d#eZ,G d$d% d%e,Z-dS )&    N)linesep)TomlTz)   c                 C   s&   dt jkrdd l}t| |jrdS dS )N)r      r   TF)sysversion_infopathlib
isinstancePurePath)pr    r   0usr/lib/python3.10/site-packages/toml/decoder.py_detect_pathlib_path   s
   
r   c                 C   s   t | ttfr	dS t| S )NT)r	   bytes
basestringr   )r   r   r   r   _ispath   s   r   c                 C   s0   dt jkrdd l}|| S t| rt| S | S )N)r      r   )r   r   osfspathr   str)r   r   r   r   r   _getpath    s   

r   z1([0-9]{2}):([0-9]{2}):([0-9]{2})(\.([0-9]{3,6}))?c                   @   s   e Zd ZdZdd ZdS )TomlDecodeErrorzBase toml Exception / Error.c                 C   sb   | dd|d }||dd| }d||||}t| | || _|| _|| _|| _|| _	d S )N
r      z{} (line {} column {} char {}))
countrfindformat
ValueError__init__msgdocposlinenocolno)selfr   r    r!   r"   r#   emsgr   r   r   r   5   s   
zTomlDecodeError.__init__N)__name__
__module____qualname____doc__r   r   r   r   r   r   2   s    r   z([0-9])(_([0-9]))*c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
CommentValuec                 C   s&   || _ |rdnd}|| | _|| _d S )Nr    )valcomment_dict)r$   r,   r-   	beginliner.   	separatorr   r   r   r   F   s   

zCommentValue.__init__c                 C   s
   | j | S Nr,   )r$   keyr   r   r   __getitem__L      
zCommentValue.__getitem__c                 C   s   || j |< d S r1   r2   )r$   r3   valuer   r   r   __setitem__O   s   zCommentValue.__setitem__c                 C   s8   || j }t| j | jr| jd t| S t|| j S )Nr   )r,   r	   r.   r-   unicode)r$   dump_value_funcretstrr   r   r   dumpR   s   
zCommentValue.dumpN)r&   r'   r(   r   r4   r7   r;   r   r   r   r   r*   E   s
    r*   c                 C   s   |   } | sdS | d dkrdS | d dkrdS d| v s d| v r"dS t| dkr*dS | d d	kr8| d d
vr8dS | d dksD| d dkr^| dd  } t| dkr^| d d	kr^| d dkr^dS d| v rddS dS )NFr   _z_.z._r   T0).obx+-r?   __)striplen)nr   r   r   _strictly_valid_numZ   s(   $rI   c                    s  t | r'tjt| dd}t| ||W  d   S 1 s w   Y  dS t| truddlm	  ddl
m}  fdd| D sOd	}|t7 }|d
7 }t||du rWt|}| }| D ]} |rn|t||| q]|d q]|S z	t|  ||W S  ty   tdw )ac  Parses named file or files as toml and returns a dictionary

    Args:
        f: Path to the file to open, array of files to read into single dict
           or a file descriptor
        _dict: (optional) Specifies the class of the returned toml dictionary
        decoder: The decoder to use

    Returns:
        Parsed toml file represented as a dictionary

    Raises:
        TypeError -- When f is invalid type
        TomlDecodeError: Error while decoding toml
        IOError / FileNotFoundError -- When an array with no valid (existing)
        (Python 2 / Python 3)          file paths is passed
    zutf-8)encodingNr   )path)warnc                    s   g | ]	}  |r|qS r   )exists).0rK   opr   r   
<listcomp>   s    zload.<locals>.<listcomp>z.Load expects a list to contain filenames only.zAThe list needs to contain the path of at least one existing file.z>Non-existent filename in list with at least one valid filenamez5You can only load a file descriptor, filename or list)r   ioopenr   loadsreadr	   listr   rK   warningsrL   r   FNFErrorTomlDecoderget_empty_tablerM   updateloadAttributeError	TypeError)fr.   decoderffilerL   	error_msgdlr   rO   r   r\   q   s2   $


r\   z^[A-Za-z0-9_-]+$c           -      C   s  g }|du r
t |}| }|}t| tstdt| ts#| d} | }t| }d}d}	d}
d}d}d}d}d}d}d}d}d}t|D ]\}}|d	kr[||d  d
kr[d||< qE|r)||7 }|d
krlt	d|||	r||
krd}d}||kr|||  dkr| }|d7 }||kr|||  dks|sd}d}	d}
qE|dkr|
 rd}qE|dkrd}qE| s|dks|dkrqE|r||d  dkr|dks|dkrd}	|}
qEn6|dkr|
 r|r||d  }|
 s|dkrd}qE|dkrd}||d  }|
 s
|dkr
d}qE|dkrd}|dd  }d}d}n
t	d| d |||dkrt|
dkrtd}z|||  dkrR|d7 }|dkrIn	|||  dks?W n
 ty]   Y nw |dkri| }|}	n|	 }	|	rrd}
nd}
|dkr|
dkrd}d}d}zF|||  dkr|d7 }|dkrd}n	|||  dks|dks|dkr|r|||  dkr| }|d7 }|||  dksW n
 ty   Y nw |s|r| }|}	n|	 }	|	rd}
nd}
|dkr3|	s3|s3|s3|}d}z|| d
kr|| | 7 }d||< |d7 }|| d
ksW n ty'   Y  nw |s3||||| |dkr`|	s`|s`|s`|r\t||d krY||d  dkrYd}nd}n|d7 }|dkr|	s|rnd}n|r}||d  dkr|d}n|d8 }|d
kr|	s|r|st	d||||d  dks||d  dkr||d  ||d  kr||d  ||< ||d  ||d  krd||d < n
|rd||< nd}|d7 }qE|r|| dkr|| dkrd}|s|s|| dkrt	d||d}||7 }qE|rt	d|t| |	r"t	d |t| d|} | d
} d}d}d}d}t| D ]5\}} |dkrN|t| |d  d 7 }||| |r_|s_d
|vrc|  } | dkrp|rn|rpq8|r|r{|| 7 }n|| 7 }d}d}!|d dkr| d dk}!n!t| dkr| d |d ko| d! |d ko| d" |d k}!|!rz	||\}"}#W n ty }$ zt	t|$||d}$~$ww |"||< d}d}n3t|d }|dkr|| dkr| }|d8 }|dkr|| dks|r|dd }n|d
7 }q8| d dkr	d}t| dkr(t	d#||| d dkr:d}| dd } d$}%n| dd } d}%d}|| }&d}'|&D ]}(|'sY|%|(v rY n||(|%7 }|' }'qM| |%|} t| |d k s}| d  dkrt	d%|||%| dd d})d}|t|)k r7|)|  |)|< t|)| dkr|)| d dks|)| d dkr|)| }*|d }|*d |*d krt|*dkr|d7 }|t|)d krt	d&|* d' d( ||d|)||  }*|*d |*d krt|*dks|*dd |)|< g |)|d |< nt|)| s,t	d&|)|  d) |||d7 }|t|)k s|}tt|)D ]}|)| }+|+dkrPt	d*||z>||+  |t|)d kr|+|v rr||+ |rqt	d+||n|r||+ |  nt	d,|+ d- t| ||W n\ ty   |d }|+|vr| ||+< |t|)d kr|r| g||+< Y n1 ty   |t|)d kr||+ | ||+< |t|)d kr|r| g||+< Y nw ||+ }|rz|d }W q? ty   Y q?w q?q8| d d.kr>| d d/krt	d0||z|| ||| W q8 ty= }$ zt	t|$||d}$~$ww d| v rmz
| | |||},W n tyb }$ zt	t|$||d}$~$ww |,durm|,\}}}q8|S )1aD  Parses string as toml

    Args:
        s: String to be parsed
        _dict: (optional) Specifies the class of the returned toml dictionary

    Returns:
        Parsed toml file represented as a dictionary

    Raises:
        TypeError: When a non-string is passed
        TomlDecodeError: Error while decoding toml
    Nz!Expecting something like a stringutf8r   F Tr   r   r+   z2Key name found without value. Reached end of line.\   r?   r<   rD   "'=r=   z&Found invalid character in key name: 'z'. Try quoting the key name.r   #[]zUnbalanced quotes	zFound empty keyname. z2Key name found without value. Reached end of file.z/Unterminated string found. Reached end of file.z,Opening key group bracket on line by itself.z]]z"Key group not on a line by itself.zInvalid group name 'z' Something zwent wrong.z'. Try quoting it.z(Can't have a keygroup with an empty namez-An implicitly defined table can't be an arrayzWhat? z already exists?{}z,Line breaks are not allowed in inlineobjects)!rY   rZ   r	   r   r^   r8   decoderV   	enumerater   isspaceisalnumrstrip
IndexErrorpreserve_commentrG   joinsplitembed_commentsrF   
load_valuer   r   _get_split_on_quotesr   _groupname_rematch_rangeremoveappendKeyErrorload_inline_object	load_line)-sr.   r`   implicitgroupsretvalcurrentleveloriginalslopenarr
openstringopenstrcharmultilinestrarrayoftablesr/   keygroup	dottedkeykeynamer3   prev_keyline_noiitemoddbackslashknextitem	tripquotejr-   multikeymultibackslashr!   idxlineclosedr6   vtypeerrsplitstrquotesplitsquoted
quotesplitgroupsgroupstrgroupretr   r   r   rT      s  








$
$

"





$$




(





rT   c                 C   s  d}d }ztt | dkrw| d dkro| d  dkr"| dd }d}n6| dd  }d|v r>|d}|d | }||d  }nd|v rT|d}|d | }||d  }nd }|}|d ur`t|}tt|d	d
t |   }nt| dd  }W n ty   d }Y nw d| dd  vrd S zUt | d	krtt| d d t| dd t| dd	 }W |S tt| d d t| dd t| dd	 t| dd t| dd t| dd ||}W |S  ty   Y d S w )Nr      r?   r=   Z   rC   rD   
   r   r   r                           )rG   upperindexr   intr   datetimedate)r,   microsecondtzsubsecondvaltzvalsubsecondvalandtz
splitpointrc   r   r   r   
_load_date  s^   


 r   c                 C   sL  d}t | d }|dkr#| | dkr#| }|d8 }|dkr#| | dks|D ]~}|rUd}t |d }|dkrL|| dkrL| }|d8 }|dkrL|| dks;| |7 } | |7 } q%d}d}d}|dkrad	}d||||   }|d
rytd| |d dkr|d drtd| d | tt|d7 } | t|t |d  7 } q%| S )NFr   r=   rh   rf   r   r   \Ur   0123456789abcdefzInvalid escape sequence: rc   01234567z). Only scalar unicode points are allowed.r   )rG   r|   lowerrF   r   unichrr   r8   )vhexbytesprefixskipr   hxhxbhxblenr   r   r   _load_unicode_escapes7  s@   
r   )r>   rA   r_   rH   rtrj   ) r   rg   rp   rj   c                 C   s   d}d}|t | k rh|rVd}| | tv r+| d|d  t| |   | |d d  } n*| | dkr@| d|d  | |d  } n| | dksL| | dkrQ|d7 }ntdq| | dkr^d	}|d7 }|t | k s
| S )
z%Unescape characters in a TOML string.r   FNr   rh   uUReserved escape sequence usedT)rG   _escapes_escape_to_escapedcharsr   )r   r   	backslashr   r   r   	_unescapea  s$   .
r   c                   @      e Zd ZdZdS )InlineTableDictz,Sentinel subclass of dict for inline tables.Nr&   r'   r(   r)   r   r   r   r   r   w      r   c                   @   s   e Zd ZefddZdd Z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S ) rY   c                 C   s
   || _ d S r1   r.   r$   r.   r   r   r   r   }  r5   zTomlDecoder.__init__c                 C   s   |   S r1   r   )r$   r   r   r   rZ     s   zTomlDecoder.get_empty_tablec                 C   s   G dd d| j t}| S )Nc                   @   r   )zBTomlDecoder.get_empty_inline_table.<locals>.DynamicInlineTableDictzConcrete sentinel subclass for inline tables.
            It is a subclass of _dict which is passed in dynamically at load
            time

            It is also a subclass of InlineTableDict
            Nr   r   r   r   r   DynamicInlineTableDict  r   r   )r.   r   )r$   r   r   r   r   get_empty_inline_table  s   z"TomlDecoder.get_empty_inline_tableFc                 C   sN  |dd  d}g }t|dkr|d  s|  t|dkr|d}z
| dd\}}	W n ty;   tdw |	 }	|	d |	d krN|	d dv sp|	d dv sp|	d	v sp|	d d
krd|	d dksp|	d dkrv|	d dkrv|| nt|dkr|d |d  |d< ntdt|dks!|D ]}
| |
|||}|d ur d S qd S )Nr   r=   ,r   rl   z Invalid inline table encountered)rj   rk   z-0123456789)truefalsern   ro   rs   rt   z&Invalid inline table value encountered)r}   rG   rF   popr   r   r   )r$   r   r   r   r   candidate_groupsr   candidate_groupr<   r6   r   statusr   r   r   r     s@   


zTomlDecoder.load_inline_objectc                 C   s   | d}d}g }t|dkrcd|d v rc|d  d}|dd  }t|d dkr_t|r_|d  d|d  7  < |dd  }d|d v rS|d d |d  d }t|d dkr_t|s.||7 }|D ]}|ro|| qe|| d7 }| }qe|S )Nrj   Fr   rk   r   ri   r=   )r}   rG   r   )r$   r   doublequotesplitsr   r   singlequotesplitsdoublequotesplitr   r   r   r     s*   

z TomlDecoder._get_split_on_quotesc                 C   s  d}|  |}d}|D ]}|sd|v r n||d7 }| }q|d|}	t|	d }
t|	d r=|	d dd|	d< t|	d r|	d d dkr|	d d d	kr|	d d d
kr|	d d dkr|	d d dkr|	d d dkr|	d  dkr|	d  dkrzt	|	d  W n t
y   Y nw t|	d d urnvt|	d rnn|d7 }|	d }|d|}	||	d krt
d|
rt|	d }
t|	d r|	d d dkr|	d d d	kr|	d d d
kr|	d d dkr|	d d dkr|	d d dkr|	d  dkr|	d  dksd|	d d  |	d  g}	d|	d v rd|	d v sCd
|	d v rm|  |	d }d}g }|D ]}|r[|| n|dd |dD 7 }| }qPn|	d d}|d dkr|d d }|d dks{|d d D ]}|dkrq||vr|  ||< || }q|d  |	d< n+|	d d dks|	d d d
kr|	d d |	d d krt|	d dd |	d< | |	d \}}|dkr(|dkr|	d ||  dkr| }|d8 }|dkr|	d ||  dks|r|	d d d }n|	d d }|	d }n
| |	d |
\}}z
||	d   t
d tyH   t
d tyb   |rY|||f Y S |||	d < Y d S w )Nr   Frl   r=   r<   rf   r   r+   rp   rk   rj   rn   rs   r   r   zInvalid date or numberr?   c                 S   s   g | ]}|  qS r   rF   )rN   levelr   r   r   rQ     s    z)TomlDecoder.load_line.<locals>.<listcomp>rh   r   zDuplicate keys!)r   r   r}   rI   _number_with_underscoresr   replacerG   rF   floatr   r   TIME_REr|   r   rZ   r   _load_line_multiline_strr   r^   r   )r$   r   r   r   r   r   r   r   r   pairstrictly_validprev_vallevelsr   r   koffsetr   r6   r   r   r   r   r     s   
2$$2$$"


$
  
zTomlDecoder.load_linec                 C   s  d}t |dk rd|fS |d dkru| d dkru| |ru|dd   d}t |dkrg|d d dkrg|d d d	krg|d d
 |d
 d |d  g }t |dkrg|d d dkrg|d d d	ks@|d }t |t | }|}|d dkr|d d	krd|fS |d |d ks|d |d krd|fS t |dkr|d |d kr|d
 |d kr|d |d krd|fS t |d |fS )Nr   r   r=   rn   ro   r   r   rj   rk   rq   ri   r   rr   )rG   rF   _load_array_isstrarrayr}   )r$   r   poffsetnewpr   r   r   r     s(   ,", <z$TomlDecoder._load_line_multiline_strTc              	   C   sJ  |st d|dkrdS | dkrt d|dkrdS | dkr&t d|d dks3|d d	kr0|d }|d
d  |}d}d}t|d
kr^|d dkr^|d
 dkr^|dd  }d}d}|D ]J}|dkrr|ro|d
7 }qbd}qbd}	zd}
||
 }|dkr|	 }	|
d
8 }
||
 }|dksW n	 ty   Y nw |	s|rt d|r|d
krd}qbd}qb|dkr|dd
d  }d}|D ]&}
|
dkr| }q|
d tvr|
d dkr|
d dkr|st d|rd}qdD ]}||v r||}t|d |d
d  |}qt|}t|d
kr(|d
 |kr(t|dk s"|d
 |d kr(|dd }|d
d dfS |d dkr>| |dfS |d dkrS| 	 }| 
|| |dfS t|r~t| \}}}}}tt|t|t||rwt|nd}|dfS t|}|d ur|dfS |st dd }d}|d d!krd}|d
d  }n|d d"kr|d
d  }|d#d}| }d$|v sd%|vrd&|v sd'|v rd$|v r|d$d
d
 dkrt d(|d d)vrt d*t|}d+}nt|dkr|d,ks|d-krt|}d+}|d krt|d}|r!d| |fS ||fS ).NzEmpty value is invalidr   )Tboolz#Only all lowercase booleans allowedr   )Fr  r   rj   rk   r   Frf   ri   Tr=   rh   z1Found tokens after a closed string. Invalid TOML.r   r   r   )z\ur   r   rq   r   rn   arrayrs   inline_objecttimer   z<Weirdness with leading zeroes or underscores in your number.r   rD   rC   r<   r?   rB   eEz,This float is missing digits after the point
0123456789z'This float doesn't have a leading digitr   infnan)r   r   r}   rG   rz   r   r   r   
load_arrayr   r   r   r   r   r   r  r   r   r   r   )r$   r   r   	quotechartestvtriplequotetriplequotecountr   tvr   r   r   
escapeseqsr   r   r   r  hmr   r<   msr  parsed_dateitypeneglowervr   r   r   r   *  s   $


**
( "

zTomlDecoder.load_valuec                 C   sv   t |dkrdS |d |d krdS d}d}t || dkr8|| dkr,| }|d8 }n	 | S t || dks| S )Nr   Tr=   Frq   rh   r   )rG   )r$   r   r   r   r   r   r   bounded_string  s   
zTomlDecoder.bounded_stringc                 C   s8   |dd   }|dkr|d dks|d dkrdS dS )	Nr   r=   rf   r   rj   rk   TFr   )r$   ar   r   r   r     s    z"TomlDecoder._load_array_isstrarrayc                 C   s  d }g }|  }d|dd vs d|dd dd   kr| |}|dd   ds:|dd d}ng }d}d}|| dkrHdnd}d	}	|t|dd  k r|| d
ksb|| dkr|	r|d }
|
dkr||
 dkr|	 }	|
d8 }
|
dkr||
 dksr|	 }	|	s|| dkr|d7 }|	s|| dkr|d7 }qL|| dkr|dkr|d8 }|d7 }qL|d7 }||||  |d }|t|dd  k r|| dkr|d7 }|t|dd  k r|| dks|d }|t|dd  k sV|}d}|r|t|d k r||   }| |r>t|dkr|d |d   kr*|d krn n{|d |d kr|d |d kr|| d ||d   ||< ||   }|t|d k rl|d |d  ||d d   }n|d |d  }| |r>t|dkr|d |d   kr|d krn n|d |d kr|d |d ks>|d7 }|t|d k snXt|dd }g }d}d}tt|D ]7}|| dkr|d7 }q|| dkr|d8 }q|| dkr|s|d	|||  |d }q|d	||d   tt|D ]/}||   ||< || dkrA| 
|| \}}|r:||kr9tdn|}|| q|S )Nrn   r   r=   rf   r   rs   r   ri   Frj   rk   rh   rt   rq   rr   ro   zNot a homogeneous array)rF   r}   r   
startswithrG   r   r  rV   r   r|   r   r   )r$   r  atyper   strarraynew_astart_group_indexend_group_indexopen_bracket_countin_strbackslash_indexrA   abalr   r   r   nvalntyper   r   r   r
    s   0
 ("(

zTomlDecoder.load_arrayc                 C      d S r1   r   r$   r   r3   r-   r/   r   r   r   r{        zTomlDecoder.preserve_commentc                 C   r'  r1   r   )r$   r   r   r   r   r   r~     r)  zTomlDecoder.embed_commentsN)FF)T)r&   r'   r(   dictr   rZ   r   r   r   r   r   r   r  r   r
  r{   r~   r   r   r   r   rY   {  s     
T
q[rY   c                       s0   e Zd Zef fdd	Zdd Zdd Z  ZS )TomlPreserveCommentDecoderc                    s   i | _ tt| | d S r1   )saved_commentssuperr+  r   r   	__class__r   r   r     s   z#TomlPreserveCommentDecoder.__init__c                 C   s   |||f| j |< d S r1   )r,  r(  r   r   r   r{     s   z+TomlPreserveCommentDecoder.preserve_commentc                 C   s:   || j vrd S | j | \}}}t|| ||| j||< d S r1   )r,  r*   r.   )r$   r   r   r3   r-   r/   r   r   r   r~     s   
z)TomlPreserveCommentDecoder.embed_comments)r&   r'   r(   r*  r   r{   r~   __classcell__r   r   r.  r   r+    s    r+  ).r   rR   r   r   rer   toml.tzr   r   Zxranger   r   r8   ranger   chrr   r   r   r   FileNotFoundErrorrX   	NameErrorIOErrorcompiler   r   r   r   objectr*   rI   r*  r\   r   rT   r   r   r   _escapedcharszipr   r   r   rY   r+  r   r   r   r   <module>   sT    
	


1  e/#   