V dZddlZddlZddlZddlmZddlmZddlm Z m Z m Z m Z m Z mZmZddlmZddlmZmZmZmZddlmZmZmZmZerdd lmZed d Zd d dddddddZGddZ dS)zGA fake open() function replacement. See ``fake_filesystem`` for usage. N) namedtuple)S_ISDIR)OptionalUnionAnyTuplecastAnyStr TYPE_CHECKING)helpers)FakePipeWrapperFakeFileWrapperFakeFileAnyFileWrapper) AnyStringis_root PERM_READ PERM_WRITE)FakeFilesystem _OpenModeszek+IJJJ1':H''''{ .@@ @ @@% # * G 55g>>H&GON$$$ G D) D D ?)))44 D 5 D O * *5< C C C$$$,, J    ;& ' ' H, H..u|YGGGG..u|YGGG!*    4";==L#/K ?0 4'3 $"  '$$ 1;     &H "o8AO"...  " "8 , , , ,#==hGGH r%cld}|jr|jr|tjz}n-|jr|tjz}n|jr|tjz}|jr|tjz}|jr|tj z}|j s|jr|tj z}|j r|jr|tj z}|S)Nr)rZrIosO_RDWRO_RDONLYO_WRONLYr;O_APPENDrVO_TRUNC must_existO_CREATrLO_EXCL)r5flagss r#r@z(FakeFileOpen._open_flags_from_open_modess   !:#7 ! RY EE   ! R[ EE  ! ! R[ E   ! R[ E   RZ E$ )= RZ E  $ )=  RY E r%r[r\r]c>|rtsQ|jr|jtzr|jr4|jt zs%|jtj ||jr|j r| dn|j r%|jtj ||j|r@|j|d}|jJt#t$|j}n|}|j|rW|jjr tjn#|jjr tj n tj}|j|||j|dd}|S)NF)follow_symlinksT)create_missing_dirs apply_umask)rrZrRrrIrrrOrErSrV set_contentsrlENOENTrMresolvecontentsr r ends_with_path_separatorrNEINVALis_macosrTcreate_file_internally)r"r[r\r5r] link_object target_patherrors r#rQzFakeFileOpen._init_file_objects  99 H$ H-8-@9-L H( H1<1Dz1Q H..u|YGGG# 1&1,,R000$ H..u|YGGG%%i00 ("o55iQV5WW "+777"K0 ( 77 DD A4&ELL/& ..ui@@@/@@u$AKr%cd}t|tr|}|j|}t|trdd|dfSt|t r |j|_tt|j| }|J|j }|tt||tt|fStt|}||jj j kr|jj }|}nP|j|}|j|r|j|d}||d|fS)NF)check_read_perm)rGintr get_open_filer rrr!r r get_objectnamer dev_null resolve_pathexistsget_object_from_normpath)r"r-r[rKr`pathr\r]s r#rAzFakeFileOpen._handle_file_arg1sy eS ! !  Go33G<zFakeFileOpen._handle_file_modeVs  4KKC4KK  w & &3$;;-455 5||C$$,,S"55||D#&&..sC88{ ;>)) !3j!@AAA#^D%9:J%%% ""r%)FF)rr,NNNTNN)__name__r? __qualname____doc__boolr$rrr+rr rstrrrr* staticmethodr@rrrQrrAr>r%r#rrGsb H !&  $      *c*S*^****"& $!%+/OOVS[!OO O 3- O  O#OOOZ(O OOOOb s\&'h''' '  '  ''''R#763;'#7 x!8F#3Xc]HVDTT U#7#7#7#7J####Z( # x}j( ) ######r%r)!rrErfr collectionsrstatrtypingrrrrr r r pyfakefsr pyfakefs.fake_filer rrrpyfakefs.helpersrrrrpyfakefs.fake_filesystemrrrrrr%r#rs """""" 8777777ZB  2 1 1 1 1 1 1 1  b#b#b#b#b#b#b#b#b#b#r%