Example #1
0
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 .")
Example #2
0
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)
Example #3
0
    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
Example #4
0
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!")
Example #5
0
    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
Example #6
0
    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
Example #7
0
    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
Example #8
0
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)
Example #9
0
    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
Example #10
0
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)
Example #11
0
    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
Example #12
0
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 .")
Example #13
0
    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')