Added another script for working with AFX XML files, this one Collects the required files to a given location and replaces the route on the xml file to match this path. It works (barely).
	
		
	
				
					
				
			
							parent
							
								
									a5a8675405
								
							
						
					
					
						commit
						4e688434d9
					
				| @ -0,0 +1,108 @@ | |||||||
|  | #! /usr/bin/env python3 | ||||||
|  | import re, sys, shutil, os, re, codecs | ||||||
|  | import xml.etree.ElementTree as ET | ||||||
|  | 
 | ||||||
|  | print("MAkinE AFX Collecting tool. Copyleft 2016 yorch") | ||||||
|  | args = sys.argv[1:] | ||||||
|  | name = args[0] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | dest = input("Please enter the destination path for your collect:\n") | ||||||
|  | 
 | ||||||
|  | # tested on mac only | ||||||
|  | 
 | ||||||
|  | #def get_files( text_file ): | ||||||
|  |      | ||||||
|  |     #re_ptn=re.compile("(?<=fullpath\=\")[^\"]*") | ||||||
|  |      | ||||||
|  |     #report = open(str( text_file ), 'r') | ||||||
|  |     #report_text = str(report.read()) | ||||||
|  |      | ||||||
|  |     #matches= re_ptn.findall(report_text) | ||||||
|  |          | ||||||
|  |     #return matches | ||||||
|  | 
 | ||||||
|  | def get_files( text_file ): | ||||||
|  |      | ||||||
|  |     ET.register_namespace("", "http://www.adobe.com/products/aftereffects") | ||||||
|  |      | ||||||
|  |     with open(name, 'r') as xml_file: | ||||||
|  |         xml_tree = ET.parse(xml_file) | ||||||
|  |     root = xml_tree.getroot() | ||||||
|  |      | ||||||
|  |     for Pin in root.iter("{http://www.adobe.com/products/aftereffects}Item"): #<Pin> elements seem to contain file references | ||||||
|  |         for fileRef in Pin.iter("{http://www.adobe.com/products/aftereffects}fileReference"): | ||||||
|  |             filepath = fileRef.attrib["fullpath"] | ||||||
|  |             isFile = os.path.isfile(fileRef.attrib["fullpath"]) | ||||||
|  |              | ||||||
|  |             if isFile: | ||||||
|  |                 copy_file( filepath , dest ) | ||||||
|  |                 fileRef.set("fullpath",dest + os.path.basename(filepath)) | ||||||
|  |             else: | ||||||
|  |                 fileRef.set("fullpath",dest + os.path.basename(filepath)) | ||||||
|  |         print( "asasas", Pin[0].attrib["bdata"] ) | ||||||
|  |             #fileRef.set("fullpath",dest + os.path.basename(filepath)) | ||||||
|  |              | ||||||
|  |     xml_tree.write(os.path.dirname(name)+os.sep+os.path.basename(name).split(".")[0]+"_collected"+ os.path.extsep + os.path.basename(name).split(".")[1],encoding="utf-8") | ||||||
|  |              | ||||||
|  |     #for item in root.iter("{http://www.adobe.com/products/aftereffects}fileReference"): | ||||||
|  |          | ||||||
|  |         #filepath = item.attrib["fullpath"] | ||||||
|  |         #isFile = os.path.isfile(item.attrib["fullpath"]) | ||||||
|  |         #if isFile: | ||||||
|  |             #item.set("fullpath",dest + os.path.basename(filepath)) | ||||||
|  |         #print(item.attrib, isFile ) | ||||||
|  |     #xml_tree.write(os.path.dirname(name)+os.sep+os.path.basename(name).split(".")[0]+"_collect"+ os.path.extsep + os.path.basename(name).split(".")[1],encoding="utf-8") | ||||||
|  |     #xml_file.close() | ||||||
|  |      | ||||||
|  |     return  | ||||||
|  |      | ||||||
|  | def get_seqs( text_file ): | ||||||
|  |      | ||||||
|  |     report = open(str( text_file ), 'r') | ||||||
|  |     report_lines = [] | ||||||
|  |      | ||||||
|  |     for line in report: | ||||||
|  |         report_lines.append(line) | ||||||
|  | 
 | ||||||
|  |     seqs = [] | ||||||
|  |      | ||||||
|  |     for line in report_lines: | ||||||
|  |         line_content = line | ||||||
|  |         if line_content.find("\tSequence") != -1: | ||||||
|  |             begin_path = line_content.find("at ")+3 | ||||||
|  |             end_path = line_content.find(" with ") ### HACKISH: Try using regex to reliably finding out the end of the path. | ||||||
|  |             seqs.append(line_content[begin_path:end_path]) | ||||||
|  |      | ||||||
|  |     return seqs | ||||||
|  | 
 | ||||||
|  | def copy_file( f , dest ): | ||||||
|  |      | ||||||
|  |     the_file=os.path.basename(f) | ||||||
|  |          | ||||||
|  |     if os.path.isfile(f): | ||||||
|  |         if not os.path.exists(dest + os.sep + the_file ): | ||||||
|  |             print("Copying: " + the_file + " ---> " + dest) | ||||||
|  |             shutil.copy(f,dest); | ||||||
|  |         else: | ||||||
|  |             print("Skipping: " + the_file) | ||||||
|  |     else: | ||||||
|  |         if not os.path.exists(dest + os.sep + the_file ): | ||||||
|  |             print("Copying folder: " + the_file + " ---> " + dest + os.sep + the_file ) | ||||||
|  |             shutil.copytree(f, dest +os.sep + the_file ); | ||||||
|  |         else: | ||||||
|  |             print("Skipping folder: " + the_file) | ||||||
|  | 
 | ||||||
|  | def copy_files( files , dest ): | ||||||
|  | 
 | ||||||
|  |     for f in files: | ||||||
|  |         copy_file( f , dest ) | ||||||
|  |          | ||||||
|  |              | ||||||
|  | 
 | ||||||
|  | #for i in get_files( name ): | ||||||
|  | #    print(i) | ||||||
|  | #copy_files( get_seqs( name ), dest ) | ||||||
|  | #copy_files( get_files( name ), dest ) | ||||||
|  | get_files( name) | ||||||
					Loading…
					
					
				
		Reference in new issue