
    $g              	      
   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Zd dlZd dl	Z	d dl
Z
d dlmZ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mZmZ d dlmZ d dlm Z m!Z! d dl"Z"d dl#Z#d dl$Z#d dl%m&Z&m'Z'm(Z( d d	l)m*Z*m+Z+m,Z,m-Z-m.Z. d d
l/m0Z0  ed          Z1 ede+          Z2 ej3        e4          Z5 G d dee2         e*e2                   Z6 G d de6e2         ee2                   Z7 G d dee1         e*e1                   Z8 G d dee1         e*ee1                            Z9 G d dee1         e*ee:e1f                            Z; G d de9e,                   Z< G d dee1         e8e1                   Z= G d dee1         e8e1                   Z> G d de*          Z? G d  d!e          Z@ G d" d#e8e@                   ZA G d$ d%e8e:                   ZB G d& d'ee1         e*ee1df                            ZC G d( d)eB          ZD G d* d+e=e:                   ZE G d, d-e*e:                   ZF G d. d/e=e:                   ZG G d0 d1e=e:                   ZH G d2 d3eH          ZI G d4 d5eI          ZJ G d6 d7eH          ZK G d8 d9e9e:                   ZL G d: d;eI          ZM G d< d=e*e'jN                           ZN G d> d?e8          ZO G d@ dAee1         e*e1                   ZP G dB dCe+          ZQ G dD dEe*eeQe:f                            ZR G dF dGe8ee:                            ZS G dH dIe8e&jT                           ZU G dJ dKe*ee	jV                                    ZW G dL dMe*e#jX        jY                           ZZdS )N    )annotationsN)Counter
UserString)SimpleNamespace)AnyCallable
CollectionDictGenericIteratorListMappingMutableMapping
NamedTupleTypeVarUnionoverload)quote)urlsplit
urlunsplit)pluginsthemeutils)BaseConfigOptionConfigLegacyConfigPlainConfigSchemaItemValidationError)ConfigurationErrorT
SomeConfig)boundc                       e Zd ZU dZdZded<   ded<   eddd d            Zeddd!d            Zdd fd
Zd"dZd#dZ	d$dZ
 xZS )%	SubConfiga  
    Subconfig Config Option.

    New: If targeting MkDocs 1.4+, please pass a subclass of Config to the
    constructor, instead of the old style of a sequence of ConfigOption instances.
    Validation is then enabled by default.

    A set of `config_options` grouped under a single config option.
    By default, validation errors and warnings resulting from validating
    `config_options` are ignored (`validate=False`). Users should typically
    enable validation with `validate=True`.
    N
str | None_config_file_pathtype[SomeConfig]config_classT)validateselfSubConfig[SomeConfig]r)   boolc                  dS )zRCreate a sub-config in a type-safe way, using fields defined in a Config subclass.N )r*   r(   r)   s      \/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/mkdocs/config/config_options.py__init__zSubConfig.__init__E             FSubConfig[LegacyConfig]config_optionsr   c                   dS )z;Create an untyped sub-config, using directly passed fields.Nr.   )r*   r)   r4   s      r/   r0   zSubConfig.__init__K   r1   r2   c                  t                                                       i | _        |dn|| _        t	          |           t
          u rt          |          dk    rAt          |d         t                    r&t          |d         t                    r|\  | _
        d S t          j        t          |          | _
        |dn|| _        d S d S )NT   r   F)superr0   default_do_validationtyper$   len
isinstance
issubclassr   r(   	functoolspartialr   )r*   r)   r4   	__class__s      r/   r0   zSubConfig.__init__S   s    &.&6ddH::""N##q((~a0$77 )~a0&99 ) (6$"""$-$5lN$S$S!/7/?eeX### #"r2   type[Config]c                f    | j          d|j          d}t          || ft          |                    S )z^Eliminates the need to write `config_class = FooConfig` when subclassing SubConfig[FooConfig].[])r(   )__name__r;   dict)clsr(   names      r/   __class_getitem__zSubConfig.__class_getitem__b   s<    ,99!6999D3&$L"A"A"ABBBr2   configr   key_namestrc                    |j         | _        d S N)config_file_pathr&   r*   rK   rL   s      r/   pre_validationzSubConfig.pre_validationg   s    !'!8r2   valueobjectreturnr!   c                   |                      | j                  }	 |                    |           |                                \  }}n.# t          $ r!}t          t          |                    d }~ww xY w| j        rF| j        	                    d |D                        |r |d         \  }}t          d| d|           |S )NrP   c              3  ,   K   | ]\  }}d | d| V  dS )Sub-option '': Nr.   ).0keymsgs      r/   	<genexpr>z+SubConfig.run_validation.<locals>.<genexpr>t   s7       W W(#s!=!=!=!=!= W W W W W Wr2   r   rY   rZ   )
r(   r&   	load_dictr)   r   r   rM   r:   warningsextend)r*   rS   rK   failedr`   er\   errs           r/   run_validationzSubConfig.run_validationj   s    ""D4J"KK	*U###%00FHH! 	* 	* 	*!#a&&)))	*  	DM   W Wh W W WWWW D!!9S%&BS&B&BS&B&BCCCs   ,A
 

A5A00A5)r*   r+   r(   r'   r)   r,   )r*   r3   r4   r   r)   r,   )r(   rB   rK   r   rL   rM   )rS   rT   rU   r!   )rF   
__module____qualname____doc__r&   __annotations__r   r0   rJ   rR   re   __classcell__rA   s   @r/   r$   r$   4   s           %)((((""""\`a a a a a Xa
  J J J J J XJ 26 N N N N N N NC C C C
9 9 9 9       r2   r$   c                  $     e Zd ZdZd fdZ xZS )PropagatingSubConfigz
    A SubConfig that must consist of SubConfigs with defined schemas.

    Any value set on the top config gets moved to sub-configs with matching keys.
    rS   rT   c                   t          |t                    rt                      }| j        j        D ]\  }}t          |t
                    rr|j        j        D ]e\  }}||v r\|                    |i           }t          |t                    r1|                    |           |                    |||                    f|D ]}||= t                      	                    |          S rO   )
r=   rG   setr(   _schemar$   
setdefaultaddr8   re   )
r*   rS   
to_discardk1v1k2_subdictkrA   s
            r/   re   z#PropagatingSubConfig.run_validation   s    eT"" 	J+3 B BBb),, B!#!8 B BA;;&+&6&6r2&>&>G)'488 B *r 2 2 2 ' 2 22uRy A A A  !HHww%%e,,,r2   rS   rT   )rF   rg   rh   ri   re   rk   rl   s   @r/   rn   rn   }   sG         - - - - - - - - - -r2   rn   c                  \     e Zd ZdZed	d            Zed	d
d            Zd fd	Zd Z xZS )OptionallyRequiredz
    Soft-deprecated, do not use.

    A subclass of BaseConfigOption that adds support for default values and
    required values. It is a base class for config options.
    Nc                    d S rO   r.   r*   r9   s     r/   r0   zOptionallyRequired.__init__       r2   requiredr,   c                   d S rO   r.   r*   r9   r   s      r/   r0   zOptionallyRequired.__init__   r   r2   c                    t                                                       || _        || _        t	          |          | _        d S rO   )r8   r0   r9   _legacy_requiredr,   r   r*   r9   r   rA   s      r/   r0   zOptionallyRequired.__init__   s9     (Xr2   c                    |.| j         | j         }n| j        sdS | j        rt          d          |                     |          S )z
        Perform some initial validation.

        If the option is empty (None) and isn't required, leave it as such. If
        it is empty but has a default, use that. Finally, call the
        run_validation method on the subclass unless.
        N$Required configuration not provided.)r9   r   r   re   r*   rS   s     r/   r)   zOptionallyRequired.validate   sX     =|'] Nt N%&LMMM""5)))r2   rO   r   r,   )NN)rF   rg   rh   ri   r   r0   r)   rk   rl   s   @r/   r}   r}      s             X     X' ' ' ' ' '* * * * * * *r2   r}   c                  N     e Zd ZU dZdZded<   dd fd	ZddZddZddZ	 xZ
S )ListOfItemsz
    Validates a homogeneous list of items.

    E.g. for `config_options.ListOfItems(config_options.Type(int))` a valid item is `[1, 2, 3]`.
    Nbool | Noner   option_typeBaseConfigOption[T]rU   Nonec                    t                                                       || _        || _        | j        | j        _        d S rO   r8   r0   r9   r   r`   r*   r   r9   rA   s      r/   r0   zListOfItems.__init__   ;    &$(M!!!r2   rM   c                >    t          |           j         d| j         S N: r;   rF   r   r*   s    r/   __repr__zListOfItems.__repr__   "    t**%;;)9;;;r2   rK   r   rL   c                "    || _         || _        d S rO   _config	_key_namerQ   s      r/   rR   zListOfItems.pre_validation       !r2   rS   rT   list[T]c                   |$| j         s| j        t          d          | j        }t          |t                    s t          dt          |           d          |s|S t          d          	 | j        j        _        n# t          $ r Y nw xY wt          | dd          fdt          t          |                    D             }t          t          ||                    _        | j        | j        _        D ]}| j                            |           D ]%}| j                            |                   |<   &D ]}| j                            |           fd|D             S )	Nr   z Expected a list of items, but a  was given.r.   r    c                     g | ]
} d | dS )rD   rE   r.   )r[   iparent_key_names     r/   
<listcomp>z.ListOfItems.run_validation.<locals>.<listcomp>   s*    JJJ1..!...JJJr2   c                     g | ]
}|         S r.   r.   )r[   rz   fake_configs     r/   r   z.ListOfItems.run_validation.<locals>.<listcomp>   s    2221A222r2   )r   r9   r   r=   listr;   r   r   rP   AttributeErrorgetattrranger<   rG   zipdatar`   r   rR   re   post_validation)r*   rS   	fake_keysrL   r   r   s       @@r/   re   zListOfItems.run_validation   s   =} N 4%&LMMMLE%&& 	_!"]T%[["]"]"]^^^ 	L"2&&	+/<+HK(( 	 	 	D	 "$R88JJJJc%jj8I8IJJJ	Iu 5 566$(M!# 	C 	CH++KBBBB# 	[ 	[H$($4$C$CKPXDY$Z$ZK!!# 	D 	DH,,[(CCCC2222	2222s   2B 
BBrO   r   r   rU   r   rU   rM   rf   )rS   rT   rU   r   rF   rg   rh   ri   r   rj   r0   r   rR   re   rk   rl   s   @r/   r   r      s           !H    2 2 2 2 2 2 2< < < <" " " "3 3 3 3 3 3 3 3r2   r   c                  N     e Zd ZU dZdZded<   dd fd	ZddZddZddZ	 xZ
S )DictOfItemsz
    Validates a dict of items. Keys are always strings.

    E.g. for `config_options.DictOfItems(config_options.Type(int))` a valid item is `{"a": 1, "b": 2}`.
    Nr   r   r   r   rU   r   c                    t                                                       || _        || _        | j        | j        _        d S rO   r   r   s      r/   r0   zDictOfItems.__init__   r   r2   rM   c                >    t          |           j         d| j         S r   r   r   s    r/   r   zDictOfItems.__repr__  r   r2   rK   r   rL   c                "    || _         || _        d S rO   r   rQ   s      r/   rR   zDictOfItems.pre_validation  r   r2   rS   rT   dict[str, T]c           
        |$| j         s| j        t          d          | j        }t          |t                    s t          dt          |           d          |s|S t          d          }	 | j        j        |_        n# t          $ r Y nw xY w||_
        |D ]}| j                            ||           |D ]B}t          |t                    s+t          dt           dt          |           d| d          C|D ]%}| j                            ||                   ||<   &|D ]}| j                            ||           |S )	Nr   z Expected a dict of items, but a r   r.   Expected type: z for keys, but received: z (key=))r   r9   r   r=   rG   r;   r   r   rP   r   r   r   rR   rM   re   r   )r*   rS   r   r\   s       r/   re   zDictOfItems.run_validation
  s   =} N 4%&LMMMLE%&& 	_!"]T%[["]"]"]^^^ 	L"2&&	+/<+HK(( 	 	 	D	 ! 	> 	>C++K==== 	 	Cc3'' %[c[[DII[[UX[[[    	Q 	QC#/>>{3?OPPK 	? 	?C,,[#>>>>s   0B 
BBrO   r   r   rf   )rS   rT   rU   r   r   rl   s   @r/   r   r      s           !H    2 2 2 2 2 2 2< < < <" " " "               r2   r   c                  Z     e Zd ZdZedd            Zedd            Zdd	d fdZ xZS )ConfigItemsz
    Deprecated: Use `ListOfItems(SubConfig(...))` instead of `ConfigItems(...)`.

    Validates a list of mappings that all must match the same set of
    options.
    r4   r   c                    d S rO   r.   )r*   r4   s     r/   r0   zConfigItems.__init__5  r   r2   r   r,   c                   d S rO   r.   )r*   r   r4   s      r/   r0   zConfigItems.__init__9  r   r2   Nr   rU   r   c                   t                                          t          | g            || _        t	          |          | _        d S )Nr9   )r8   r0   r$   r   r,   r   )r*   r   r4   rA   s      r/   r0   zConfigItems.__init__=  s>    N3R@@@ (Xr2   )r4   r   )r4   r   r   r,   )r4   r   rU   r   rF   rg   rh   ri   r   r0   rk   rl   s   @r/   r   r   -  s             X    X IM ' ' ' ' ' ' ' ' ' ' ' 'r2   r   c                  b     e Zd ZdZeddd            Zeddd	            Zdd fdZddZ xZS )Typezd
    Type Config Option.

    Validate the type of a config option against a given Python type.
    Nlength
int | Nonetype_type[T]c                   d S rO   r.   r*   r   r   kwargss       r/   r0   zType.__init__J  r   r2   tuple[type[T], ...]c                   d S rO   r.   r   s       r/   r0   zType.__init__N  r   r2   rU   r   c               V     t                      j        di | || _        || _        d S Nr.   )r8   r0   _typer   )r*   r   r   r   rA   s       r/   r0   zType.__init__R  s2    ""6"""
r2   rS   rT   r    c           
        t          || j                  sd| j         dt          |           }nG| j        >t	          |          | j        k    r&d| j         d| j         d|dt	          |           }n|S t          |          )Nr    but received: z with length )r=   r   r;   r   r<   r   )r*   rS   r]   s      r/   re   zType.run_validationW  s    %,, 	LDJLLtE{{LLCC[$Ut{)B)BE$* E E4; E E"'E E8;E

E E C
 Lc"""r2   rO   )r   r   r   r   )r   r   r   r   rU   r   rS   rT   rU   r    rF   rg   rh   ri   r   r0   re   rk   rl   s   @r/   r   r   C  s              X     X      
# # # # # # # #r2   r   c                  .     e Zd ZdZdd fd	ZddZ xZS )Choicez_
    Choice Config Option.

    Validate the config option against a strict set of values.
    NchoicesCollection[T]r9   T | NonerU   r   c                    t                      j        dd|i| 	 t          |          }n# t          $ r d}Y nw xY w|rt	          |t
                    rt          d|           |||vrt          |d|          || _        d S )Nr9   r   z"Expected iterable of choices, got z is not one of r.   )r8   r0   r<   	TypeErrorr=   rM   
ValueErrorr   )r*   r   r9   r   r   rA   s        r/   r0   zChoice.__init__l  s    333F333	\\FF 	 	 	FFF	  	MGS11 	MK'KKLLL7'#9#9EE'EEFFFs   . ==rS   rT   r    c                L    || j         vrt          d| j          d|          |S )NzExpected one of: r   )r   r   r   s     r/   re   zChoice.run_validationz  s6    $$!"\dl"\"\SX"\"\]]]r2   rO   )r   r   r9   r   rU   r   r   )rF   rg   rh   ri   r0   re   rk   rl   s   @r/   r   r   e  s`                      r2   r   c                  J     e Zd ZdZ	 	 	 	 dd fdZddZd ZddZd Z xZ	S )
DeprecatedaU  
    Deprecated Config Option.

    Raises a warning as the option is deprecated. Uses `message` for the
    warning. If `move_to` is set to the name of a new config option, the value
    is moved to the new option on pre_validation. If `option_type` is set to a
    ConfigOption instance, then the value is validated against that type.
    NFmoved_tor%   messageremovedr,   r   BaseConfigOption | NonerU   r   c                    t                                                       d | _        || _        |s|rd}nd}|r	|d| dz  }|| _        || _        |pt                      | _        | j        j        | _        d S )Nz6The configuration option '{}' was removed from MkDocs.zZThe configuration option '{}' has been deprecated and will be removed in a future release.z Use 'z
' instead.)	r8   r0   r9   r   r   r   r   optionr`   )r*   r   r   r   r   rA   s        r/   r0   zDeprecated.__init__  s     	  		9 R;   98H8888!7%5%7%7,r2   rK   r   rL   rM   c                (   | j                             ||           |                    |          | j        r't	          | j                            |                    | j                            | j                            |                     | j	        z| j	        
                    d          ^ }}|}|D ]<}|                    |          i ||<   ||         }t          |t                    s d S =|                    |          ||<   d S d S d S )N.)r   rR   getr   r   r   formatr`   appendr   splitr=   rG   pop)r*   rK   rL   parent_keys
target_keytargetr\   s          r/   rR   zDeprecated.pre_validation  s   ""68444::h+| E%dl&9&9(&C&CDDDM  !4!4X!>!>???}(+/=+>+>s+C+C(j$&  Czz#.&(s#C[F%fd33  &,ZZ%9%9z"""% ,+
 )(r2   c                6    | j                             |          S rO   r   r)   r   s     r/   r)   zDeprecated.validate  s    {##E***r2   c                <    | j                             ||           d S rO   )r   r   rQ   s      r/   r   zDeprecated.post_validation  s     ##FH55555r2   c                Z    | j                                          | j         j        | _        d S rO   r   reset_warningsr`   r   s    r/   r   zDeprecated.reset_warnings  &    ""$$$,r2   )NNFN)
r   r%   r   r%   r   r,   r   r   rU   r   rf   )
rF   rg   rh   ri   r0   rR   r)   r   r   rk   rl   s   @r/   r   r     s           $"/3- - - - - - -6: : : :.+ + +6 6 6 6- - - - - - -r2   r   c                  ,    e Zd ZU ded<   ded<   ddZdS )	_IpAddressValuerM   hostintportrU   c                $    | j          d| j         S )N:)r   r   r   s    r/   __str__z_IpAddressValue.__str__  s    )))di)))r2   Nr   )rF   rg   rh   rj   r  r.   r2   r/   r   r     s<         IIIIII* * * * * *r2   r   c                      e Zd ZdZddZdS )		IpAddressz_
    IpAddress Config Option.

    Validate that an IP address is in an appropriate format
    rS   rT   rU   r   c                   t          |t                    rd|vrt          d          |                    dd          \  }}|dk    rx|                    d          r|                    d          r
|dd         }	 t          t          j        |                    }n!# t          $ r}t          |          d }~ww xY w	 t          |          }n!# t          $ r t          d| d	          w xY wt          ||          S )
Nr  z$Must be a string of format 'IP:PORT'r7   	localhostrD   rE   'z' is not a valid port)r=   rM   r   rsplit
startswithendswith	ipaddress
ip_addressr   r   	Exceptionr   )r*   rS   r   port_strrc   r   s         r/   re   zIpAddress.run_validation  s.   %%% 	JE)9)9!"HIIIc1--h;s## "c(:(: "AbDz)9/5566 ) ) )%a((()	Gx==DD 	G 	G 	G!"Eh"E"E"EFFF	G tT***s$   =!B 
B=)B88B=C C/N)rS   rT   rU   r   rF   rg   rh   ri   re   r.   r2   r/   r  r    s2         + + + + + +r2   r  c                  n     e Zd ZdZeddddd            Zeddddd	            Zdd fdZddZ xZS )URLzR
    URL Config Option.

    Validate a URL by requiring a scheme is present.
    NF)is_dirr  r,   c                   d S rO   r.   )r*   r9   r  s      r/   r0   zURL.__init__  r   r2   r   c                   d S rO   r.   )r*   r9   r   r  s       r/   r0   zURL.__init__  r   r2   rU   r   c                \    || _         t                                          ||           d S )Nr   )r  r8   r0   )r*   r9   r   r  rA   s       r/   r0   zURL.__init__  s-    844444r2   rS   rT   rM   c                   t          |t                    st          dt          |                     |dk    r|S 	 t	          |          }n$# t
          t          f$ r t          d          w xY w|j        rU|j        rN| j	        r8|j
                            d          s|                    |j
         d          }t          |          S t          d          )NzExpected a string, got r   zUnable to parse the URL./pathz;The URL isn't valid, it should include the http:// (scheme))r=   rM   r   r;   r   r   r   schemenetlocr  r  r  _replacer   )r*   rS   
parsed_urls      r/   re   zURL.run_validation  s    %%% 	K!"IDKK"I"IJJJB;;L	>!%JJ	* 	> 	> 	>!"<===	>  	*!2 	*{ M:?#;#;C#@#@ M'006K6K6K0LL
j)))[\\\s   A !A/rO   )r  r,   )r   r,   r  r,   )NNF)r  r,   rU   r   rS   rT   rU   rM   r   rl   s   @r/   r  r    s          u      X u      X5 5 5 5 5 5 5] ] ] ] ] ] ] ]r2   r  c                  H     e Zd ZdZd fdZd ZddZddZddZd Z	 xZ
S )Optionalz
    Wraps a field and makes a None value possible for it when no value is set.

    E.g. `my_field = config_options.Optional(config_options.Type(str))`
    config_optionr   rU   r   c                    |j         t          d|j         d          t                                                       || _        |j        | _        d S )Nz#This option already has a default (z.) and doesn't need to be wrapped into Optional)r9   r   r8   r0   r   r`   )r*   r#  rA   s     r/   r0   zOptional.__init__  sh     ,@m6K @ @ @   	#%.r2   c                B    |dv rt           t          | j        |          S )N)r   r`   )r   r   r   )r*   r\   s     r/   __getattr__zOptional.__getattr__"  s&    (((  t{C(((r2   rK   r   rL   rM   c                8    | j                             ||          S rO   )r   rR   rQ   s      r/   rR   zOptional.pre_validation'  s    {))&(;;;r2   rS   rT   r   c                >    |d S | j                             |          S rO   r   r   s     r/   re   zOptional.run_validation*  s"    =4{##E***r2   c                ^    | j                             ||          }| j         j        | _        |S rO   )r   r   r`   )r*   rK   rL   results       r/   r   zOptional.post_validation/  s*    ,,VX>>,r2   c                Z    | j                                          | j         j        | _        d S rO   r   r   s    r/   r   zOptional.reset_warnings4  r   r2   )r#  r   rU   r   rf   )rS   rT   rU   r   )rF   rg   rh   ri   r0   r&  rR   re   r   r   rk   rl   s   @r/   r"  r"    s         / / / / / /) ) )
< < < <+ + + +
   
- - - - - - -r2   r"  c                  &     e Zd Z fdZddZ xZS )RepoURLc                n    t          j        dt                      t                      j        |i | d S )Nz8RepoURL is no longer used in MkDocs and will be removed.)r`   warnDeprecationWarningr8   r0   )r*   argsr   rA   s      r/   r0   zRepoURL.__init__:  sA    FHZ	
 	
 	
 	$)&)))))r2   rK   r   rL   rM   c                   t          |d                   j                                        }|                    d          }|d         i|                    d          T|dk    rd|d<   nH|dk    rd|d<   n<|dk    rd	|d<   n0|                    d
          d                                         |d<   |d         ||dk    s|dk    rd}n|dk    rd}nd}|r|                    d          s|dz  }||d<   d S )Nrepo_urledit_uri	repo_name
github.comGitHubbitbucket.org	Bitbucket
gitlab.comGitLabr   r   edit/master/docs/src/default/docs/r   r  )r   r  lowerr   r   titler  )r*   rK   rL   	repo_hostr4  s        r/   r   zRepoURL.post_validation@  s>   VJ/007==??	::j)) *)fjj.E.E.ML((&.{##o--&1{##l**&.{##&/ooc&:&:1&=&C&C&E&E{# *)h.>L((I,E,E.o--.  	H--c22 	OH%zr2   rf   rF   rg   rh   r0   r   rk   rl   s   @r/   r-  r-  9  sL        * * * * *& & & & & & & &r2   r-  c                  (     e Zd Zd
 fdZdd	Z xZS )EditURIrepo_url_keyrM   rU   r   c                b    t                                          t                     || _        d S rO   r8   r0   rM   rD  r*   rD  rA   s     r/   r0   zEditURI.__init__`  )    (r2   rK   r   rL   c                (   |                     |          }|                     | j                  }|?|=t          |          j                                        }|dk    s|dk    rd}n|dk    rd}|r|                    d          s|dz  }|||<   d S )Nr6  r:  r<  r8  r=  r  )r   rD  r   r  r>  r  )r*   rK   rL   r4  r3  r@  s         r/   r   zEditURI.post_validationd  s    ::h''::d/00 4 **17799IL((I,E,E.o--.  	H--c22 	OH#xr2   rD  rM   rU   r   rf   rA  rl   s   @r/   rC  rC  _  sQ        ) ) ) ) ) )$ $ $ $ $ $ $ $r2   rC  c                  t     e Zd Z G d dej                  Z G d de          Zdd fd
ZddZddZ	 xZ
S )EditURITemplatec                       e Zd Z fdZ xZS )EditURITemplate.Formatterc                v    |dk    rt          |d          S t                                          ||          S )Nqr   )safe)urlquoter8   convert_field)r*   rS   
conversionrA   s      r/   rS  z'EditURITemplate.Formatter.convert_fieldx  s;    S  B////77((
;;;r2   )rF   rg   rh   rS  rk   rl   s   @r/   	FormatterrN  w  s8        	< 	< 	< 	< 	< 	< 	< 	< 	<r2   rU  c                  &     e Zd Zd fdZd Z xZS )EditURITemplate.TemplaterU   r   c                    t                                          |           || _        	 |                     dd           d S # t          $ r}t          d|           d }~ww xY w)Nr   zUnknown template substitute: )r8   r0   	formatterr   KeyErrorr   )r*   rY  r   rc   rA   s       r/   r0   z!EditURITemplate.Template.__init__~  s|    GGT"""&DNFB##### F F F !D!D!DEEEFs   A 
A$AA$c                F    | j                             | j        ||          S )N)r  
path_noext)rY  r   r   )r*   r  r\  s      r/   r   zEditURITemplate.Template.format  s!    >((*(UUUr2   r   )rF   rg   rh   r0   r   rk   rl   s   @r/   TemplaterW  }  sY        	F 	F 	F 	F 	F 	F	V 	V 	V 	V 	V 	V 	Vr2   r]  Nedit_uri_keyr%   rU   r   c                V    t                                                       || _        d S rO   )r8   r0   r^  )r*   r^  rA   s     r/   r0   zEditURITemplate.__init__  s'    (r2   rS   rT   c                    	 |                      |                                 |          S # t          $ r}t          |          d }~ww xY wrO   )r]  rU  r  r   r*   rS   rc   s      r/   re   zEditURITemplate.run_validation  sR    	%==!1!15999 	% 	% 	%!!$$$	%s   '* 
AAArK   r   rL   rM   c                    | j         rW|                    |          rD|                    | j                   r,| j                            d| j          d| d           d S d S d S d S )NzThe option 'z' has no effect when 'z	' is set.)r^  r   r`   r   rQ   s      r/   r   zEditURITemplate.post_validation  s     	H!5!5 	&**TEV:W:W 	M  [t0[[[[[    	 	 	 	 	 	r2   rO   )r^  r%   rU   r   r{   rf   )rF   rg   rh   stringrU  r   r]  r0   re   r   rk   rl   s   @r/   rL  rL  v  s        < < < < <F$ < < <
V 
V 
V 
V 
V: 
V 
V 
V) ) ) ) ) ) )% % % %       r2   rL  c                  (     e Zd Zd
 fdZdd	Z xZS )RepoNamerD  rM   rU   r   c                b    t                                          t                     || _        d S rO   rF  rG  s     r/   r0   zRepoName.__init__  rH  r2   rK   r   rL   c                f   |                     |          }|                     | j                  }|}|}t          |d                   j                                        }|dk    rd}n?|dk    rd}n6|dk    rd}n-|                    d          d	                                         }|||<   d S d S d S )
Nr3  r6  r7  r8  r9  r:  r;  r   r   )r   rD  r   r  r>  r   r?  )r*   rK   rL   r5  r3  r@  s         r/   r   zRepoName.post_validation  s    JJx((	::d/00 I$5 
!344;AACCIL(($		o--'		l**$		%OOC00399;;	(F8  $5$5r2   rJ  rf   rA  rl   s   @r/   re  re    sQ        ) ) ) ) ) )) ) ) ) ) ) ) )r2   re  c                  t     e Zd ZU dZ eej        j                  Zde	d<   dZ
dd fd
ZddZd fdZ xZS )FilesystemObjectz8Base class for options that point to filesystem objects.zCallable[[str], bool]existence_testzfile or directoryFexistsr,   rU   r   c                b     t                      j        t          fi | || _        d | _        d S rO   )r8   r0   rM   rk  
config_dir)r*   rk  r   rA   s      r/   r0   zFilesystemObject.__init__  s4    '''''&*r2   rK   r   rL   rM   c                j    |j         r$t          j                            |j                   nd | _        d S rO   )rP   osr  dirnamerm  rQ   s      r/   rR   zFilesystemObject.pre_validation  s/    8>8OYBGOOF3444UY 	r2   rS   rT   c                   t                                          |          }| j        rDt          j                            |          s%t          j                            | j        |          }| j        r0|                     |          st          d| d| j
         d          t          j                            |          S )Nz
The path 'z' isn't an existing r   )r8   re   rm  ro  r  isabsjoinrk  rj  r   rI   abspath)r*   rS   rA   s     r/   re   zFilesystemObject.run_validation  s    &&u--? 	927==#7#7 	9GLL%88E; 	Xt22599 	X!"Vu"V"V$)"V"V"VWWWwu%%%r2   )F)rk  r,   rU   r   rf   r   )rF   rg   rh   ri   staticmethodro  r  rk  rj  rj   rI   r0   rR   re   rk   rl   s   @r/   ri  ri    s         BB,8L,H,HNHHHHD+ + + + + + +

 
 
 

& & & & & & & & & &r2   ri  c                  @    e Zd ZdZ eej        j                  ZdZ	dS )Dirzf
    Dir Config Option.

    Validate a path to a directory, optionally verifying that it exists.
    	directoryN)
rF   rg   rh   ri   ru  ro  r  isdirrj  rI   r.   r2   r/   rw  rw    s2          "\"'-00NDDDr2   rw  c                      e Zd ZddZdS )DocsDirrK   r   rL   rM   c                    |j         sd S t          j                            |j                   ||         k    rt	          d| d| d          d S )NzThe 'zd' should not be the parent directory of the config file. Use a child directory instead so that the 'z"' is a sibling of the config file.)rP   ro  r  rp  r   rQ   s      r/   r   zDocsDir.post_validation  sy    & 	F 7??6233vh7GGG!B B BB B B   HGr2   Nrf   )rF   rg   rh   r   r.   r2   r/   r{  r{    s(        
 
 
 
 
 
r2   r{  c                  @    e Zd ZdZ eej        j                  ZdZ	dS )Filezb
    File Config Option.

    Validate a path to a file, optionally verifying that it exists.
    fileN)
rF   rg   rh   ri   ru  ro  r  isfilerj  rI   r.   r2   r/   r~  r~    s2          "\"'.11NDDDr2   r~  c                  `     e Zd ZdZeg fd            Zeg fd
d            Zg dfd fd	Z xZS )ListOfPathsa  
    List of Paths Config Option.

    A list of file system paths. Raises an error if one of the paths does not exist.

    For greater flexibility, prefer ListOfItems, e.g. to require files specifically:

        config_options.ListOfItems(config_options.File(exists=True))
    c                    d S rO   r.   r   s     r/   r0   zListOfPaths.__init__  r   r2   r   r,   c                   d S rO   r.   r   s      r/   r0   zListOfPaths.__init__  r   r2   NrU   r   c                v    t                                          t          d          |           || _        d S NT)rk  )r8   r0   ri  r   r   s      r/   r0   zListOfPaths.__init__  s4    )666@@@ r2   r   r   r   rl   s   @r/   r  r    s          !    X !     X  "D ! ! ! ! ! ! ! ! ! ! !r2   r  c                  $     e Zd ZdZd fdZ xZS )SiteDirzp
    SiteDir Config Option.

    Validates the site_dir and docs_dir directories do not contain each other.
    rK   r   rL   rM   c                   t                                          ||           |d         }|d         }|t          j        z                       |                    t          j                  t          j        z             rt          d| d| d          |t          j        z                       |                    t          j                  t          j        z             rt          d| d| d          d S )Ndocs_dirsite_dirzThe 'docs_dir' should not be within the 'site_dir' as this can mean the source files are overwritten by the output or it will be deleted if --clean is passed to mkdocs build. (site_dir: 'z', docs_dir: 'z')zThe 'site_dir' should not be within the 'docs_dir' as this leads to the build directory being copied into itself and duplicate nested files in the 'site_dir'. (site_dir: ')r8   r   ro  sepr  rstripr   )r*   rK   rL   r  r  rA   s        r/   r   zSiteDir.post_validation  s%   111*%*%
 rv))(//"&*A*ABF*JKK 	!D  (D D 8@D D D   ++HOOBF,C,Cbf,LMM 	!D  (D D 8@D D D  	 	r2   rf   )rF   rg   rh   ri   r   rk   rl   s   @r/   r  r    sG                  r2   r  c                  6     e Zd ZdZdd fdZdd
ZddZ xZS )Themez\
    Theme Config Option.

    Validate that the theme exists and build Theme instance.
    NrU   r   c                V    t                                                       || _        d S rO   )r8   r0   r9   )r*   r9   rA   s     r/   r0   zTheme.__init__,  s$    r2   rK   r   rL   rM   c                    |j         | _         d S rO   rW   rQ   s      r/   rR   zTheme.pre_validation0  s     & 7r2   rS   rT   theme.Themec                   || j         
d| j         i}net          |t                    rd|i}nKt          |t                    rd|vrt	          d          |}n t	          dt          |           d          t          j                    }|d         8|d         |vr.t	          d|d          dd                    |                     |d         sd|vrt	          d	          d|v rrt          j
                            |d                   sMt          j
                            | j                  }t          j
                            ||d                   |d<   d|v rNt          j
                            |d                   s)t	          d
                    |d                             d|v r*t          |d         t                    st	          d          t!          j        di |S )NrI   zNo theme name set.zInvalid type z'. Expected a string or key/value pairs.zUnrecognised theme name: 'z''. The available installed themes are: z, 
custom_dirz7At least one of 'name' or 'custom_dir' must be defined.z5The path set in custom_dir ('{path}') does not exist.r  localez'locale' must be a string.r.   )r9   r=   rM   rG   r   r;   r   get_theme_namesrs  ro  r  rr  rp  rP   ry  r   r   r  )r*   rS   theme_configthemesrm  s        r/   re   zTheme.run_validation3  s!   =T\5"DL1LLs## 		"E?LLt$$ 	U""%&:;;; LL!TUTTT   &((+V0DF0R0R!K\&-A K K7;yy7H7HK K  
 F# 	]L(H(H!"[\\\ <''l<>X0Y0Y')>??J)+j,|B\)])]L&<''l<>X0Y0Y'!GNN%l3 O     |##J|H7Ms,S,S#!">???{**\***r2   rO   r   rf   )rS   rT   rU   r  )rF   rg   rh   ri   r0   rR   re   rk   rl   s   @r/   r  r  %  st               8 8 8 8'+ '+ '+ '+ '+ '+ '+ '+r2   r  c                  >    e Zd ZdZddddZd Zedd
            ZdS )Navz:
    Nav Config Option.

    Validate the Nav config.
    TtoprS   rT   c                  t          |t                    r!|D ]}|                     |           |r|sd }nt          |t                    rc|ra|s_| j                            d|                     |                      |                                D ]}|                     |d           n=t          |t                    r|sn%t          d|                     |                     |S )NzExpected nav to be a list, got Fr  )r=   r   _validate_nav_itemrG   r`   r   
_repr_itemvaluesre   rM   r   )r*   rS   r  subitems       r/   re   zNav.run_validationd  s   eT"" 	^  1 1''0000 5 t$$ 	^ 	^s 	^M  ![4??SXCYCY![![\\\ <<>> 8 8##G#77778s## 	^C 	^!"\DOOTYDZDZ"\"\]]]r2   c                t   t          |t                    rd S t          |t                    rht          |          dk    r%t	          d|                     |                     |                                D ]}|                     |d           d S t	          d|                     |                     )Nr7   z.Expected nav item to be a dict of size 1, got Fr  z.Expected nav item to be a string or dict, got )r=   rM   rG   r<   r   r  r  re   )r*   rS   subnavs      r/   r  zNav._validate_nav_itemu  s    eS!! 	Dt$$ 
	5zzQ%]T__UZE[E[]]    ,,.. 7 7##F#66667 7 "YQVAWAWYY  r2   rU   rM   c                   t          |t                    r&|r$dt          |                                           S t          |t          t          d           f          rt          |          S dt          |          j         d|S )Nzdict with keys za r   )r=   rG   tuplekeysrM   r;   reprrF   )rH   rS   s     r/   r  zNav._repr_item  s    eT"" 	:u 	::U5::<<%8%8:::T$ZZ011 	:;;9U,99999r2   Nr{   r   )rF   rg   rh   ri   re   r  classmethodr  r.   r2   r/   r  r  ]  sp          48      "   : : : [: : :r2   r  c                      e Zd ZdZddZdS )	Privatez`A config option that can only be populated programmatically. Raises an error if set by the user.rS   rT   rU   r   c                (    |t          d          d S )NzFor internal use only.)r   r   s     r/   re   zPrivate.run_validation  s    !":;;; r2   N)rS   rT   rU   r   r  r.   r2   r/   r  r    s.        jj< < < < < <r2   r  c                       e Zd ZdZ ee          Z	  eed          Z	  eed          Z		  eed          Z
	 dd fdZd	 Zd
 Z xZS )ExtraScriptValuezZAn extra script to be added to the page. The `extra_javascript` config is a list of these.r   r   FNr  rM   c                Z    t                                          |           || _        d S )NrW   )r8   r0   r  )r*   r  rP   rA   s      r/   r0   zExtraScriptValue.__init__  s*    *:;;;			r2   c                    | j         S rO   r  r   s    r/   r  zExtraScriptValue.__str__  
    yr2   c                    | j         S rO   r  r   s    r/   
__fspath__zExtraScriptValue.__fspath__  r  r2   )r   N)r  rM   )rF   rg   rh   ri   r   rM   r  r;   r,   deferasync_r0   r  r  rk   rl   s   @r/   r  r    s        dd499D34R   D4Du%%%E7T$&&&F7              r2   r  c                  &     e Zd Z fdZddZ xZS )ExtraScriptc                    t                                                       t          t                               | _        d S rO   )r8   r0   r$   r  r   )r*   rA   s    r/   r0   zExtraScript.__init__  s3    $%5688r2   rS   rT   rU   ExtraScriptValue | strc                    | j         | j        _         t          |t                    r4|                    d          r| j                            |dd          S |S | j                            |          S )Nz.mjsmodule)r  r;   )r`   r   r=   rM   r  re   r   s     r/   re   zExtraScript.run_validation  sq    $(M!eS!! 	~~f%% Z'66x7X7XYYYL..u555r2   )rS   rT   rU   r  )rF   rg   rh   r0   re   rk   rl   s   @r/   r  r    sL        9 9 9 9 96 6 6 6 6 6 6 6r2   r  c                  J     e Zd ZdZddg fd fdZddZd ZddZddZ xZ	S )MarkdownExtensionsak  
    Markdown Extensions Config Option.

    A list or dict of extensions. Each list item may contain either a string or a one item dict.
    A string must be a valid Markdown extension name with no config options defined. The key of
    a dict item must be a valid Markdown extension name and the value must be a dict of config
    options for that extension. Extension configs are set on the private setting passed to
    `configkey`. The `builtins` keyword accepts a list of extensions which cannot be overridden by
    the user. However, builtins can be duplicated to define config options for them if desired.
    Nmdx_configsbuiltinslist[str] | None	configkeyrM   r9   	list[str]rU   r   c                ^     t                      j        dd|i| |pg | _        || _        d S )Nr9   r.   )r8   r0   r  r  )r*   r  r  r9   r   rA   s        r/   r0   zMarkdownExtensions.__init__  s=     	333F333 B"r2   extrT   cfgc                    t          |t                    st          d| d          |sd S t          |t                    st          d| d          || j        |<   d S )Nr	  z)' is not a valid Markdown Extension name.z/Invalid config options for Markdown Extension 'z'.)r=   rM   r   rG   
configdata)r*   r  r  s      r/   validate_ext_cfgz#MarkdownExtensions.validate_ext_cfg  s|    #s## 	V!"Tc"T"T"TUUU 	F#t$$ 	]!"[TW"["["[\\\"r2   c                n    t                      x|_        }t                      |_        d|j        _        d S )Nr   )r   _current_pager  src_path)r*   rK   rL   current_pages       r/   rR   z!MarkdownExtensions.pre_validation  s4    .=.?.??|+--%'"""r2   rS   c                   i | _         t          |t          t          t          f          st          d          g }t          |t                    rF|                                D ]0\  }}|                     ||           |                    |           1n|D ]}t          |t                    ret          |          dk    rt          d          |
                                \  }}|                     ||           |                    |           |t          |t                    r|                    |           t          d          t          j        | j        |z             }t          j                    }|D ]}	 |                    |f| j                     # t$          $ r}g }t'          t)          j        t-          j                    d                             D ]!}	|	j        s n|                    d|	           "d                    t)          j        |                    }
t          d| d|
 t9          |          j         d|           d }~ww xY w|S )	Nz)Invalid Markdown Extensions configurationr7      r   r   zFailed to load extension 'z'.
r   )r  r=   r   r  rG   r   itemsr  r   r<   popitemrM   r   reduce_listr  markdownMarkdownregisterExtensionsr  reversed	traceback
extract_tbsysexc_infolineinsertrs  format_listr;   rF   )r*   rS   
extensionsr  r  itemmdrc   stackframetbs              r/   re   z!MarkdownExtensions.run_validation  s   +-%$t!455 	O!"MNNN
eT"" 	W!KKMM ' 'S%%c3///!!#&&&&'  
W 
WdD)) 	W4yy1}}-.YZZZ#||~~HC))#s333%%c****c** W%%d++++)*UVVV&t}z'ABB
    	 	C%%sfdo>>>> 
 
 
 %i&:3<>>!;L&M&MNN + +E : LLE****WWY2599::%UUU"Ud1gg>NUURSUU  
 s   F
I)B/IIrK   r   rL   c                2    d |_         | j        || j        <   d S rO   )r  r  r  rQ   s      r/   r   z"MarkdownExtensions.post_validation  s    #!%t~r2   )r  r  r  rM   r9   r  rU   r   )r  rT   r  rT   rU   r   )rS   rT   rU   r  rf   )
rF   rg   rh   ri   r0   r  rR   re   r   rk   rl   s   @r/   r  r    s        	 	 &*&		# 	# 	# 	# 	# 	# 	## # # #( ( () ) ) )V1 1 1 1 1 1 1 1r2   r  c                  \     e Zd ZdZdd fdZd ZddZedd            ZddZ	ddZ
 xZS )Pluginsz
    Plugins config option.

    A list or dict of plugins. If a plugin defines config options those are used when
    initializing the plugin class.
    N	theme_keyr%   rU   r   c                     t                      j        di | t          j                    | _        || _        d | _        i | _        d S r   )r8   r0   r   get_pluginsinstalled_pluginsr  r   plugin_cache)r*   r  r   rA   s      r/   r0   zPlugins.__init__  sM    ""6"""!(!4!6!6"&*;=r2   c                    || _         d S rO   )r   rQ   s      r/   rR   zPlugins.pre_validation   s    r2   rS   rT   plugins.PluginCollectionc                *   t          |t          t          t          f          st	          d          t          j                    | _        t                      | _        | 	                    |          D ]\  }}| 
                    ||           | j        S )Nz7Invalid Plugins configuration. Expected a list or dict.)r=   r   r  rG   r   r   PluginCollectionr   _instance_counter_parse_configsload_plugin_with_namespace)r*   rS   rI   r  s       r/   re   zPlugins.run_validation#  s    %$t!455 	]!"[\\\/11;B99,,U33 	7 	7ID#++D#6666|r2   list | tuple | dictIterator[tuple[str, dict]]c              #    K   t          |t                    rJ|                                D ]3\  }}t          |t                    st	          d| d          ||fV  4d S |D ]}t          |t                    r:t          |          dk    rt	          d          |                                \  }}n|}i }t          |t                    st	          d| d          ||fV  d S )Nr	  z' is not a valid plugin name.r7   zInvalid Plugins configuration)r=   rG   r  rM   r   r<   r  )rH   rS   rI   r  r  s        r/   r  zPlugins._parse_configs,  s     eT"" 	 "[[]]    	c!$,, S)*Qd*Q*Q*QRRRCi   
  
  
 dD)) 4yyA~~-.MNNN $ID##DC!$,, S)*Qd*Q*Q*QRRRCi
  
 r2   rI   rM   tuple[str, plugins.BasePlugin]c                   d|v r |                     d          r
|dd          }nQ| j        rJ| j        rC| j        | j                 }t          |t                    s|d         }|r| d| }|| j        v r|}||                     ||          fS )Nr  r7   rI   )r  r  r   r=   rM   r  load_plugin)r*   rI   rK   current_themeexpanded_names        r/   r  z"Plugins.load_plugin_with_namespace@  s    $;;s##  ABBx ~ -$, - $T^ <!-55 :$1&$9M  -'4$=$=t$=$=M$(>>>,d&&tV4455r2   plugins.BasePluginc           	        | j         vrt          d d          |pi }t          |t                    st          d d          | j        xx         dz  cc<   | j                 }}|dk    r|d| z  }| j                            |          }|| j                                                  }t          |t          j
                  sBt          |j         d|j         dt          j
        j         dt          j
        j                    |            }t          |d	          st          |d
          r
|| j        |<   |dk    r/t          |dd          s| j                            d d           d|v rt#          d |j        D                       sn|                    d          }t          |t(                    s"t          d dt+          |                     |s t,                              d| d           |S |                    || j        r| j        j        nd           \  }}	|	D ]`}
t          |
t6                    r!| j                            d| d|
            8|
\  }}| j                            d| d| d|            ad                    fd|D                       }|rt          |          || j	        |<   |S )NzThe "z" plugin is not installedz Invalid config options for the 'z	' plugin.r7   z #r   z must be a subclass of 
on_startupon_shutdownsupports_multiple_instancesFPlugin 'z|' was specified multiple times - this is likely a mistake, because the plugin doesn't declare `supports_multiple_instances`.enabledc              3  .   K   | ]}|d          dk    V  dS )r   r  Nr.   )r[   pairs     r/   r^   z&Plugins.load_plugin.<locals>.<genexpr>u  s+      *a*aD47i+?*a*a*a*a*a*ar2   z3' option 'enabled': Expected boolean but received: z&' is disabled in the config, skipping.rZ   
' option '
c              3  4   K   | ]\  }}d  d| d| V  dS )r  r  rZ   Nr.   )r[   r\   r]   rI   s      r/   r^   z&Plugins.load_plugin.<locals>.<genexpr>  sC      "c"cPXPSUX#Kd#K#Kc#K#Kc#K#K"c"c"c"c"c"cr2   )r  r   r=   rG   r  r  r   loadr>   r   
BasePluginrg   rF   hasattrr   r`   r   anyconfig_schemer   r,   r;   logdebugload_configr   rP   rM   rs  )r*   rI   rK   inst_number	inst_nameplugin
plugin_clsr  errorswarnswarningr\   r]   errors_messages    `            r/   r  zPlugins.load_pluginQ  s   t---!"I$"I"I"IJJJ2&$'' 	V!"TT"T"T"TUUUt$$$)$$$,T2	??+k+++I"&&y11>/5::<<Jj'*<== %!, V Vz/B V V*5V V8?8J8SV V  
  Z\\Fv|,, 60N0N 6/5!),??763PRW#X#X?M  T4 T T T   s*a*aFL`*a*a*a'a'ajj++Ggt,, %gtggX\]dXeXegg    		VYVVVWWW**T\KDL11t
 
  	T 	TG'3'' T$$%G	%G%Gg%G%GHHHH"S$$%R	%R%RS%R%RS%R%RSSSS"c"c"c"c\b"c"c"ccc 	2!.111"(Yr2   rO   )r  r%   rU   r   )rS   rT   rU   r  )rS   r  rU   r  )rI   rM   rU   r  )rI   rM   rU   r  )rF   rg   rh   ri   r0   rR   re   r  r  r  r  rk   rl   s   @r/   r  r    s         > > > > > > >            [ &6 6 6 6"< < < < < < < <r2   r  c                  p     e Zd ZdZd fdZdd
ZddZ ej        d          d             Z	ddZ
 xZS )Hooksz?A list of Python scripts to be treated as instances of plugins.plugins_keyrM   rU   r   c                d    t                                                       g | _        || _        d S rO   )r8   r0   r9   r  )r*   r  rA   s     r/   r0   zHooks.__init__  s.    &r2   rK   r   rL   c                    t          t          d                    | _        | j                            ||           d S r  )r   r~  _base_optionrR   rQ   s      r/   rR   zHooks.pre_validation  s<    'D(9(9(9::((:::::r2   rS   rT   Mapping[str, Any]c                   | j                             |          }| j                            | j         j                   t	          |t
                    sJ i }t          ||          D ]\  }}|                     ||          ||<   |S rO   )r  r)   r`   ra   r=   r   r   
_load_hook)r*   rS   pathshooksrI   r  s         r/   re   zHooks.run_validation  s    !**511T.7888%&&&&&eU++ 	6 	6JD$//$55E$KKr2   N)maxsizec                0   dd l }|j                            ||          }|t          d| d          |j                            |          }|t
          j        |<   |j        t          d| d          t
          j        	                                }t
          j        
                    dt          j                            |                     	 |j                            |           |t
          j        d d <   n# |t
          j        d d <   w xY w|S )Nr   zCannot import path 'z' as a Python module)importlib.utilutilspec_from_file_locationr   module_from_specr  modulesloaderr  copyr  ro  rp  exec_module)r*   rI   r  	importlibspecr  old_sys_paths          r/   r  zHooks._load_hook  s   ~55dDAA<!"S"S"S"STTT0066"D;!"S"S"S"STTTx}}27??400111	'K##F+++&CHQQQKK,CHQQQK&&&&s   D   Dc                j    || j                  }||                                         D ]
\  }}|||<   d S rO   )r  r  )r*   rK   rL   r   rI   hooks         r/   r   zHooks.post_validation  sH    )* *0022 	! 	!JD$ GDMM	! 	!r2   )r  rM   rU   r   rf   )rS   rT   rU   r  )rF   rg   rh   ri   r0   rR   re   r?   	lru_cacher  r   rk   rl   s   @r/   r  r    s        II' ' ' ' ' '
; ; ; ;    Y&&&  '&(! ! ! ! ! ! ! !r2   r  c                      e Zd ZdZddZdS )	PathSpecz.A path pattern based on gitignore-like syntax.rS   rT   rU    pathspec.gitignore.GitIgnoreSpecc                8   t          |t                    s t          dt          |           d          	 t          j        j                            |                                          S # t          $ r!}t          t          |                    d }~ww xY w)Nz#Expected a multiline string, but a r   )lines)
r=   rM   r   r;   pathspec	gitignoreGitIgnoreSpec
from_lines
splitlinesr   ra  s      r/   re   zPathSpec.run_validation  s    %%% 	b!"`U"`"`"`aaa	*%3>>UEUEUEWEW>XXX 	* 	* 	*!#a&&)))	*s   6A. .
B8BBN)rS   rT   rU   r2  r  r.   r2   r/   r1  r1    s.        88* * * * * *r2   r1  )[
__future__r   r?   r  loggingro  rc  r  r  typesr`   collectionsr   r   r   typingr   r   r	   r
   r   r   r   r   r   r   r   r   r   urllib.parser   rR  r   r   r  r5  pathspec.gitignoremkdocsr   r   r   mkdocs.config.baser   r   r   r   r   mkdocs.exceptionsr   r    r!   	getLoggerrF   r
  r$   rn   r}   r   rM   r   r   r   r   r   r   r  r  r"  r-  rC  rL  re  ri  rw  r{  r~  r  r  r  r  r  r  r  r  r  r  
ModuleTyper  r6  r7  r1  r.   r2   r/   <module>rF     s   " " " " " "          				  



       + + + + + + + + ! ! ! ! ! !                              + * * * * * - - - - - - - -       ( ( ( ( ( ( ( ( ( (              1 0 0 0 0 0GCLLW\000
g!!F F F F F
#%5j%A F F FR- - - - -9Z0'*2E - - -.&* &* &* &* &*%5a%8 &* &* &*R43 43 43 43 43'!*.tAw7 43 43 43n6 6 6 6 6'!*.tCF|< 6 6 6r' ' ' ' '+l+ ' ' ',# # # # #71:)!, # # #D    WQZ+A.   6D- D- D- D- D-! D- D- D-N* * * * *j * * *+ + + + +"?3 + + +:"] "] "] "] "]
S
! "] "] "]J%- %- %- %- %-wqz+E!T'N; %- %- %-P#& #& #& #& #&c #& #& #&L$ $ $ $ $d3i $ $ $.! ! ! ! !&s+ ! ! !H) ) ) ) )tCy ) ) ).& & & & &tCy & & &2    
       c          ! ! ! ! !+c" ! ! !0    c   >5+ 5+ 5+ 5+ 5+U[) 5+ 5+ 5+p.: .: .: .: .:
 .: .: .:b< < < < <gaj*1- < < <    v   .6 6 6 6 6"5)93)>#?@ 6 6 6S1 S1 S1 S1 S1+DI6 S1 S1 S1l| | | | | !9: | | |~.! .! .! .! .!T%"234 .! .! .!b	* 	* 	* 	* 	* 2 @A 	* 	* 	* 	* 	*r2   