コード例 #1
0
ファイル: start.py プロジェクト: zoe0316/startpro
 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)
コード例 #2
0
 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)
コード例 #3
0
 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))
コード例 #4
0
ファイル: pkg.py プロジェクト: badbye/startpro
    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)