def dtbook2sbsform(inputFile, outputFile, **kwargs): """Transform a dtbook xml file to sbsform""" hyphenate = kwargs.get('hyphenation', False) hyphenator = ( "java", "-jar", join(settings.EXTERNAL_PATH, 'dtbook_hyphenator', 'dtbook_hyphenator.jar'), inputFile, ) translator = ( join(settings.EXTERNAL_PATH, 'dtbook2sbsform', 'dtbook2sbsform.sh'), "-s:-" if hyphenate else "-s:%s" % inputFile, ) kwargs["version"] = getVersion() for k, v in kwargs.iteritems(): if isinstance(v, bool): # map True and False to "true()" and "false()" translator += ("?%s=%s" % (k, "true()" if v else "false()"),) elif isinstance(v, int): translator += ("?%s=%s" % (k, v),) else: translator += ("%s=%s" % (k,v),) f = open(outputFile, 'w') env = {'LANG': 'en_US.UTF-8'} if hyphenate: p1 = Popen(hyphenator, stdout=PIPE, env=env) p2 = Popen(translator, stdin=p1.stdout, stdout=f, env=env) else: p2 = Popen(translator, stdout=f) p2.communicate() f.close()
def dtbook2sbsform(inputFile, outputFile, **kwargs): """Transform a dtbook xml file to sbsform""" command = ( join(settings.DTBOOK2SBSFORM_PATH, 'dtbook2sbsform.sh'), "-s:%s" % inputFile, ) kwargs["version"] = getVersion() for k, v in kwargs.iteritems(): if isinstance(v, bool): # map True and False to "true()" and "false()" command += ("?%s=%s" % (k, "true()" if v else "false()"),) elif isinstance(v, int): command += ("?%s=%s" % (k, v),) else: command += ("%s=%s" % (k,v),) f = open(outputFile, 'w') p1 = Popen(command, stdout=f) p1.communicate() f.close()
def dtbook2sbsform(inputFile, imageFiles=[], **kwargs): """Transform a dtbook xml file to an SBSForm""" tmpDir = tempfile.mkdtemp(prefix="daisyproducer-") # make the temp dir world readable, so that the pipeline2 user can access it os.chmod(tmpDir, 0755) fileName = basename(inputFile) sbsformFileName = splitext(fileName)[0] + ".sbsform" tmpSbsformFileName = join(tempfile.gettempdir(), sbsformFileName) tmpInputFile = join(tmpDir, fileName) copyfile(inputFile, tmpInputFile) kwargs["version"] = getVersion() # map True and False to "true" and "false" kwargs.update([(k, str(v).lower()) for (k, v) in kwargs.iteritems() if isinstance(v, bool)]) for image in imageFiles: copyfile(image.content.path, join(tmpDir, basename(image.content.path))) request = make_job_request("sbs:dtbook-to-sbsform", {'source': tmpInputFile}, {k.replace("_","-"): v for (k, v) in kwargs.iteritems()}) job = post_job(request) logger.info("Job with id %s submitted to the server", job['id']) job = wait_for_job(job) if job['status'] == "DONE": try: outputDir = [r for r in job['results'] if r['type'] == "option" and r['name'] == "output-dir"][0] sbsformFile = [f for f in outputDir['files'] if f['href'] == "%s/idx/output-dir/%s" % (outputDir['href'], sbsformFileName)][0] copyfile(sbsformFile['file'], tmpSbsformFileName) if not delete_job(job['id']): logger.warn("The job %s has not been deleted from the server", job['id']) rmtree(tmpDir) return tmpSbsformFileName except IndexError: pass rmtree(tmpDir) errors = tuple(set([m['text'] for m in job['messages'] if m['level']=='ERROR'])) logger.error("Conversion to SBSForm failed with %s. See %s", errors, job['log']) return ("Conversion to SBSForm failed with:",) + errors