
    g3                     ~    d dl mZ d dlmZ d dlmZ  G d de      Z G d de      Z G d d	e      Z G d
 d      Z	y)   )UserFileException)OLDEST_SUPPORTED_MINOR)	toml_loadc                   (     e Zd ZdZdd fd
Z xZS )PyProjectExceptionz0 An exception related to a pyproject.toml file. Ndetailc                *    t         |   d||       y) Initialise the exception. pyproject.tomlr   Nsuper__init__)selftextr	   	__class__s      2lib/python3.12/site-packages/sipbuild/pyproject.pyr   zPyProjectException.__init__    s     	)4?    __name__
__module____qualname____doc__r   __classcell__r   s   @r   r   r      s    :'+ @ @r   r   c                   *     e Zd ZdZddd fd
Z xZS )PyProjectOptionExceptionzE An exception related to a specific option of a pyproject.toml file. N)section_namer	   c                R    |d}t         |   dj                  |||      |       y)r   Nztool.sip.projectz'{0}.{1}': {2}r   )r   r   format)r   namer   r   r	   r   s        r   r   z!PyProjectOptionException.__init__)   s7     -L)00tTJ 	 	r   r   r   s   @r   r   r   &   s    O37  r   r   c                   (     e Zd ZdZdd fd
Z xZS )!PyProjectUndefinedOptionExceptionzK An exception related to an undefined option of a pyproject.toml file.
    Nr   c                *    t         |   |d|       y)r   zmust be definedr$   Nr   )r   r!   r   r   s      r   r   z*PyProjectUndefinedOptionException.__init__7   s     	0|Lr   r   r   s   @r   r#   r#   3   s     .2 M Mr   r#   c                   8    e Zd ZdZd Zd ZdddZed        Zy)		PyProjectz+ Encapsulate a parsed pyproject.toml file. c                     d| _         	 t        d      | _        y# t        $ r
 d| _         Y yt        $ r}t        |      | _         Y d}~yd}~ww xY w)z Initialise the object. Nr   z.there is no such file in the current directory)
toml_errorr   
_pyprojectFileNotFoundError	Exceptionstr)r   es     r   r   zPyProject.__init__@   sJ     	%'(89DO  	ONDO 	%!!fDOO	%s    AAA		Ac                    | j                   rt        dd      S t               }d}d}d}d}| j                  dd      j                         D ]  \  }}|j	                         }|dv r{t        |t              st        |d	d
      |dk(  r@|j                  dd      j                         st        ddj                  |      d
      |}nR|dk(  r|}nJ|dk(  r|}nB|dk(  r=|}n:t        |t              r|n|g}|D ]   }	t        |	t              rt        |dd
       |||<    |t        dd
      |d|d<   |d|d<   |dj                  t              |d<   |S )z1 Return a dict containing the PEP 566 meta-data. unknownz0.1)r!   versionNztool.sip.metadataTrequired)r!   r1   metadata-versionrequires-pythonzmust be a stringztool.sipr$   r!   -_z '{0}' is an invalid project namer1   r4   r5   z%must be a string or a list of stringsz2.1z>=3.{})r)   dictget_sectionitemslower
isinstancer-   r   replaceisidentifierr    listr#   r   )
r   metadatar!   r1   metadata_versionrequires_pythonmd_namemd_value
value_listvalues
             r   get_metadatazPyProject.get_metadataL   s    ??Y666!%!1!12EPT!1!U![![!]GXmmoG TT!(C027<N)35 5 f$#++C5BBD6v B I I(0!2-79 9
 $D	)&G 22'/$ 11&.O *4Hd)CX(
'E%eS16w G-79 9 ( !)HWC "^F <3F!+- - ?"'HY#+0H'("*2//*+,H&' r   Fr2   c                   | j                   ry| j                  }|j                  d      D ]  }	 ||   }
 | j                  |      st	        dj                  |            |S # t        $ r  |rt	        dj                  |            Y  yw xY w)z* Return a sub-section with a dotted name. N.zthe '[{0}]' section is missingz'{0}' is not a section)r)   r*   splitKeyErrorr   r    _is_section)r   r   r3   sectionparts        r   r9   zPyProject.get_section   s     ??// &&s+D!$- , ($,33LAC C   ,<CC$023 3 s   A##%BBc                 .    t        | t        t        f      S )z6 Returns True if a section value is itself a section. )r<   r8   r?   )rF   s    r   rL   zPyProject._is_section   s     %$..r   N)	r   r   r   r   r   rG   r9   staticmethodrL    r   r   r'   r'   =   s/    5
%@D 5: 2 / /r   r'   N)

exceptionsr   py_versionsr   tomlr   r   r   r#   r'   rQ   r   r   <module>rU      sG   0 * / @* @
1 
M(@ Mn/ n/r   