ó {G_Tc@s•ddlZddlZddlZddlmZd„Zd„Zed„Ze edƒrjej nej ƒdkr‚endZ d„Z dS( iÿÿÿÿN(tTESTFNcCs€ttddƒ}|dk r"|Std}ytt|ƒt}Wn tttfk ret }nXt j |ƒ|t_ |S(Ntprev_valt can_symlink( tgetattrRtNoneRtsymlinktTruetOSErrortNotImplementedErrortAttributeErrortFalsetostremoveR(Rt symlink_pathtcan((s0/usr/local/lib/python2.7/test/symlink_support.pyRs       cCs,tƒ}d}|r|Stj|ƒ|ƒS(s8Skip decorator for tests that require functional symlinks*Requires functional symlink implementation(Rtunittesttskip(ttesttoktmsg((s0/usr/local/lib/python2.7/test/symlink_support.pytskip_unless_symlinks cs¤ddl‰ˆjjj}ˆjjˆjjˆjjf|_ˆjj|_ ‡‡fd†‰‡‡fd†‰|p‡t j j |ƒ}ˆ||||ƒƒdS(s‡ Ctypes symlink implementation since Python doesn't support symlinks in windows yet. Borrowed from jaraco.windows project. iÿÿÿÿNcsµd}d}d}d}d}d}||B}d}|} d} ˆjjƒ} d} d} ˆjjj||| | ˆj| ƒ| | ƒ}ˆ|ƒ| j}ˆjjj| ƒ|S( sr Call FormatMessage with a system error number to retrieve the descriptive error message. ii iiiiiN( RtwintypestLPWSTRtwindlltkernel32tFormatMessageWtbyreftvaluet LocalFree(terrnotALLOCATE_BUFFERtARGUMENT_ARRAYt FROM_HMODULEt FROM_STRINGt FROM_SYSTEMtIGNORE_INSERTStflagstsourcet message_idt language_idt result_buffert buffer_sizet argumentstbytestmessage(tctypesthandle_nonzero_success(s0/usr/local/lib/python2.7/test/symlink_support.pytformat_system_message+s2      cs@|dkr<ˆjjjƒ}ˆ|ƒ}t||ƒ‚ndS(Ni(RRt GetLastErrort WindowsError(tresultRtstrerror(R-R/(s0/usr/local/lib/python2.7/test/symlink_support.pyR.Rs  ( tctypes.wintypesRRtCreateSymbolicLinkWRRtDWORDtargtypestBOOLEANtrestypeR tpathtisdir(ttargettlinkttarget_is_directorytCreateSymbolicLink((R-R/R.s0/usr/local/lib/python2.7/test/symlink_support.pyt_symlink_win32s   'RtWindowscCs6ytj|ƒWntk r1tj|ƒnXdS(N(R trmdirRR (tname((s0/usr/local/lib/python2.7/test/symlink_support.pytremove_symlink_s (R Rtplatformttest.test_supportRRRR R@thasattrRtsystemRRD(((s0/usr/local/lib/python2.7/test/symlink_support.pyts      >