Ë
    ojØ  ã                   óâ   — U d 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	 ddl
mZmZ  ej                  «       a G d„ d«      Zi Ze	eef   ed	<   d
„ Zd„ Z G d„ de«      Zd„ Zd„ Zdd„Zy)z&
*Real* reloading support for Python.
é    N)Úreload)Ú
ModuleType)ÚDict)ÚlogÚreflectc                   ó&   — e Zd ZdZeZd„ Zd„ Zd„ Zy)Ú	SensitivezÐ
    A utility mixin that's sensitive to rebuilds.

    This is a mixin for classes (usually those which represent collections of
    callbacks) to make sure that their code is up-to-date before running.
    c                 ó,   — | j                   t         k  }|S ©N)ÚlastRebuild)ÚselfÚyns     ú8/usr/lib/python3/dist-packages/twisted/python/rebuild.pyÚneedRebuildUpdatezSensitive.needRebuildUpdate$   s   € Ø×Ñ¤Ñ+ˆØˆ	ó    c                 ó6   — t        j                   «       | _        y r   )Útimer   ©r   s    r   ÚrebuildUpToDatezSensitive.rebuildUpToDate(   s   € ÜŸ9™9›;ˆÕr   c                 ó@  — t        |«      }|t        j                  k(  rt        |«      S |t        j                  k(  rL|j
                  € t        |j                  |j                  «      S t        |j
                  |j                  «      S t        j                  d«       |S )z¡
        Get the latest version of an object.

        This can handle just about anything callable; instances, functions,
        methods, and classes.
        zwarning returning anObject!)ÚtypeÚtypesÚFunctionTypeÚlatestFunctionÚ
MethodTypeÚ__self__ÚgetattrÚim_classÚ__name__r   Úmsg)r   ÚanObjectÚts      r   ÚlatestVersionOfzSensitive.latestVersionOf+   s„   € ô �‹NˆØ”×"Ñ"Ò"Ü! (Ó+Ð+Ø”%×"Ñ"Ò"Ø× Ñ Ð(Ü˜x×0Ñ0°(×2CÑ2CÓDÐDä˜x×0Ñ0°(×2CÑ2CÓDÐDä�G‰GÐ1Ô2ØˆOr   N)r   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r#   © r   r   r	   r	      s   „ ñð €Kòò'ór   r	   Ú_modDictIDMapc                 óŠ   — t        | j                  «      }t        j                  |«      }|€| S t	        || j
                  «      S )z/
    Get the latest version of a function.
    )ÚidÚ__globals__r(   Úgetr   r   )ÚoldFuncÚdictIDÚmodules      r   r   r   B   sA   € ô �×#Ñ#Ó$€FÜ×Ñ˜vÓ&€FØ€~ØˆÜ�6˜7×+Ñ+Ó,Ð,r   c                 ó–  — t        j                  | j                  «      }t        || j                  «      }|j
                  D �cg c]  }t        |«      ‘Œ }}|j                  dk(  r|S 	 t        |«      |_        |S c c}w # t        $ r> t        |«      } ||j                  t        |«      t        |j                  «      «      cY S w xY w)z,
    Get the latest version of a class.
    Úbuiltins)r   ÚnamedModuler$   r   r   Ú	__bases__ÚlatestClassÚtupleÚ	TypeErrorr   ÚdictÚ__dict__)ÚoldClassr/   ÚnewClassÚbaseÚnewBasesÚctors         r   r4   r4   O   sº   € ô × Ñ  ×!4Ñ!4Ó5€FÜ�v˜x×0Ñ0Ó1€HØ.6×.@Ñ.@ÖA d”˜DÕ!ÐA€HÐAà×Ñ˜jÒ(àˆðQä" 8›_ˆÔØˆùò Bøô ò QÜ�H‹~ˆÙ�H×%Ñ%¤u¨X£¼¸X×=NÑ=NÓ8OÓPÒPðQús   ÁA<Á*B ÂACÃCc                   ó   — e Zd ZdZy)ÚRebuildErrorzT
    Exception raised when trying to rebuild a class whereas it's not possible.
    N)r   r$   r%   r&   r'   r   r   r?   r?   d   s   „ òr   r?   c                 ó8   — t        | j                  «      | _        y)z,
    Updates an instance to be current.
    N)r4   Ú	__class__r   s    r   ÚupdateInstancerB   j   s   € ô ! §¡Ó0€D…Nr   c                 óÆ   — |dk(  rt        d«      ‚t        | «       t        j                  dt	        j
                  | j                  «      › d|› d�«       t        | |«      }|S )z<
    A getattr method to cause a class to be refreshed.
    Ú__del__zWithout this, Python segfaults.z(rebuilding stale z instance (z)))ÚAttributeErrorrB   r   r    r   ÚqualrA   r   )r   ÚnameÚresults      r   Ú__injectedgetattr__rI   q   s[   € ð ˆyÒÜÐ>Ó?Ð?Ü�4ÔÜ‡G�GÐ ¤§¡¨d¯n©nÓ!=Ð >¸kÈ$ÈÈrÐRÔSÜ�T˜4Ó €FØ€Mr   c                 óÂ  — t        j                   «       at        | d«      r| j                  st	        d«      ‚|r,t        j                  dt        | j                  «      › d�«       ddl	m
} d|_        | j                  }| t        t        |«      <   i }i }i }i }|r,t        j                  dt        | j                  «      › d	�«       |j                  «       D ]÷  \  }}	t!        t#        |	«      t$        j&                  «      r_|	j(                  | j                  u sŒBd
||	<   |sŒJt
        j*                  j-                  d«       t
        j*                  j/                  «        Œˆt1        |	t"        «      sŒ™|	j2                  | j                  k(  sŒ³d
||	<   |sŒ»t
        j*                  j-                  d«       t
        j*                  j/                  «        Œù |j5                  |«       |j5                  |«       |j6                  }
|j9                  «       }|j9                  «       }|j9                  «       }|rAt        j                  d«       t        j                  dt        | j                  «      › d�«       t;        | «       t=        j>                  «        |r,t        j                  dt        | j                  «      › d	�«       |D ]Ã  }tA        | |j                  «      |u r-t        j                  dtC        jD                  |«      › d�«       ŒH|r=t
        j*                  j-                  d«       t
        j*                  j/                  «        d|_#        |j                  jI                  «        tJ        |_&        | j                  |_        ŒÅ |rddl'}|D ]�  }tA        | |j                  «      }||u r8t        j                  djQ                  tC        jD                  |«      «      «       ŒUjS                  |«      D ]  }tA        |dd«      |u sŒ||_*        Œ Œƒ |rAt        j                  d«       t        j                  dt        | j                  «      › d	�«       d}tV        jX                  j                  «       D �]  \  }}|d
z   }|| k(  s|€Œt        |d«      sŒ!t        |d«      rŒ.d}|j                  j                  «       D ]s  \  }}		 t[        |	«        |
|	«      sŒ|r=t
        j*                  j-                  d«       t
        j*                  j/                  «        t_        |	«      }d
}ta        |||«       Œu |sŒÃ|rŒÆ|dz  dk(  sŒÏt
        j*                  j-                  d«       t
        j*                  j/                  «        �Œ d|_        |rAt        j                  d«       t        j                  dt        | j                  «      › d�«       | S # t\        $ r Y �Œw xY w)zO
    Reload a module and do as much as possible to replace its references.
    ÚALLOW_TWISTED_REBUILDzI am not allowed to be rebuilt.zRebuilding z...r   )Ú
componentsTz  (scanning z): é   ÚfÚoÚ z  (reload   ú)z  (cleaning zWARNING: class z not replaced by reload!Úxr'   Nz-WARNING: new-class {} not replaced by reload!rA   z  (fixing   Ú__file__Ú
__bundle__é
   ú.Fz   Rebuilt )1r   r   ÚhasattrrK   ÚRuntimeErrorr   r    Ústrr   Útwisted.pythonrL   ÚALLOW_DUPLICATESr8   r(   r*   ÚitemsÚ
issubclassr   r   r   r+   ÚlogfileÚwriteÚflushÚ
isinstancer$   ÚupdateÚ__contains__Úkeysr   Ú	linecacheÚ
clearcacher   r   rF   r3   ÚclearrI   Ú__getattr__ÚgcÚformatÚget_referrersrA   ÚsysÚmodulesÚhashÚ	Exceptionr   Úsetattr)r/   ÚdoLogrL   ÚdÚ
newclassesÚclassesÚ	functionsÚvaluesÚkÚvÚfromOldModuleÚclazzri   ÚnclassÚgaÚrÚmodcountÚmkÚmodÚchangedÚnvs                        r   Úrebuildrƒ   }   s«  € ô
 —)‘)“+€KÜˆvÐ.Ô/à×+Ò+ÜÐ@ÓAÐAÙÜ�‰�+œc &§/¡/Ó2Ð3°3Ð7Ô8õ *à"&€JÔà�‰€AØ!„M”"�Q“%ÑØ€JØ€GØ€IØ€FÙÜ�‰�,œs 6§?¡?Ó3Ð4°CÐ8Ô9Ø—‘“	ò (‰ˆˆ1Ü”d˜1“gœu×1Ñ1Ô2Ø�}‰} §¡Ò/Ø �	˜!‘ÚÜ—K‘K×%Ñ% cÔ*Ü—K‘K×%Ñ%Õ'Ü˜œ4Õ Ø�|‰|˜vŸ™Ó.Ø !�
˜1‘ÚÜ—K‘K×%Ñ% cÔ*Ü—K‘K×%Ñ%Õ'ð(ð ‡M�M�'ÔØ
‡M�M�)ÔØ×'Ñ'€MØ—‘Ó"€JØ�l‰l‹n€GØ—‘Ó €IáÜ�‰�ŒÜ�‰�,œs 6§?¡?Ó3Ð4°AÐ6Ô7ô ˆ6„Nä×ÑÔáÜ�‰�,œs 6§?¡?Ó3Ð4°CÐ8Ô9àò 
/ˆÜ�6˜5Ÿ>™>Ó*¨eÑ3Ü�G‰G�o¤g§l¡l°5Ó&9Ð%:Ð:RÐSÕTáÜ—‘×!Ñ! #Ô&Ü—‘×!Ñ!Ô#Ø ˆEŒOØ�N‰N× Ñ Ô"Ü 3ˆEÔØ%Ÿ™ˆEÕð
/ñ ÛØò %ˆÜ�V˜VŸ_™_Ó-ˆØ�‰<Ü�G‰GØ?×FÑFÜ—L‘L Ó(óõð ×%Ñ% fÓ-ò %�Ü˜1˜k¨4Ó0°FÒ:Ø"$�A•Kñ%ð%ñ Ü�‰�ŒÜ�‰�,œs 6§?¡?Ó3Ð4°CÐ8Ô9Ø€HÜ—;‘;×$Ñ$Ó&ó  ‰ˆˆCØ˜a‘<ˆØ�&Š=˜C˜KØä�s˜JÔ'àä�3˜Ô%ð àˆà—L‘L×&Ñ&Ó(ò 	$‰DˆAˆqðÜ�Q”ñ ˜QÕÙÜ—K‘K×%Ñ% cÔ*Ü—K‘K×%Ñ%Ô'Ü# AÓ&�Ø�Ü˜˜Q Õ#ð	$ò š x°"¡}¸Ó&:Ü�K‰K×Ñ˜cÔ"Ü�K‰K×ÑÖð? ðB #(€JÔÙÜ�‰�ŒÜ�‰�+œc &§/¡/Ó2Ð3°1Ð5Ô6Ø€Møô# ò Úðús   ÓW×	W×W)rM   )r&   re   rl   r   r   Ú	importlibr   r   Útypingr   rZ   r   r   r   r	   r(   ÚintÚ__annotations__r   r4   ro   r?   rB   rI   rƒ   r'   r   r   ú<module>rˆ      s|   ðòó ó Û Û Ý Ý Ý ÷ (àˆd�i‰i‹k€÷"ñ "ðJ (*€ˆt�C˜�OÑ$Ó )ò
-òQô*�9ô ò1ò	ô}r   