We don't want the minimum_real size as we even print information on 'irreal'
[pysize.git] / pysize / ui / ascii / ui_ascii.py
blob949fac1764e9de844667320db81c677550fae3d7
1 import math
2 import sys
4 from pysize.core.pysize_fs_tree import pysize_tree
5 from pysize.core.compute_size import size_observable
6 from pysize.ui.utils import human_unit, min_size_to_consider, update_progress
7 from pysize.ui.utils import sanitize_string
8 from pysize.ui.char_matrix import CharMatrix, HLINE_START, HLINE, HLINE_END
9 from pysize.ui.char_matrix import VLINE_START, VLINE, VLINE_END
10 from pysize.ui.ascii.terminal_size import terminal_size
12 MATRIX_TO_ASCII = {
13 0: ' ',
14 HLINE_START: '-', HLINE: '-', HLINE_END: '-',
15 VLINE_START: '|', VLINE: '|', VLINE_END: '|'
18 def _transform(char):
19 if isinstance(char, int):
20 return MATRIX_TO_ASCII.get(char, '+')
21 return char
23 def _draw_progress():
24 progress = update_progress()
25 if progress:
26 print '', progress, '\r',
27 sys.stdout.flush()
29 def run(options, args):
30 columns, lines = terminal_size()
31 lines -= 3 # Summary + Prompt + Last line
32 # An entry needs 3 lines
33 min_size = min_size_to_consider(options.min_size, lines / 3)
34 size_observable.add_observer(_draw_progress)
35 args = args or ['.']
36 tree = pysize_tree(args, options.max_depth, min_size)
37 if not tree.root:
38 sys.exit(1)
39 # The last entry needs an additional terminating line
40 total_lines = int(math.ceil(3.0 * tree.root.size /
41 tree.root.minimum_node_size())) + 1
42 matrix = CharMatrix(columns, total_lines, tree)
43 print '\n'.join([''.join(map(_transform, line)) for line in matrix.matrix])
44 print sanitize_string(tree.root.get_name()), human_unit(tree.root.size)
46 def is_available():
47 """This simple UI is always available."""
48 return True