&=dddlZddlZddlZddZeZejejzejzZe edr eej zZe edr eej zZeZ e edr e ej zZ ddZd edd d dfd Zd ZdS)Ncdg}|r|||r|||tjdd|S)a) Generate filename prefix for a temporary file Parameters ---------- package : str, optional package name, will be included in prefix if given extra : str, optional extra string to include in prefix Returns ------- str filename prefix reportbugz %Y%m%d%H%M%S--)appendtimestrftimejoin)packageextraplists 5/usr/lib/python3/dist-packages/reportbug/tempfiles.pytempfile_prefixrsk ME W  U LL//000 88E?? O_NOINHERIT O_NOFOLLOWO_BINARYw+bcd|vrtj|td}ntj|td} tj|||S#t $rtj|wxYw)a Wrapper for open() setting some flags Parameters ---------- filename : str file name mode : str, optional open mode bufsize : int, optional buffer size in bytes Returns ------- an open file object bi)osopen_bin_openflags_text_openflagsfdopen Exceptionclose)filenamemodebufsizefds r open_write_safer"Esy" d{{ WX~u 5 5 WX 6 6yT7+++    s A A3Tzw+cjtj||||\}}tj|||}||fS)a Wrapper for tempfile.mkstemp Main differences are that text defaults to True, and it returns a Python file object instead of an os-level file descriptor. Parameters ---------- suffix : str, optional prefix : str dir : str text : bool mode : str bufsize : int Returns ------- (file object, str) tuple with file object and file name )tempfilemkstemprr) suffixprefixdirtextrr fhrr!s r TempFiler,ds;,#FFC>>LB 2tW % %B >rcptj|rtj|dSdS)z Clean up a temporary file Removes (unlinks) the named file if it exists. Parameters ---------- temp_filename : str Full filename of the file to clean up. Returns ------- None N)rpathexistsunlink) temp_filenames r cleanup_temp_filer2s: w~~m$$! -     !!r)NN)rr)rr%rrtemplateO_RDWRO_CREATO_EXCLrhasattrrrrrr"r,r2rr r9s.  2 ?  )bj(294 72}&r~%O 72|%r}$O  72z"bk!N >xT6!!!!!r