§ 1jªÐãó.—dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlmZddlmZmZddlmZddlmZmZddlmZmZmZddlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*dd l m+Z+dd l,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2dd l,m3Z3dd l,m4Z4dd l,m5Z5ddl,m6Z6ddl7m8Z8m9Z9m:Z:m;Z;mZ>ddl?m@Z@mAZAddlBmCZCmDZDddlEmFZFe jGdkrdndZHe jGdkrdndZIGd„d¦«ZJGd„d¦«ZK d;ddddde;jLddddœ d e$ed!e$e!e%eMefd"e$e!ed#e$e eMefd$eNd%eNd&e;d'eNd(eNd)eNd*efd+„ZOdZPddddde;jLddfd,ed-e+d.ed/ed!e$e!e%eMefd"e$e!ed#e$e eMefd$eNd%eNd&e;d'eNd)eNd*e+fd0„ZQGd1„d2¦«ZRGd3„d4e jSeR¦«ZSGd5„d6¦«ZTGd7„d8¦«ZUGd9„d:ee¦«ZVdS).cleanupls(ø€Ø×%Ò% e¨W°fÐ6IÅÄ ÑJÔJÐJÐJÐJr>©rAé Ú_rmtreecó.—tjj|i|¤ŽSr7)ÚtempfileÚ_shutilÚrmtree)ÚargsÚkwargss r<rLz/TempfilePatcher.start_patching.._rmtreeus€Ý#Ô+Ô2°DÐC¸FÐCÐCÐCr>r/cóL•—‰ ||p tj¦«dSr7rD)rGrFr;s €r<Úclosez-TempfilePatcher.start_patching..close}s&ø€Ø×%Ò% e¨VÐ-@µr´yÑAÔAÐAÐAÐAr>r7) r8ÚsysÚ version_inforEÚnamerNÚ_TemporaryFileCloserrIÚhasattrrLr9ÚplatformrT)r;rIrLrTs` r<Ústart_patchingzTempfilePatcher.start_patchinggsø€Ø Ô Ð ,Ø ˆFÝ Ô ˜wÒ &Ð &å(*¬°4ªÀð Kð Kð Kð Kð Kð Kõ%-Ô$AÔ$IˆDÔ !Ø4;�HÔ )Ô 1åÔ 7Ò*Ð*­wµxÀÑ/KÔ/KÐ*ðDðDðDõ(0Ô'7�Ô$Ø#*•Ô Ð Ð ð+Ð*Ð*Ð*õŒ\˜WÒ $Ð $ð Bð Bð Bð Bð Bð Bõ%-Ô$AÔ$GˆDÔ !Ø27�HÔ )Ô /Ð /Ð /ð %Ð $r>cóö—|j€dStjdkr|jtj_n|jtj_d|_|j�|jt_d|_dt_ dS)Nr@) r8rUrVrNrXrTrIr9rLÚtempdirr:s r<Ú stop_patchingzTempfilePatcher.stop_patchingƒso€Ø Ô Ð (Ø ˆFÝ Ô ˜gÒ %Ð %Ø26Ô2G�HÔ )Ô /Ð /à48Ô4I�HÔ )Ô 1Ø $ˆÔØ Ô Ð +Ø#Ô3�HÔ Ø#'ˆDÔ à�ÔÐÐr>N©Ú__name__Ú __module__Ú __qualname__Ú__doc__r=r[r^©r>r<r5r5`sG€€€€€Ø6Ð6ð$ð$ð$ð8ð8ð8ð8  ð  ð  ð  ð  r>r5có$—eZdZdZd„Zd„Zd„ZdS)ÚLineCachePatcherz5Handles linecache patching for newer Python versions.có"—d|_d|_dSr7)Úlinecache_updatecacheÚlinecache_checkcacher:s r<r=zLineCachePatcher.__init__•s€Ø%)ˆÔ"Ø$(ˆÔ!Ð!Ð!r>có‡—‰j�dSdˆfd„ }dˆfd„ }tjdks tjdkrLtjdkr>tj‰_|t_tj‰_|t_dSdSdS)Ncó~•—t¦«5‰ |¦«cddd¦«S#1swxYwYdS)zZCalls the original linecache.checkcache making sure no fake OS calls are used.N)r)ri)Úfilenamer;s €r<Ú checkcachez3LineCachePatcher.start_patching..checkcache�s†ø€õ!Ñ"Ô"ð ;ð ;Ø×0Ò0°Ñ:Ô:ð ;ð ;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;ð ;ð ;s �2²6¹6cóø•—t¦«5tr'| ¦« d¦«s"‰ ||¦«cddd¦«Sgcddd¦«S#1swxYwYdS)z[Calls the original linecache.updatecache making sure no fake OS calls are used.zpytest.exe\__main__.pyN)r)r+ÚlowerÚendswithrh)rlÚmodule_globalsr;s €r<Ú updatecachez4LineCachePatcher.start_patching..updatecache£såø€õ!Ñ"Ô"ð ð åðP X§^¢^Ñ%5Ô%5×%>Ò%>Ø-ñ&ô&ðPð ×5Ò5°hÀÑOÔOð  ð ð ð ñ ô ð ð ð ð  ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s�AA/Á!A/Á/A3Á6A3rJr/r@r7)rhrUrVrZÚ linecacherrrmri)r;rmrrs` r<r[zLineCachePatcher.start_patching™s´ø€Ø Ô %Ð 1Ø ˆFð ;ð ;ð ;ð ;ð ;ð ;ð ð ð ð ð ð õ Ô  Ò 'Ð 'ÝŒ|˜wÒ&Ð&ÝÔ  GÒ+Ð+õ*3Ô)>ˆDÔ &Ø$/�IÔ !Ý(1Ô(<ˆDÔ %Ø#-�IÔ Ð Ð ð'Ð&Ø+Ð+r>cóx—|j€dS|jt_|jt_d|_d|_dSr7)rhrsrrrirmr:s r<r^zLineCachePatcher.stop_patching»s<€Ø Ô %Ð -Ø ˆFØ $Ô :� ÔØ#Ô8� ÔØ%)ˆÔ"Ø$(ˆÔ!Ð!Ð!r>Nr_rdr>r<rfrf’sH€€€€€Ø?Ð?ð)ð)ð)ð .ð .ð .ðD)ð)ð)ð)ð)r>rfTF© Úadditional_skip_namesÚmodules_to_reloadÚmodules_to_patchÚallow_root_userÚuse_known_patchesÚpatch_open_codeÚpatch_default_argsÚ use_cacheÚuse_dynamic_patchÚ_funcrvrwrxryrzr{r|r}r~Úreturnc 󸇇‡‡‡‡‡‡‡ —dtdtfˆˆˆˆˆˆˆˆ ˆf d„ } |rRt|¦«std¦«‚t|d¦«rt |j¦«|_| |¦«S| S)a=Convenience decorator to use patcher with additional parameters in a test function. Usage:: @patchfs def test_my_function(fake_fs): fake_fs.create_file('foo') @patchfs(allow_root_user=False) def test_with_patcher_args(fs): os.makedirs('foo/bar') Úfr€c óZ• ‡—tj‰¦«ˆˆˆˆˆˆˆˆˆ ˆ f d„¦«}|S)Nc óÊ• —t‰‰‰‰‰ ‰ ‰‰ ‰ ¬¦ « 5}t|¦«}| |j¦«‰|i|¤Žcddd¦«S#1swxYwYdS)Nru)ÚPatcherÚlistÚappendÚfs) rQrRÚprvryr‚rxrwr|r{r}r~rzs €€€€€€€€€€r<Úwrappedz.patchfs..wrap_patchfs..wrappedàsÈø€åØ&;Ø"3Ø!1Ø /Ø"3Ø /Ø#5Ø#Ø"3ð ñ ô ð *ðݘD‘z”z�Ø— ’ ˜AœDÑ!Ô!Ð!Ø�q˜$Ð) &Ð)Ð)ð *ð *ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ð *ð *sš1AÁAÁA)Ú functoolsÚwraps) r‚rŠrvryrxrwr|r{r}r~rzs ` €€€€€€€€€r<Ú wrap_patchfszpatchfs..wrap_patchfsßsføø€Ý Œ˜Ñ Ô ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ñ Ô ð *ð ˆr>zYDecorator argument is not a function. Did you mean `@patchfs(additional_skip_names=...)`?Ú patchings)r ÚcallableÚ TypeErrorrYÚlenrŽÚ nr_patches) rrvrwrxryrzr{r|r}r~r�s ````````` r<Úpatchfsr“ÄsËøøøøøøøøø€ð6�ð¥Xððððððððððððððð( ð#ݘ‰Œð ÝðFñôð õ �5˜+Ñ &Ô &ð 4Ý" 5¤?Ñ3Ô3ˆEÔ Øˆ|˜EÑ"Ô"Ð"à Ðr>ÚloaderÚtestsÚignoreÚmodulec óp—tjdu} | s"t|||||| | | d¬¦ « t_tj€J‚tj t|¦«¦«} | t j|| tjjtjj¬¦«¦«|S)aYLoad the doctest tests for the specified module into unittest. Args: loader, tests, ignore : arguments passed in from `load_tests()` module: module under test remaining args: see :py:class:`TestCase` for an explanation File `example_test.py` in the pyfakefs release provides a usage example. NT) rvrwrxryrzr{r|r~Ú is_doc_test)ÚglobsÚsetUpÚtearDown) r…Ú DOC_PATCHERÚ replace_globsÚvarsÚaddTestsÚdoctestÚ DocTestSuiter›rœ)r”r•r–r—rvrwrxryrzr{r|r~Ú has_patcherršs r<Ú load_doctestsr¤s€õ,Ô%¨TÐ1€KØ ð  Ý%Ø"7Ø/Ø-Ø+Ø/Ø+Ø1Ø/Øð  ñ  ô  �Ôõ Ô Ð *Ð *Ð *Ý Ô × -Ò -­d°6©l¬lÑ ;Ô ;€EØ ‡N‚NÝÔØ ØÝÔ%Ô+ÝÔ(Ô1ð  ñ ô ñôðð €Lr>cóV—eZdZUdZdZeeeee fe d<dZ eee e d<dZ ee ee fe d<ed„¦«Zedefd„¦«Zdddd d ejd d d f deeeee fdeee dee ee fd ed ed ededededdfd„Zedddd d ejd d d f deeeee fdeee dee ee fd ed ed ededededdfd„¦«Zed„¦«Zdd„Zdd„ZdS)Ú TestCaseMixinaƒTest case mixin that automatically replaces file-system related modules by fake implementations. Attributes: additional_skip_names: names of modules where no module replacement shall be performed, in addition to the names in :py:attr:`fake_filesystem_unittest.Patcher.SKIPNAMES`. Instead of the module names, the modules themselves may be used. modules_to_reload: A list of modules that need to be reloaded to be patched dynamically; may be needed if the module imports file system modules under an alias .. caution:: Reloading modules may have unwanted side effects. modules_to_patch: A dictionary of fake modules mapped to the fully qualified patched module names. Can be used to add patching of modules not provided by `pyfakefs`. If you specify some of these attributes here, and you have DocTests, consider also specifying the same arguments to :py:func:`load_doctests`. Example usage in derived test classes:: from unittest import TestCase from fake_filesystem_unittest import TestCaseMixin class MyTestCase(TestCase, TestCaseMixin): def __init__(self, methodName='runTest'): super(MyTestCase, self).__init__( methodName=methodName, additional_skip_names=['posixpath']) import sut class AnotherTestCase(TestCase, TestCaseMixin): def __init__(self, methodName='runTest'): super(MyTestCase, self).__init__( methodName=methodName, modules_to_reload=[sut]) Nrvrwrxcó`—t|d¦«r|jp tjStjS)NÚ_patcher)rYr¨r…ÚPATCHERr:s r<ÚpatcherzTestCaseMixin.patcher_s+€å �4˜Ñ $Ô $ð 4Ø”=Ð3¥G¤OÐ 3ÝŒÐr>r€có@—tt|jj¦«Sr7)rr(rªrˆr:s r<rˆzTestCaseMixin.fses€å•N D¤L¤OÑ4Ô4Ð4r>TFryrzr{r|r}r~c ó(—tj�dS|€|j}|€|j}|€|j}t||||||||| ¬¦ « |_|j ¦«tt|¦«  |jj ¦«dS)a6Bind the file-related modules to the :py:class:`pyfakefs` fake file system instead of the real file system. Also bind the fake `open()` function. Invoke this at the beginning of the `setUp()` method in your unit test class. For the arguments, see the `TestCaseMixin` attribute description. If any of the arguments is not `None`, it overwrites the settings for the current test case. Settings the arguments here may be a more convenient way to adapt the setting than overwriting `__init__()`. Nru) r…r©rvrwrxr¨r›rÚTestCaseÚ addCleanuprœ) r;rvrwrxryrzr{r|r}r~s r<Ú setUpPyfakefszTestCaseMixin.setUpPyfakefsis®€õ0 Œ?Ð &Ø ˆFà Ð (Ø$(Ô$>Ð !Ø Ð $Ø $Ô 6Ð Ø Ð #Ø#Ô4Ð ÝØ"7Ø/Ø-Ø+Ø/Ø+Ø1ØØ/ð  ñ  ô  ˆŒ ð Œ ×ÒÑÔÐÝ �X�tÑÔ×'Ò'¨¬ Ô(>Ñ?Ô?Ð?Ð?Ð?r>c ó„—tjdkrtd¦«‚tj�dS|€|j}|€|j}|€|j}t||||||||| ¬¦ « t_tj ¦«tt|¦«  tjj ¦«dS)aCSimilar to :py:func:`setUpPyfakefs`, but as a class method that can be used in `setUpClass` instead of in `setUp`. The fake filesystem will live in all test methods in the test class and can be used in the usual way. Note that using both :py:func:`setUpClassPyfakefs` and :py:func:`setUpPyfakefs` in the same class will not work correctly. .. note:: This method is only available from Python 3.8 onwards. .. note:: If using `pytest` as testrunner, you need at least pytest 6.2 for this method to work. )rAézIsetUpClassPyfakefs is only available in Python versions starting from 3.8Nru) rUrVÚNotImplementedErrorr…r©rvrwrxr›rr­ÚaddClassCleanuprœ) Úclsrvrwrxryrzr{r|r}r~s r<ÚsetUpClassPyfakefsz TestCaseMixin.setUpClassPyfakefs™sÕ€õ0 Ô ˜fÒ $Ð $Ý%ð4ñôð õ Œ?Ð &Ø ˆFà Ð (Ø$'Ô$=Ð !Ø Ð $Ø #Ô 5Ð Ø Ð #Ø"Ô3Ð Ý!Ø"7Ø/Ø-Ø+Ø/Ø+Ø1ØØ/ð  ñ  ô  �Œõ Œ×ÒÑÔÐÝ �X�sÑÔ×+Ò+­G¬OÔ,DÑEÔEÐEÐEÐEr>có@—tjrtjjSdS)z¦Convenience class method for accessing the fake filesystem. For use inside `setUpClass`, after :py:func:`setUpClassPyfakefs` has been called. N)r…r©rˆ©r´s r<Úfake_fszTestCaseMixin.fake_fsÐs€õ Œ?ð &Ý”?Ô%Ð %؈tr>có8—|j ¦«dS)úáPause the patching of the file system modules until `resume` is called. After that call, all file system calls are executed in the real file system. Calling pause() twice is silently ignored. N)rªÚpauser:s r<r»zTestCaseMixin.pauseÚs€ð Œ ×ÒÑÔÐÐÐr>có8—|j ¦«dS©zçResume the patching of the file system modules if `pause` has been called before. After that call, all file system calls are executed in the fake file system. Does nothing if patching is not paused. N)rªÚresumer:s r<r¾zTestCaseMixin.resumeãs€ð Œ ×ÒÑÔÐÐÐr>©r€N)r`rarbrcrvrrrÚstrr Ú__annotations__rwrxrÚpropertyrªr(rˆr'ÚOFFÚboolr¯Ú classmethodrµr¸r»r¾rdr>r<r¦r¦3sÀ€€€€€€ð%ð%ðNEIИ8 D¨¨s°J¨Ô)?Ô$@ÔAÐHÐHÑHØ48Ð�x  ZÔ 0Ô1Ð8Ð8Ñ8Ø8<Ð�h˜t C¨ OÔ4Ô5Ð<Ð<Ñ<à ððñ„Xðð ð5�Nð5ð5ð5ñ„Xð5ð IMØ8<Ø<@Ø $Ø"&Ø%.¤]Ø#(ØØ"&ð.@ð.@à'¨¨U°3¸ °?Ô-CÔ(DÔEð.@ð$ D¨Ô$4Ô5ð.@ð# 4¨¨Z¨Ô#8Ô9ð .@ð ð .@ð  ð .@ð#ð.@ð!ð.@ðð.@ð ð.@ð ð.@ð.@ð.@ð.@ð`ðIMØ8<Ø<@Ø $Ø"&Ø%.¤]Ø#(ØØ"&ð4Fð4Fà'¨¨U°3¸ °?Ô-CÔ(DÔEð4Fð$ D¨Ô$4Ô5ð4Fð# 4¨¨Z¨Ô#8Ô9ð 4Fð ð 4Fð  ð 4Fð#ð4Fð!ð4Fðð4Fð ð4Fð ð4Fð4Fð4Fñ„[ð4Fðlððñ„[ðððððððððððr>r¦c 󢇗eZdZdZ d dedeeeeefdeeedee eeffˆfd„ Z d d „Z ˆxZ S) r­zÌTest case class that automatically replaces file-system related modules by fake implementations. Inherits :py:class:`TestCaseMixin`. The arguments are explained in :py:class:`TestCaseMixin`. ÚrunTestNÚ methodNamervrwrxcót•—t¦« |¦«||_||_||_dS)zàCreates the test class instance and the patcher used to stub out file system related modules. Args: methodName: The name of the test method (same as in unittest.TestCase) N)Úsuperr=rvrwrx)r;rÈrvrwrxÚ __class__s €r<r=zTestCase.__init__ós;ø€õ ‰Œ×Ò˜Ñ$Ô$Ð$à%:ˆÔ"Ø!2ˆÔØ 0ˆÔÐÐr>r€có—dS)zgThis method is deprecated and exists only for backward compatibility. It does nothing. Nrdr:s r<ÚtearDownPyfakefszTestCase.tearDownPyfakefss€€€r>)rÇNNNr¿) r`rarbrcrÀrrrr rr=rÍÚ __classcell__©rËs@r<r­r­ìs¿ø€€€€€ððð$ØHLØ8<Ø<@ð 1ð1àð1ð (¨¨U°3¸ °?Ô-CÔ(DÔEð1ð$ D¨Ô$4Ô5ð 1ð # 4¨¨Z¨Ô#8Ô9ð 1ð1ð1ð1ð1ð1ð( ð ð ð ð ð ð ð r>r­có ‡—eZdZUdZ deeeeee e e e e eeeeejhZe jdkr3ddlZddlZe e¦«e e¦«nKddlZddlZddlZe e¦«e e¦«e e¦«gd¢dgdœZe¦«Zeee d<iZ!e"e#ee$ee#ffe d <iZ%e"e$e#e#e#feefe d <gZ&e'e$e(e)e*d e+ffe d <iZ,e"e#ee$ee#ffe d <devs Jd¦«‚e jdvZ-e¦«Z.ee#e d<e¦«Z/ee#e d<e¦«Z0ee#e d<dZ1dZ2e3de d<dZ4e3de d<dZ5dZ6ˆfd„Z7ddddde8j9ddddf de3e'e:e#efde3e'ede3e"e#efde;de;de8de;de;d e;d!e;d"dfd#„ZdJd%„Z?d&e#d'e*e#ge;ffd(„Z@dJd)„ZAdJd*„ZBdKd+„ZCd,e3eDeEd-e3eEd.e3eFd"dfd/„ZGd0ed&e#d1e'e#d"e;fd2„ZHd3e(d"e;fd4„ZId5e(d"eJe$e(e)e+ffd6„ZKd7eLe#e(fd"dfd8„ZMdJd9„ZNdJd:„ZOdLd;e+d"dfd<„ZPdJd=„ZQd>„ZRdJd?„ZSdJd@„ZTdJdA„ZUdBe"e#e+fd"e"e#e+ffdC„ZVdLd;e+fdD„ZWdMdJdE„ZXeYdF„¦«ZZdJdG„Z[dJdH„Z\dJdI„Z]ˆxZ^S)Nr…at Instantiate a stub creator to bind and un-bind the file-related modules to the :py:mod:`pyfakefs` fake modules. The arguments are explained in :py:class:`TestCaseMixin`. :py:class:`Patcher` is used in :py:class:`TestCaseMixin`. :py:class:`Patcher` also works as a context manager for other tests:: with Patcher(): doStuff() Nr/r)Ú_pydevd_ÚpydevdÚ_pydev_Ú_jb_)rÒÚ_jb_runner_toolsÚCACHED_MODULESÚ FS_MODULESÚ FS_FUNCTIONS.Ú FS_DEFARGSÚSKIPPED_FS_MODULESz3sys.modules contains 'None' values; must skip them.)r/ÚcygwinÚ SKIPNAMESÚPATCHED_MODULE_NAMESÚADDITIONAL_SKIP_NAMESFr©r�có•—| dd¦«r4|j€&t¦« |¦«|_|jS|j€&t¦« |¦«|_|jS)Nr™F)Úgetr�rÊÚ__new__r©)r´rQrRrËs €r<rázPatcher.__new__csgø€Ø �:Š:�m UÑ +Ô +ð #ØŒÐ&Ý"'¡'¤'§/¢/°#Ñ"6Ô"6�”Ø”?Ð "Ø Œ;Ð Ý™'œ'Ÿ/š/¨#Ñ.Ô.ˆCŒKØŒ{Ðr>Trvrwrxryrzr{r|r}r~r™r€c ó—| |_| r|jdkrdSnA|jdkr6|s|s|s|r|r|tjks|s|r| st jd¦«dS|std¦«td¦«|j   ¦«|_ t|_ ||_t¦«|_t#¦«|_|�&d„|D¦«} |j  | ¦«i|_i|_i|_| ¦«g|_|�|j |¦«||_||_| |_i|_d|_d|_i|_ i|_!d|_"d|_#d|_$d|_%d|_&d|_'|r“ddl(m)} m*} m+}m,}|pi}| | ¦«¦«|j | ¦«¦«|j |¦«¦«|j |¦«¦«|�4| -¦«D]\}}||j|<Œt]|¦«}nt]¦«}| }|rU||j/kr||j0_/d}|j |j1kr|j |j0_1d}||j2kr||j0_2d}|r| 3¦«i|_4| 5¦«dS) aV Args: additional_skip_names: names of modules where no module replacement shall be performed, in addition to the names in :py:attr:`fake_filesystem_unittest.Patcher.SKIPNAMES`. Instead of the module names, the modules themselves may be used. modules_to_reload: A list of modules that need to be reloaded to be patched dynamically; may be needed if the module imports file system modules under an alias .. caution:: Reloading modules may have unwanted side effects. modules_to_patch: A dictionary of fake modules mapped to the fully qualified patched module names. Can be used to add patching of modules not provided by `pyfakefs`. allow_root_user: If `True` (default), if the test is run as root user, the user in the fake file system is also considered a root user, otherwise it is always considered a regular user. use_known_patches: If `True` (the default), some patches for commonly used packages are applied which make them usable with pyfakefs. patch_open_code: If `True`, `io.open_code` is patched. The default is not to patch it, as it mostly is used to load compiled modules that are not in the fake file system. patch_default_args: If `True`, default arguments are checked for file system functions, which are patched. This check is expansive, so it is off by default. use_cache: If `True` (default), patched and non-patched modules are cached between tests for performance reasons. As this is a new feature, this argument allows to turn it off in case it causes any problems. use_dynamic_patch: If `True`, dynamic patching after setup is used (for example for modules loaded locally inside of functions). Can be switched off if it causes unwanted side effects. rNz{Nested fake filesystem invocation using custom arguments - using the existing fake filesystem, discarding custom arguments!écó”—g|]E}tj|¦«rtt|¦«jntt |¦«‘ŒFSrd)ÚinspectÚismodulerr r`rÀ)Ú.0Úms r<ú z$Patcher.__init__..½sS€ðððàõ18Ô0@ÀÑ0CÔ0CÐU••Z Ñ#Ô#Ô,Ð,ÍÍcÐSTÉÌðððr>TF)Úget_modules_to_patchÚget_classes_to_patchÚget_fake_module_classesÚget_cleanup_handlers)6r™Ú DOC_REF_COUNTÚ REF_COUNTr'rÃÚwarningsÚwarnr$r%rÜÚcopyÚ skip_namesÚopenÚ original_openr{r5Útempfile_patcherrfÚlinecache_patcherÚupdateÚ_fake_module_classesÚ_unfaked_module_classesÚ_class_modulesÚ_init_fake_module_classesrwÚextendr|r}r~Úcleanup_handlersÚ_stubsrˆÚ fake_modulesÚunfaked_modulesÚ_isStaleÚ _dyn_patcherÚ _patchingÚ_pausedÚhas_copy_file_rangeÚ has_copy_fileÚpyfakefs.patched_packagesrêrërìríÚitemsÚsetrÝrËrÞÚPATCH_DEFAULT_ARGSÚ clear_cacheÚ_fake_module_functionsÚ_init_fake_module_functions)r;rvrwrxryrzr{r|r}r~r™rórêrërìrírWÚ fake_moduleÚpatched_module_namesr s r<r=zPatcher.__init__lsØ€ð^'ˆÔØ ð ØÔ! AÒ%Ð%Ø�ð&à Œ^˜aÒ Ð à%ð à$ð ð$ð ð'ð  ð )ð  ð #¥i¤mÒ3Ð3Ø%ð4à ð4ð)ð4õ ” ðWñôðð ˆFØð å �A‰JŒJˆJÝ �A‰JŒJˆJàœ.×-Ò-Ñ/Ô/ˆŒå!ˆÔØ.ˆÔÝ /Ñ 1Ô 1ˆÔÝ!1Ñ!3Ô!3ˆÔà Ð ,ððà.ðñôˆJð ŒO× "Ò " :Ñ .Ô .Ð .à46ˆÔ!Ø79ˆÔ$Ø46ˆÔØ ×&Ò&Ñ(Ô(Ð(ð46ˆÔØ Ð (Ø Ô "× )Ò )Ð*;Ñ <Ô <Ð <Ø"4ˆÔØ"ˆŒØ!2ˆÔØBDˆÔð48ˆŒ Ø,0ˆŒØ,.ˆÔØ/1ˆÔðˆŒ Ø6:ˆÔ؈ŒØˆŒ Ø#(ˆÔ Ø"ˆÔà ð Að ð ð ð ð ð ð ð ð ð ð ð ð 0Ð5°2Ð Ø × #Ò #Ð$8Ð$8Ñ$:Ô$:Ñ ;Ô ;Ð ;Ø Ô × &Ò &Ð';Ð';Ñ'=Ô'=Ñ >Ô >Ð >Ø Ô %× ,Ò ,Ð-DÐ-DÑ-FÔ-FÑ GÔ GÐ GØ Ô !× (Ò (Ð)=Ð)=Ñ)?Ô)?Ñ @Ô @Ð @à Ð 'Ø%5×%;Ò%;Ñ%=Ô%=ð >ð >Ñ!��kØ2=�Ô)¨$Ñ/Ð/Ý#&Ð'7Ñ#8Ô#8Ð Ð å#&¡5¤5Ð Ø#�mˆ Ø ð #Ø# tÔ'@Ò@Ð@Ø6J�”Ô3Ø"� ØŒ $Ô"<Ò<Ð<Ø7;´�”Ô4Ø"� Ø! TÔ%<Ò<Ð<Ø4F�”Ô1Ø"� à ð Ø × Ò Ñ Ô Ð Ø79ˆÔ#Ø ×(Ò(Ñ*Ô*Ð*Ð*Ð*r>cód—t¦«|_i|_i|_g|_i|_dS)zClear the module cache.N)r rÖr×rØrÙrÚr·s r<Úclear_fs_cachezPatcher.clear_fs_caches4€õ!™UœUˆÔ؈ŒØˆÔ؈ŒØ!#ˆÔÐÐr>có8—|j ¦«dS)z5Clear the module cache (convenience instance method).N)rËrr:s r<r zPatcher.clear_cache s€à Œ×%Ò%Ñ'Ô'Ð'Ð'Ð'r>rWÚhandlercó—||j|<dS)aQRegister a handler for cleaning up a module after it had been loaded by the dynamic patcher. This allows to handle modules that cannot be reloaded without unwanted side effects. Args: name: The fully qualified module name. handler: A callable that may do any module cleanup, or do nothing and return `True` in case reloading shall be prevented. Returns: `True` if no further cleanup/reload shall occur after the handler is executed, `False` if the cleanup/reload shall still happen. N)rþ)r;rWrs r<Úregister_cleanup_handlerz Patcher.register_cleanup_handlers€ð'.ˆÔ˜dÑ#Ð#Ð#r>có¨—dtfd„}dtfd„}tjtjt j|dœ|_tj dd…dkr ||jd<tstj dkrt j |jd <tj d krtj|jd <ntj|jd <d g|jd<tj dd…dkr |jd d¦«t&j|jd <tj dd…dkrt&j|jd<t,rHt.j|jd<|jd d¦«t&j|jd<t2rt.j|jd<||jd<t&j|jd<dS)Nrˆcó.—tj|d¬¦«S©NT)Ú from_patcher)r"ÚFakePathlibModule©rˆs r<Úfake_pathlib_modulez>Patcher._init_fake_module_classes..fake_pathlib_module)s€ÝÔ1°"À4ÐHÑHÔHÐ Hr>có.—tj|d¬¦«Sr)r"ÚFakePathlibPathModulers r<Úfake_path_modulez;Patcher._init_fake_module_classes..fake_path_module,s€ÝÔ5°bÀtÐLÑLÔLÐ Lr>)rEÚshutilÚioÚpathlibérJzpathlib._localr@Ú_ior/r0Úfcntlr#ÚPathr,r-)r(rÚ FakeOsModuler ÚFakeShutilModulerÚ FakeIoModulerùrUrVr*Ú FakeIoModule2rZrÚ FakeNtModulerÚFakeFcntlModulerûr‡r"ÚRealPathlibModulerúr,r!ÚFakePathlib2Moduler-ÚFakeScanDirModuleÚRealPathlibPathModule)r;rr s r<rüz!Patcher._init_fake_module_classes!sð€ð I¥Nð Ið Ið Ið Ið M¥ð Mð Mð Mð MõÔ&Ý,Ô=ÝÔ&Ø*ð % ð% ˆÔ!õ Ô ˜B˜Q˜BÔ  7Ò *Ð *ð;NˆDÔ %Ð&6Ñ 7Ý ð E•cÔ&¨'Ò1Ð1å/6Ô/DˆDÔ % eÑ ,Ý Œ<˜7Ò "Ð "Ý.7Ô.DˆDÔ % dÑ +Ð +å1@Ô1PˆDÔ % gÑ .ð (1 kˆÔ˜FÑ#Ý Ô ˜B˜Q˜BÔ  7Ò *Ð *Ø Ô  Ô '× .Ò .Ð/?Ñ @Ô @Ð @Ý2>Ô2PˆÔ$ YÑ/Ý Ô ˜B˜Q˜BÔ  7Ò *Ð *åÔ.ð Ô (Ð)9Ñ :õ ð Vå#Ô6ð Ô % jÑ 1ð Ô  Ô '× .Ò .¨zÑ :Ô :Ð :Ý7CÔ7UˆDÔ (¨Ñ 4Ý ð YÝ3FÔ3XˆDÔ % iÑ 0Ø,<ˆÔ! &Ñ)Ý/;Ô/QˆÔ$ VÑ,Ð,Ð,r>cóp—|j ¦«D] \}}t|d¦«r‹|j}t j|¦«rp| ¦«D][}t ||¦«|f}||j |i¦«|<|dkr#||j |i¦«t<Œ\Œ¡tj }| ¦«D]Z}t ||¦«tf}||j |i¦«d<||j |i¦«t<Œ[dS)NÚdirrEÚ genericpath) rùr rYr3råÚ isfunctionÚgetattrr Ú setdefaultÚ OS_MODULErÚFakePathModuleÚ PATH_MODULE)r;Úmod_namerÚ module_dirÚfct_nameÚ module_attrs r<rz#Patcher._init_fake_module_functionsXs_€ð&*Ô%>×%DÒ%DÑ%FÔ%Fð ,ð ,Ñ !ˆH�kÝ�{ EÑ*Ô*ð ,Ø(œ_� ÝÔ% jÑ1Ô1ð ,Ø$/§O¢OÑ$5Ô$5ð,ð,˜Ý'.¨{¸HÑ'EÔ'EÀxÐ&P˜ ð(ðÔ3×>Ò>¸xÈÑLÔLØ$ñð$ tÒ+Ð+ð!,ð!Ô7×BÒBÀ8ÈRÑPÔPÝ )ñøøõ &Ô4ˆ Ø#ŸšÑ)Ô)ð ð ˆHÝ" ;°Ñ9Ô9½;ÐGˆKàð Ô '× 2Ò 2°8¸RÑ @Ô @ÀÑ Oðð Ô '× 2Ò 2°8¸RÑ @Ô @ÅÑ MÐ Mð  ð r>có.—| ¦«|S)z·Context manager for usage outside of fake_filesystem_unittest.TestCase. Ensure that all patched modules are removed in case of an unhandled exception. )r›r:s r<Ú __enter__zPatcher.__enter__us€ð � Š ‰ Œ ˆ ؈ r>Úexc_typeÚexc_valÚexc_tbcó.—| ¦«dSr7)rœ)r;rArBrCs r<Ú__exit__zPatcher.__exit__~s€ð � Š ‰Œˆˆˆr>ÚmodÚ module_namescóÌ— tj|¦«r |j|vp5tj|¦«o!|j|j |g¦«vS#t$rYdSwxYw©NF)rårær`ÚisclassrarûràÚ Exception)r;rFrWrGs r<Ú _is_fs_modulezPatcher._is_fs_module†s…€ð åÔ  Ñ%Ô%ð1Ø”L LÐ0ðHå”? 3Ñ'Ô'ðHØ”N dÔ&9×&=Ò&=¸dÀBÑ&GÔ&GÐGð  øõ ð ð ð ð�5�5ð  øøøs‚AAÁ A#Á"A#ÚfctcóÄ— tj|¦«stj|¦«o&|j|jvo|j|j|jvS#t $rYdSwxYwrI)rår5Ú isbuiltinr`r rarK)r;rMs r<Ú_is_fs_functionzPatcher._is_fs_function–s}€ð åÔ# CÑ(Ô(ÐB­GÔ,=¸cÑ,BÔ,BðPØ”L DÔ$?Ð?ðPà”N dÔ&AÀ#Ä,Ô&OÐOð øõ ð ð ð ð�5�5ð øøøs‚AAÁ AÁAÚitemc#óK— |jrJtj|¦«r6t|j¦«D]!\}}| |¦«r|||fV—Œ"n#t $rYnwxYw tj|¦«r{tj|tj¬¦«D]\}tt|d¦«}|jr6t|j¦«D]!\}}| |¦«r|||fV—Œ"Œ[dSdS#t $rYdSwxYw)z„Find default arguments that are file-system functions to be patched in top-level functions and members of top-level classes.)Ú predicaterãN) Ú __defaults__rår5Ú enumeraterPrKrJÚ getmembersrr )r;rQÚiÚdrèr‚s r<Ú _def_valueszPatcher._def_values¢sfèè€ð  ØÔ ð )¥WÔ%7¸Ñ%=Ô%=ð )Ý% dÔ&7Ñ8Ô8ð)ð)‘D�A�qØ×+Ò+¨AÑ.Ô.ð)Ø" A q˜jÐ(Ð(Ð(øøøÝð ð ð Ø ˆDð øøøð ÝŒ˜tÑ$Ô$ð .õ!Ô+¨D½GÔcót‡‡ ‡ —t‰j ¦«¦«tgzŠ tj ¦« ¦«}|D�]Q\}Š ‰jr ‰ ‰j vstj ‰ ¦«sŒ,nH#t$r;‰jr1 ‰j j  ‰ ¦«n#t$rYnwxYwYŒqwxYw‰ ‰jvpt#ˆ fd„‰jD¦«¦«}‰ j ¦« ¦«}ˆ ˆfd„|D¦«}|ra| ¦«D]K\}}‰j j |t-¦«¦« ‰ |jf¦«ŒLnð| ¦«D]K\}}‰j j |t-¦«¦« ‰ |jf¦«ŒLˆfd„|D¦«}| ¦«D]Q\}}‰j j ||j|jft-¦«¦« ‰ ¦«ŒR‰jr‰ |¦«‰jr‰j j  ‰ ¦«�ŒSdS)z˜Find and cache all modules that import file system modules. Later, `setUp()` will stub these with the fake file system modules. cóD•—g|]}| ‰j¦«‘ŒSrd)Ú startswithr`)rçÚsnr—s €r<réz)Patcher._find_modules..ás'ø€ÐJÐJÐJ°B�—’˜vœÑ/Ô/ÐJÐJÐJr>cóJ•—i|]\}}‰ ||‰¦«¯||“Œ Srd)rL)rçrWrFrGr;s €€r<ú z)Patcher._find_modules..åsGø€ðððá�D˜#Ø×%Ò% c¨4°Ñ>Ô>ðØ�cðððr>cóF•—i|]\}}‰ |¦«¯||“ŒSrd)rP)rçrWrMr;s €r<rcz)Patcher._find_modules..õsCø€ðððÙ"+ $¨¸t×?SÒ?SÐTWÑ?XÔ?Xðؘ#ðððr>N)r†rùÚkeysr:rUÚmodulesròr r}rÖrårærKrËÚaddr�Ú SKIPMODULESÚanyróÚ__dict__rÚr7r r`r×rØrar|r]) r;r rWÚskippedrZrfrFÚ functionsrMr—rGs ` @@r<Ú _find_moduleszPatcher._find_modulesÅs'øøø€õ ˜DÔ5×:Ò:Ñ<Ô<Ñ=Ô=ÅÀ ÑMˆ Ý” × Ò Ñ"Ô"×(Ò(Ñ*Ô*ˆØ!ð7 :ñ7 :‰LˆD�&ð à”Nðà $Ô"5Ð5Ð5Ý"Ô+¨FÑ3Ô3ð6ðð6øõð ð ð ð ”>ððØœÔ5×9Ò9¸&ÑAÔAÐAÐAøÝ$ðððà˜ðøøøð�ð øøøð Ô 0Ð0ðµCØJÐJÐJÐJ¸$¼/ÐJÑJÔJñ5ô5ˆGð"œ?×/Ò/Ñ1Ô1×7Ò7Ñ9Ô9ˆLðððððà!-ðñôˆGð ð 8Ø!(§¢¡¤ðð‘I�D˜#Ø”NÔ5×@Ò@ÀÅsÁuÄuÑMÔM×QÒQØ ¤Ð.ñôðððð ")§¢¡¤ðð‘I�D˜#Ø”NÔ-×8Ò8¸½s¹u¼uÑEÔE×IÒIØ ¤Ð.ñôððððððØ/;ðñô� ð"+§¢Ñ!2Ô!2ð"ð"‘I�D˜#Ø”NÔ/×:Ò:ؘsœ|¨S¬^Ð<½c¹e¼eñôç’c˜&‘k”k�k�kðÔ*ð8Ø×)Ò)¨,Ñ7Ô7Ð7àŒ~ð :Ø”Ô-×1Ò1°&Ñ9Ô9Ð9ùðo7 :ð7 :s6Á,$BÂCÂ$CÃCà CÃCÃCÃCÃCcó&—|j�|j ¦«tj¦«|_t j|d¬¦«|_|j|j_|jD]W}|j||j¦«|j |<t|j |d¦«r|j |j |_ ŒX|j dj |j t<|jD]}|j|¦«|j|<Œ d|_dS)z@Renew the fake file system and set the _isStale flag to `False`.NT)rªÚcreate_temp_dirrórEF)rÿÚsmart_unset_allr#r.rr(rˆr{rùrrYróÚpathr:rúrr©r;rWs r<Ú_refreshzPatcher._refreshs €à Œ;Ð "Ø ŒK× 'Ò 'Ñ )Ô )Ð )Ý"Ô4Ñ6Ô6ˆŒ å!Ô0¸ÈtÐTÑTÔTˆŒØ"&Ô"6ˆŒÔØÔ-ð Eð EˆDØ&E dÔ&?ÀÔ&EÀdÄgÑ&NÔ&NˆDÔ ˜dÑ #Ý�tÔ(¨Ô.° Ñ=Ô=ð EØ59´_�Ô! $Ô'Ô2øØ)-Ô):¸4Ô)@Ô)EˆÔ�+Ñ&ØÔ0ð Nð NˆDØ)K¨Ô)EÀdÔ)KÑ)MÔ)MˆDÔ  Ñ &Ð &àˆŒ ˆ ˆ r>Ú doctestercó.—|jr(|jxjdz c_|jjdkrdSn'|jxjdz c_|jjdkrdSt j¦«5t jd¦«| ¦«ddd¦«n #1swxYwY| ¦«|�|  |j ¦«|_ |  ¦«|j t_|j t_dS)z•Bind the file-related modules to the :py:mod:`pyfakefs` fake modules real ones. Also bind the fake `file()` and `open()` functions. rãNr–)r™rËrîrïrðÚcatch_warningsÚfilterwarningsrmrsržršr[rõrsrôÚtokenizeÚ _builtin_open©r;rts r<r›z Patcher.setUpsL€ð Ô ð Ø ŒNÐ (Ô (¨AÑ -Ð (Ô (ØŒ~Ô+¨aÒ/Ð/Ø�ð0ð ŒNÐ $Ô $¨Ñ )Ð $Ô $ØŒ~Ô'¨!Ò+Ð+Ø�å Ô $Ñ &Ô &ð !ð !å Ô # HÑ -Ô -Ð -Ø × Ò Ñ Ô Ð ð !ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !ð � Š ‰Œˆà Ð Ø"×0Ò0°´ÑAÔAˆIŒOà ×ÒÑÔÐØÔ+� ŒØ!%Ô!3�ÔÐÐsÁ*)BÂB#Â&B#có¬—|j�sId|_d|_|j ¦«| ¦«| ¦«| ¦«| ¦«|j ¦«t|¦«|_ tj   d|j ¦«|jD]7}tj |j¦«|urt%|¦«Œ8|js<|j  ¦«tj  d¦«dSdSdS©NTFr)rrr÷r[Ú patch_modulesÚpatch_functionsÚpatch_defaultsÚ_set_glob_os_functionsröÚDynamicPatcherrrUÚ meta_pathÚinsertrwrfràr`rr~rIÚpop)r;r—s r<r[zPatcher.start_patching2s@€ØŒ~ñ %Ø!ˆDŒNØ ˆDŒLà Ô "× 1Ò 1Ñ 3Ô 3Ð 3à × Ò Ñ Ô Ð Ø × Ò Ñ "Ô "Ð "Ø × Ò Ñ !Ô !Ð !à × 'Ò 'Ñ )Ô )Ð )Ø Ô !× 0Ò 0Ñ 2Ô 2Ð 2å .¨tÑ 4Ô 4ˆDÔ Ý ŒM× Ò   DÔ$5Ñ 6Ô 6Ð 6ØÔ0ð #ð #�Ý”;—?’? 6¤?Ñ3Ô3°vÐ=Ð=ݘ6‘N”N�NøØÔ)ð %ØÔ!×)Ò)Ñ+Ô+Ð+Ý” ×!Ò! !Ñ$Ô$Ð$Ð$Ð$ð) %ð %ð$ %ð %r>có@—tjdkrXtj}t t j¦«|_tjdkrt t j¦«|_tjdkr%t t jj ¦«|_ dSdS)NrJ)rAé) rUrVÚglobÚ_StringGlobberÚ staticmethodrEÚlstatr-rqÚlexists)r;Úglobbers r<r€zPatcher._set_glob_os_functionsIsu€å Ô ˜wÒ &Ð &ÝÔ)ˆGÝ(­¬Ñ2Ô2ˆGŒMÝÔ 'Ò)Ð)Ý".­r¬zÑ":Ô":�”Ý Ô ˜wÒ &Ð &Ý*­2¬7¬?Ñ;Ô;ˆGŒOˆOˆOð 'Ð &r>có—|j€J‚|j ¦«D]h\\}}}}|j||\}}|j|}| ||j¦«}|D]} |j | ||¦«ŒŒidSr7)rÿrØr r rÚ__get__rËÚ smart_set) r;rWÚft_nameÚft_modrfÚmethodr;rÚattrr—s r<r~zPatcher.patch_functionsSs¶€ØŒ{Ð&Ð&Ð&Ø04Ô0A×0GÒ0GÑ0IÔ0Ið :ð :Ñ ,Ñ #ˆT�7˜F WØ#Ô:¸7ÔCÀFÔKÑ ˆF�HØÔ+¨HÔ5ˆKØ—>’>ؘ[Ô2ñôˆDð"ð :ð :�Ø” ×%Ò% f¨d°DÑ9Ô9Ð9Ð9ð :ð  :ð :r>cóÄ—g}|j ¦«D](\}}|tjvr| |¦«Œ)t |¦«}|j€J‚|j ¦«D]’\}}|D]Š\}} |r|j  |¦«s(|j  |||j |¦«n0||j vr'|j  |||j |¦«Œ{#t$rYŒ‡wxYwŒ“|j ¦«D]=\}}|D]5\}}||j vr'|j  |||j |¦«Œ6Œ>dSr7)ÚRUNTIME_SKIPMODULESr rUrfrýÚtuplerÿr×r`r`r�rrrKrÚ) r;Úskip_prefix_listÚrt_skip_moduleÚprefixesÚ skip_prefixesrWrfr—r“s r<r}zPatcher.patch_modules^sÄ€ØÐØ(,Ô(@×(FÒ(FÑ(HÔ(Hð 2ð 2Ñ $ˆN˜HØ¥¤Ð,Ð,Ø ×'Ò'¨Ñ1Ô1Ð1øÝÐ.Ñ/Ô/ˆ àŒ{Ð&Ð&Ð&Ø!œ_×2Ò2Ñ4Ô4ð ð ‰MˆD�'Ø 'ð ð ‘ �˜ð Ø(ðX°´×0JÒ0JØ%ñ1ô1ðXðœ ×-Ò-¨f°d¸DÔ’>ؘ[Ô2ñôˆDðˆLØÔ#Ð/Ð/Ð/Ý! #Ô"2Ñ3Ô3ð +ð +‘��1ؘ’8�8Ø ×'Ò'¨Ñ-Ô-Ð-Ð-à ×'Ò'¨Ñ*Ô*Ð*Ð*Ý$ \Ñ2Ô2ˆCÔ Ð ð 3ð 3r>Úglobs_có¼—| ¦«}|jr| ¦«|jD]$}||vr|j||j¦«||<Œ%|Sr7)ròrrsrùrˆ)r;rŸršrWs r<ržzPatcher.replace_globsˆsf€Ø— ’ ‘ ” ˆØ Œ=ð Ø �MŠM‰OŒOˆOØÔ-ð Gð GˆDØ�uˆ}ˆ}Ø=˜dÔ7¸Ô=¸d¼gÑFÔF��d‘ øØˆ r>có8—|jr(|jxjdzc_|jjdkrdSn'|jxjdzc_|jjdkrdS| ¦«t ¦«|jrd|j_dSd|j_dS)z8Clear the fake filesystem bindings created by `setUp()`.rãrN)r™rËrîrïr^r&r�r©rzs r<rœzPatcher.tearDown‘s°€à Ô ð Ø ŒNÐ (Ô (¨AÑ -Ð (Ô (ØŒ~Ô+¨aÒ/Ð/Ø�ð0ð ŒNÐ $Ô $¨Ñ )Ð $Ô $ØŒ~Ô'¨!Ò+Ð+Ø�Ø ×ÒÑÔÐå‰ Œ ˆ Ø Ô ð *Ø)-ˆDŒNÔ &Ð &Ð &à%)ˆDŒNÔ "Ð "Ð "r>có—|jr×d|_d|_||_|jr|j ¦«| ¦«|jr?|jr8|j ¦«tj   d¦«|j   ¦«|j  ¦«| ¦«dSdSr|)rrrrÿrpÚunset_defaultsr~rrIrUr‚r„rör^r÷r€)r;Ú temporarys r<r^zPatcher.stop_patching£sÝ€Ø Œ>ð *Ø ˆDŒMØ"ˆDŒNØ$ˆDŒLØŒ{ð .Ø” ×+Ò+Ñ-Ô-Ð-Ø × Ò Ñ !Ô !Ð !ØÔ%ð %¨$Ô*;ð %ØÔ!×)Ò)Ñ+Ô+Ð+Ý” ×!Ò! !Ñ$Ô$Ð$Ø Ô !× /Ò /Ñ 1Ô 1Ð 1Ø Ô "× 0Ò 0Ñ 2Ô 2Ð 2Ø × 'Ò 'Ñ )Ô )Ð )Ð )Ð )ð *ð *r>có—|jSr7)rr:s r<Ú is_patchingzPatcher.is_patching²s €àŒ~Ðr>có —|jD]z\}}}g}ttt|j¦«¦«D]6\}}||kr| |¦«Œ!| |¦«Œ7t |¦«|_Œ{dSr7)rÙrUrrrTr‡r–)r;rMrœr�ržrWrXs r<r£zPatcher.unset_defaults¶sš€Ø œOð 3ð 3‰LˆC��b؈LÝ!¥$¥u¨cÔ.>Ñ"?Ô"?Ñ@Ô@ð +ð +‘��1ؘ’8�8Ø ×'Ò'¨Ñ+Ô+Ð+Ð+à ×'Ò'¨Ñ*Ô*Ð*Ð*Ý$ \Ñ2Ô2ˆCÔ Ð ð 3ð 3r>có2—| d¬¦«dS)rºT)r¤N)r^r:s r<r»z Patcher.pauseÀs!€ð ×Ò TÐÑ*Ô*Ð*Ð*Ð*r>có@—|jr| ¦«dSdSr½)rr[r:s r<r¾zPatcher.resumeÉs0€ð Œ<ð "Ø × Ò Ñ !Ô !Ð !Ð !Ð !ð "ð "r>r¿)r€r…r7)F)_r`rarbrcrr rrrrrrUrsrxrEr"r%r4rqrhrZr0r2rgr1r3r&r•r rÖrr rÁr×rrÀrrØrÙrr Úintr r rÚÚ IS_WINDOWSrÜrÝrÞr r©rr�rïrîrár'rÃrrÄr=rÅrr rrürr@rÚ BaseExceptionr rErLrPrrYrr]rmrsr›r[r€r~r}rržrœr^rÂr¦r£r»r¾rÎrÏs@r<r…r… sµø€€€€€€ð ð ðð ØØØØØØØØ ØØØ Ø Ø ØØ Œð!€Kð$ „|�wÒÐØˆ ˆ ˆ ؈ ˆ ˆ à�Š˜ÑÔÐØ�Š˜ÑÔÐÐàˆ ˆ ˆ ØÐÐÐØˆ ˆ ˆ à�Š˜ÑÔÐØ�Š˜ Ñ"Ô"Ð"Ø�Š˜ÑÔÐð 4Ð3Ð3Ø#˜HððÐð'* c¡e¤e€N�C˜ ”OÐ+Ð+Ñ+Ø9;€J��S˜#˜e J° OÔ4Ô5Ð5Ô6Ð;Ð;Ñ;Ø@B€L�$�u˜S # s˜]Ô+¨S°¬_Ð<Ô=ÐBÐBÑBØEG€J��U˜<¨¨h°s¸C°xÔ.@Ð@ÔAÔBÐGÐGÑGØACИ˜S # e¨J¸¨OÔ&<Ô"=Ð=Ô>ÐCÐCÑCà �;Ð Ð Ð Ð UÑ Ô Ð à”Ð!4Ð4€Jà˜#™%œ%€Iˆs�3ŒxÐÐÑð&) S¡U¤UИ#˜cœ(Ð*Ð*Ñ*Ø&) c¡e¤eИ3˜sœ8Ð+Ð+Ñ+ØÐØ#'€GˆX�iÔ Ð'Ð'Ñ'Ø'+€K�˜)Ô$Ð+Ð+Ñ+Ø€IØ€MððððððIMØ8<Ø<@Ø $Ø"&Ø%.¤]Ø#(ØØ"&Ø!ðV+ðV+à'¨¨U°3¸ °?Ô-CÔ(DÔEðV+ð$ D¨Ô$4Ô5ðV+ð# 4¨¨Z¨Ô#8Ô9ð V+ð ð V+ð  ð V+ð#ðV+ð!ðV+ððV+ð ðV+ððV+ð ðV+ðV+ðV+ðV+ðpð$ð$ð$ñ„[ð$ð(ð(ð(ð(ð.¨Sð.¸8ÀSÀEÈ4ÀKÔ;Pð.ð.ð.ð.ð 5Rð5Rð5Rð5Rðnðððð:ððððà˜4  Ô.Ô/ðð˜-Ô(ðð˜Ô'ð ð ð ððððØðØ%(ðØ8<¸S¼ ðà ððððð  <ð °Dð ð ð ð ðØ ðà �%˜  c¨3Ð.Ô/Ô 0ððððð<<¨Y°s¸LÐ7HÔ-Ið<Èdð<ð<ð<ð<ð >:ð>:ð>:ð>:ð@ðððð$4ð4˜sð4¨dð4ð4ð4ð4ð6%ð%ð%ð%ð.<ð<ð<ð :ð :ð :ð :ðTðTðTðTð43ð3ð3ð3ð  D¨¨c¨¤Nð°t¸CÀ¸H´~ððððð*ð* #ð*ð*ð*ð*ð$ *ð *ð *ð *ð *ðððñ„Xðð3ð3ð3ð3ð+ð+ð+ð+ð"ð"ð"ð"ð"ð"ð"ð"r>r…cóL—eZdZdZdeeeeffd„Zdefd„Z de ddfd„Z dS) ÚPausez­Simple context manager that allows to pause/resume patching the filesystem. Patching is paused in the context manager, and resumed after going out of its scope. Úcallercó—t|ttf¦«r|j€J‚|j|_dSt|t ¦«r ||_dSt d¦«‚)zÉInitializes the context manager with the fake filesystem. Args: caller: either the FakeFilesystem instance, the Patcher instance or the pyfakefs test case. Nz�Invalid argument - should be of type "fake_filesystem_unittest.Patcher", "fake_filesystem_unittest.TestCase" or "fake_filesystem.FakeFilesystem")Ú isinstancer…r¦rˆÚ_fsr(Ú ValueError)r;r¯s r<r=zPause.__init__Ùsj€õ �f�w­ Ð6Ñ 7Ô 7ð Ø”9Ð(Ð(Ð(Ø'-¤yˆDŒHˆHˆHÝ ˜¥Ñ /Ô /ð ØˆDŒHˆHˆHåð6ñôð r>r€cóB—|j ¦«|jSr7)r²r»r:s r<r@zPause.__enter__ís€Ø Œ�ŠÑÔÐØŒxˆr>rQNcó8—|j ¦«dSr7)r²r¾)r;rQs r<rEzPause.__exit__ñs€Ø Œ�ŠÑÔÐÐÐr>) r`rarbrcrr…r¦r(r=r@r rErdr>r<r®r®Ós‚€€€€€ððð ˜u W¨m¸^Ð%KÔLððððð(˜>ððððð˜cð dððððððr>r®c ó¶—eZdZdZdeddfd„Zdd„Zdedefd„Z dedefd „Z dd ed e e e eefd e ede efd „Zd edefd„ZdS)r�zÆA file loader that replaces file system related modules by their fake implementation if they are loaded after calling `setUpPyfakefs()`. Implements the protocol needed for import hooks. rªr€Ncó†—||_i|_|jj|_t ¦«|_|j|_|jD]L}| |¦«r5|tjvr'tj||j|<tj|=ŒM|j  ¦«D]\}}|tj|<ŒdSr7) r¨Ú sysmodulesrrfr Ú_loaded_module_namesrþÚ needs_patchrUr )r;rªrWr—s r<r=zDynamicPatcher.__init__ûsÀ€ØˆŒ ؈ŒØ”}Ô1ˆŒ Ý.1©e¬eˆÔ!Ø 'Ô 8ˆÔð”Lð &ð &ˆDØ×Ò Ñ%Ô%ð &¨$µ#´+Ð*=Ð*=Ý(+¬ °DÔ(9�” Ñ%Ý”K Ð%øà œL×.Ò.Ñ0Ô0ð 'ð '‰LˆD�&Ø &�CŒK˜Ñ Ð ð 'ð 'r>cón—|jD]}|j|tj|<Œ|jjD]$}|jtjvrt |¦«Œ%d„|jjD¦«}|jD]A}|tjvr1||vr-||jvr|j||¦«rŒ4tj|=ŒBdS)Ncó—g|] }|j‘Œ Srd)r`)rçr—s r<réz*DynamicPatcher.cleanup..s'€ð! ð! ð! Ø &ˆFŒOð! ð! ð! r>) r¸rUrfr¨rwr`rr¹rþ)r;Ú module_namer—Úreloaded_module_namesrWs r<rIzDynamicPatcher.cleanup s逨œ?ð Dð DˆKØ'+¤°{Ô'C�CŒK˜ Ñ $Ð $Ø”mÔ5ð ð ˆFØŒ¥#¤+Ð-Ð-Ý�v‘”�øð! ð! Ø*.¬-Ô*Ið! ñ! ô! Ðð Ô-ð &ð &ˆDØ•s”{Ð"Ð" tÐ3HÐ'HÐ'Hؘ4Ô0Ð0Ð0Ð5P°TÔ5JÈ4Ô5PÐQUÑ5VÔ5VÐ0ØÝ”K Ð%øð  &ð &r>rWcóÈ—||jvr|j |¦«dS|tjvr.t tj|¦«|j|urdSdS)z;Checks if the module with the given name shall be replaced.FT)rfr¹rgrUÚtyperrs r<rºzDynamicPatcher.needs_patchsb€à �t”|Ð #Ð #Ø Ô %× )Ò )¨$Ñ /Ô /Ð /Ø�5Ø •3”;Ð Ð ¥4­¬ °DÔ(9Ñ#:Ô#:¸d¼lÈ4Ô>PÐ#PÐ#PØ�5؈tr>cóˆ—|jj}|�³| d|j¦«}tjD]‹}| ||¦«}|dz}| |¦«r| |¦«cS| |d¦«}| |¦«r| |¦«cSŒŒdS)zˆChecks if the module with the given name is a module existing in the fake filesystem and returns its path in this case. Nú.z.pyz __init__.pyÚ) r¨rˆÚreplaceÚpath_separatorrUrqÚ joinpathsÚexistsÚ absnormpath)r;rWrˆÚ base_pathrqÚ module_pathÚpy_module_pathÚ init_paths r<Úfake_module_pathzDynamicPatcher.fake_module_path&sÌ€ðŒ]Ô ˆà ˆ>ØŸ š  S¨"Ô*;Ñ<Ô<ˆIÝœð 5ð 5�Ø Ÿlšl¨4°Ñ;Ô;� Ø!,¨uÑ!4�Ø—9’9˜^Ñ,Ô,ð:ØŸ>š>¨.Ñ9Ô9Ð9Ð9Ð9ØŸLšL¨°mÑDÔD� Ø—9’9˜YÑ'Ô'ð5ØŸ>š>¨)Ñ4Ô4Ð4Ð4Ð4ð5àˆrr>ÚfullnamerqÚtargetcó2—| |¦«rt||¦«S|jjtjkrW| |¦«}|r@t||¦«}|r.t|¦«}|tj |<t||¦«SdS)zModule finder.N) rºrr¨r{r'rÃrÍrrrUrf)r;rÎrqrÏrÊÚspecr—s r<Ú find_speczDynamicPatcher.find_spec8sœ€ð × Ò ˜HÑ %Ô %ð .ݘh¨Ñ-Ô-Ð -Ø Œ=Ô (­I¬MÒ 9Ð 9à×/Ò/°Ñ9Ô9ˆKØð 6Ý.¨x¸ÑEÔE�Øð6Ý-¨dÑ3Ô3�FØ,2•C”K Ñ)Ý% h°Ñ5Ô5Ð5؈tr>cóP—|j|tj|<|j|S)z/Replaces the module by its fake implementation.)rfrU)r;rÎs r<Ú load_modulezDynamicPatcher.load_moduleLs"€à $¤ ¨XÔ 6�Œ �HÑØŒ|˜HÔ%Ð%r>r¿r7)r`rarbrcr…r=rIrÀrÄrºrÍrrrÚbytesr rrÒrÔrdr>r<r�r�õs€€€€€ððð ' ð'¨Dð'ð'ð'ð'ð"&ð&ð&ð&ð" ð¨ððððð Sð¨Sððððð,(,ð ðàðð�x  e¨S jÔ 1Ô2Ô3ðð˜Ô$ð ð �*Ô ð ðððð(& Cð&¨Jð&ð&ð&ð&ð&ð&r>r�r7)Wrcr%r¡r‹r4r‡rår"rsrErUrNrxÚunittestrðÚ importlibrÚ importlib.abcrrÚimportlib.machineryrÚimportlib.utilrrÚtypesr r r Útypingr r rrrrrrrrrrrrÚpyfakefsrrrrrrr r!r"r#Úpyfakefs.fake_filesystemr$r%r&r'r(Úpyfakefs.fake_osr)Úpyfakefs.helpersr*r+Úpyfakefs.legacy_packagesr,r-Úpyfakefs.mox3_stuboutr.rZr8r:r5rfrÃrÀrÄr“ÚDOCTEST_PATCHERr¤r¦r­r…r®r�rdr>r<úräs ðð ðð. € € € Ø€€€ØÐÐÐØÐÐÐØ € € € Ø€€€Ø € € € ØÐÐÐØ € € € Ø € € € Ø€€€Ø€€€Ø€€€Ø€€€ØÐÐÐÐÐØ0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ø*Ð*Ð*Ð*Ð*Ð*ØDÐDÐDÐDÐDÐDÐDÐDØ9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ðððððððððððððððððððððððððððððððÐÐÐÐÐàWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWØ+Ð+Ð+Ð+Ð+Ð+Ø(Ð(Ð(Ð(Ð(Ð(Ø!Ð!Ð!Ð!Ð!Ð!Ø!Ð!Ð!Ð!Ð!Ð!ððððððððððððððð-Ð,Ð,Ð,Ð,Ð,Ø,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø3Ð3Ð3Ð3Ð3Ð3à”L GÒ+Ð+ˆDˆD°€ Øœ,¨'Ò1Ð1ˆhˆh°{€ ð/ ð/ ð/ ð/ ð/ ñ/ ô/ ð/ ðd/)ð/)ð/)ð/)ð/)ñ/)ô/)ð/)ðf!%ð9ðEIØ48Ø8<Ø Ø"Ø!*¤Ø$ØØ"ð9ð9ð9Ø �HÔ ð9ð$ D¨¨s°J¨Ô)?Ô$@ÔAð9ð   ZÔ 0Ô1ð 9ð ˜t C¨ OÔ4Ô5ð 9ð ð 9ðð9ðð9ðð9ðð9ðð9ðð9ð9ð9ð9ðx€ðEIØ48Ø8<Ø Ø"Ø!*¤Ø$Ø"ð-ð-Ø ð-à ð-ð ð-ð ð -ð $ D¨¨s°J¨Ô)?Ô$@ÔAð -ð    ZÔ 0Ô1ð -ð˜t C¨ OÔ4Ô5ð-ðð-ðð-ðð-ðð-ðð-ðð-ð-ð-ð-ð`vðvðvðvðvñvôvðvðr ð ð ð ð ˆxÔ  -ñ ô ð ðBC "ðC "ðC "ðC "ðC "ñC "ôC "ðC "ðLððððñôððDZ&ðZ&ðZ&ðZ&ðZ&�^ VñZ&ôZ&ðZ&ðZ&ðZ&r>