Skip to content

Commit 23807ed

Browse files
authored
number of immediate children
1 parent a8d449b commit 23807ed

File tree

1 file changed

+26
-13
lines changed

1 file changed

+26
-13
lines changed

fsspec/spec.py

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1595,18 +1595,14 @@ def tree(
15951595
Returns
15961596
-------
15971597
str: A string representing the tree structure.
1598-
1598+
15991599
Example
16001600
-------
1601-
>>> tree = fs.tree(path='/start/folder', display_size=True)
1601+
>>> from fsspec import filesystem
1602+
1603+
>>> fs = filesystem('ftp', host='test.rebex.net', user='demo', password='password')
1604+
>>> tree = fs.tree(display_size=True, recursion_limit=3, indent_size=8, max_display=10)
16021605
>>> print(tree)
1603-
1604-
/start/folder
1605-
├── folder1
1606-
│ ├── file1.txt (1.234MB)
1607-
│ └── file2.txt (0.567MB)
1608-
└── folder2
1609-
└── file3.txt (2.345MB)
16101606
"""
16111607
def format_bytes(n: int) -> str:
16121608
"""Format bytes as text."""
@@ -1622,10 +1618,10 @@ def format_bytes(n: int) -> str:
16221618
return f"{n}B"
16231619

16241620
result = []
1625-
1621+
16261622
if first:
16271623
result.append(path)
1628-
1624+
16291625
if recursion_limit:
16301626
indent = " " * indent_size
16311627
contents = self.ls(path, detail=True)
@@ -1646,7 +1642,24 @@ def format_bytes(n: int) -> str:
16461642
new_prefix = prefix + (indent if is_last_item else "│" + " " * (indent_size - 1))
16471643

16481644
name = os.path.basename(item.get('name', ''))
1649-
size = f" ({format_bytes(item.get('size', 0))})" if display_size and item.get('type') == 'file' else ""
1645+
1646+
if display_size and item.get('type') == 'directory':
1647+
sub_contents = self.ls(item.get('name', ''), detail=True)
1648+
num_files = sum(1 for sub_item in sub_contents if sub_item.get('type') == 'file')
1649+
num_folders = sum(1 for sub_item in sub_contents if sub_item.get('type') == 'directory')
1650+
1651+
if num_files == 0 and num_folders == 0:
1652+
size = " (empty folder)"
1653+
elif num_files == 0:
1654+
size = f" ({num_folders} subfolder{'s' if num_folders > 1 else ''})"
1655+
elif num_folders == 0:
1656+
size = f" ({num_files} file{'s' if num_files > 1 else ''})"
1657+
else:
1658+
size = f" ({num_files} file{'s' if num_files > 1 else ''}, {num_folders} subfolder{'s' if num_folders > 1 else ''})"
1659+
elif display_size and item.get('type') == 'file':
1660+
size = f" ({format_bytes(item.get('size', 0))})"
1661+
else:
1662+
size = ""
16501663

16511664
result.append(f"{prefix}{branch}{name}{size}")
16521665

@@ -1666,7 +1679,7 @@ def format_bytes(n: int) -> str:
16661679

16671680
if remaining_count > 0:
16681681
more_message = f"{remaining_count} more item(s) not displayed."
1669-
result.append(f"{prefix}{'└── ' if is_last else '├── '}{more_message}")
1682+
result.append(f"{prefix}{"└" + ('─' * (indent_size - 2))} {more_message}")
16701683

16711684
return "\n".join((_ for _ in result if _))
16721685

0 commit comments

Comments
 (0)