§
    ùÛgt  ã                   óˆ   — d Z ddlZddlZddlZddlmZ  G d„ de¦  «        Z ej        de¦  «          G d„ d	e	¦  «        Z
dS )
a§  
    flask.exthook
    ~~~~~~~~~~~~~

    Redirect imports for extensions.  This module basically makes it possible
    for us to transition from flaskext.foo to flask_foo without having to
    force all extensions to upgrade at the same time.

    When a user does ``from flask.ext.foo import bar`` it will attempt to
    import ``from flask_foo import bar`` first and when that fails it will
    try to import ``from flaskext.foo import bar``.

    We're switching from namespace packages because it was just too painful for
    everybody involved.

    This is used by `flask.ext`.

    :copyright: (c) 2015 by Armin Ronacher.
    :license: BSD, see LICENSE for more details.
é    Né   )Úreraisec                   ó   — e Zd ZdS )ÚExtDeprecationWarningN)Ú__name__Ú
__module__Ú__qualname__© ó    úC/granary/edev/quantum/lib/python3.11/site-packages/flask/exthook.pyr   r      s   € € € € € Ø€Dr   r   Úalwaysc                   óD   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zdd„Zd„ Z	d	„ Z
d
„ ZdS )ÚExtensionImporterzÏThis importer redirects imports from this submodule to other locations.
    This makes it possible to transition from the old flaskext.name to the
    newer flask_name without people having a hard time.
    c                 óp   — || _         || _        |dz   | _        |                     d¦  «        dz   | _        d S )Nú.r   )Úmodule_choicesÚwrapper_moduleÚprefixÚcountÚprefix_cutoff)Úselfr   r   s      r   Ú__init__zExtensionImporter.__init__(   s?   € Ø,ˆÔØ,ˆÔØ$ sÑ*ˆŒØ+×1Ò1°#Ñ6Ô6¸Ñ:ˆÔÐÐr   c                 óª   — | j         j        |j         j        k    o9| j         j        |j         j        k    o| j        |j        k    o| j        |j        k    S ©N)Ú	__class__r   r   r   r   ©r   Úothers     r   Ú__eq__zExtensionImporter.__eq__.   sX   € ØŒ~Ô(¨E¬OÔ,FÒFð ;ØŒ~Ô&¨%¬/Ô*BÒBð;àÔ" eÔ&:Ò:ð;ð Ô" eÔ&:Ò:ð	;r   c                 ó.   — |                       |¦  «         S r   )r   r   s     r   Ú__ne__zExtensionImporter.__ne__4   s   € Ø—;’;˜uÑ%Ô%Ð%Ð%r   c                 ó^   ‡ — ˆ fd„t           j        D ¦   «         ‰ gz   t           j        d d …<   d S )Nc                 ó    •— g | ]
}‰|k    ¯|‘ŒS r
   r
   )Ú.0Úxr   s     €r   ú
<listcomp>z-ExtensionImporter.install.<locals>.<listcomp>8   s   ø€ ÐBÐBÐB !¸Àº	¸	˜A¸	¸	¸	r   )ÚsysÚ	meta_path)r   s   `r   ÚinstallzExtensionImporter.install7   s6   ø€ ØBÐBÐBÐB¥s¤}ÐBÑBÔBÀdÀVÑK�Œ�a�a�aÑÐÐr   Nc                 óN   — |                      | j        ¦  «        r|dk    r| S d S d S )Nzflask.ext.ExtDeprecationWarning)Ú
startswithr   )r   ÚfullnameÚpaths      r   Úfind_modulezExtensionImporter.find_module:   s;   € Ø×Ò˜tœ{Ñ+Ô+ð 	ØÐ8Ò8Ð8ØˆKð	ð 	Ø8Ð8r   c                 óX  — |t           j        v rt           j        |         S |                     d| j        ¦  «        | j                 }t	          j        d                     |¬¦  «        t          ¦  «         | j        D �]}||z  }	 t          |¦  «         ns# t          $ rf t          j        ¦   «         \  }}}t           j                             |d ¦  «         |                      ||¦  «        rt          |||j        ¦  «         Y Œˆw xY wt           j        |         x}t           j        |<   d|vr&t!          t           j        | j                 ||¦  «         |                     d¦  «        r.t	          j        d                     |¬¦  «        t          ¦  «         |c S t          d|z  ¦  «        ‚)Nr   z=Importing flask.ext.{x} is deprecated, use flask_{x} instead.)r$   z	flaskext.zaDetected extension named flaskext.{x}, please rename it to flask_{x}. The old form is deprecated.zNo module named %s)r&   ÚmodulesÚsplitr   ÚwarningsÚwarnÚformatr   r   Ú
__import__ÚImportErrorÚexc_infoÚpopÚis_important_tracebackr   Útb_nextÚsetattrr   r*   )	r   r+   Úmodnamer,   ÚrealnameÚexc_typeÚ	exc_valueÚtbÚmodules	            r   Úload_modulezExtensionImporter.load_module?   s°  € Ø•s”{Ð"Ð"Ý”;˜xÔ(Ð(à—.’.  dÔ&8Ñ9Ô9¸$Ô:LÔMˆåŒØKßŠV�gˆVÑÔÕ 5ñ	
ô 	
ð 	
ð
 Ô'ð #	ñ #	ˆDØ˜g‘~ˆHðÝ˜8Ñ$Ô$Ð$Ð$øÝð ð ð Ý*-¬,©.¬.Ñ'�˜) Rõ ”—’ ¨$Ñ/Ô/Ð/ð
 ×.Ò.¨x¸Ñ<Ô<ð =Ý˜H i°´Ñ<Ô<Ð<Ø�ð'øøøõ( .1¬[¸Ô-BÐBˆF•S”[ Ñ*Ø˜'Ð!Ð!Ý�œ DÔ$7Ô8¸'À6ÑJÔJÐJà×"Ò" ;Ñ/Ô/ð Ý”ð@ç’V˜g�VÑ&Ô&Õ(=ñô ð ð ˆMˆMˆMÝÐ.°Ñ9Ñ:Ô:Ð:s   ÂBÂA-DÄDc                 óL   — |�!|                       ||¦  «        rdS |j        }|­!dS )a-  Walks a traceback's frames and checks if any of the frames
        originated in the given important module.  If that is the case then we
        were able to import the module itself but apparently something went
        wrong when the module was imported.  (Eg: import of an import failed).
        NTF)Úis_important_framer9   )r   Úimportant_moduler?   s      r   r8   z(ExtensionImporter.is_important_tracebackp   s<   € ð ˆnØ×&Ò&Ð'7¸Ñ<Ô<ð Ø�tØ”ˆBð ˆnð ˆur   c                 óP  — |j         j        }d|vrdS |d         }||k    rdS t          j                             |j         j        j        ¦  «        }t          j        j        |                     dt          j        j        ¦  «        z   }|dz   |v p|t          j        j        z   dz   |v S )z(Checks a single frame if it's important.r   FTr   z.pyz__init__.py)	Útb_frameÚ	f_globalsÚosr,   ÚabspathÚf_codeÚco_filenameÚsepÚreplace)r   rD   r?   ÚgÚmodule_nameÚfilenameÚtest_strings          r   rC   z$ExtensionImporter.is_important_frame|   s§   € àŒKÔ!ˆØ˜QÐÐØ�5à˜
”mˆð Ð*Ò*Ð*Ø�4õ
 ”7—?’? 2¤;Ô#5Ô#AÑBÔBˆÝ”g”kÐ$4×$<Ò$<¸SÅ"Ä'Ä+Ñ$NÔ$NÑNˆØ˜UÑ" hÐ.ð EØ�RœWœ[Ñ(¨=Ñ8¸HÐDð	Er   r   )r   r   r	   Ú__doc__r   r   r    r(   r-   rA   r8   rC   r
   r   r   r   r   "   s¤   € € € € € ðð ð
;ð ;ð ;ð;ð ;ð ;ð&ð &ð &ðLð Lð Lðð ð ð ð
/;ð /;ð /;ðb
ð 
ð 
ðEð Eð Eð Eð Er   r   )rR   r&   rH   r1   Ú_compatr   ÚDeprecationWarningr   ÚsimplefilterÚobjectr   r
   r   r   ú<module>rW      sÉ   ððð ð( €
€
€
Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð ð	ð 	ð 	ð 	ð 	Ð.ñ 	ô 	ð 	ð €Ô �hÐ 5Ñ 6Ô 6Ð 6ðmEð mEð mEð mEð mE˜ñ mEô mEð mEð mEð mEr   