husk/husk_helpers.py

70 lines
2.5 KiB
Python

import os
#import toml
#base_url = toml.load('settings.toml')["general"]["base_url"]
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