Skip to content

Commit a907352

Browse files
committed
[files] added progress indicator to tree listing
1 parent a2206d1 commit a907352

File tree

1 file changed

+31
-17
lines changed
  • src/instrumentman/filetransfer

1 file changed

+31
-17
lines changed

src/instrumentman/filetransfer/app.py

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
from __future__ import annotations
22

33
from io import BufferedWriter
4-
from typing import TypedDict
4+
from typing import TypedDict, Generator
55
import os
66
from re import compile, IGNORECASE
77

8+
from click._termui_impl import ProgressBar
89
from click_extra import echo, progressbar
910
from rich import print as rprint
1011
from rich.tree import Tree
@@ -116,21 +117,21 @@ def run_listing(
116117

117118

118119
def get_directory_items(
120+
bar: ProgressBar[str],
119121
tps: GeoCom,
120122
device: str,
121123
directory: str,
122124
depth: int = 0
123125
) -> list[FileTreeItem]:
124126
if depth == 0:
125127
return []
126-
128+
bar.update(1, directory)
127129
resp_setup = tps.ftr.setup_listing(
128130
_DEVICE[device],
129131
File.UNKNOWN,
130132
f"{directory}/*"
131133
)
132134
if resp_setup.error != GeoComCode.OK:
133-
# tps.ftr.abort_list()
134135
return []
135136

136137
resp_list = tps.ftr.list()
@@ -151,8 +152,6 @@ def get_directory_items(
151152
"children": []
152153
}
153154
)
154-
count = 1
155-
156155
while not last:
157156
resp_list = tps.ftr.list(True)
158157
if resp_list.error != GeoComCode.OK or resp_list.params is None:
@@ -167,11 +166,11 @@ def get_directory_items(
167166
"children": []
168167
}
169168
)
170-
count += 1
171169

172170
tps.ftr.abort_list()
173171
for item in output:
174172
item["children"] = get_directory_items(
173+
bar,
175174
tps,
176175
device,
177176
f"{directory}/{item['name']}",
@@ -218,7 +217,6 @@ def build_file_tree(
218217
tree: FileTreeItem,
219218
branch: Tree | None = None
220219
) -> Tree:
221-
222220
if branch is None:
223221
branch = Tree(format_tree_item(tree))
224222

@@ -229,22 +227,38 @@ def build_file_tree(
229227
return branch
230228

231229

230+
def _infinite_iterator() -> Generator[str, None, None]:
231+
while True:
232+
yield ""
233+
234+
232235
def run_listing_tree(
233236
tps: GeoCom,
234237
dev: str,
235238
directory: str,
236239
depth: int = 1
237240
) -> None:
238-
tree: FileTreeItem = {
239-
"name": directory,
240-
"size": 0,
241-
"children": get_directory_items(
242-
tps,
243-
dev,
244-
directory,
245-
1 if depth == 0 else depth
246-
)
247-
}
241+
with progressbar(
242+
_infinite_iterator(),
243+
label="Searching directories",
244+
item_show_func=lambda x: "" if x is None else str(x)
245+
) as bar:
246+
tree: FileTreeItem = {
247+
"name": (
248+
f"{dev.upper()}/{directory}"
249+
if directory != "/"
250+
else dev.upper()
251+
),
252+
"size": 0,
253+
"children": get_directory_items(
254+
bar,
255+
tps,
256+
dev,
257+
directory,
258+
1 if depth == 0 else depth
259+
)
260+
}
261+
bar.finish()
248262

249263
treeview = build_file_tree(tree)
250264
rprint(treeview)

0 commit comments

Comments
 (0)