* ktt:csdZdkZdkZdkZdkZdZdZdZeeZ!ddZ *ddZ 3dfd YZ Hd Z d fd YZ d dZdZdZdZ9edjo:eindS(snA set of utilities for writing python scripts. This module contains utilities used to write python scripts. Ns$Harry L. Melanson, melanson@fnal.govs00.00.01s scriptutil.pyscsf!#tiidtiitid|f$d|GH%tii|&dddGHdS(Ns ERROR: %s: %s is i2s-( ssyssstderrswritesosspathsbasenamesargvsmsgsdoc(smsgsdoc((s6/home/melanson/algorithms/d0tools/python/scriptutil.pyserrorMsg!s0 csk*,tiidtiitid|f-tii|.dddGH/ti d dS(Ns ERROR: %s: %s is i2s-i( ssyssstderrswritesosspathsbasenamesargvsmsgsdocsexit(smsgsdoc((s6/home/melanson/algorithms/d0tools/python/scriptutil.pys FatalError*s0sOptioncs3dZ?AdZRS(sA command line option. **Public Data Members:** * flag: The option flag (eg. -h) * value: The option value (if any) **Constructor:** Option(flag, value) csAB||_C||_dS(N(sflagsselfsvalue(sselfsflagsvalue((s6/home/melanson/algorithms/d0tools/python/scriptutil.pys__init__As (s__doc__s__init__(((s6/home/melanson/algorithms/d0tools/python/scriptutil.pysOption3s c sHZ\dk}]dk}b|d} c|}d|idiy)j|itid| |\}} Wnok|i j o]}lti id|iitid|fmti i|ntid nXsxo|dsrb} t| dddd fjo?ud G|iitidGHvd G|GHwtidnqW|g}}x4|d}r'} ~|it| d| dqlW|| fSdS( s2Get options from the command line. Supports -h, -?, --help options automatically. If user specifies -h, -? or --help on the command line, then the calling module's documentation is displayed, and the command exits. **Arguments:** * options: allowed options (see getopt module) * long_options: allowed long options (see getopt module) * doc: documenation used when -h option selected (eg. calling module's __doc__ string) **Return Values:** * optlist: list of Option's * args: list of command arguments Nsh?shelpis ERROR: %s: %s is-hs-?s--helps NAME: s (sgetoptsossoptionssallowed_optionss long_optionssallowed_long_optionssappendssyssargvsoptssargsserrorsmsgsstderrswritespathsbasenamesdocsexitsoptsoptlistsOption( soptionss long_optionssdocsoptssossgetoptsmsgsallowed_long_optionssoptlistsargssallowed_optionssopt((s6/home/melanson/algorithms/d0tools/python/scriptutil.pys getOptionsHs.    )0    %sFileInfocs&dZdZdZRS(sHolds information about a file. **Public Data Members:** * name: file's name (eg. 'readme.txt') * prefix: file's prefix (eg. 'readme') * extension: file's extension (eg. 'txt') * protection: file's protection flags * owner: file's owner * group: file's group * size: file's size * lastmod: file's date of last modification **Constructor:** FileInfo(lsline) * lsline: a line resulting from an ls -la command cs ti|}t|djoti|dd}|t|d|_titi|idd |_ ti|idd |_ |d|_ |d|_ |d|_ |d |_|d d |d d |d |_n tdS(Ni is/is.iiiiis ii(sstringssplitslslinesitemsslensfilenamesselfsnamesjoinsprefixs extensions protectionsownersgroupssizeslastmods RuntimeError(sselfslslinesfilenamesitems((s6/home/melanson/algorithms/d0tools/python/scriptutil.pys__init__s) ,csQ|id|id|id|id|id|i}|SdS(Ns (sselfsnamesownersgroupssizeslastmods protectionsrepr(sselfsrepr((s6/home/melanson/algorithms/d0tools/python/scriptutil.pys__repr__sC(s__doc__s__init__s__repr__(((s6/home/melanson/algorithms/d0tools/python/scriptutil.pysFileInfos  ics|i|ijo6|i|ijo#|i|ijo|i|ijoT|o?|i|ijo|i|ijo dSndSndSndSdS(sGCompare two FileInfo's. Return true if they are the same. iiN( sasnamesbssizeslastmods protections checkownersownersgroup(sasbs checkowner((s6/home/melanson/algorithms/d0tools/python/scriptutil.pys sameFileInfossO )   csg}|d djo|d}n|djo d}nd||}xti|didr}t|djoe|dd !d joJt |}|i d jo |i d jo|i |nnnqW|Sd S(s? Get the list of files in a specified directory. **Arguments:** * dir: the directory * filespec: specifies which files to consider (wildcards supported) **Return value:** * A list of FileInfo's **Limitations:** Only works on systems which support the Unix command *ls -la*. is/s*ssls -la sriiistotals.s..N( slistsdirsfilespecscommandsosspopens readlinesslineslensFileInfosfilesnamesappend(sdirsfilespecslistslinesfilescommand((s6/home/melanson/algorithms/d0tools/python/scriptutil.pys getFileLists   # cspg}t|d}x>|dr1}|iddjo|i|nq-W|SdS(sGet subdirectories in a given directory. **Arguments:** * dir: the directory **Return:** * A list of FileInfo's which are really directories sisdN(sresults getFileListsdirsfilelistsfiles protectionsappend(sdirsfilelistsfilesresult((s6/home/melanson/algorithms/d0tools/python/scriptutil.pysgetDirectoriess   csp+-g}.t||}0x>|d0r1}1|iddjo2|i|nq-W4|SdS(sGet files in a given directory. **Arguments:** * dir: the directory * filespec: specifies which files to consider (wildcards supported) **Return:** * A list of FileInfo's which are really files (not directories) isdN(sresults getFileListsdirsfilespecsfilelistsfiles protectionsappend(sdirsfilespecsfilelistsfilesresult((s6/home/melanson/algorithms/d0tools/python/scriptutil.pysgetFiless   s__main__(s__doc__ssyssossstringsres __author__s __version__s __filename__svarsserrorMsgs FatalErrorsOptions getOptionssFileInfos sameFileInfoss getFileListsgetDirectoriessgetFiless__name__sexit(s__doc__soss __version__sFileInfosOptionsgetFilessressyss __author__s FatalErrors getOptionssgetDirectoriess sameFileInfosserrorMsgs __filename__sstrings getFileList((s6/home/melanson/algorithms/d0tools/python/scriptutil.pys?s&           @9 ,