diff --git a/makeidx.py b/makeidx.py new file mode 100644 index 0000000..f12a3ff --- /dev/null +++ b/makeidx.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +"""Build the JSON with the list of presentions.""" + +import os +import re +import logging +import argparse +import datetime +import json + +DATA_BACKGROUND = re.compile(r"data-background='(.*?)'") +PRES_TITLE = re.compile(r"

(.*?)

") + + +def retrieve_presentation_info(filename): + """Open a file and try to retrieve the presentation information, like + background-image and title. + """ + result = (None, None) + content = '' + with open(filename) as data: + content = data.read() + + image = DATA_BACKGROUND.search(content) + title = PRES_TITLE.search(content) + + if content and image and title: + logging.debug('Image for %s = %s', filename, image.group(1)) + logging.debug('Title for %s = %s', filename, title.group(1)) + result = (image.group(1), title.group(1)) + return result + + +def check_presentations(file_list): + """Check if the any of the files in the file list are presentations.""" + result = [] + for filename in file_list: + if not filename.endswith('.html'): + # presentations are HTML only + continue + + (image, title) = retrieve_presentation_info(filename) + if image and title: + stat_info = os.stat(filename) + date = datetime.datetime.fromtimestamp(stat_info.st_mtime) + logging.debug('Modified date = %s', date) + + result.append({'title': title, + 'image': image, + 'changed': date.strftime('%Y-%m-%d %H:%M:%S')}) + return result + + +def main(): + """Main function.""" + parser = argparse.ArgumentParser() + parser.add_argument('-d', '--debug', + action='store_const', + dest='debug', + default=False, + const=True, + help='Enable debugging messages') + args = parser.parse_args() + + level = logging.INFO + if args.debug: + level = logging.DEBUG + logging.basicConfig(level=level) + + for (root, _, files) in os.walk('.'): + if not root == '.': + # only files in the current directly will be checked + continue + + content = check_presentations(files) + with open('index.json', 'w') as output: + output.write(json.dumps(content)) + + return + + +if __name__ == "__main__": + main()