def run(self, **kwargs): if len(sys.argv) < 3: print('[WARN]:need start script name.') return script_name = str(sys.argv[2]) scripts = load_script_temp() if not scripts: print('[INFO]:please execute command [startpro list] first') return try: if script_name.isdigit() and script_name not in scripts: script_name = scripts.keys()[int(script_name)] if script_name not in scripts: raise RuntimeError('Unsupported script') except Exception: print('[ERROR]:Unsupported script.') return script = scripts[script_name] mod = import_module(script['path']) func = get_exec_func(mod=mod, name=script_name, is_class=script['is_class']) func(**kwargs)
def run(self, **kwargvs): if len(sys.argv) < 3: print('[WARN]:need start script name.') return script_name = str(sys.argv[2]) scripts = load_script_temp() if not scripts: print('[INFO]:please execute command [startpro list] first') return try: if script_name.isdigit() and script_name not in scripts: script_name = scripts.keys()[int(script_name)] if script_name not in scripts: raise RuntimeError('Unsupported script') except: print('[ERROR]:Unsupported script.') return script = scripts[script_name] mod = import_module(script['path']) func = get_exec_func(mod=mod, name=script_name, is_class=script['is_class']) func(**kwargvs)
def run(self, **kwargvs): try: mod = import_module(MAIN_PATH) src = mod.__path__[0] path = os.path.join(src, TEMPLATE_PACKAGE) name = kwargvs.get('name', None) if not name: if settings.CONFIG: name = settings.CONFIG.get_config('package', 'name') # @UndefinedVariable if not name: return PY_NAME = "%s.py" % name PATHEX = os.getcwd() # main PY dst = os.path.join(PATHEX, PY_NAME) shutil.copyfile(path, dst) patterns = [] include_regex = [(r, True) for r in filter(lambda x: x, kwargvs.get('i', '').split(','))] exclude_regex = [(r, False) for r in filter(lambda x: x, kwargvs.get('e', '').split(','))] patterns.extend(include_regex) patterns.extend(exclude_regex) if patterns: load_paths = [] scripts = load_script_temp() for k, v in scripts.items(): for r, b in patterns: p = v.get('path') n = v.get('name') if r in p or r in n: if b: load_paths.append(p) break else: break else: load_paths = kwargvs['load_paths'] for r in load_paths: print('include:[%s]' % r) self.update(dst, ["import %s" % r for r in load_paths]) # configure cfg = os.path.join(PATHEX, settings.MAIN_CONFIG) settings.CONFIG.set_config("package", "load", str(kwargvs.get('paths', ''))) # @UndefinedVariable # PYINSTALLER PKG_NAME = name DATA_FILE = [] DATA_FILE.append(('/startpro/VERSION', os.path.join(src, 'VERSION'), 'DATA')) DATA_FILE.append(('/startpro/startpro.cfg', cfg, 'DATA')) DATA_FILE.append(('/startpro/template/package.py', path, 'DATA')) global SPEC_CONTENT SPEC_CONTENT = SPEC_CONTENT.replace("#PY_NAME#", PY_NAME).replace("#PATHEX#", PATHEX). \ replace("#DATA_FILE#", str(DATA_FILE)).replace("#PKG_NAME#", PKG_NAME) spec = dst.replace(".py", ".spec") with open(spec, 'w') as f: f.write(SPEC_CONTENT) f.flush() os.system("pyinstaller -F %s" % spec) settings.CONFIG.remove_option("package", "load") # @UndefinedVariable # os.remove(spec) print("[INFO]:package:[%s]" % os.path.join(os.path.join(PATHEX, "dist"), PKG_NAME)) except Exception, e: print("[ERROR]:%s" % e) s = sys.exc_info() print('pkg %s on line %d.' % (s[1], s[2].tb_lineno))
def run(self, **kwargvs): try: # print str(kwargvs) mod = import_module(MAIN_PATH) src = mod.__path__[0] path = os.path.join(src, TEMPLATE_PACKAGE) name = kwargvs.get('name', None) if not name: if settings.CONFIG: name = settings.CONFIG.get_config('package', 'name') # @UndefinedVariable if not name: return PY_NAME = "%s.py" % name PATHEX = os.getcwd() # main PY dst = os.path.join(PATHEX, PY_NAME) shutil.copyfile(path, dst) ###### functions to pkg funs = kwargvs.get('f', None) exclue_funcs = kwargvs.get('e', False) != False # default False use_num = kwargvs.get('n', False) != False # default False if not funs and not exclue_funcs: load_paths = kwargvs['load_paths'] self.update(dst, ["import %s" % re for re in load_paths]) else: import_path = []; exclue_path = [] script_funs = load_script_temp() param_funs = filter(lambda x: x.strip() != '', funs.split(',')) ## import functions for i, (fun_name, info) in enumerate(script_funs.iteritems()): script_path = info.get('path', '') if use_num and str(i) in param_funs: import_path.append(script_path) # done # elif '%s.%s' %(script_path, fun_name.split('.')[-1]) in param_funs: elif fun_name in param_funs: import_path.append(script_path) else: exclue_path.append(script_path) ## if exculde if exclue_funcs: import_path = exclue_path self.update(dst, ["import %s" % re for re in set(import_path)]) # configure cfg = os.path.join(PATHEX, settings.MAIN_CONFIG) settings.CONFIG.set_config("package", "load", str(kwargvs.get('paths', ''))) # @UndefinedVariable # PYINSTALLER PKG_NAME = name DATA_FILE = [] DATA_FILE.append(('/startpro/VERSION', os.path.join(src, 'VERSION'), 'DATA')) DATA_FILE.append(('/startpro/startpro.cfg', cfg, 'DATA')) DATA_FILE.append(('/startpro/template/package.py', path, 'DATA')) global SPEC_CONTENT SPEC_CONTENT = SPEC_CONTENT.replace("#PY_NAME#", PY_NAME).replace("#PATHEX#", PATHEX). \ replace("#DATA_FILE#", str(DATA_FILE)).replace("#PKG_NAME#", PKG_NAME) spec = dst.replace(".py", ".spec") with open(spec, 'w') as f: f.write(SPEC_CONTENT) f.flush() ## start to pkg os.system("pyinstaller -F %s" % spec) settings.CONFIG.remove_option("package", "load") # @UndefinedVariable os.remove(spec) print("[INFO]:package:[%s]" % os.path.join(os.path.join(PATHEX, "dist"), PKG_NAME)) except Exception, e: print("[ERROR]:%s" % e)