Merging latest master

This commit is contained in:
Steve Miller 2019-06-04 10:55:25 -04:00
commit c80ece8ca3
6 changed files with 58 additions and 17 deletions

2
.gitignore vendored
View File

@ -1,3 +1,5 @@
# default output directory for the converter.
output/*
# Created by https://www.gitignore.io/api/pycharm,python # Created by https://www.gitignore.io/api/pycharm,python

View File

@ -8,10 +8,16 @@ See https://www.dokuwiki.org/wiki:syntax
##### Running it from command line ##### Running it from command line
Just use the main python class. It uses `argparse` - only provide one argument: the directory you want to parse: Just use the main python class. It uses `argparse`:
```python src/main.py --dir='some_dokuwiki_root_dir'``` ```python src/main.py --dir='some_dokuwiki_root_dir'```
Command line options:
- `--dir`, the directory of your DokuWiki pages collection.
- `--frontmatter_tags=true`, whether to generate tags in the converted Hugo markdown. By default, the tool generates
tags based on the path to the document.
##### Including it into your python project: ##### Including it into your python project:
Main wiring in `DokuWikiToHugo` - see the tests for an elaborate example. Main wiring in `DokuWikiToHugo` - see the tests for an elaborate example.

26
main.py Normal file
View File

@ -0,0 +1,26 @@
import argparse
from src.dokuwiki_to_hugo import DokuWikiToHugo
def str2bool(v):
if v.lower() in ('yes', 'true', 't', 'y', '1'):
return True
elif v.lower() in ('no', 'false', 'f', 'n', '0'):
return False
else:
raise argparse.ArgumentTypeError('Boolean value expected.')
def main(directory, options):
DokuWikiToHugo(options.root, frontmatter_tags=options.frontmatter_tags).doku_to_hugo(directory)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-d", "--dir", help="the directory of your DokuWiki pages collection", required=True)
parser.add_argument("-r", "--root", help="the root directory name in your hugo content where to link to",
required=False)
parser.add_argument("--frontmatter_tags", default=True, type=str2bool,
help="whether to generate tags in front matter in the converted markdown.")
opts = parser.parse_args()
main(opts.dir, opts)

View File

@ -1,15 +1,21 @@
import os import os
import shutil import shutil
<<<<<<< HEAD
from hugo_file_config import HugoFileConfig from hugo_file_config import HugoFileConfig
from markdown_converter import MarkdownConverter from markdown_converter import MarkdownConverter
=======
from src.hugo_front_matter import HugoFrontMatter
from src.markdown_converter import MarkdownConverter
>>>>>>> master
class DokuWikiToHugo: class DokuWikiToHugo:
root_dir = "" root_dir = ""
def __init__(self, root=None): def __init__(self, root=None, frontmatter_tags=True):
self.header_converter = HugoFileConfig() self.header_converter = HugoFrontMatter()
self.frontmatter_tags = frontmatter_tags
DokuWikiToHugo.root_dir = root DokuWikiToHugo.root_dir = root
pass pass
@ -24,7 +30,10 @@ class DokuWikiToHugo:
for root, subFolders, files in os.walk(directory): for root, subFolders, files in os.walk(directory):
files = [f for f in files if not f[0] == '.'] files = [f for f in files if not f[0] == '.']
for file in files: for file in files:
self.process_file(root, file) try:
self.process_file(root, file)
except:
print('failed to convert ' + file)
def process_file(self, root, file): def process_file(self, root, file):
destination_dir = 'output/' + root destination_dir = 'output/' + root
@ -35,8 +44,7 @@ class DokuWikiToHugo:
if not os.path.exists(destination_dir): if not os.path.exists(destination_dir):
os.makedirs(destination_dir) os.makedirs(destination_dir)
header = self.header_converter.create(source_file, frontmatter_tags=self.frontmatter_tags)
header = self.header_converter.create(source_file)
converted_text = MarkdownConverter(source_file).convert() converted_text = MarkdownConverter(source_file).convert()
with open(destination_dir + '/' + destination_file, "w") as text_file: with open(destination_dir + '/' + destination_file, "w") as text_file:

View File

@ -2,7 +2,7 @@ import os.path
import time import time
class HugoFileConfig: class HugoFrontMatter:
def filename(self, location): def filename(self, location):
return location.split('/')[-1][0:-4] return location.split('/')[-1][0:-4]
@ -12,16 +12,15 @@ class HugoFileConfig:
return filename[0:len(filename) - 4] return filename[0:len(filename) - 4]
return filename return filename
def create(self, file_location): def create(self, file_location, frontmatter_tags=True):
title = self.filename(file_location) title = self.filename(file_location)
tags = list(map(self.strip_extension, file_location.split('/'))) tags = list(map(self.strip_extension, file_location.split('/')))
tags_content = '''\ntags = [
%s
]\n''' % (',\n'.join(map(lambda tag: ' "' + tag + '"', tags)))
date = time.strftime('%Y-%m-%d', time.gmtime(os.path.getmtime(file_location))) date = time.strftime('%Y-%m-%d', time.gmtime(os.path.getmtime(file_location)))
return """+++ return """+++
title = "%s" title = "%s"
draft = false draft = false%s
tags = [
%s
]
date = "%s" date = "%s"
+++""" % (title, ',\n'.join(map(lambda tag: ' "' + tag + '"', tags)), date) +++""" % (title, tags_content if frontmatter_tags else '', date)

View File

@ -3,10 +3,10 @@ from os import utime
from time import mktime from time import mktime
from unittest import TestCase from unittest import TestCase
from src.hugo_file_config import HugoFileConfig from src.hugo_front_matter import HugoFrontMatter
class TestHugoFileConfig(TestCase): class TestHugoFrontMatter(TestCase):
def set_file_timestamp(self): def set_file_timestamp(self):
date = datetime(2014, 10, 10, 12) date = datetime(2014, 10, 10, 12)
u_time = mktime(date.timetuple()) u_time = mktime(date.timetuple())
@ -15,7 +15,7 @@ class TestHugoFileConfig(TestCase):
def setUp(self): def setUp(self):
self.set_file_timestamp() self.set_file_timestamp()
self.header = HugoFileConfig() self.header = HugoFrontMatter()
def test_dokuwiki_in_subdir_creates_tags_for_each_dir(self): def test_dokuwiki_in_subdir_creates_tags_for_each_dir(self):
expected_header = """+++ expected_header = """+++