Daniel Hládek
3 years ago
1 changed files with 112 additions and 0 deletions
@ -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