forked from varia/varia.website
37 lines
884 B
Python
37 lines
884 B
Python
|
from pelican import signals
|
||
|
|
||
|
import logging
|
||
|
import os
|
||
|
import time
|
||
|
|
||
|
|
||
|
logger = logging.getLogger(__name__)
|
||
|
|
||
|
|
||
|
def set_file_utime(path, datetime):
|
||
|
mtime = time.mktime(datetime.timetuple())
|
||
|
logger.info('touching %s', path)
|
||
|
os.utime(path, (mtime, mtime))
|
||
|
|
||
|
|
||
|
def touch_file(path, context):
|
||
|
content = context.get('article', context.get('page'))
|
||
|
page = context.get('articles_page')
|
||
|
dates = context.get('dates')
|
||
|
|
||
|
if content and hasattr(content, 'date'):
|
||
|
set_file_utime(path, content.date)
|
||
|
elif page:
|
||
|
set_file_utime(path, max(x.date for x in page.object_list))
|
||
|
elif dates:
|
||
|
set_file_utime(path, max(x.date for x in dates))
|
||
|
|
||
|
|
||
|
def touch_feed(path, context, feed):
|
||
|
set_file_utime(path, max(x['pubdate'] for x in feed.items))
|
||
|
|
||
|
|
||
|
def register():
|
||
|
signals.content_written.connect(touch_file)
|
||
|
signals.feed_written.connect(touch_feed)
|