from pelican import signals, contents from os import listdir, getcwd from os.path import isfile, join, sep, split from copy import copy from itertools import chain ''' This plugin creates a URL hierarchy for articles that matches the directory hierarchy of their sources. ''' def lsfiles(path): return [f for f in listdir(path) if isfile(join(path, f))] def save_files(content_object): if type(content_object) is not contents.Article: return article = content_object path = split(article.get_relative_source_path())[0] + '/' path = path.replace(sep, '/' ) abs_path = getcwd() + "/content/" + path files = {i:(path+i) for i in lsfiles(abs_path)} try: fig_files = lsfiles(abs_path+"/fig") except FileNotFoundError: pass else: fig_files = {i:(path+"fig/"+i) for i in fig_files} files.update(fig_files) article.link_files = [] for i in files.items(): article.link_files.append(i) article.link_files.sort() def register(): signals.content_object_init.connect(save_files)