--- 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)
--- /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)
+
+