1
+ from django .template .defaultfilters import floatformat
1
2
from django .utils .html import avoid_wrapping
3
+ from django .utils .translation import gettext_lazy as _
2
4
3
5
from . import registry
4
6
5
7
6
- def _format_size (bytes , callback ):
8
+ def _format_size (bytes , formats , decimals ):
7
9
bytes = float (bytes )
8
10
9
11
KB = 1 << 10
@@ -13,24 +15,28 @@ def _format_size(bytes, callback):
13
15
PB = 1 << 50
14
16
15
17
if bytes < KB :
16
- return callback ( '' , bytes )
18
+ return formats [ 0 ] % floatformat ( bytes , decimals [ 0 ] )
17
19
elif bytes < MB :
18
- return callback ( 'K' , bytes / KB )
20
+ return formats [ 1 ] % floatformat ( bytes / KB , decimals [ 1 ] )
19
21
elif bytes < GB :
20
- return callback ( 'M' , bytes / MB )
22
+ return formats [ 2 ] % floatformat ( bytes / MB , decimals [ 2 ] )
21
23
elif bytes < TB :
22
- return callback ( 'G' , bytes / GB )
24
+ return formats [ 3 ] % floatformat ( bytes / GB , decimals [ 3 ] )
23
25
elif bytes < PB :
24
- return callback ( 'T' , bytes / TB )
26
+ return formats [ 4 ] % floatformat ( bytes / TB , decimals [ 4 ] )
25
27
else :
26
- return callback ( 'P' , bytes / PB )
28
+ return formats [ 5 ] % floatformat ( bytes / PB , decimals [ 5 ] )
27
29
28
30
29
31
@registry .filter
30
- def kbdetailformat (bytes ):
31
- return avoid_wrapping (_format_size (bytes * 1024 , lambda x , y : ['%d %sB' , '%.2f %sB' ][bool (x )] % (y , x )))
32
+ def kbdetailformat (kb ):
33
+ formats = [_ ('%s B' ), _ ('%s KB' ), _ ('%s MB' ), _ ('%s GB' ), _ ('%s TB' ), _ ('%s PB' )]
34
+ decimals = [0 , 2 , 2 , 2 , 2 , 2 ]
35
+ return avoid_wrapping (_format_size (kb * 1024 , formats , decimals ))
32
36
33
37
34
38
@registry .filter
35
39
def kbsimpleformat (kb ):
36
- return _format_size (kb * 1024 , lambda x , y : '%.0f%s' % (y , x or 'B' ))
40
+ formats = [_ ('%sB' ), _ ('%sK' ), _ ('%sM' ), _ ('%sG' ), _ ('%sT' ), _ ('%sP' )]
41
+ decimals = [0 , 0 , 0 , 0 , 0 , 0 ]
42
+ return _format_size (kb * 1024 , formats , decimals )
0 commit comments