forked from KEMT/zpwiki
skudal migrater
This commit is contained in:
parent
7b779cf0e3
commit
9797bc1c14
112
migrater_skudal.py
Normal file
112
migrater_skudal.py
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
import posixpath
|
||||||
|
import argparse
|
||||||
|
from pathlib import Path
|
||||||
|
from shutil import copyfile
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
name_reg = re.compile(r"(/[0-9][0-9]\.)+")
|
||||||
|
|
||||||
|
|
||||||
|
def filter_string(string, string_replace='/', regex=name_reg):
|
||||||
|
return re.sub(regex, string_replace, string)
|
||||||
|
|
||||||
|
|
||||||
|
# Input: dirname_from: where you want to migrate from. migrate_rootpath: path including the new root dir of the structure
|
||||||
|
def transform_wiki(dirname_from, migrate_rootpath):
|
||||||
|
|
||||||
|
# New file structure
|
||||||
|
Path(migrate_rootpath).mkdir(parents=True, exist_ok=True)
|
||||||
|
dir_path_new = None
|
||||||
|
|
||||||
|
for root, dirs, files in os.walk('./' + dirname_from, topdown=False):
|
||||||
|
|
||||||
|
# Filter the new names i dst
|
||||||
|
root_src = root
|
||||||
|
root_dst = filter_string(root, '/', name_reg)
|
||||||
|
|
||||||
|
# Make a new regural dirs (without bottom dir which is replaced by .md file)
|
||||||
|
path = '/'.join(root_dst.split('/')[2:-1]) # The path following the root dir (./Pages)
|
||||||
|
dir_path_new = migrate_rootpath + '/' + path
|
||||||
|
Path(dir_path_new).mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
for file_name in files:
|
||||||
|
# File path in original structure
|
||||||
|
file_path_scr = root_src + "/" + file_name
|
||||||
|
|
||||||
|
# Test for only altering .md-files
|
||||||
|
if not file_name.endswith(".md"):
|
||||||
|
# Copy other files from scr
|
||||||
|
src = file_path_scr
|
||||||
|
dst = '/'.join([dir_path_new, file_name])
|
||||||
|
copyfile(src, dst)
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Open original file
|
||||||
|
with open(file_path_scr) as f_from:
|
||||||
|
|
||||||
|
try:
|
||||||
|
# New name convention for .md-files migrated to new structure
|
||||||
|
new_filepath = dir_path_new + '/' + os.path.basename(root_dst) + '.md'
|
||||||
|
with open(new_filepath, 'w') as f_to:
|
||||||
|
lines = []
|
||||||
|
yamlfront = []
|
||||||
|
inyamlfront = False
|
||||||
|
for l in f_from:
|
||||||
|
line = l.rstrip()
|
||||||
|
if len(lines) == 0 and line.startswith("---"):
|
||||||
|
inyamlfront = True
|
||||||
|
elif inyamlfront:
|
||||||
|
if line.startswith("---"):
|
||||||
|
inyamlfront = False
|
||||||
|
print(yamlfront)
|
||||||
|
front = yaml.load("\n".join(yamlfront))
|
||||||
|
if "taxonomy" in front:
|
||||||
|
taxonomy = front["taxonomy"]
|
||||||
|
del front["taxonomy"]
|
||||||
|
tags = []
|
||||||
|
if "tags" in taxonomy:
|
||||||
|
tags = taxonomy["tags"]
|
||||||
|
if "categories" in taxonomy:
|
||||||
|
for tag in taxonomy["categories"]:
|
||||||
|
tags.append("cat:" + tag)
|
||||||
|
del taxonomy["categories"]
|
||||||
|
if len(tags) > 0:
|
||||||
|
taxonomy["tags"] = tags
|
||||||
|
for k,v in taxonomy.items():
|
||||||
|
front[k] = v
|
||||||
|
del yamlfront[:]
|
||||||
|
yamlfront.append("---")
|
||||||
|
yamlfront.append(yaml.dump(front))
|
||||||
|
yamlfront.append("---")
|
||||||
|
else:
|
||||||
|
yamlfront.append(line)
|
||||||
|
else:
|
||||||
|
lines.append(line)
|
||||||
|
if len(yamlfront) > 0:
|
||||||
|
for line in yamlfront:
|
||||||
|
print(line,file=f_to)
|
||||||
|
for line in lines:
|
||||||
|
print(line,file=f_to)
|
||||||
|
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
print("UnocodeError in :" + file_path_scr)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
'''
|
||||||
|
path = 'pages_migrated_example/55.usaa/cvicenia/05.linked.md'
|
||||||
|
#path = '05.linked.md'
|
||||||
|
print(path)
|
||||||
|
path = filter_string(path, '/', name_reg)
|
||||||
|
print(path)
|
||||||
|
'''
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("dirname", type=str)
|
||||||
|
parser.add_argument("migrate_root",type=str)
|
||||||
|
args = parser.parse_args()
|
||||||
|
transform_wiki(args.dirname, args.migrate_root)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user