Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
 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()
Ejemplo n.º 3
0
    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