From 9797bc1c14e9d8b0feb43162db6397035b125c74 Mon Sep 17 00:00:00 2001 From: Daniel Hladek Date: Fri, 30 Jul 2021 16:01:39 +0200 Subject: [PATCH] skudal migrater --- migrater_skudal.py | 112 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 migrater_skudal.py diff --git a/migrater_skudal.py b/migrater_skudal.py new file mode 100644 index 00000000..92e38639 --- /dev/null +++ b/migrater_skudal.py @@ -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) +