
    !h                        S SK Jr  S SKrS SKJrJr  S SKJr  S SKJ	r	  S SK
JrJr  \(       a  S SKJr  S SKJrJr  \R$                  " \5      r " S	 S
5      rg)    )annotationsN)TYPE_CHECKINGAny)NotConfigured)build_component_list)build_from_crawlerload_object)Crawler)BaseSettingsSettingsc                  @    \ rS rSrSrSS jrS	S jr\S
S j5       rSr	g)AddonManager   z@This class facilitates loading and storing :ref:`topics-addons`.c                    Xl         / U l        g )N)crawleraddons)selfr   s     T/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/addons.py__init__AddonManager.__init__   s     '!#    c                   [        US   5       Ha  n [        U5      n[        X0R                  5      n[	        US5      (       a  UR                  U5        U R                  R                  U5        Mc     [        R                  S	S
U R                  0SU R                  0S9  g! [         aR  nUR                  (       a6  [        R                  SX%R                  S   S.SU R                  0S9   SnAM   SnAM  SnAff = f)al  Load add-ons and configurations from a settings object and apply them.

This will load the add-on for every add-on path in the
``ADDONS`` setting and execute their ``update_settings`` methods.

:param settings: The :class:`~scrapy.settings.Settings` object from             which to read the add-on configuration
:type settings: :class:`~scrapy.settings.Settings`
ADDONSupdate_settingszDisabled %(clspath)s: %(eargs)sr   )clspatheargsr   )extraNzEnabled addons:
%(addons)sr   )r   r	   r   r   hasattrr   r   appendr   argsloggerwarninginfo)r   settingsr   addonclsaddones         r   load_settingsAddonManager.load_settings   s     ,HX,>?G&w/*8\\B5"344))(3""5) @ 	)$++ dll+ 	 	
 ! 66NN9$+ffQi@($,,7 #  s   AB""
C>,AC99C>c                    [        US   5       H2  n[        U5      n[        US5      (       d  M!  UR                  U5        M4     g)a   Update early settings that do not require a crawler instance, such as SPIDER_MODULES.

Similar to the load_settings method, this loads each add-on configured in the
``ADDONS`` setting and calls their 'update_pre_crawler_settings' class method if present.
This method doesn't have access to the crawler instance or the addons list.

:param settings: The :class:`~scrapy.settings.BaseSettings` object from             which to read the early add-on configuration
:type settings: :class:`~scrapy.settings.Settings`
r   update_pre_crawler_settingsN)r   r	   r   r+   )clsr$   r   r%   s       r   load_pre_crawler_settings&AddonManager.load_pre_crawler_settings9   s?     ,HX,>?G"7+Hx!>??44X> @r   )r   r   N)r   r
   returnNone)r$   r   r/   r0   )r$   r   )
__name__
__module____qualname____firstlineno____doc__r   r(   classmethodr-   __static_attributes__ r   r   r   r      s$    J$
@ ? ?r   r   )
__future__r   loggingtypingr   r   scrapy.exceptionsr   scrapy.utils.confr   scrapy.utils.miscr   r	   scrapy.crawlerr
   scrapy.settingsr   r   	getLoggerr1   r!   r   r8   r   r   <module>rB      s<    "  % + 2 =&6 
		8	$6? 6?r   