
    2yig3                       d dl 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mZ d dl	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ erd dlmZ  ej<                  d	      Z ed
      Z  G d dee          Z! G d de"      Z#ee$e!f   Z%ee%   Z&eee$e"f      Z'eee$e$f      Z( G d de      Z) ejT                  d      dd       Z+ G d de)      Z,e
dd       Z-	 ddd	 	 	 	 	 ddZ.y)    )annotationsN)UserDict)contextmanager)IOTYPE_CHECKINGAnyGenericIteratorListMappingSequenceTupleTypeVaroverload)
exceptionsutils)weak_propertyMkDocsConfigzmkdocs.configTc                      e Zd ZddZed        Zej                  d        ZddZddZddZ	ddZ
ddZd	 Zeddd       Zeddd       ZddZddZy
)BaseConfigOptionc                     g | _         d | _        y N)warningsdefaultselfs    T/var/www/html/content_weaver/venv/lib/python3.12/site-packages/mkdocs/config/base.py__init__zBaseConfigOption.__init__&   s    #%    c                n    	 | j                   j                         S # t        $ r | j                   cY S w xY wr   )_defaultcopyAttributeErrorr   s    r   r   zBaseConfigOption.default*   s3    	!==%%'' 	!== 	!s    44c                    || _         y r   )r#   r   values     r   r   zBaseConfigOption.default2   s	    r!   c               $    | j                  |      S r   )run_validationr'   s     r   validatezBaseConfigOption.validate6   s    ""5))r!   c                    g | _         y r   )r   r   s    r   reset_warningszBaseConfigOption.reset_warnings9   s	    r!   c                     y)z
        Before all options are validated, perform a pre-validation process.

        The pre-validation process method should be implemented by subclasses.
        N r   configkey_names      r   pre_validationzBaseConfigOption.pre_validation<       r!   c                   |S )zy
        Perform validation for a value.

        The run_validation method should be implemented by subclasses.
        r/   r'   s     r   r*   zBaseConfigOption.run_validationC   s	     r!   c                     y)z
        After all options have passed validation, perform a post-validation
        process to do any additional changes dependent on other config values.

        The post-validation process method should be implemented by subclasses.
        Nr/   r0   s      r   post_validationz BaseConfigOption.post_validationK   r4   r!   c                `    |j                  d      r|j                  d      s|d d }|| _        y )N_)endswith
startswith_name)r   ownernames      r   __set_name__zBaseConfigOption.__set_name__S   s+    ==dooc&:9D
r!   Nc                     y r   r/   r   objtypes      r   __get__zBaseConfigOption.__get__X       r!   c                     y r   r/   rB   s      r   rE   zBaseConfigOption.__get__\   rF   r!   c                D    t        |t              s| S || j                     S r   )
isinstanceConfigr=   rB   s      r   rE   zBaseConfigOption.__get__`   s    #v&K4::r!   c                    t        |t              s+t        d| j                   dt	        |       dt               ||| j                  <   y )Nzcan't set attribute (z) because the parent is a z not a )rI   rJ   r%   r=   rD   )r   rC   r(   s      r   __set__zBaseConfigOption.__set__e   sK    #v& '

|3MdSVi[X_`f_gh   DJJr!   returnNone)r(   objectrN   r   )r1   rJ   r2   strrN   rO   )r(   rP   r   )rC   rJ   rN   r   )rN   r   )r(   r   )__name__
__module____qualname__r    propertyr   setterr+   r-   r3   r*   r7   r@   r   rE   rL   r/   r!   r   r   r   %   s     ! ! ^^ *
    
 r!   r   c                      e Zd ZdZd Zy)ValidationErrorz=Raised during the validation process of the config on errors.c                `    t        |       t        |      u xr t        |       t        |      k(  S r   )rD   rQ   )r   others     r   __eq__zValidationError.__eq__p   s'    DzT%[(DSY#e*-DDr!   N)rR   rS   rT   __doc__r[   r/   r!   r   rX   rX   m   s    GEr!   rX   c                       e Zd ZU dZded<   ded<   d Zd fdZdd fdZdd	Zdd
Z	ddZ
ddZddZddZddZedd       Z xZS )rJ   aT  
    Base class for MkDocs configuration, plugin configuration (and sub-configuration) objects.

    It should be subclassed and have `ConfigOption`s defined as attributes.
    For examples, see mkdocs/contrib/search/__init__.py and mkdocs/config/defaults.py.

    Behavior as it was prior to MkDocs 1.4 is now handled by LegacyConfig.
    PlainConfigSchema_schemarQ   config_file_pathc                x   t        t        | dd            }| j                  j                         D ]&  \  }}t	        |t
              s||t        |d|      <   ( t        |j                               | _        | j                  D ]4  \  }}d|_        t        |dd       t        | j                   d| d       y )Nr_   r/   r=   T_legacy_required.z: Setting 'required' is unsupported in class-based configs. All values are required, or can be wrapped into config_options.Optional)dictgetattr__dict__itemsrI   r   tupler_   required	TypeErrorrR   )clsschema	attr_nameattrs       r   __init_subclass__zConfig.__init_subclass__   s    gc9b12"||113 	AOIt$ 01<@wtWi89	A FLLN+"{{ 	OIt DMt/6B||nAi[ 1^ ^ 	r!   c                H    | t         u rt        |i |S t        |   |       S )zSCompatibility: allow referring to `LegacyConfig(...)` constructor as `Config(...)`.)rJ   LegacyConfigsuper__new__)rk   argskwargs	__class__s      r   rs   zConfig.__new__   s)    &=000ws##r!   c                X   t         |           g | _        | j                          | j                  D ch c]  \  }}|	 c}}| _        |5t        |t              s%	 |j                  t        j                               }|xs d| _        y c c}}w # t        $ r t        d      w xY w)N)encodingz)config_file_path is not a Unicode string. )rr   r    _Config__user_configsset_defaultsr_   _schema_keysrI   rQ   decodesysgetfilesystemencodingUnicodeDecodeErrorrX   r`   )r   r`   kvrv   s       r   r    zConfig.__init__   s    *,+/<<841aQ8'
;KS0QS#3#:#:CD]D]D_#:#`  !1 6B 9 & S%&QRRSs   B$B B)c                J    | j                   D ]  \  }}|j                  | |<    y)zt
        Set the base config by going through each validator and getting the
        default if it has one.
        N)r_   r   )r   keyconfig_options      r   r{   zConfig.set_defaults   s+    
 #',, 	.C%--DI	.r!   c                   g }g }| j                   D ]`  \  }	 | j                        }|j                  |      | <    |j                  fd|j                  D               |j                          b t        | j                               | j                  z
  D ]   |j                  d f        ||fS # t        $ r}|j                  |f       Y d }~ hd }~ww xY w)Nc              3  &   K   | ]  }|f 
 y wr   r/   .0wr   s     r   	<genexpr>z#Config._validate.<locals>.<genexpr>        IQaI   z!Unrecognised configuration name: )r_   getr+   extendr   r-   rX   appendsetkeysr|   )r   failedr   r   r(   er   s         @r   	_validatezConfig._validate   s    !#%"&,, 	C)2259S	I-2H2HII,,.	 tyy{#d&7&77 	NCHOOS$EcU"KLM	N x # sAh's   AB;;	C"CC"c                    g }g }| j                   D ]N  \  }	 |j                  |         |j                  fd|j                  D               |j	                          P ||fS # t
        $ r}|j                  |f       Y d }~vd }~ww xY w)Nr2   c              3  &   K   | ]  }|f 
 y wr   r/   r   s     r   r   z'Config._pre_validate.<locals>.<genexpr>   r   r   )r_   r3   r   r   r-   rX   r   r   r   r   r   r   r   s        @r   _pre_validatezConfig._pre_validate   s    !#%"&,, 	(C(,,TC,@I-2H2HII,,.		( x # (sAh''(   AA''	B0BBc                    g }g }| j                   D ]N  \  }	 |j                  |         |j                  fd|j                  D               |j	                          P ||fS # t
        $ r}|j                  |f       Y d }~vd }~ww xY w)Nr   c              3  &   K   | ]  }|f 
 y wr   r/   r   s     r   r   z(Config._post_validate.<locals>.<genexpr>   r   r   )r_   r7   r   r   r-   rX   r   r   s        @r   _post_validatezConfig._post_validate   s    !#%"&,, 	(C(--dS-AI-2H2HII,,.		( x # (sAh''(r   c                $   | j                         \  }}| j                         \  }}|j                  |        |j                  |       t        |      dk(  r6| j	                         \  }}|j                  |        |j                  |       ||fS )Nr   )r   r   r   lenr   )r   r   r   
run_failedrun_warningspost_failedpost_warningss          r   r+   zConfig.validate   s    --/#'>>#3 
Lj!% v;!)-)<)<)>&KMM+&HOOM*xr!   c                    t        |t              s!t        j                  dt	        |             | j
                  j                  |       | j                  |       y)z&Load config options from a dictionary.zPThe configuration is invalid. Expected a key-value mapping (dict) but received: N)rI   rd   r   ConfigurationErrorrD   rz   r   update)r   patchs     r   	load_dictzConfig.load_dict   sU    %&//66:5k]D 
 	""5)Er!   c                ~    t        j                  dt               | j                  t	        j
                  |            S )zALoad config options from the open file descriptor of a YAML file.zjConfig.load_file is not used since MkDocs 1.5 and will be removed soon. Use MkDocsConfig.load_file instead)r   warnDeprecationWarningr   r   	yaml_load)r   config_files     r   	load_filezConfig.load_file   s0    1	

 ~~eook:;;r!   c                N    t        j                  dt               | j                  S )Nz>user_configs is never used in MkDocs and will be removed soon.)r   r   r   rz   r   s    r   user_configszConfig.user_configs	  s"    LN`	
 """r!   )rN   rJ   r   )r`   zstr | bytes | NonerM   )rN   z#tuple[ConfigErrors, ConfigWarnings])r   rd   rN   rO   )r   r   rN   rO   )rN   zSequence[Mapping[str, Any]])rR   rS   rT   r\   __annotations__ro   rs   r    r{   r   r   r   r+   r   r   r   r   __classcell__rv   s   @r   rJ   rJ   {   s\      $7. &   "	< # #r!   rJ   )maxsizec                    t        | t              r| j                  S t        d | j                  j                         D              S )zeExtract ConfigOptions defined in a class (used just as a container) and put them into a schema tuple.c              3  L   K   | ]  \  }}t        |t              s||f  y wr   )rI   r   r   r   r   s      r   r   zget_schema.<locals>.<genexpr>  s"     \DAqJqJZ<[!Q\s   $	$)
issubclassrJ   r_   rh   rf   rg   )rk   s    r   
get_schemar     s6     #v{{\CLL$6$6$8\\\r!   c                  &     e Zd ZdZdd fdZ xZS )rq   zVA configuration object for plugins, as just a dict without type-safe attribute access.c                R    t        d |D              | _        t        |   |       y )Nc              3  *   K   | ]  \  }}||f  y wr   r/   r   s      r   r   z(LegacyConfig.__init__.<locals>.<genexpr>  s     71aV7s   )rh   r_   rr   r    )r   rl   r`   rv   s      r   r    zLegacyConfig.__init__  s#    777)*r!   r   )rl   r^   r`   
str | None)rR   rS   rT   r\   r    r   r   s   @r   rq   rq     s    `+ +r!   rq   c              #  l  K   | ddg}n3t        | t              r| g}nt        | dd      r| j                  g}n| }d}|rh|D ]G  }t        j
                  j                  |      }t        j                  d|        	 t        |d      } nG t        j                  d|d	    d
      t        j                  d        	 |j                  d	       	 | t        |d      r|j!                          yy# t        $ r Y w xY w# t        $ r Y =w xY w# t        |d      r|j!                          w w xY ww)a  
    A context manager which yields an open file descriptor ready to be read.

    Accepts a filename as a string, an open or closed file descriptor, or None.
    When None, it defaults to `mkdocs.yml` in the CWD. If a closed file descriptor
    is received, a new file descriptor is opened for the same file.

    The file descriptor is automatically closed when the context manager block is existed.
    Nz
mkdocs.ymlzmkdocs.yamlclosedFzLoading configuration file: rbzConfig file 'r   z' does not exist.close)rI   rQ   re   r?   ospathabspathlogdebugopenFileNotFoundErrorr   r   seekOSErrorhasattrr   )r   paths_to_tryresult_config_filer   s       r   _open_config_filer   !  sT     $m4	K	%#}	h	.#(()(  		dD77??4(DII4TF;<%)$%5"		d //-Q?PPa0bcc		01C0DEF	##A&'  %w/$$& 0 %   		 %w/$$& 0s`   A9D4<C47D4 D D D44	D =D4?D  D4	DD4DD4D11D4r`   c                  |j                         }|j                         j                         D ]  \  }}|	|j                  |        t        |       5 }ddlm} |9t        j                  r)|t        j                  j                  urt        |dd      } ||      }|j                  |       ddd       j                  |       |j                         \  }	}
|
D ]   \  }}t        j                  d| d|        " |	D ]   \  }}t        j                  d| d|        " |j                         D ]   \  }}t        j!                  d| d|       " t#        |	      dkD  rt%        j&                  d	      |j(                  r0t#        |
      dkD  r"t%        j&                  d
t#        |
       d      |S # 1 sw Y   xY w)a9  
    Load the configuration for a given file object or name.

    The config_file can either be a file object, string or None. If it is None
    the default `mkdocs.yml` filename will loaded.

    Extra kwargs are passed to the configuration to replace any default values
    unless they themselves are None.
    Nr   r   r?   r   zConfig value 'z': z' = z#Aborted with a configuration error!zAborted with z) configuration warnings in 'strict' mode!)r$   rg   popr   mkdocs.config.defaultsr   r~   stdinbufferre   r   r   r+   r   warningerrorr   r   r   Abortstrict)r   r`   ru   optionsr   r(   fdr   cfgerrorsr   config_namer   r   s                 r   load_configr   T  s    kkmG lln**, 
U=KK 
;	' 	27#yyRsyy'7'77#*2vt#< ,<=b	 MM'||~FH ( @Wn[MWI>?@ % <U		N;-s5':;< iik 7
U		N3%tE9567 6{QDEE	H)CM?*ST
 	
 JA	 	s   AF<<G)rk   rD   rN   r^   )r   str | IO | NonerN   zIterator[IO]r   )r   r   r`   r   rN   r   )/
__future__r   	functoolsloggingr   r~   r   collectionsr   
contextlibr   typingr   r   r   r	   r
   r   r   r   r   r   r   mkdocsr   r   mkdocs.utilsr   r   r   	getLoggerr   r   r   	ExceptionrX   rQ   PlainConfigSchemaItemr^   ConfigErrorsConfigWarningsrJ   	lru_cacher   rq   r   r   r/   r!   r   <module>r      s@   "   	 
    %    % &3 g( CLE wqz E PEi E c#334 23 E#y.)*eCHo&S#X S#l T"] #]+6 + /' /'f $(4KO4 4>H44r!   