pelican-replacer/replacer.py
Motoki Naruse 07925f938c [#1] Compatible with Python3
When this plugin is running on Python3, it shouldn't call decode because the variable is str type, not bytes.
2017-04-08 23:27:53 +09:00

33 lines
791 B
Python

# -*- coding: utf-8 -*-
import pelican
import sys
python3 = sys.version_info >= (3, 0, 0)
def init(pelican_object):
# I have no good idea. Pass settings to replace function.
global replaces
replaces = pelican_object.settings.get('REPLACES', ())
def replace(path, context):
with open(path, 'r') as f:
s = f.read()
for src, tgt in replaces:
if python3:
s = s.replace(src, tgt)
else:
s = s.decode('utf-8').replace(src.decode('utf-8'), tgt.decode('utf-8'))
with open(path, 'w') as f:
if python3:
f.write(s)
else:
f.write(s.encode('utf-8'))
def register():
pelican.signals.initialized.connect(init)
pelican.signals.content_written.connect(replace)