Spolupráca na záverečných prácach https://zp.kemt.fei.tuke.sk
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

112 lines
4.5 KiB

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)