
    !h2                        % S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJ	r	J
r
JrJr  S SKJr  S SKJr  S SKrS SKJr  S S	KJr  S S
KJrJr  \(       a  S SKrSrS\S'   \" SSS5      rSS jr " S S\5      rg)    )annotationsN)	find_spec)Path)copy2copystatignore_patternsmove)S_IWUSR)TYPE_CHECKING)ScrapyCommand)
UsageError)render_templatefilestring_camelcase))
scrapy.cfg)${project_name}zsettings.py.tmpl)r   zitems.py.tmpl)r   zpipelines.py.tmpl)r   zmiddlewares.py.tmplztuple[tuple[str, ...], ...]TEMPLATES_TO_RENDERz*.pyc__pycache__z.svnc                h    U R                  5       R                  nU R                  U[        -  5        g N)statst_modechmodOWNER_WRITE_PERMISSION)pathcurrent_permissionss     c/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/commands/startproject.py_make_writabler      s'    ))+--JJ"%;;<    c                  h    \ rS rSrSrSSS.rSS jrSS jrSS jrSS jr	SS	 jr
\SS
 j5       rSrg)Command#   FT)LOG_ENABLEDSPIDER_LOADER_WARN_ONLYc                    g)Nz<project_name> [project_dir] selfs    r   syntaxCommand.syntax'   s    -r   c                    g)NzCreate new projectr%   r&   s    r   
short_descCommand.short_desc*   s    #r   c                    SS jn[         R                  " SU5      (       d  [        S5        gU" U5      (       a  [        SU< S35        gg)	Nc                J    [        U 5      nUS L=(       a    UR                  S L$ r   )r   loader)module_namespecs     r   _module_exists.Command._is_valid_name.<locals>._module_exists.   s%    [)Dt#?4(??r   z^[_a-zA-Z]\w*$z_Error: Project names must begin with a letter and contain only
letters, numbers and underscoreszError: Module z already existsTF)r0   strreturnbool)researchprint)r'   project_namer2   s      r   _is_valid_nameCommand._is_valid_name-   sW    	@ yy*L99: 	 L))N<"2/BC  r   c                   [         nUR                  5        Vs/ s H  oDR                  PM     nnU" X5      nUR                  5       (       d  UR	                  SS9  U HP  nXv;   a  M
  X-  nX'-  n	UR                  5       (       a  U R                  X5        M:  [        X5        [        U	5        MR     [        X5        [        U5        gs  snf )z
Since the original function always creates the directory, to resolve
the issue a new function had to be created. It's a simple copy and
was reduced for this case.

More info at:
https://github.com/scrapy/scrapy/pull/2005
T)parentsN)
IGNOREiterdirnameexistsmkdiris_dir	_copytreer   r   r   )
r'   srcdstignorexnamesignored_namesrA   srcnamedstnames
             r   rE   Command._copytree=   s     !$/A/s*zz||IIdI#D$jGjG~~w0g'w'  	s' 0s   C	c                  ^ [        U5      S;  a  [        eUS   m[        US   5      nUS-  R                  5       (       a$  SU l        [        SUR                  5        35        g U R                  T5      (       d  SU l        g U R                  [        U R                  5      UR                  5       5        [        US-  UT-  5        [         H-  n[        U/U4S jU 5       Q76 n[        UT[        T5      S	9  M/     [        S
T SU R                   S35        [        SUR                  5        S35        [        S5        [        SU 35        [        S5        g )N)      r   r   rP   z$Error: scrapy.cfg already exists in modulec              3  j   >#    U  H(  n[         R                  " U5      R                  TS 9v   M*     g7f))r:   N)stringTemplate
substitute).0sr:   s     r   	<genexpr>Command.run.<locals>.<genexpr>r   s/      " OOA&11|1L"s   03)r:   ProjectNamezNew Scrapy project 'z', using template directory 'z', created in:z    
z%You can start your first spider with:z    cd z(    scrapy genspider example example.com)lenr   r   rB   exitcoder9   resolver;   rE   templates_dirr	   r   r   r   )r'   argsoptsproject_dirpathstplfiler:   s         @r   runCommand.run\   s\   t9F"Aw48n,&..00DM89L9L9N8OPQ""<00DMtD../1D1D1FG[8#[<%?@(E"G  ),\: ) 	"<. 1""#>3	
 	[((*+2./56}%&89r   c                    [        [        U R                  S   =(       d    [        [        R                  S   S5      S5      5      $ )NTEMPLATES_DIRr   	templatesproject)r4   r   settingsscrapy__path__r&   s    r   ra   Command.templates_dir   s;    o.W$vq7I;2W
 	
r   )r_   N)r5   r4   )r:   r4   r5   r6   )rF   r   rG   r   r5   None)rb   z	list[str]rc   zargparse.Namespacer5   rq   )__name__
__module____qualname____firstlineno__requires_projectdefault_settingsr(   r+   r;   rE   rg   propertyra   __static_attributes__r%   r   r   r    r    #   sA    ',N.$ >':R 
 
r   r    )r   r   r5   rq   ) 
__future__r   r7   rU   importlib.utilr   pathlibr   shutilr   r   r   r	   r   r
   r   typingr   rn   scrapy.commandsr   scrapy.exceptionsr   scrapy.utils.templater   r   argparser   __annotations__r?   r   r    r%   r   r   <module>r      se    " 	  $  9 9 2    ) ( G4 0  
-	8=
i
m i
r   