Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #14002 -- Updated filesize filter to support terabyte and petab…

…yte file sizes. Thanks to Aaron T. Myers for the patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@13584 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 047d161164b2459434e6a17891f079f5f80d4cef 1 parent 4835d86
@freakboy3742 freakboy3742 authored
View
1  AUTHORS
@@ -344,6 +344,7 @@ answer newbie questions, and generally made Django that much better:
James Murty
msundstr
Robert Myers <myer0052@gmail.com>
+ Aaron T. Myers <atmyers@gmail.com>
Alexander Myodov <alex@myodov.com>
Nebojša Dorđević
Doug Napoleone <doug@dougma.com>
View
18 django/template/defaultfilters.py
@@ -807,13 +807,19 @@ def filesizeformat(bytes):
except (TypeError,ValueError,UnicodeDecodeError):
return u"0 bytes"
- if bytes < 1024:
+ BYTE_UNITS = (
+ ('KB', 1024),
+ ('MB', 1024 * 1024),
+ ('GB', 1024 * 1024 * 1024),
+ ('TB', 1024 * 1024 * 1024 * 1024),
+ ('PB', 1024 * 1024 * 1024 * 1024 * 1024)
+ )
+
+ if bytes < BYTE_UNITS[0][1]:
return ungettext("%(size)d byte", "%(size)d bytes", bytes) % {'size': bytes}
- if bytes < 1024 * 1024:
- return ugettext("%.1f KB") % (bytes / 1024)
- if bytes < 1024 * 1024 * 1024:
- return ugettext("%.1f MB") % (bytes / (1024 * 1024))
- return ugettext("%.1f GB") % (bytes / (1024 * 1024 * 1024))
+ for index, (unit, unit_size) in enumerate(BYTE_UNITS):
+ if bytes < unit_size * 1024 or index == len(BYTE_UNITS) - 1:
+ return ugettext("%.1f %s") % (bytes / unit_size, unit)
filesizeformat.is_safe = True
def pluralize(value, arg=u's'):
View
9 tests/regressiontests/defaultfilters/tests.py
@@ -476,6 +476,15 @@
>>> filesizeformat(1024*1024*1024)
u'1.0 GB'
+>>> filesizeformat(1024*1024*1024*1024)
+u'1.0 TB'
+
+>>> filesizeformat(1024*1024*1024*1024*1024)
+u'1.0 PB'
+
+>>> filesizeformat(1024*1024*1024*1024*1024*2000)
+u'2000.0 PB'
+
>>> filesizeformat(complex(1,-1))
u'0 bytes'

0 comments on commit 047d161

Please sign in to comment.
Something went wrong with that request. Please try again.