def copy_book_contents_to(self, destdir): destdir = unicode_str(destdir) if destdir is None or not unipath.isdir(destdir): raise WrapperException('destination directory does not exist') for id in self.id_to_filepath: rpath = self.id_to_filepath[id] in_manifest = id in self.id_to_mime data = self.readfile(id) filepath = os.path.join(destdir, rpath) base = os.path.dirname(filepath) if not unipath.exists(base): os.makedirs(base) if isinstance(data, text_type): data = utf8_str(data) with open(pathof(filepath), 'wb') as fp: fp.write(data) for id in self.book_href_to_filepath: rpath = self.book_href_to_filepath[id] data = self.readotherfile(id) filepath = os.path.join(destdir, rpath) base = os.path.dirname(filepath) if not unipath.exists(base): os.makedirs(base) if isinstance(data, text_type): data = utf8_str(data) with open(pathof(filepath), 'wb') as fp: fp.write(data)
def copy_book_contents_to(self, destdir): destdir = unicode_str(destdir) if destdir is None or not unipath.isdir(destdir): raise WrapperException('destination directory does not exist') for id in self.id_to_filepath: rpath = self.id_to_filepath[id] in_manifest = id in self.id_to_mime data = self.readfile(id) filepath = os.path.join(destdir,rpath) base = os.path.dirname(filepath) if not unipath.exists(base): os.makedirs(base) if isinstance(data,text_type): data = utf8_str(data) with open(pathof(filepath),'wb') as fp: fp.write(data) for id in self.book_href_to_filepath: rpath = self.book_href_to_filepath[id] data = self.readotherfile(id) filepath = os.path.join(destdir,rpath) base = os.path.dirname(filepath) if not unipath.exists(base): os.makedirs(base) if isinstance(data,text_type): data = utf8_str(data) with open(pathof(filepath),'wb') as fp: fp.write(data)
def zipUpDir(self, myzip, tdir, localname, compress_type=zipfile.ZIP_DEFLATED): currentdir = tdir if localname != "": currentdir = os.path.join(currentdir, localname) list = unipath.listdir(currentdir) for file in list: afilename = file localfilePath = os.path.join(localname, afilename) realfilePath = os.path.join(currentdir, file) if unipath.isfile(realfilePath): myzip.write(pathof(realfilePath), pathof(localfilePath), compress_type) elif unipath.isdir(realfilePath): self.zipUpDir(myzip, tdir, localfilePath)
def main(argv=unicode_argv()): if len(argv) != 5: failed(None, msg="Launcher: improper number of arguments passed to launcher.py") return -1 ebook_root = argv[1] outdir = argv[2] script_type = argv[3] target_file = argv[4] script_home = os.path.dirname(target_file) script_module = os.path.splitext(os.path.basename(target_file))[0] # do basic sanity checking anyway if script_type not in SUPPORTED_SCRIPT_TYPES: failed(None, msg="Launcher: script type %s is not supported" % script_type) return -1 ok = unipath.exists(ebook_root) and unipath.isdir(ebook_root) ok = ok and unipath.exists(outdir) and unipath.isdir(outdir) ok = ok and unipath.exists(script_home) and unipath.isdir(script_home) ok = ok and unipath.exists(target_file) and unipath.isfile(target_file) if not ok: failed(None, msg="Launcher: missing or incorrect paths passed in") return -1 # update sys with path to target module home directory if script_home not in sys.path: sys.path.append(script_home) # load and parse opf if present op = None opf_path = os.path.join(ebook_root, "OEBPS", "content.opf") if unipath.exists(opf_path) and unipath.isfile(opf_path): op = Opf_Parser(opf_path) # create a wrapper for record keeping and safety rk = Wrapper(ebook_root, outdir, op) # get the correct container if script_type == "edit": bc = BookContainer(rk) elif script_type == "input": bc = InputContainer(rk) else: bc = OutputContainer(rk) # start the target script ps = ProcessScript(script_type, script_module, bc) ps.launch() # get standard error and standard out from the target script successmsg = "" for data in ps.stdouttext: successmsg += unicode_str(data) successmsg = escapeit(successmsg) errorlog = "" for data in ps.stderrtext: errorlog += unicode_str(data) errorlog = escapeit(errorlog) # get the target's script wrapper xml resultxml = "".join(ps.wrapout) resultxml += "<msg>\n" if ps.exitcode == 0: resultxml += successmsg if _DEBUG: resultxml += errorlog else: if _DEBUG: resultxml += successmsg resultxml += errorlog resultxml += "</msg>\n</wrapper>\n" # write it to stdout and exit if PY3: sys.stdout.buffer.write(utf8_str(resultxml)) else: sys.stdout.write(utf8_str(resultxml)) return 0
def main(argv=unicode_argv()): if len(argv) != 5: failed( None, msg="Launcher: improper number of arguments passed to launcher.py") return -1 ebook_root = argv[1] outdir = argv[2] script_type = argv[3] target_file = argv[4] script_home = os.path.dirname(target_file) plugin_name = os.path.split(script_home)[-1] plugin_dir = os.path.dirname(script_home) script_module = os.path.splitext(os.path.basename(target_file))[0] # do basic sanity checking anyway if script_type not in SUPPORTED_SCRIPT_TYPES: failed(None, msg="Launcher: script type %s is not supported" % script_type) return -1 ok = unipath.exists(ebook_root) and unipath.isdir(ebook_root) ok = ok and unipath.exists(outdir) and unipath.isdir(outdir) ok = ok and unipath.exists(script_home) and unipath.isdir(script_home) ok = ok and unipath.exists(target_file) and unipath.isfile(target_file) if not ok: failed(None, msg="Launcher: missing or incorrect paths passed in") return -1 # update sys with path to target module home directory sys.path.append(script_home) # load and parse opf if present op = None opf_path = os.path.join(ebook_root, 'OEBPS', 'content.opf') if unipath.exists(opf_path) and unipath.isfile(opf_path): op = Opf_Parser(opf_path) # create a wrapper for record keeping and safety rk = Wrapper(ebook_root, outdir, op, plugin_dir, plugin_name) # get the correct container if script_type == 'edit': bc = BookContainer(rk) elif script_type == 'input': bc = InputContainer(rk) elif script_type == 'validation': bc = ValidationContainer(rk) else: bc = OutputContainer(rk) # start the target script ps = ProcessScript(script_type, script_module, bc) ps.launch() # get standard error and standard out from the target script successmsg = '' for data in ps.stdouttext: successmsg += unicode_str(data) successmsg = escapeit(successmsg) errorlog = '' for data in ps.stderrtext: errorlog += unicode_str(data) errorlog = escapeit(errorlog) # get the target's script wrapper xml resultxml = "".join(ps.wrapout) resultxml += "<msg>\n" if ps.exitcode == 0: resultxml += successmsg if _DEBUG: resultxml += errorlog else: if _DEBUG: resultxml += successmsg resultxml += errorlog resultxml += '</msg>\n</wrapper>\n' # write it to stdout and exit if PY3: sys.stdout.buffer.write(utf8_str(resultxml)) else: sys.stdout.write(utf8_str(resultxml)) return 0