# HG changeset patch # User terom # Date 1194550863 0 # Node ID 235ae238f69413d5e393301e522d842142e0eef6 # Parent d9d1f8e5f384d1baa17b13d4a3dc6da7c327ecea add missing utils.py diff -r d9d1f8e5f384 -r 235ae238f694 degal.py --- a/degal.py Thu Nov 08 19:26:00 2007 +0000 +++ b/degal.py Thu Nov 08 19:41:03 2007 +0000 @@ -528,7 +528,7 @@ """ prepare.info("Preparing image %s", self.path) - + # stat the image file to get the filesize and mtime st = os.stat(self.path) diff -r d9d1f8e5f384 -r 235ae238f694 utils.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/utils.py Thu Nov 08 19:41:03 2007 +0000 @@ -0,0 +1,116 @@ +############################################################### +# Functions taken from pathutils.py Version 0.2.5 (2005/12/06), http://www.voidspace.org.uk/python/recipebook.shtml#utils +# Copyright Michael Foord 2004 +# Released subject to the BSD License +# Please see http://www.voidspace.org.uk/python/license.shtml + +############################################################### +# formatbytes takes a filesize (as returned by os.getsize() ) +# and formats it for display in one of two ways !! + +# For information about bugfixes, updates and support, please join the Pythonutils mailing list. +# http://groups.google.com/group/pythonutils/ +# Comments, suggestions and bug reports welcome. +# Scripts maintained at http://www.voidspace.org.uk/python/index.shtml +# E-mail fuzzyman@voidspace.org.uk + +def formatbytes(sizeint, configdict=None, **configs): + """ + Given a file size as an integer, return a nicely formatted string that + represents the size. Has various options to control it's output. + + You can pass in a dictionary of arguments or keyword arguments. Keyword + arguments override the dictionary and there are sensible defaults for options + you don't set. + + Options and defaults are as follows : + + * ``forcekb = False`` - If set this forces the output to be in terms + of kilobytes and bytes only. + + * ``largestonly = True`` - If set, instead of outputting + ``1 Mbytes, 307 Kbytes, 478 bytes`` it outputs using only the largest + denominator - e.g. ``1.3 Mbytes`` or ``17.2 Kbytes`` + + * ``kiloname = 'Kbytes'`` - The string to use for kilobytes + + * ``meganame = 'Mbytes'`` - The string to use for Megabytes + + * ``bytename = 'bytes'`` - The string to use for bytes + + * ``nospace = True`` - If set it outputs ``1Mbytes, 307Kbytes``, + notice there is no space. + + Example outputs : :: + + 19Mbytes, 75Kbytes, 255bytes + 2Kbytes, 0bytes + 23.8Mbytes + + .. note:: + + It currently uses the plural form even for singular. + """ + defaultconfigs = { 'forcekb' : False, + 'largestonly' : True, + 'kiloname' : 'Kbytes', + 'meganame' : 'Mbytes', + 'bytename' : 'bytes', + 'nospace' : True} + if configdict is None: + configdict = {} + for entry in configs: + # keyword parameters override the dictionary passed in + configdict[entry] = configs[entry] + # + for keyword in defaultconfigs: + if not configdict.has_key(keyword): + configdict[keyword] = defaultconfigs[keyword] + # + if configdict['nospace']: + space = '' + else: + space = ' ' + # + mb, kb, rb = bytedivider(sizeint) + if configdict['largestonly']: + if mb and not configdict['forcekb']: + return stringround(mb, kb)+ space + configdict['meganame'] + elif kb or configdict['forcekb']: + if mb and configdict['forcekb']: + kb += 1024*mb + return stringround(kb, rb) + space+ configdict['kiloname'] + else: + return str(rb) + space + configdict['bytename'] + else: + outstr = '' + if mb and not configdict['forcekb']: + outstr = str(mb) + space + configdict['meganame'] +', ' + if kb or configdict['forcekb'] or mb: + if configdict['forcekb']: + kb += 1024*mb + outstr += str(kb) + space + configdict['kiloname'] +', ' + return outstr + str(rb) + space + configdict['bytename'] + +def stringround(main, rest): + """ + Given a file size in either (mb, kb) or (kb, bytes) - round it + appropriately. + """ + # divide an int by a float... get a float + value = main + rest/1024.0 + return str(round(value, 1)) + +def bytedivider(nbytes): + """ + Given an integer (probably a long integer returned by os.getsize() ) + it returns a tuple of (megabytes, kilobytes, bytes). + + This can be more easily converted into a formatted string to display the + size of the file. + """ + mb, remainder = divmod(nbytes, 1048576) + kb, rb = divmod(remainder, 1024) + return (mb, kb, rb) + +