+
    VN÷hz)  ã                   ó–  € R t ^ RIt^ RIt^ RIt^ RIHt ^ RIt^ RIHt ^ RIHt ^ RIH	t	 ^ RIH
t
 ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIH t  ^ RIH!t! ^ RIH"t" R t# ! R R ]4      t$]PJ                  PM                  R!R"7      ]PJ                  PO                  ]R#R$7       ! R% R&]$4      4       4       t(]PJ                  PO                  ]R'R$7       ! R( R)](4      4       t) ! R* R+]$4      t*R# ),aY  Notes about unicode handling in psutil
======================================.

Starting from version 5.3.0 psutil adds unicode support, see:
https://github.com/giampaolo/psutil/issues/1040
The notes below apply to *any* API returning a string such as
process exe(), cwd() or username():

* all strings are encoded by using the OS filesystem encoding
  (sys.getfilesystemencoding()) which varies depending on the platform
  (e.g. "UTF-8" on macOS, "mbcs" on Win)
* no API call is supposed to crash with UnicodeDecodeError
* instead, in case of badly encoded data returned by the OS, the
  following error handlers are used to replace the corrupted characters in
  the string:
    * sys.getfilesystemencodeerrors() or "surrogatescape" on POSIX and
      "replace" on Windows.

For a detailed explanation of how psutil handles unicode see #1040.

Tests
=====

List of APIs returning or dealing with a string:
('not tested' means they are not tested to deal with non-ASCII strings):

* Process.cmdline()
* Process.cwd()
* Process.environ()
* Process.exe()
* Process.memory_maps()
* Process.name()
* Process.net_connections('unix')
* Process.open_files()
* Process.username()             (not tested)

* disk_io_counters()             (not tested)
* disk_partitions()              (not tested)
* disk_usage(str)
* net_connections('unix')
* net_if_addrs()                 (not tested)
* net_if_stats()                 (not tested)
* net_io_counters()              (not tested)
* sensors_fans()                 (not tested)
* sensors_temperatures()         (not tested)
* users()                        (not tested)

* WindowsService.binpath()       (not tested)
* WindowsService.description()   (not tested)
* WindowsService.display_name()  (not tested)
* WindowsService.name()          (not tested)
* WindowsService.status()        (not tested)
* WindowsService.username()      (not tested)

In here we create a unicode path with a funky non-ASCII name and (where
possible) make psutil return it back (e.g. on name(), exe(), open_files(),
etc.) and make sure that:

* psutil never crashes with UnicodeDecodeError
* the returned path matches
N)Úclosing)ÚBSD©ÚMACOS)ÚNETBSD)ÚOPENBSD)ÚPOSIX)ÚWINDOWS)ÚASCII_FS)Ú
CI_TESTING)ÚHAS_ENVIRON)ÚHAS_MEMORY_MAPS)ÚHAS_NET_CONNECTIONS_UNIX)ÚINVALID_UNICODE_SUFFIX)ÚPYPY)ÚTESTFN_PREFIX)ÚUNICODE_SUFFIX)ÚPsutilTestCase)Úbind_unix_socket)Úchdir)Úcopyload_shared_lib)Úcreate_py_exe)Ú
get_testfn)Úpytest)Ú
safe_mkdir)Úsafe_rmpath)Úskip_on_access_denied)Úspawn_subproc)Ú	terminatec                ó   € Rp\        V R7      p \        V4       \        V4       \        V.R7      p\        P
                  ! W"R,           4       \        VR,           4        Ve   \        V4       \        V4       R#   \        \        3 d     Te   \        T4       \        T4       R# i ; i  Te   \        T4       \        T4       i ; i)zXReturn True if both the fs and the subprocess module can
deal with a unicode file name.
N©Úsuffix)Úcmdz-2TF)	r   r   r   r   ÚshutilÚcopyfiler   ÚUnicodeEncodeErrorÚOSError)r!   ÚsprocÚtestfns   &  Ú;/usr/lib/python3/dist-packages/psutil/tests/test_unicode.pyÚtry_unicoder*   h   sµ   € ð €EÜ˜vÔ&€FðÜ�FÔÜ�fÔÜ 6 (Ô+ˆÜ�Š˜¨¥Ô.Ü�F˜T•MÔ"ð àÒÜ�eÔÜ�FÖøô ¤Ð(ô Øð ÒÜ�eÔÜ�FÖðûð
 ÒÜ�eÔÜ�FÕús$   �AA? Á?B.ÂB1 Â-B.Â.B1 Â1Cc                   óL   a a€ ] tR t^ƒt oRt]V 3R l4       tV 3R ltRtVt	V ;t
# )ÚBaseUnicodeTestNc                ó  <€ \         SV `  4        R V n        RV n        V P                  eW   \        V P                  4      '       g
   RV n        R# \        V P                  R7      V n        \        V P                  4       R# R# )FNTr    )ÚsuperÚ
setUpClassÚ
skip_testsÚ
funky_nameÚfunky_suffixr*   r   r   )ÚclsÚ	__class__s   &€r)   r/   ÚBaseUnicodeTest.setUpClass†   sc   ø€ ä‰ÑÔØˆŒØˆŒØ×ÑÒ'Ü˜s×/Ñ/×0Ò0Ø!%�–ä!+°3×3CÑ3CÔ!D�”Ü˜cŸn™nÖ-ñ (ó    c                ót   <€ \         SV `  4        V P                  '       d   \        P                  ! R 4      hR# )zcan't handle unicode strN)r.   ÚsetUpr0   r   Úskip)Úselfr4   s   &€r)   r8   ÚBaseUnicodeTest.setUp’   s*   ø€ Ü‰‰ŒØ�?�?ˆ?Ü—+’+Ð8Ó9Ð9ñ r6   © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r2   Úclassmethodr/   r8   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r4   Ú__classdict__s   @@r)   r,   r,   ƒ   s&   ù‡ € Ø€Làô	.ó ð	.÷:õ :r6   r,   Úserial)ÚnamezASCII fs©Úreasonc                   óH  a € ] tR t^˜t o Rt]tR tR tR t	R t
R t]P                  P                  ];'       d    ]RR7      ]P                  P                  ];'       g    ]R	R7      R
 4       4       t]P                  P                  ]'       * RR7      R 4       t]P                  P                  ]'       * RR7      ]P                  P                  ]'       * RR7      ]! 4       R 4       4       4       tR t]P                  P                  ]'       * RR7      R 4       tRtV tR# )Ú
TestFSAPIsz1Test FS APIs with a funky, valid, UTF8 path name.c                óì   € \         P                  ! 4       ;_uu_ 4        \         P                  ! R 4       V P                  \        P
                  ! R4      9   uuRRR4       #   + '       g   i     R# ; i)ÚignoreÚ.N)ÚwarningsÚcatch_warningsÚsimplefilterr1   ÚosÚlistdir©r:   s   &r)   Úexpect_exact_path_matchÚ"TestFSAPIs.expect_exact_path_matchŸ   sB   € Ü×$Ò$×&Õ&Ü×!Ò! (Ô+Ø—?‘?¤b§j¢j°£oÑ5÷ '×&×&Ó&ús   ž9A"Á"A3	c                ó   € V P                   R R.pV P                  V4      p\        P                  ! VP                  4      pVP                  4       p\        V\        4      '       g   Q hV P                  4       '       dP   \        P                  P                  V4      \        P                  P                  V P                   4      8X  g   Q hR# R# ©z-cz2import time; [time.sleep(0.1) for x in range(100)]N)r1   r   ÚpsutilÚProcessÚpidÚexeÚ
isinstanceÚstrrU   rR   ÚpathÚnormcase)r:   r"   ÚsubpÚpr\   s   &    r)   Útest_proc_exeÚTestFSAPIs.test_proc_exe¦   sœ   € à�O‰OØØ@ð
ˆð
 ×!Ñ! #Ó&ˆÜ�NŠN˜4Ÿ8™8Ó$ˆØ�e‰e‹gˆÜ˜#œs×#Ò#Ð#Ð#Ø×'Ñ'×)Ò)Ü—7‘7×#Ñ# CÓ(¬B¯G©G×,<Ñ,<¸T¿_¹_Ó,MÔMÐMÒMñ *r6   c                ób  € V P                   R R.pV P                  V4      p\        P                  ! VP                  4      P                  4       p\        V\        4      '       g   Q hV P                  4       '       d3   V\        P                  P                  V P                   4      8X  g   Q hR# R# rX   )r1   r   rY   rZ   r[   rG   r]   r^   rU   rR   r_   Úbasename)r:   r"   ra   rG   s   &   r)   Útest_proc_nameÚTestFSAPIs.test_proc_name³   s‹   € à�O‰OØØ@ð
ˆð
 ×!Ñ! #Ó&ˆÜ�~Š~˜dŸh™hÓ'×,Ñ,Ó.ˆÜ˜$¤×$Ò$Ð$Ð$Ø×'Ñ'×)Ò)Øœ2Ÿ7™7×+Ñ+¨D¯O©OÓ<Ô<Ð<Ò<ñ *r6   c                ó(  € V P                   R R.pV P                  V4      p\        P                  ! VP                  4      pVP                  4       pV F  p\        V\        4      '       d   K  Q h	  V P                  4       '       d   WA8X  g   Q hR# R# rX   )	r1   r   rY   rZ   r[   Úcmdliner]   r^   rU   )r:   r"   ra   rb   rj   Úparts   &     r)   Útest_proc_cmdlineÚTestFSAPIs.test_proc_cmdline¿   s€   € à�O‰OØØ@ð
ˆð
 ×!Ñ! #Ó&ˆÜ�NŠN˜4Ÿ8™8Ó$ˆØ—)‘)“+ˆÛˆDÜ˜d¤C×(Ô(Ð(Ð(ñ à×'Ñ'×)Ò)Ø”>Ð!’>ñ *r6   c                ó¤  € V P                   R ,           pV P                  \        V4       \        V4       \	        V4      ;_uu_ 4        \
        P                  ! 4       pVP                  4       pRRR4       \        XP                  4       \        4      '       g   Q hV P                  4       '       d   XV8X  g   Q hR# R#   + '       g   i     LY; i©Ú2N)r1   Ú
addCleanupr   r   r   rY   rZ   Úcwdr]   r^   rU   )r:   Údnamerb   rr   s   &   r)   Útest_proc_cwdÚTestFSAPIs.test_proc_cwdÍ   sŽ   € Ø—‘ #Õ%ˆØ�‰œ UÔ+Ü�5ÔÜ�5�\�\Ü—’Ó ˆAØ—%‘%“'ˆC÷ ô ˜!Ÿ%™%›'¤3×'Ò'Ð'Ð'Ø×'Ñ'×)Ò)Ø˜%”<Ð’<ñ *÷	 �\ús   Á&B?Â?C	zfails on PYPY + WINDOWSrH   zbroken on NETBSD or OPENBSDc                ó˜  € \         P                  ! 4       p\        VP                  4       4      p\	        V P
                  R 4      ;_uu_ 4        \        VP                  4       4      pRRR4       XV,
          P                  4       P                  p\        V\        4      '       g   Q h\        '       d   V'       g   \        P                  ! R4      hV P                  4       '       dP   \        P                  P                  V4      \        P                  P                  V P
                  4      8X  g   Q hR# R#   + '       g   i     LÚ; i)ÚrbNzopen_files on BSD is broken)rY   rZ   ÚsetÚ
open_filesÚopenr1   Úpopr_   r]   r^   r   r   r9   rU   rR   r`   )r:   rb   ÚstartÚnewr_   s   &    r)   Útest_proc_open_filesÚTestFSAPIs.test_proc_open_filesØ   sÕ   € ô
 �NŠNÓˆÜ�A—L‘L“NÓ#ˆÜ�$—/‘/ 4×(Õ(Ü�a—l‘l“nÓ%ˆC÷ )à�e•× Ñ Ó"×'Ñ'ˆÜ˜$¤×$Ò$Ð$Ð$ß‹3—tä—+’+Ð;Ó<Ð<Ø×'Ñ'×)Ò)Ü—7‘7×#Ñ# DÓ)¬R¯W©W×-=Ñ-=¸d¿o¹oÓ-NÔNÐNÒNñ *÷ )×(ús   ÁD9Ä9E		z
POSIX onlyc                óö  € V P                  V P                  R 7      p\        V4      p\        V4      ;_uu_ 4        \        P
                  ! 4       P                  R4      ^ ,          p\        VP                  \        4      '       g   Q hVP                  '       g/   \        '       d#   \        '       d   \        P                  ! R4      hVP                  V8X  g   Q h RRR4       R#   + '       g   i     R# ; i)r    Úunixzunreliable on OSXN)r   r2   r   r   rY   rZ   Únet_connectionsr]   Úladdrr^   r   r   r   r9   )r:   rG   ÚsockÚconns   &   r)   Útest_proc_net_connectionsÚ$TestFSAPIs.test_proc_net_connectionsé   s�   € à�‰ d×&7Ñ&7ˆÓ8ˆÜ Ó%ˆÜ�T�]�]Ü—>’>Ó#×3Ñ3°FÓ;¸AÕ>ˆDÜ˜dŸj™j¬#×.Ò.Ð.Ð.Ø—:—:�:§%£%¯J«JÜ—k’kÐ"5Ó6Ð6Ø—:‘: Ô%Ð%Ñ%÷ �]�]Š]ús   »AC'ÂC'Â'C'Â3)C'Ã'C8	zcan't list UNIX socketsc                ód  € R  pV P                  V P                  R7      p\        V4      p\        V4      ;_uu_ 4        \        P
                  ! RR7      pV! V4      p\        VP                  \        4      '       g   Q hVP                  V8X  g   Q h RRR4       R#   + '       g   i     R# ; i)c                 ó¶   € V  FI  p\         P                  P                  VP                  4      P	                  \
        4      '       g   KG  Vu # 	  \        R 4      h)zconnection not found)rR   r_   rf   rƒ   Ú
startswithr   Ú
ValueError)Úconsr…   s   & r)   Ú	find_sockÚ2TestFSAPIs.test_net_connections.<locals>.find_sockú   sC   € Û�Ü—7‘7×#Ñ# D§J¡JÓ/×:Ñ:¼=×IÔIØ’Kñ ô Ð3Ó4Ð4r6   r    r�   )ÚkindN)	r   r2   r   r   rY   r‚   r]   rƒ   r^   )r:   r�   rG   r„   rŒ   r…   s   &     r)   Útest_net_connectionsÚTestFSAPIs.test_net_connectionsô   s€   € ò	5ð �‰ d×&7Ñ&7ˆÓ8ˆÜ Ó%ˆÜ�T�]�]Ü×)Ò)¨vÔ6ˆDÙ˜T“?ˆDÜ˜dŸj™j¬#×.Ò.Ð.Ð.Ø—:‘: Ô%Ð%Ñ%÷	 �]�]Š]ús   ¾ABÂB/	c                óš   € V P                   R ,           pV P                  \        V4       \        V4       \        P
                  ! V4       R# ro   )r1   rq   r   r   rY   Ú
disk_usage)r:   rs   s   & r)   Útest_disk_usageÚTestFSAPIs.test_disk_usage  s4   € Ø—‘ #Õ%ˆØ�‰œ UÔ+Ü�5ÔÜ×Ò˜%Ö r6   únot supportedc                ó´  € \        V P                  R 7      ;_uu_ 4       pR p\        P                  ! 4       P	                  4        Uu. uF  q2! VP
                  4      NK  	  ppV Uu. uF  p\        V9   g   K  VNK  	  ppV! V4      V9   g   Q hV F  p\        V\        4      '       d   K  Q h	  RRR4       R# u upi u upi   + '       g   i     R# ; i)r    c                 óz   € \         P                  P                  \         P                  P                  V 4      4      # ©N)rR   r_   Úrealpathr`   )rb   s   &r)   ÚnormpathÚ-TestFSAPIs.test_memory_maps.<locals>.normpath  s&   € Ü—w‘w×'Ñ'¬¯©×(8Ñ(8¸Ó(;Ó<Ð<r6   N)	r   r2   rY   rZ   Úmemory_mapsr_   r   r]   r^   )r:   Ú
funky_pathr›   ÚxÚlibpathsr_   s   &     r)   Útest_memory_mapsÚTestFSAPIs.test_memory_maps  sÀ   € ä ¨×(9Ñ(9×:Õ:¸jò=ô +1¯.ª.Ó*:×*FÑ*FÔ*HóÙ*H Q�˜Ÿ™Ö Ñ*Hð ð ñ $,ÓB¡8˜a¬}ÀÑ/AŸ˜¡8ˆHÐBÙ˜JÓ'¨8Ô3Ð3Ð3Û �Ü! $¬×,Ô,Ð,Ð,ñ !÷ ;Ñ:ùò
ùò C÷ ;×:Ð:ús5   Ÿ)CÁB<Á"CÁ(CÁ:CÂ )CÂ.CÂ<
CÃC	r<   N)r=   r>   r?   r@   Ú__doc__r   r2   rU   rc   rg   rl   rt   r   ÚmarkÚskipifr   r	   r   r   r~   r   r†   r   r   r�   r”   r   r¡   rB   rC   ©rE   s   @r)   rK   rK   ˜   s>  ø‡ € ñ <à!€Lò6òNò
=ò"ò	 ð ‡[�[×Ñ˜×(Ð( Ð1JÐÓKØ‡[�[×ÑØ×Ð�'Ð"?ð ó ñOóó LðOð ‡[�[×Ñ˜Eœ	¨,ÐÓ7ñ&ó 8ð&ð ‡[�[×Ñ˜Eœ	¨,ÐÓ7Ø‡[�[×ÑØ$Ô$Ð-Fð ó ñ Óñ&ó óó 8ð
&ò!ð ‡[�[×Ñ˜OÔ+°OÐÓDñ-ó Eö-r6   rK   zunreliable on CIc                   ó.   a € ] tR tRt o Rt]tR tRtV t	R# )ÚTestFSAPIsWithInvalidPathi  z-Test FS APIs with a funky, invalid path name.c                ó   € \         '       * # r™   r   rT   s   &r)   rU   Ú1TestFSAPIsWithInvalidPath.expect_exact_path_match%  s
   € ÜŒyÐr6   r<   N)
r=   r>   r?   r@   r£   r   r2   rU   rB   rC   r¦   s   @r)   r¨   r¨     s   ø‡ € á7à)€L÷ð r6   r¨   c                   óÌ   a € ] tR tRt o Rt]t]P                  P                  ]
'       * RR7      ]P                  P                  ];'       d    ]RR7      R 4       4       tRtV tR# )	ÚTestNonFSAPISi.  z&Unicode tests for non fs-related APIs.r–   rH   zsegfaults on PYPY + WINDOWSc                óª  € \         P                  P                  4       pV P                  VR &   V P	                  VR7      p\
        P                  ! VP                  4      pVP                  4       pVP                  4        F5  w  rE\        V\        4      '       g   Q h\        V\        4      '       d   K5  Q h	  VR ,          V P                  8X  g   Q hR# )Ú	FUNNY_ARG)ÚenvN)rR   ÚenvironÚcopyr2   r   rY   rZ   r[   Úitemsr]   r^   )r:   r¯   r'   rb   ÚkÚvs   &     r)   Útest_proc_environÚTestNonFSAPIS.test_proc_environ3  s§   € ô
 �j‰j�o‰oÓˆØ×,Ñ,ˆˆKÑØ×"Ñ" sÐ"Ó+ˆÜ�NŠN˜5Ÿ9™9Ó%ˆØ�i‰i‹kˆØ—I‘I–K‰DˆAÜ˜a¤×%Ò%Ð%Ð%Ü˜a¤×%Ô%Ð%Ð%ñ  ð �;Õ 4×#4Ñ#4Ô4Ð4Ò4r6   r<   N)r=   r>   r?   r@   r£   r   r2   r   r¤   r¥   r   r   r	   rµ   rB   rC   r¦   s   @r)   r¬   r¬   .  s\   ø‡ € Ù0à!€Là‡[�[×Ñ˜Kœ°ÐÓ@Ø‡[�[×Ñ˜×(Ð( Ð1NÐÓOñ5ó Pó Aö5r6   r¬   )+r£   rR   r#   rO   Ú
contextlibr   rY   r   r   r   r   r   r	   Úpsutil.testsr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r*   r,   r¤   Úxdist_groupr¥   rK   r¨   r¬   r<   r6   r)   Ú<module>rº      s  ðñ<ó| 
Û Û Ý ã Ý Ý Ý Ý Ý Ý Ý !Ý #Ý $Ý (Ý 1Ý /Ý Ý &Ý 'Ý 'Ý )Ý Ý ,Ý &Ý #Ý Ý #Ý $Ý .Ý &Ý "òô6:�nô :ð* ‡�×Ñ˜hÐÓ'Ø‡�×Ñ�H ZÐÓ0ôB-�ó B-ó 1ó (ðB-ðJ ‡�×Ñ�JÐ'9ÐÓ:ô 
ó ó ;ðô5�Oö 5r6   