
    ?e                     f    d dl mZm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
  G d de          ZdS )    )ABCabstractmethodN   )UserException)	PyProjectPyProjectOptionExceptionc                       e Zd ZdZedd            Zed             Zed             Zed             Z	e
d             Zed	             Zed
             ZdS )AbstractProjectz& This specifies the API of a project.  Nc                 b   t                      }d}d}d}|                    |          }|e|                    |          }	|	Nt          |	t                    s7t          |d                    t          |	          j                  |          |	}|?d}
t          j
                            |
          r|                     |
|           }nddlm} n|                     ||           } |            }t          ||           st          d	          ||_        |                    |||           |S )
zi Return an AbstractProject instance fully configured for a
        particular command line tool.
        Nztool.sipzproject-factoryzshould be a 'str' and not '{0}')section_namez
project.pyr   )Projectz<The project factory did not return an AbstractProject object)r   get_sectionget
isinstancestrr   formattype__name__ospathisfileimport_callableprojectr   r   	argumentssetup)clstooltool_descriptionr   	pyprojectproject_factory_namesip_section_name
value_namesip_sectionf_namedefault_factory_pyproject_factoryr   s                9lib/python3.11/site-packages/sipbuild/abstract_project.py	bootstrapzAbstractProject.bootstrap$   sp    KK	  $%&
++,<==" __Z00F!!&#.. ;2:=DD$(LL$9; ;)9; ; ; ;
 (.$  '!-w~~011 @"%"5"56H#"N"N @??????!112FLLO!/##'3'' 	   & 	i'7888    c                     dS )z Build the project in-situ. N selfs    r(   buildzAbstractProject.build[         r*   c                     dS )zW Build an sdist for the project and return the name of the sdist
        file.
        Nr,   )r.   sdist_directorys     r(   build_sdistzAbstractProject.build_sdist_   r0   r*   c                     dS )zV Build a wheel for the project and return the name of the wheel
        file.
        Nr,   )r.   wheel_directorys     r(   build_wheelzAbstractProject.build_wheele   r0   r*   c                    |                      d          r|                     dt          j                  } | dd         }d}t          j                            ||           }t          j                            |          }	 |j        	                    |           n# t          $ r6}t          d                    |           t          |                    d}~ww xY w|                     d          }t          |          dk    r"t          d	                    |                     |d
         }t          |          dk    r|d         nd}	 t	          j        |          }nC# t"          $ r6}t          d                    |          t          |                    d}~ww xY w|w|j                                        D ]4}t)          |t*                    rt-          ||          r|j        |k    r n)5t          d                    | |j                            n5t3          ||          }|#t          d                    ||                    |S )z[ Import a callable from either a .py file or specified as
        module[:object].
        z.py/NzUnable to import '{0}')detail:   z7The callable '{0}' must be specified as 'module[:name]'r   r   z%'{0}' does not define a {1} sub-classz"'{0}' module has no callable '{1}')endswithreplacer   sep	importlibutilspec_from_file_locationmodule_from_specloaderexec_module	Exceptionr   r   r   splitlenimport_moduleImportError__dict__valuesr   r   
issubclass
__module__r   getattr)	name	base_typemodule_nameobject_namespecmoduleepartsobjs	            r(   r   zAbstractProject.import_callablek   s    ==  	'<<RV,,Dss)KK >99+tLLD^44T::F'''//// ' ' '#$<$C$CD$I$I"1vv' ' ' ''
 JJsOOE5zzA~~#**0&,,8 8 8  (K&)%jjAoo%((4K'"0== ' ' '#077DD"1vv' ' ' '' --// 
5 
5c4(( "!#y11 " >[88!E#?FFt ) 24 45 5 5 " &+..C{#<CC +[: :; ; ; 
s0   B 
C(1CCE& &
F&01F!!F&c                     dS )z Install the project. Nr,   r-   s    r(   installzAbstractProject.install   r0   r*   c                     dS )z, Complete the configuration of the project. Nr,   )r.   r    r   r   s       r(   r   zAbstractProject.setup   r0   r*   )r   N)r   rN   __qualname____doc__classmethodr)   r   r/   r3   r6   staticmethodr   rZ   r   r,   r*   r(   r
   r
   !   s        004 4 4 [4l + + ^+   ^
   ^
 > > \>@ % % ^% ; ; ^; ; ;r*   r
   )abcr   r   r@   importlib.utilr   
exceptionsr   r    r   r   r
   r,   r*   r(   <module>rc      s   0 $ # # # # # # #         				 % % % % % % : : : : : : : :Q; Q; Q; Q; Q;c Q; Q; Q; Q; Q;r*   