def _checkMigrate(self, dataDir, label, targetDirectory, kpfName="toolbox.kpf"): toolboxPath = join(dataDir, kpfName) if targetDirectory == koToolbox2.PROJECT_TARGET_DIRECTORY: # If the project doesn't have any tools, don't extract them try: f = open(toolboxPath, 'r') contents = f.read() f.close() for tag in [ 'macro', 'snippet', 'command', 'template', 'URL', 'menu', 'toolbar' ]: if ("<" + tag + " ") in contents: break else: #log.debug("No tools to convert in %s", contents) return except: log.exception( "Can't check file %s to see if it contains tools", toolboxPath) toolboxDir = join(dataDir, targetDirectory) migrateStampPath = join(toolboxDir, ".migrated") if (exists(toolboxPath) and (not exists(migrateStampPath) or os.stat(toolboxPath).st_mtime > os.stat(migrateStampPath).st_mtime)): curDir = os.getcwd() try: koMigrateV5Toolboxes.expand_toolbox( toolboxPath, dataDir, toolboxDirName=targetDirectory, force=1) except: log.exception("Failed to migrate toolbox %s", toolboxPath) finally: os.chdir(curDir) try: f = open(migrateStampPath, "w") f.write("migrated %s on %s\n" % (label, time.ctime())) f.close() except IOError: log.exception("Can't write to %s: ", migrateStampPath) else: log.debug("No need to migrate from %s to %s", toolboxPath, toolboxDir) pass
def _checkMigrate(self, dataDir, label, targetDirectory, kpfName="toolbox.kpf"): toolboxPath = join(dataDir, kpfName) if targetDirectory == koToolbox2.PROJECT_TARGET_DIRECTORY: # If the project doesn't have any tools, don't extract them try: f = open(toolboxPath, 'r') contents = f.read() f.close() for tag in ['macro', 'snippet', 'command', 'template', 'URL', 'menu', 'toolbar']: if ("<" + tag + " ") in contents: break else: #log.debug("No tools to convert in %s", contents) return except: log.exception("Can't check file %s to see if it contains tools", toolboxPath) toolboxDir = join(dataDir, targetDirectory) migrateStampPath = join(toolboxDir, ".migrated") if (exists(toolboxPath) and (not exists(migrateStampPath) or os.stat(toolboxPath).st_mtime > os.stat(migrateStampPath).st_mtime)): curDir = os.getcwd() try: koMigrateV5Toolboxes.expand_toolbox(toolboxPath, dataDir, toolboxDirName=targetDirectory, force=1) except: log.exception("Failed to migrate toolbox %s", toolboxPath) finally: os.chdir(curDir) try: f = open(migrateStampPath, "w") f.write("migrated %s on %s\n" % (label, time.ctime())) f.close() except IOError: log.exception("Can't write to %s: ", migrateStampPath) else: log.debug("No need to migrate from %s to %s", toolboxPath, toolboxDir) pass
def importV5Package_aux(self, parentPath, kpzPath): koDirSvc = components.classes["@activestate.com/koDirs;1"].getService() userDataDir = koDirSvc.userDataDir kpzExtractDir = join(userDataDir, 'extracted-kpz') if not os.path.exists(kpzExtractDir): os.mkdir(kpzExtractDir) startedWithWebResource = kpzPath.startswith("http:/") if startedWithWebResource: # Copy the web data to a temporary file. koResource = components.classes["@activestate.com/koFileEx;1"].\ createInstance(components.interfaces.koIFileEx) koResource.URI = kpzPath kpzPath = join(kpzExtractDir, koResource.baseName) koTarget = components.classes["@activestate.com/koFileEx;1"].\ createInstance(components.interfaces.koIFileEx) koTarget.path = kpzPath koTarget.open('wb') koResource.open('rb') koTarget.write(koResource.read(-1)) koResource.close() koTarget.close() basedir, kpfFile = self._extractPackage(kpzPath, kpzExtractDir) kpfDirToDelete = basedir toolboxDirName = os.path.splitext(os.path.basename(kpzPath))[0] tempToolsDir = join(os.path.dirname(kpfFile), ".extract-tools") if exists(tempToolsDir): try: shutil.rmtree(tempToolsDir) except: log.exception("importV5Package: failed to rmtree %s", tempToolsDir) try: koMigrateV5Toolboxes.expand_toolbox(kpfFile, tempToolsDir, toolboxDirName=toolboxDirName, force=1) # Now, where are the tools? # Usually the package is wrapped in a directory called "Project" childFiles = os.listdir(tempToolsDir) kpfDir = None if len(childFiles) == 1: candidate = join(tempToolsDir, childFiles[0]) if os.path.isdir(candidate): kpfDir = candidate # Skip the hardcoded project thing if childFiles[0].lower() != 'project': childFiles = os.listdir(kpfDir) if len(childFiles) == 1 and childFiles[0].lower() == 'project': candidate = join(kpfDir, childFiles[0]) if os.path.isdir(candidate): kpfDir = candidate if kpfDir is None and 'Project' in childFiles: candidate = join(tempToolsDir, 'Project') if os.path.isdir(candidate): kpfDir = candidate if kpfDir is None: kpfDir = tempToolsDir self.toolboxLoader.importDirectory(parentPath, kpfDir) except: log.exception("Failed to expand/import package based at %s", parentPath) finally: # Clean up if startedWithWebResource: try: os.unlink(kpzPath) except: log.exception("importV5Package: failed to delete %s", kpzPath) try: shutil.rmtree(kpfDirToDelete) except: log.exception("importV5Package: failed to rmtree %s", kpfDirToDelete)
ver = ".".join([str(i) for i in _version_]) sys.stderr.write("expand_toolbox %s\n" % ver) return 0 elif opt in ("-v", "--verbose"): log.setLevel(logging.DEBUG) verbose = 1 elif opt in ("-f", "--force"): force = 1 elif opt == "-o": outdir = optarg elif opt in ("-n", "--dry-run"): nowrite = True # Process arguments. if len(args) != 1: log.error("incorrect number of arguments: argv=%r\n" % argv) return 1 toolboxFile = args[0] try: return koMigrateV5Toolboxes.expand_toolbox(toolboxFile, outdir, toolboxDirName=None, force=force) except koMigrateV5Toolboxes.ExpandToolboxException: log.exception("problemo...") return 2 if __name__ == "__main__": __file__ = sys.argv[0] rc = main(sys.argv) print ("done") sys.exit(rc)
elif opt in ("-v", "--verbose"): log.setLevel(logging.DEBUG) verbose = 1 elif opt in ("-f", "--force"): force = 1 elif opt == "-o": outdir = optarg elif opt in ("-n", "--dry-run"): nowrite = True # Process arguments. if len(args) != 1: log.error("incorrect number of arguments: argv=%r\n" % argv) return 1 toolboxFile = args[0] try: return koMigrateV5Toolboxes.expand_toolbox(toolboxFile, outdir, toolboxDirName=None, force=force) except koMigrateV5Toolboxes.ExpandToolboxException: log.exception("problemo...") return 2 if __name__ == "__main__": __file__ = sys.argv[0] rc = main(sys.argv) print("done") sys.exit(rc)