def single_input(args, config=None): """ Single Input Mode works to convert a single input XML file into EPUB. This is probably the most typical use case and is the most highly configurable, see the argument parser and oaepub --help """ if config is None: config = get_config_module() #Determination of input type and processing #Fetch by URL if 'http:' in args.input: raw_name = u_input.url_input(args.input) abs_input_path = os.path.join(LOCAL_DIR, raw_name+'.xml') parsed_article = Article(abs_input_path, validation=args.no_dtd_validation) #Fetch by DOI elif args.input[:4] == 'doi:': raw_name = u_input.doi_input(args.input) abs_input_path = os.path.join(LOCAL_DIR, raw_name+'.xml') parsed_article = Article(abs_input_path, validation=args.no_dtd_validation) #Local XML input else: abs_input_path = utils.get_absolute_path(args.input) raw_name = u_input.local_input(abs_input_path) parsed_article = Article(abs_input_path, validation=args.no_dtd_validation) #Generate the output path name, this will be the directory name for the #output. This output directory will later be zipped into an EPUB output_name = os.path.join(utils.get_output_directory(args), raw_name) #Make the EPUB make_epub(parsed_article, outdirect=output_name, explicit_images=args.images, # Explicit image path batch=False, config=config) #Cleanup removes the produced output directory, keeps the ePub file if args.clean: # Defaults to False, --clean or -c to toggle on shutil.rmtree(output_name) #Running epubcheck on the output verifies the validity of the ePub, #requires a local installation of java and epubcheck. if args.no_epubcheck: epubcheck('{0}.epub'.format(output_name), config)
def get_output_directory(args): """ Determination of the directory for output placement involves possibilities for explicit user instruction (absolute path or relative to execution) and implicit default configuration (absolute path or relative to input) from the system global configuration file. This function is responsible for reliably returning the appropriate output directory which will contain any log(s), ePub(s), and unzipped output of OpenAccess_EPUB. It utilizes the parsed args, passed as an object, and is self-sufficient in accessing the config file. All paths returned by this function are absolute. """ #Import the global config file as a module import imp config_path = os.path.join(cache_location(), 'config.py') try: config = imp.load_source('config', config_path) except IOError: print('Could not find {0}, please run oae-quickstart'.format(config_path)) sys.exit() #args.output is the explicit user instruction, None if unspecified if args.output: #args.output may be an absolute path if os.path.isabs(args.output): return args.output # return as is #or args.output may be a relative path, relative to cwd else: return evaluate_relative_path(relative=args.output) #config.default_output for default behavior without explicit instruction else: #config.default_output may be an absolute_path if os.path.isabs(config.default_output): return config.default_output #or config.default_output may be a relative path, relative to input else: if args.input: # The case of single input if 'http://www' in args.input: #Fetched from internet by URL raw_name = url_input(args.input, download=False) abs_input_path = os.path.join(os.getcwd(), raw_name+'.xml') elif args.input[:4] == 'doi:': #Fetched from internet by DOI raw_name = doi_input(args.input, download=False) abs_input_path = os.path.join(os.getcwd(), raw_name+'.xml') else: #Local option, could be anywhere abs_input_path = get_absolute_path(args.input) abs_input_parent = os.path.split(abs_input_path)[0] return evaluate_relative_path(abs_input_parent, config.default_output) elif args.batch: # The case of Batch Mode #Batch should only work on a supplied directory abs_batch_path = get_absolute_path(args.batch) return abs_batch_path elif args.parallel_batch: #Batch should only work on a supplied directory abs_batch_path = get_absolute_path(args.parallel_batch) return abs_batch_path elif args.collection: return os.getcwd() else: # Un-handled or currently unsupported options print('The output location could not be determined...') sys.exit()