def do_importfromzip(temp_file, path): zip_file = temp_file try: if not os.path.exists(zip_file): return ('fail', 'Can not find xlsx file :{}'.format(zip_file)) if not os.path.isdir(path): return ('fail', 'The Node is NOT A DIR :{}'.format(path)) if not zipfile.is_zipfile(zip_file): return ('fail', 'The file is not a zip file :{}'.format( os.path.basename(zip_file))) remove_dir(path) if os.path.exists(path) else None os.mkdir(path) fz = zipfile.ZipFile(zip_file, 'r') for file in fz.namelist(): fz.extract(file, path) return ('success', path) except Exception as e: log.error("从zip文件导入发生异常:{}".format(e)) return ("fail", "Exception occured .")
def delete_task_record(app, args): project = args['project'] task_no = args['task_no'] task_path = app.config["AUTO_HOME"] + "/jobs/%s/%s/%s" % ( session['username'], project, str(task_no)) if os.path.exists(task_path): remove_dir(task_path)
def __delete(self, args): result = {"status": "success", "msg": "项目删除成功"} user_path = self.app.config["AUTO_HOME"] + "/workspace/%s/%s" % (session["username"], args["name"]) if exists_path(user_path): remove_dir(user_path) remove_project(self.app, session['username'], args['name']) else: result["status"] = "fail" result["msg"] = "删除失败,不存在的项目" return result
def remote_clone(app, url): """ git.colone_from return True/False and info """ newdir = url.split('/')[-1].split('.')[0] to_path = os.path.join(app.config['AUTO_TEMP'], newdir) remove_dir(to_path) if os.path.exists(to_path) else None mk_dirs(to_path) try: repo = git.Repo.clone_from(url, to_path) except git.exc.GitError as e: log.error("Git clone 从 {} 到目录 {} 异常:{}".format(url, to_path, e)) log.info("{}".format(e)) return (False, "{}".format(e)) log.info("Clone 从 {} 到路径:{} 成功".format(url, to_path)) projectfile = os.path.join(to_path, 'platforminterface/project.conf') log.info("读取 Project file: {}".format(projectfile)) if os.path.exists(projectfile): with open(projectfile, 'r') as f: for l in f: if l.startswith('#'): continue if len(l.strip()) == 0: continue splits = l.strip().split('|') if len(splits) != 4: log.error("错误的 project.conf 行 " + l) return (False, "错误的 project.conf 行 " + l) (projectname, owner, users, cron) = splits project_path = os.path.join(app.config['AUTO_HOME'], 'workspace', owner, projectname) if os.path.exists(project_path): msg = '目标目录存在:{}'.format(project_path) log.error(msg) return (False, msg) log.info("复制文件从 {} 到 {} ".format(to_path, project_path)) try: shutil.copytree(to_path, project_path) except Exception as e: return (False, "{}".format(e)) else: msg = "Load Project Fail: 找不到 project.conf:{} ".format(projectfile) log.error(msg) return (False, msg) return (True, project_path) if repo else (False, "Git clone fail!")
def __delete(self, args): result = {"status": "success", "msg": "成功:删除目录."} user_path = args['key'] if exists_path(user_path): remove_dir(user_path) else: result["status"] = "fail" result["msg"] = "失败:目录不存在!" return result self.app.config['DB'].delete_suite(user_path) self.app.config['DB'].insert_loginfo(session['username'], 'dir', 'delete', user_path, result['status']) return result
def __delete(self, args): result = {"status": "success", "msg": "成功:删除用户."} del_user_mainproject = self.app.config['DB'].get_user_main_project( args["username"]) owner = self.app.config['DB'].get_projectowner(del_user_mainproject) if not (session['username'] == owner): result["status"] = "fail" result["msg"] = "失败:非项目管理员,请联系管理员{}.".format(owner) self.app.config['DB'].insert_loginfo(session['username'], 'user', 'delete', args["username"], result['status']) return result if (session['username'] == args['username']): result["status"] = "fail" result["msg"] = "失败:请联系Admin删除项目及所有用户." return result if args["username"] == "Admin" or args["username"] == "admin": result["status"] = "fail" result["msg"] = "失败:Cannot delete Admin." return result projects = self.app.config['DB'].get_ownproject(args["username"]) if len(projects) > 0: result["status"] = "fail" result["msg"] = "失败:该用户有多个项目!" else: self.app.config['DB'].del_user(args["username"]) work_path = os.path.join(self.app.config['AUTO_HOME'], 'workspace', args['username']) job_path = os.path.join(self.app.config['AUTO_HOME'], 'jobs', args['username']) remove_dir(work_path) if os.path.exists(work_path) else None remove_dir(job_path) if os.path.exists(job_path) else None self.save_user(self.app.config['DB'].get_user_main_project( session['username'])) self.app.config['DB'].insert_loginfo(session['username'], 'user', 'delete', args["username"], result['status']) return result
def __delete(self, args): result = {"status": "success", "msg": "用户删除成功"} user_path = self.app.config["AUTO_HOME"] + "/users/" + args["username"] if exists_path(user_path): config = json.load( codecs.open(user_path + '/config.json', 'r', 'utf-8')) if len(config["data"]) > 0: result["status"] = "fail" result["msg"] = "请先删除该用户拥有的项目" else: remove_dir(user_path) else: result["status"] = "fail" result["msg"] = "用户不存在,删除失败" return result
def clear_projectres(project, key=''): prj = project if not key == '': prj = get_projectnamefromkey(key) log.info("清除项目关键字:" + prj) cwd = os.getcwd() + "/keyword/" + prj try: remove_dir(cwd) except FileNotFoundError: log.warning("删除项目目录失败:" + cwd) jsd = os.getcwd() + "/auto/www/static/js/" + prj log.info("清除项目的js文件:" + prj) try: remove_dir(jsd) except FileNotFoundError: log.warning("删除项目目录失败:" + jsd)
def __delete(self, args): result = {"status": "success", "msg": "删除项目成功."} self.log.debug("删除项目 args:{}".format(args)) project = args["name"] owner = self.app.config['DB'].get_projectowner(project) #owner = get_ownerfromkey(args['key']) if not session["username"] == "Admin": result["status"] = "fail" result["msg"] = "FAIL:只有Admin可以进行此操作!" return result user_path = self.app.config["AUTO_HOME"] + \ "/workspace/%s/%s" % (owner, args["name"]) #user_path = args['key'] self.log.info("删除项目:开始删除项目目录 {}".format(user_path)) if exists_path(user_path): remove_dir(user_path) if not self.app.config['DB'].del_project(args["name"], owner): result["status"] = "fail" result["msg"] = "删除失败, 项目不存在." # TODO 还需要删除项目目录 workspace 和 jobs 下的内容 self.log.info("删除项目的owner:{} 和以 {} 为主项目的成员".format(owner, project)) self.app.config['DB'].del_user(owner) work_path = os.path.join(self.app.config['AUTO_HOME'], 'workspace', owner) remove_dir(work_path) if os.path.exists(work_path) else None self.app.config['DB'].runsql( "Delete from user where main_project='{}' ;".format(project)) self.app.config['DB'].insert_loginfo(session['username'], 'project', 'delete', user_path, result['status']) # Delete resource is not dangerous, all of that can be auto generated. clear_projectres('usepath', user_path) return result
def delete_task_record(app, name, task_no): task_path = app.config["AUTO_HOME"] + "/jobs/" + session[ "username"] + "/%s/%s" % (name, task_no) if os.path.exists(task_path): remove_dir(task_path)
def __gitclone_caserecord(self, args): url = args['name'] if len(url) < 4: url = self.app.config['DB'].get_setting('history_git') if not url.startswith('http'): result = { "status": "fail", "msg": "Fail:没有配置历史结果git或配置有误!url:" + url } return result path = self.app.config['AUTO_TEMP'] + '/caserecordgit' remove_dir(path) if os.path.exists(path) else None mk_dirs(path) (ok, info) = remote_clone(url, path) if not ok: result = {"status": "fail", "msg": info} self.app.config['DB'].insert_loginfo(session['username'], 'case', 'gitclonecaserecord', url, result['status']) return result (gitname, extf) = os.path.splitext(os.path.basename(url)) gitpath = os.path.join(path, gitname, '.git') remove_dir(gitpath) if os.path.exists(gitpath) else None total = 0 success = 0 formaterror = 0 exits = 0 totalfile = 0 omitfile = 0 for root, dirs, files in os.walk(os.path.join(path, gitname), topdown=False): for name in files: ff = os.path.join(root, name) (_, f_ext) = os.path.splitext(ff) totalfile += 1 if not f_ext == '.his': self.log.warning("Gitclone caserecord 忽略文件:" + ff) omitfile += 1 continue with open(ff, 'r') as f: for l in f: l = l.strip() if len(l) != 0: total += 1 else: continue splits = l.split('|') if len(splits) != 8: formaterror += 1 self.log.error("uploadcaserecord 错误行:" + l) continue (info_key, info_name, info_testproject, info_projectversion, ontime, run_status, run_elapsedtime, run_user) = splits sql = ''' INSERT into caserecord (info_key,info_name,info_testproject,info_projectversion,ontime,run_status,run_elapsedtime,run_user) VALUES ('{}','{}','{}','{}','{}','{}','{}','{}'); '''.format(info_key, info_name, info_testproject, info_projectversion, ontime, run_status, run_elapsedtime, run_user) res = self.app.config['DB'].runsql(sql) if res: success += 1 else: exits += 1 self.log.error("uploadcaserecord 失败,记录存在:" + l) remove_dir(path) if os.path.exists(path) else None info = 'Finished with totalfile:{}, omitfile:{}, total:{}, sucess:{}, error:{}, exists:{}'.format( totalfile, omitfile, total, success, formaterror, exits) result = {"status": "success", "msg": info} return result
def do_unzip_project(temp_file, path): zip_file = temp_file try: if not os.path.exists(zip_file): return ('fail', '找不到zip文件:{}'.format(zip_file)) app = current_app._get_current_object() if not zipfile.is_zipfile(zip_file): return ('fail', '不是一个zip文件 :{}'.format(os.path.basename(zip_file))) remove_dir(path) if os.path.exists(path) else None os.mkdir(path) fz = zipfile.ZipFile(zip_file, 'r') for file in fz.namelist(): fz.extract(file, path) projectfile = '' project_content = '' for p in os.listdir(path): if os.path.exists( os.path.join(path, p, 'platforminterface/project.conf')): projectfile = os.path.join(path, p, 'platforminterface/project.conf') project_content = os.path.join(path, p) if not projectfile: msg = "Load Project Fail: 找不到 project.conf:{} ".format(projectfile) log.error(msg) return ('fail', msg) log.info("读取 Project file: {}".format(projectfile)) with open(projectfile, 'r') as f: for l in f: if l.startswith('#'): continue if len(l.strip()) == 0: continue splits = l.strip().split('|') if len(splits) != 4: log.error("错误的 project.conf 行 " + l) return ('fail', "错误的 project.conf 行 " + l) (projectname, owner, users, cron) = splits project_path = os.path.join(app.config['AUTO_HOME'], 'workspace', owner, projectname) if os.path.exists(project_path): msg = '目标目录存在:{}'.format(project_path) log.error(msg) return ('fail', msg) log.info("复制文件从 {} 到 {} ".format(project_content, project_path)) try: shutil.copytree(project_content, project_path) except Exception as e: return ('fail', "{}".format(e)) return ('success', project_path) except Exception as e: log.error("从zip文件导入发生异常:{}".format(e)) return ("fail", "Exception occured .")
remote = git.Repo(dir).remote() try: remote.push("origin") except Exception as e: log.error("Push dir {} failed:{}".format(dir, e)) log.info("{}".format(e)) return False, "{}".format(e) return True, "success" if __name__ == '__main__': url1 = "https://github.com/mawentao119/robotframework-metrics.git" url = "https://*****:*****@[email protected]/mawentao119/robotframework-metrics.git" path = "temp1234" remove_dir(path) if os.path.exists(path) else None os.mkdir(path) remote_clone(url1, path) open("temp1234/robotframework-metrics/123.txt", 'w').close() commit(path + '/' + "robotframework-metrics") print(is_gitdir("temp1234")) remove_dir(path) #from utils.dbclass import TestDB #myDB = TestDB('/Users/tester/PycharmProjects/uniRobotDev/.beats')