import os def make_tree(path="templates/content"): if '/' in path: tree = dict(name=path, children=[], type="directory") else: pass try: lst = os.listdir(path) except OSError: pass #ignore errors else: lst.sort() for name in lst: fn = os.path.join(path, name) if os.path.isdir(fn) and not fn.endswith(".git"): tree['children'].append(make_tree(fn)) else: if fn.endswith('.md') and not name == "README.md": tree['children'].append(dict(name=fn)) return tree def cut_path_tree(tree, subdir, file_ending): if subdir.endswith('/'): subdir = subdir[:-1] for key, val in tree.items(): if isinstance(val, list): for item in val: item["name"] = item["name"][len(subdir):] if item["name"].endswith(file_ending): item["name"] = item["name"][:-len(file_ending)] if isinstance(item, dict): cut_path_tree(item, subdir, file_ending) return tree def cut_filetype_tree(tree, filetype): for key, val in tree.items(): if isinstance(val, list): for item in val: if item["name"].endswith(filetype): item["name"] = item["name"][:-len(filetype)] if isinstance(item, dict): cut_filetype_tree(item, filetype) return tree def list_files(path): doc_files = [] for root, dirs, files in os.walk(path): for file in files: if file.endswith(".md") and not ".git" in root: doc_files.append(os.path.join(root,file)) return doc_files def build_index(path, file_ending): searchable = dict(index=[]) file_list = list_files(path) for item in file_list: if item.endswith(file_ending): with open(item, 'r') as _f: data = _f.readlines() data[0] = data[0].strip('# \n') #searchable[data[0]] = [''.join(data), item[len(path):-len(file_ending)]] searchable["index"].append(dict(uri=item[len(path):-len(file_ending)] + '.html', title=data[0],tags=[],content=''.join(data), description="")) #searchable[str(uuid.uuid1())] = (dict(href=item[len(path):-len(file_ending)], title=data[0],tags=[],content=''.join(data))) if isinstance(item, dict): build_index(item) return searchable