mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-05-20 15:11:09 +00:00
117 lines
2.5 KiB
Python
117 lines
2.5 KiB
Python
import fnmatch
|
|
from pathlib import Path
|
|
|
|
IGNORE_PATTERNS = [
|
|
# Version Control
|
|
".git",
|
|
".svn",
|
|
".hg",
|
|
".bzr",
|
|
# Dependencies
|
|
"node_modules",
|
|
"__pycache__",
|
|
".venv",
|
|
"venv",
|
|
".env",
|
|
"env",
|
|
".tox",
|
|
".nox",
|
|
".eggs",
|
|
"*.egg-info",
|
|
"site-packages",
|
|
# Build outputs
|
|
"dist",
|
|
"build",
|
|
".next",
|
|
".nuxt",
|
|
".output",
|
|
".turbo",
|
|
"target",
|
|
"out",
|
|
# IDE & Editor
|
|
".idea",
|
|
".vscode",
|
|
"*.swp",
|
|
"*.swo",
|
|
"*~",
|
|
".project",
|
|
".classpath",
|
|
".settings",
|
|
# OS generated
|
|
".DS_Store",
|
|
"Thumbs.db",
|
|
"desktop.ini",
|
|
"*.lnk",
|
|
# Logs & temp files
|
|
"*.log",
|
|
"*.tmp",
|
|
"*.temp",
|
|
"*.bak",
|
|
"*.cache",
|
|
".cache",
|
|
"logs",
|
|
# Coverage & test artifacts
|
|
".coverage",
|
|
"coverage",
|
|
".nyc_output",
|
|
"htmlcov",
|
|
".pytest_cache",
|
|
".mypy_cache",
|
|
".ruff_cache",
|
|
]
|
|
|
|
|
|
def _should_ignore(name: str) -> bool:
|
|
"""Check if a file/directory name matches any ignore pattern."""
|
|
for pattern in IGNORE_PATTERNS:
|
|
if fnmatch.fnmatch(name, pattern):
|
|
return True
|
|
return False
|
|
|
|
|
|
def list_dir(path: str, max_depth: int = 2) -> list[str]:
|
|
"""
|
|
List files and directories up to max_depth levels deep.
|
|
|
|
Args:
|
|
path: The root directory path to list.
|
|
max_depth: Maximum depth to traverse (default: 2).
|
|
1 = only direct children, 2 = children + grandchildren, etc.
|
|
|
|
Returns:
|
|
A list of absolute paths for files and directories,
|
|
excluding items matching IGNORE_PATTERNS.
|
|
"""
|
|
result: list[str] = []
|
|
root_path = Path(path).resolve()
|
|
|
|
if not root_path.is_dir():
|
|
return result
|
|
|
|
def _traverse(current_path: Path, current_depth: int) -> None:
|
|
"""Recursively traverse directories up to max_depth."""
|
|
if current_depth > max_depth:
|
|
return
|
|
|
|
try:
|
|
for item in current_path.iterdir():
|
|
if _should_ignore(item.name):
|
|
continue
|
|
|
|
post_fix = "/" if item.is_dir() else ""
|
|
result.append(str(item.resolve()) + post_fix)
|
|
|
|
# Recurse into subdirectories if not at max depth
|
|
if item.is_dir() and current_depth < max_depth:
|
|
_traverse(item, current_depth + 1)
|
|
except PermissionError:
|
|
pass
|
|
|
|
_traverse(root_path, 1)
|
|
|
|
return sorted(result)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print("\n".join(list_dir("/Users/Henry/Desktop", max_depth=2)))
|