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