Julio Biason
9 years ago
1 changed files with 85 additions and 0 deletions
@ -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"<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() |
Loading…
Reference in new issue