
    09oe#7                        d dl mZ d dlmZ d dlmZ d dlmc mZ d dl	Z	d dl
Z
d dlZd dlZ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 d dlmZ d dlmZ d	 Z G d
 dej                  Zd Z  G d d          Z!dS )    )partial)glob)convert_pathN)Path)DictIterableIteratorListOptionalTuple)SetuptoolsDeprecationWarning)unique_everseenc                 x    t          j        | t          j        |           j        t          j        z             d S N)oschmodstatst_modeS_IWRITE)targets    TD:\Python Project\StaffProfile\venv\Lib\site-packages\setuptools/command/build_py.pymake_writabler      s,    HVRWV__,t}<=====    c                   x    e Zd ZU dZdZeed<   dZee	         ed<   d Z
	 	 d  fd	Zd	 Zd
 Zd Zd Zd Zd Zd Zd!dee	         f fdZdee	e	f         fdZdeee	e	f                  fdZdeee	e	f                  fdZd Zd Zdee	         de	dee	         fdZd Zd Z d Z!d Z"d Z#e$d             Z% xZ&S )"build_pyaX  Enhanced 'build_py' command that includes data files with packages

    The data files are specified via a 'package_data' argument to 'setup()'.
    See 'setuptools.dist.Distribution' for more details.

    Also, this version of the 'build_py' command allows you to specify both
    'py_modules' and 'packages' in the same setup operation.
    Feditable_modeNexisting_egg_info_dirc                     t           j                            |            | j        j        | _        | j        j        pi | _        d| j        v r| j        d= g | _        d S )N
data_files)origr   finalize_optionsdistributionpackage_dataexclude_package_data__dict___build_py__updated_filesselfs    r   r!   zbuild_py.finalize_options$   s^    &&t,,, -:$($5$J$Pb!4=((l+!r      c                    |r\t          t          |                                                    }t          t          |                                                    }t                                          ||||||          S r   )strr   resolvesuper	copy_file)r(   infileoutfilepreserve_modepreserve_timeslinklevel	__class__s          r   r.   zbuild_py.copy_file,   st      	3f--//00F$w--//1122Gww  -!%u. . 	.r   c                 0   | j         s| j        r| j        rdS | j         r|                                  | j        r(|                                  |                                  |                     t          j        	                    | d                     dS )z?Build modules, packages, and copy data files to build directoryNr   )include_bytecode)

py_modulespackagesr   build_modulesbuild_packagesbuild_package_databyte_compiler    r   get_outputsr'   s    r   runzbuild_py.run5   s     	4= 	T5G 	F? 	!   = 	&!!!##%%% 	$-33D13MMNNNNNr   c                     |dk    r |                                  | _        | j        S t          j                            | |          S )zlazily compute data filesr   )_get_data_filesr   r    r   __getattr__)r(   attrs     r   rB   zbuild_py.__getattr__E   s@    <"2244DO?"}((t444r   c                     t           j                            | |||          \  }}|r| j                            |           ||fS r   )r    r   build_moduler&   append)r(   modulemodule_filepackager0   copieds         r   rE   zbuild_py.build_moduleL   sK    -44T6;PWXX 	1 ''000r   c                 |    |                                   t          t          | j        | j        pd                    S )z?Generate list of '(package,src_dir,build_dir,filenames)' tuples )analyze_manifestlistmap_get_pkg_data_filesr9   r'   s    r   rA   zbuild_py._get_data_filesR   s6    C0$-2E2FFGGGr   c                     | j                             di            t          t          | j        | j        pd                    S )z
        Generate list of ``(package,src_dir,build_dir,filenames)`` tuples,
        but without triggering any attempt to analyze or build the manifest.
        manifest_filesrL   )r%   
setdefaultrN   rO   rP   r9   r'   s    r   get_data_files_without_manifestz(build_py.get_data_files_without_manifestW   s?     	  !12666C0$-2E2FFGGGr   c                     |                      |          t          j        j        | j        g|                    d          z    }fd|                     |          D             }|||fS )N.c                 P    g | ]"}t           j                            |          #S rL   )r   pathrelpath).0filesrc_dirs     r   
<listcomp>z0build_py._get_pkg_data_files.<locals>.<listcomp>i   s9     
 
 
 GOOD'**
 
 
r   )get_package_dirr   rX   join	build_libsplitfind_data_files)r(   rI   	build_dir	filenamesr\   s       @r   rP   zbuild_py._get_pkg_data_filesa   s    &&w// GLDN#3gmmC6H6H#HJ	
 
 
 
,,Wg>>
 
 
	 I55r   c                    |                      | j        ||          }t          t          t          d          |          }t
          j                            |          }t          t          j
        j        |          }t          j        | j                            |g           |          }|                     |||          S )z6Return filenames for package's data files in 'src_dir'T)	recursive)_get_platform_patternsr#   rO   r   r   	itertoolschainfrom_iterablefilterr   rX   isfilerR   getexclude_data_files)r(   rI   r\   patternsglobs_expandedglobs_matches
glob_filesfiless           r   rb   zbuild_py.find_data_fileso   s    ..
 

 WTT:::HEE!55nEEBGNM::
##GR00
 
 &&w???r   returnc                     | j         r3t          |                                                                           S t	                                          |          S )1See :class:`setuptools.commands.build.SubCommand`)r   rN   get_output_mappingkeysr-   r>   )r(   r7   r5   s     r   r>   zbuild_py.get_outputs   sM     	://116688999ww""#3444r   c                     t          j        |                                 |                                           }t	          t          |d                     S )rv   c                     | d         S )Nr   rL   )xs    r   <lambda>z-build_py.get_output_mapping.<locals>.<lambda>   s
    !A$ r   )key)rh   ri    _get_package_data_output_mapping_get_module_mappingdictsorted)r(   mappings     r   rw   zbuild_py.get_output_mapping   sP    /1133$$&&
 
 F7777888r   c              #      K   |                                  D ]=\  }}}|                    d          }|                     | j        ||          }||fV  >dS )z5Iterate over all modules producing (dest, src) pairs.rV   N)find_all_modulesra   get_module_outfiler`   )r(   rI   rG   rH   filenames        r   r   zbuild_py._get_module_mapping   sp      .2.C.C.E.E 	* 	**WfkmmC((G..t~wOOH[)))))	* 	*r   c              #      K   | j         D ]R\  }}}}|D ]H}t          j                            ||          }t          j                            ||          }||fV  ISdS )z6Iterate over package data producing (dest, src) pairs.N)r   r   rX   r_   )r(   rI   r\   rc   rd   r   r   srcfiles           r   r~   z)build_py._get_package_data_output_mapping   s|      6:o 	( 	(2GWi% ( (i::',,w99w'''''(	( 	(r   c                     |                                  D ]_\  }}|                     t          j                            |                     |                     ||          \  }}t          |           `dS )z$Copy data files into build directoryN)r~   mkpathr   rX   dirnamer.   r   )r(   r   r   _outf_copieds        r   r<   zbuild_py.build_package_data   ss    #DDFF 	" 	"OFGKK//000!^^GV<<NE7&!!!!	" 	"r   c                 z   i x| _         }| j        j        sd S i }| j        pdD ]'}||t	          |                     |                    <   (t          | dd           rgt          | j        d          	                                r@| j        }t          |d          }|
                    d                                          }n=|                     d           |                     d          }|j        }|j        j        }t#                      }|                     ||          D ]}	t&          j                            t	          |	                    \  }
}d }|}|
rZ|
|k    rT|
|vrP|
}t&          j                            |
          \  }
}t&          j                            ||          }|
r
|
|k    r|
|vP|
|v r||k    r|                    |          rn3|                    ||
         |          }|r|                    |           |                    ||
         g                               |	           d S )NrL   r   zSOURCES.txtzutf-8)encodingegg_info)rR   r"   include_package_datar9   assert_relativer^   getattrr   r   exists	read_text
splitlinesrun_commandget_finalized_commandr   filelistrs   _IncludePackageDataAbuse_filter_build_filesr   rX   ra   r_   	is_moduleimportable_subpackagewarnrS   rF   )r(   mfsrc_dirsrI   egg_info_dirmanifestrs   ei_cmdcheckrX   dfprevoldfdf
importables                   r   rM   zbuild_py.analyze_manifest   s_   #%%b 5 	F}* 	O 	OGGNH_T%9%9'%B%BCCDD D1488	*T/??FFHH	*  5LL-88H&&&88CCEEEEZ(((//
;;F!?LO)E(**,,ULAA 	< 	<D7==!6!677DAqDD (T		ax&7&7a((2GLLQ''  (T		ax&7&7 H}}99q)) ! ! "'!<!<Xa[!!L!LJ! /

:...hqk2..55d;;;!	< 	<r   rs   r   c              #   <  K   |                      d          }|| j        |j        |j        f}d |D             }|D ]_}t          j                            |          t          j                            |          rt          fd|D                       r|V  `dS )a}  
        ``build_meta`` may try to create egg_info outside of the project directory,
        and this can be problematic for certain plugins (reported in issue #3500).

        Extensions might also include between their sources files created on the
        ``build_lib`` and ``build_temp`` directories.

        This function should filter this case of invalid files out.
        buildc                 P    g | ]#}|t           j                            |          $S rL   )r   rX   normpath)rZ   ps     r   r]   z0build_py._filter_build_files.<locals>.<listcomp>   s-    BBBQBRW%%a((BBBr   c              3       K   | ]}|vV  	d S r   rL   )rZ   r   	norm_paths     r   	<genexpr>z/build_py._filter_build_files.<locals>.<genexpr>   s(      -T-TQay.@-T-T-T-T-T-Tr   N)	r   r`   
build_temp
build_baser   rX   r   isabsall)r(   rs   r   r   
build_dirs	norm_dirsr[   r   s          @r   r   zbuild_py._filter_build_files   s       **7330@%BRS
BB*BBB	 	 	D((..I7==&& #-T-T-T-T)-T-T-T*T*T 


	 	r   c                     d S r   rL   r'   s    r   get_data_fileszbuild_py.get_data_files   s    r   c                    	 | j         |         S # t          $ r Y nw xY wt          j                            | ||          }|| j         |<   |r| j        j        s|S | j        j        D ]"}||k    s|                    |dz             r n#|S t          j	        |d          5 }|
                                }ddd           n# 1 swxY w Y   d|vr#t          j                            d|d          |S )z8Check namespace packages' __init__ for declare_namespacerV   rbNs   declare_namespacezNamespace package problem: z is a namespace package, but its
__init__.py does not call declare_namespace()! Please fix it.
(See the setuptools manual under "Namespace Packages" for details.)
")packages_checkedKeyErrorr    r   check_packager"   namespace_packages
startswithioopenread	distutilserrorsDistutilsError)r(   rI   package_dirinit_pypkgr   contentss          r   r   zbuild_py.check_package   sk   	(11 	 	 	D	 ---dG[II)0g& 	d/B 	N$7 	 	Cg~~#!>!>~  NWWd## 	 qvvxxH	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 x//"111 <C77E   s    
 CCCc                 n    i | _         t          j                            |            d| _        d | _        d S )NF)r   r    r   initialize_optionsr   r   r'   s    r   r   zbuild_py.initialize_options  s6     "((..."%)"""r   c                     t           j                            | |          }| j        j        *t
          j                            | j        j        |          S |S r   )r    r   r^   r"   src_rootr   rX   r_   )r(   rI   ress      r   r^   zbuild_py.get_package_dir  sF    m++D'::%17<< 1 :C@@@
r   c                 (   t                    |                     | j        ||          }fd|D             }t          j                            |          }t          |          fdD             }t          t          |                    S )z6Filter filenames for package's data files in 'src_dir'c              3   B   K   | ]}t          j        |          V  d S r   )fnmatchrk   )rZ   patternrs   s     r   r   z.build_py.exclude_data_files.<locals>.<genexpr>  s/      OO7ug66OOOOOOr   c              3   $   K   | ]
}|v|V  d S r   rL   )rZ   fnbads     r   r   z.build_py.exclude_data_files.<locals>.<genexpr>  s'      77"3277r   )rN   rg   r$   rh   ri   rj   setr   )	r(   rI   r\   rs   ro   match_groupsmatcheskeepersr   s	      `    @r   rn   zbuild_py.exclude_data_files  s    U..%
 

 POOOhOOO///=='ll7777777OG,,---r   c                     t          j        |                     dg           |                     |g                     }fd|D             S )z
        yield platform-specific path patterns (suitable for glob
        or fn_match) from a glob-based spec (such as
        self.package_data or self.exclude_package_data)
        matching package in src_dir.
         c              3   r   K   | ]1}t           j                            t          |                    V  2d S r   )r   rX   r_   r   )rZ   r   r\   s     r   r   z2build_py._get_platform_patterns.<locals>.<genexpr>)  sQ       
 
  GLL,w"7"788
 
 
 
 
 
r   )rh   ri   rm   )specrI   r\   raw_patternss     ` r   rg   zbuild_py._get_platform_patterns  se     !HHRHHWb!!
 

 
 
 
 (
 
 
 	
r   )r)   r)   Nr)   )r)   )'__name__
__module____qualname____doc__r   bool__annotations__r   r   r+   r!   r.   r?   rB   rE   rA   rT   rP   rb   r
   r>   r   rw   r	   r   r   r~   r<   rM   r   r   r   r   r   r^   rn   staticmethodrg   __classcell__)r5   s   @r   r   r      sV           M4+/8C=///" " " JK#$. . . . . .O O O 5 5 5  H H H
H H H6 6 6@ @ @"5 5c 5 5 5 5 5 59DcN 9 9 9 9*XeCHo%> * * * *((5c?2K ( ( ( (" " "'< '< '<R# # (SV-    &    <* * *  . . .  
 
 \
 
 
 
 
r   r   c                     t           j                            |           s| S ddlm} t          j        d                                          | z  } ||          )Nr   )DistutilsSetupErrorz
        Error: setup script specifies an absolute path:

            %s

        setup() arguments must *always* be /-separated paths relative to the
        setup.py directory, *never* absolute paths.
        )r   rX   r   distutils.errorsr   textwrapdedentlstrip)rX   r   msgs      r   r   r   0  sp    7== 444444 			
 		
 &((

	  
c
"
""r   c                   .    e Zd ZdZdZd Zd Zd Zd ZdS )r   z>Inform users that package or module is included as 'data file'a      Installing {importable!r} as data is deprecated, please list it in `packages`.
    !!


    ############################
    # Package would be ignored #
    ############################
    Python recognizes {importable!r} as an importable package,
    but it is not listed in the `packages` configuration of setuptools.

    {importable!r} has been automatically added to the distribution only
    because it may contain data files, but this behavior is likely to change
    in future versions of setuptools (and therefore is considered deprecated).

    Please make sure that {importable!r} is included as a package by using
    the `packages` configuration field or the proper discovery methods
    (for example by using `find_namespace_packages(...)`/`find_namespace:`
    instead of `find_packages(...)`/`find:`).

    You can read more about "package discovery" and "data files" on setuptools
    documentation page.
    

!!
    c                 ,    t                      | _        d S r   )r   _already_warnedr'   s    r   __init__z!_IncludePackageDataAbuse.__init___  s    "uur   c                     |                     d          o)|d t          d                                                    S )Nz.py)endswithlenisidentifier)r(   r[   s     r   r   z"_IncludePackageDataAbuse.is_moduleb  s6    }}U##I\s5zzk\(:(G(G(I(IIr   c                     t          |          j        }t          t          j        t
          j        |j                            }|rd                    |g|          S d S )NrV   )	r   parentrN   rh   	takewhiler+   r   partsr_   )r(   r   r[   r   r   s        r   r   z._IncludePackageDataAbuse.importable_subpackagee  sV    4jjY()939EEFF 	.88V,e,---tr   c                     || j         vret          j        | j                                      |          }t          j        |t          d           | j                             |           d S d S )N)r      )
stacklevel)	r   r   r   MESSAGEformatwarningsr   r   add)r(   r   r   s      r   r   z_IncludePackageDataAbuse.warnl  so    T111/$,//66*6MMCM#;JJJJ $$Z00000 21r   N)	r   r   r   r   r   r   r   r   r   rL   r   r   r   r   E  s`        HHG.% % %J J J  1 1 1 1 1r   r   )"	functoolsr   r   distutils.utilr   distutils.command.build_pycommandr   r    r   r   r   r   r   r   rh   r   r  pathlibr   typingr   r   r	   r
   r   r   setuptools._deprecation_warningr    setuptools.extern.more_itertoolsr   r   r   r   rL   r   r   <module>r     s               ' ' ' ' ' ' ) ) ) ) ) ) ) ) ) 				   				                 B B B B B B B B B B B B B B B B H H H H H H < < < < < <> > >U
 U
 U
 U
 U
t} U
 U
 U
p# # #*+1 +1 +1 +1 +1 +1 +1 +1 +1 +1r   