From 63a9ef331f5761410255e5f0f2177111c719e3ac Mon Sep 17 00:00:00 2001 From: Kévin Le Gouguec Date: Sun, 15 Mar 2020 17:16:00 +0100 Subject: Generate indices for folders without READMEs --- repo/www/helpers.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 repo/www/helpers.py (limited to 'repo/www/helpers.py') diff --git a/repo/www/helpers.py b/repo/www/helpers.py new file mode 100644 index 0000000..57f679d --- /dev/null +++ b/repo/www/helpers.py @@ -0,0 +1,37 @@ +from collections import defaultdict +from dataclasses import dataclass, field +from os import path +from typing import List, Set + + +@dataclass +class Directory: + files: List[str] = field(default_factory=list) + subfolders: Set[str] = field(default_factory=set) + + +def _find_files(extensions, repository): + patterns = (f'**.{ext}' for ext in extensions) + zero = '\x00' + return repository.git.ls_files('-z', *patterns).strip(zero).split(zero) + + +def _fill_directories(files, top_dir): + directories = defaultdict(Directory) + + for f in files: + fdir, fname = path.split(f) + + directories[fdir].files.append(fname) + + if fdir: + parent, child = path.split(fdir) + directories[parent].subfolders.add(child) + + return directories + + +def compute_directories(extensions, repository): + files = _find_files(extensions, repository) + top_dir = path.relpath(repository.working_dir, path.curdir) + return _fill_directories(files, top_dir) -- cgit v1.2.3