You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.3 KiB
86 lines
2.3 KiB
9 years ago
|
#!/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"<h1>(.*?)</h1>")
|
||
|
|
||
|
|
||
|
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()
|