+
    THi=                     H  a  R t0 t R t^ RIt^ RIt^ RIHt ^ RIHt ^ RIH	t	 R R lt
. ROt]! 4       t] ^ k ]]3tRP"                  tRP"                  tR	 tR
 tR t]
! ]R4       ]
! ]R4       ]
! ]R4       ]]3tR R ltR t ! R R]4      t]P;                  ]]4       R# )z7passlib.utils.compat - python 2/3 compatibility helpersN)nullcontext)
ModuleTypeCallablec                4    V ^8  d   QhR\         R\        RR/# )   objdocreturnN)objectstr)formats   "?/usr/lib/python3/dist-packages/passlib/utils/compat/__init__.py__annotate__r   
   s!       c d     c                    Wn         R# )zadd docstring to an objectN)__doc__)r   r	   s   &&r   add_docr   
   s    Kr    r   c                 T    \        V \        4      '       g   Q hV P                  R 4      # ascii)
isinstancebytesdecodess   &r   bascii_to_strr   ,   s$    a88Gr   c                 T    \        V \        4      '       g   Q hV P                  R 4      # r   )r   r   encoder   s   &r   str_to_basciir    1   s$    a88Gr   c                 D    \        V \        4      '       g   Q hR  V  4       # )c              3   :   "   T F  p\        V.4      x  K  	  R # 5iN)r   ).0cs   & r   	<genexpr>"iter_byte_chars.<locals>.<genexpr>9   s     "1E1#JJs   )r   r   r   s   &r   iter_byte_charsr(   6   s     a"""r   z+helper to convert ascii bytes -> native strz+helper to convert ascii native str -> bytesz6iterate over byte string as sequence of 1-byte stringsc                0    V ^8  d   QhR\         R\         /# )r   funcr
   r   )r   s   "r   r   r   G   s     + +h +8 +r   c                    \        V RV 4      # )z4given (potential) method, return underlying function__func__)getattr)r*   s   &r   get_method_functionr.   G   s    4T**r   c                \    V P                  R^4      w  r\        W.^ R7      p\        W24      # )zChelper to import object from module; accept format `path.to.object`.)fromlistlevel)rsplit
__import__r-   )sourcemodnamemodattrmods   &   r   _import_objectr9   L   s.    }}S!,G
Wy
:C3  r   c                   P   a  ] tR t^St o Rt]R 4       tR	R ltR tR t	R t
RtV tR# )
_LazyOverlayModuleaK  proxy module which overlays original module,
and lazily imports specified attributes.

this is mainly used to prevent importing of resources
that are only needed by certain password hashes,
yet allow them to be imported from a single location.

used by :mod:`passlib.utils`, :mod:`passlib.crypto`,
and :mod:`passlib.utils.compat`.
c                l    \         P                  V,          pV ! WV4      pV\         P                  V&   V# r#   )sysmodules)clsnameattrmaporigselfs   &&&  r   replace_module!_LazyOverlayModule.replace_module_   s/    {{4 4$' Dr   Nc                    \         P                  ! W4       W n        W0n        \        P
                  ! V4      V n        R # r#   )r   __init___LazyOverlayModule__attrmap_LazyOverlayModule__proxylogging	getLogger_LazyOverlayModule__log)rC   r@   rA   proxys   &&&&r   rG   _LazyOverlayModule.__init__f   s,    D' &&t,
r   c                P   V P                   pV'       d   \        W!4      '       d   \        W!4      # V P                  pW9   dW   W1,          p\	        V4      '       d	   V! 4       pM\        V4      p\        WV4       V P                  P                  R W4       V# \        RV R24      h)zloaded lazy attr %r: %rz"'module' object has no attribute '')
rI   hasattrr-   rH   callabler9   setattrrL   debugAttributeError)rC   attrrM   rA   r5   values   &&    r   __getattr___LazyOverlayModule.__getattr__l   s    WU))5''..?]F&v.D&JJ6DLA$qIJJr   c                l    V P                   pV'       d   \        V4      # \        P                  ! V 4      # r#   )rI   reprr   __repr__)rC   rM   s   & r   r\   _LazyOverlayModule.__repr__|   s)    ;""4((r   c                   \        \        V P                  4      4      pVP                  V P                  4       VP                  V P
                  4       V P                  pVe   VP                  \        V4      4       \        V4      # r#   )setdir	__class__update__dict__rH   rI   list)rC   attrsrM   s   &  r   __dir___LazyOverlayModule.__dir__   s^    C'(T]]#T^^$LLU$E{r   )	__attrmap__log__proxyr#   )__name__
__module____qualname____firstlineno__r   classmethodrD   rG   rX   r\   rf   __static_attributes____classdictcell__)__classdict__s   @r   r;   r;   S   s8     	  -K ) r   r;   c                b    V ^8  d   Qh/ ^ \         9   d   \        \        \        3,          ;R&   # )r   _lazy_attrs)__conditional_annotations__dictr   r   )r   s   "r   r   r      s%     = =B ( 'T#v+ 'C >r   )	numeric_typesunicode_or_bytesr   r    join_unicode
join_bytesr   r.   r   ) ru   r   rJ   r=   
contextlibr   typesr   typingr   r   __all__rv   rt   r   r   rx   joinry   rz   r   r    r(   intfloatrw   r.   r9   r;   rD   rk   r   )ru   s   @r   <module>r      s    =  
 "  
& "& ' < wwXX


# D E D E Q Re+
!6 6t  ! !(K 8r   