finishing touches on basic functionality.
Misc cleanup, more comments, and finishing the basic functionality. Just need to implement issue #4. Possible early release candidate?
This commit is contained in:
		
							parent
							
								
									1e05e48c7b
								
							
						
					
					
						commit
						74796c804e
					
				
					 1 changed files with 35 additions and 23 deletions
				
			
		| 
						 | 
					@ -4,11 +4,11 @@
 | 
				
			||||||
import subprocess, sys, argparse, logging, tempfile, shutil, os, re
 | 
					import subprocess, sys, argparse, logging, tempfile, shutil, os, re
 | 
				
			||||||
from pathlib import Path
 | 
					from pathlib import Path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#logging.basicConfig(format='%(asctime)s:%(message)s', level=logging.INFO)
 | 
					logging.basicConfig(format='%(asctime)s:%(message)s', level=logging.INFO)
 | 
				
			||||||
logging.basicConfig(format='%(asctime)s:%(message)s', level=logging.DEBUG)
 | 
					#logging.basicConfig(format='%(asctime)s:%(message)s', level=logging.DEBUG)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def parse_arguments():
 | 
					def parse_arguments():
 | 
				
			||||||
    parser = argparse.ArgumentParser(description='create a website directory structure by converting .adoc files in a directory strucutre to .html files.')
 | 
					    parser=argparse.ArgumentParser(description='create a website directory structure by converting .adoc files in a directory strucutre to .html files.')
 | 
				
			||||||
    parser.add_argument('inputDir', type=Path, help='The directory of adoc files to be copied and converted.')
 | 
					    parser.add_argument('inputDir', type=Path, help='The directory of adoc files to be copied and converted.')
 | 
				
			||||||
    parser.add_argument('-o', '--output', type=Path, help='What to name the generated directory or tar file')
 | 
					    parser.add_argument('-o', '--output', type=Path, help='What to name the generated directory or tar file')
 | 
				
			||||||
    parser.add_argument('-z', '--compress', action='store_true', help='whether to compress the resulting directory to a tar.gz file. can be usefull for scripting to transfer the site to a remote server.')
 | 
					    parser.add_argument('-z', '--compress', action='store_true', help='whether to compress the resulting directory to a tar.gz file. can be usefull for scripting to transfer the site to a remote server.')
 | 
				
			||||||
| 
						 | 
					@ -18,22 +18,22 @@ def parse_arguments():
 | 
				
			||||||
    if args.output != None and not args.compress:
 | 
					    if args.output != None and not args.compress:
 | 
				
			||||||
        #detect based on whether outFile has a .tar.gz filename.
 | 
					        #detect based on whether outFile has a .tar.gz filename.
 | 
				
			||||||
        if args.output.suffixes == ['.tar', '.gz']:
 | 
					        if args.output.suffixes == ['.tar', '.gz']:
 | 
				
			||||||
            compress = True
 | 
					            compress=True
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            compress = False
 | 
					            compress=False
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        compress = args.compress
 | 
					        compress=args.compress
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    #If outfile was not set, set it.
 | 
					    #If outfile was not set, set it.
 | 
				
			||||||
    if args.output == None:
 | 
					    if args.output == None:
 | 
				
			||||||
        outFile = args.inputDir.with_name(args.inputDir.name+'_compiled')
 | 
					        outFile=args.inputDir.with_name(args.inputDir.name+'_compiled').resolve()
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        outFile=args.output
 | 
					        outFile=args.output.resovle()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #add .tar.gz if compress is set and the outfile does not already have it.
 | 
					    #add .tar.gz if compress is set and the outfile does not already have it.
 | 
				
			||||||
    if compress and outFile.suffixes != ['.tar', '.gz']:
 | 
					    if compress and outFile.suffixes != ['.tar', '.gz']:
 | 
				
			||||||
        logging.info(f'outFile was {outFile}, corrected because compress flag is set.')
 | 
					        logging.info(f'outFile was {outFile}, corrected because compress flag is set.')
 | 
				
			||||||
        outFile = outFile.with_suffix('.tar.gz')
 | 
					        outFile=outFile.with_suffix('.tar.gz').resolve()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if args.inputDir.resolve() == outFile.resolve():
 | 
					    if args.inputDir.resolve() == outFile.resolve():
 | 
				
			||||||
        raise FileExistsError('output file cannot have the same path as the input file!')
 | 
					        raise FileExistsError('output file cannot have the same path as the input file!')
 | 
				
			||||||
| 
						 | 
					@ -42,28 +42,28 @@ def parse_arguments():
 | 
				
			||||||
    logging.info(f'outputting to {outFile.resolve()}')
 | 
					    logging.info(f'outputting to {outFile.resolve()}')
 | 
				
			||||||
    logging.debug(f'compress is {compress}')
 | 
					    logging.debug(f'compress is {compress}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return args.inputDir, outFile, compress
 | 
					    return args.inputDir.resolve(), outFile, compress
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#Doing it in a tmpDir first, as some distrubutions put temp files on a ramdisk. this should speed up the operation sigificantly.
 | 
					#Doing it in a tmpDir first, as some distrubutions put temp files on a ramdisk. this should speed up the operation sigificantly.
 | 
				
			||||||
class TmpDir:
 | 
					class TmpDir:
 | 
				
			||||||
    def __init__(self, srcDir):
 | 
					    def __init__(self, srcDir):
 | 
				
			||||||
        self.tmpDir = tempfile.TemporaryDirectory()
 | 
					        self.tmpDir=tempfile.TemporaryDirectory()
 | 
				
			||||||
        logging.debug(f'making tmp file from {srcDir} at {self.tmpDir.name}')
 | 
					        logging.debug(f'making tmp file from {srcDir} at {self.tmpDir.name}')
 | 
				
			||||||
        self.path = self.tmpDir.name+'/data/'
 | 
					        self.path=self.tmpDir.name+'/'+Path(srcDir).resolve().name
 | 
				
			||||||
        self.ignorePattern = shutil.ignore_patterns('*.adoc', '.git', '.gitignore')
 | 
					        self.ignorePattern=shutil.ignore_patterns('*.adoc', '.git', '.gitignore')
 | 
				
			||||||
        shutil.copytree(srcDir, self.path, ignore = self.ignorePattern, symlinks=False)
 | 
					        shutil.copytree(srcDir, self.path, ignore=self.ignorePattern, symlinks=False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #copy out from tmpDir (which may be in RAM, depending on distrubution) to disk
 | 
					    #copy out from tmpDir (which may be in RAM, depending on distrubution) to disk
 | 
				
			||||||
    def copy_self_to(self, destDir):
 | 
					    def copy_self_to(self, destPath):
 | 
				
			||||||
        logging.debug(f'outputting to {destPath}')
 | 
					        logging.debug(f'outputting to {Path(destPath).resolve()}')
 | 
				
			||||||
        shutil.copytree(self.path, destDir, symlinks=False)
 | 
					        shutil.copytree(self.path, destPath, symlinks=False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #copy out from tmpDir (which may be in RAM, depending on distrubution) to a compressed file on disk
 | 
					    #copy out from tmpDir (which may be in RAM, depending on distrubution) to a compressed file on disk
 | 
				
			||||||
    def compress_and_copy_self_to(self, destPath):
 | 
					    def compress_and_copy_self_to(self, destPath):
 | 
				
			||||||
        #shutil.make_archive wants destPath to be without file extentions for some godforsaken reason.
 | 
					        #shutil.make_archive wants destPath to be without file extentions for some godforsaken reason.
 | 
				
			||||||
        destPath = Path(destPath.with_name(destPath.name.split('.')[0])).resolve()
 | 
					        destPath=Path(destPath.with_name(destPath.name.split('.')[0])).resolve()
 | 
				
			||||||
        logging.debug(f'compressing to {destPath}')
 | 
					        logging.debug(f'compressing to {Path(destPath).resolve()} from {Path(self.path).parent}')
 | 
				
			||||||
        tarFile = shutil.make_archive(destPath, 'gztar', self.path)
 | 
					        tarFile=shutil.make_archive(destPath, 'gztar', Path(self.path).parent)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def cleanup(self):
 | 
					    def cleanup(self):
 | 
				
			||||||
        self.tmpDir.cleanup()
 | 
					        self.tmpDir.cleanup()
 | 
				
			||||||
| 
						 | 
					@ -87,17 +87,29 @@ def convert_file(inDir, outDir, inFile):
 | 
				
			||||||
    logging.debug(f'converting {inFile} from directory {inDir} to directory {outDir}')
 | 
					    logging.debug(f'converting {inFile} from directory {inDir} to directory {outDir}')
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        #the destdir can be used instead of destfile in order to preserve the directory structure relative to the base dir. really useful.
 | 
					        #the destdir can be used instead of destfile in order to preserve the directory structure relative to the base dir. really useful.
 | 
				
			||||||
        subprocess.run(['asciidoctor', f'--base-dir={inDir}', f'--source-dir={inDir}', f'--destination-dir={outDir}', inFile], check=True)
 | 
					        subprocess.run(['asciidoctor',
 | 
				
			||||||
 | 
					            #specifies the source directory root.
 | 
				
			||||||
 | 
					            f'--source-dir={inDir}',
 | 
				
			||||||
 | 
					            #Destination dir. It takes the file from the subtree --source-dir and puts it in the equivilant location in the subtree --destination-dir. (talking about filesystem subtrees).
 | 
				
			||||||
 | 
					            f'--destination-dir={outDir}',
 | 
				
			||||||
 | 
					            inFile],
 | 
				
			||||||
 | 
					            check=True)
 | 
				
			||||||
    except Exception as e:
 | 
					    except Exception as e:
 | 
				
			||||||
        logging.error(f'could not convert {inFile}!')
 | 
					        logging.error(f'could not convert {inFile}!')
 | 
				
			||||||
        logging.error(f'stdErr was {e.stderr}')
 | 
					        logging.error(f'stdErr was {e.stderr}')
 | 
				
			||||||
        logging.error(f'stdOut was {e.stdout}')
 | 
					        logging.error(f'stdOut was {e.stdout}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
inFile, outFile, compress = parse_arguments()
 | 
					inFile, outFile, compress=parse_arguments()
 | 
				
			||||||
os.chdir(inFile)
 | 
					os.chdir(inFile)
 | 
				
			||||||
tmpDir=TmpDir('./')
 | 
					tmpDir=TmpDir('./')
 | 
				
			||||||
pathsToConvert=find_paths_to_convert('./', [])
 | 
					pathsToConvert=find_paths_to_convert('./', [])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for i in pathsToConvert:
 | 
					for i in pathsToConvert:
 | 
				
			||||||
    convert_file('./', tmpDir.path, i)
 | 
					    convert_file('./', tmpDir.path, i)
 | 
				
			||||||
breakpoint()
 | 
					
 | 
				
			||||||
 | 
					if compress:
 | 
				
			||||||
 | 
					    tmpDir.compress_and_copy_self_to(outFile)
 | 
				
			||||||
 | 
					else:
 | 
				
			||||||
 | 
					    tmpDir.copy_self_to(outFile)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tmpDir.cleanup()
 | 
					tmpDir.cleanup()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue