예제 #1
0
파일: api.py 프로젝트: zyh1234/bk-sops
def import_templates(request, biz_cc_id):
    f = request.FILES.get('data_file', None)
    form_data = TemplateImportForm(request.POST)
    if not form_data.is_valid():
        return JsonResponse({'result': False, 'message': form_data.errors})
    override = form_data.clean()['override']

    r = read_template_data_file(f)
    if not r['result']:
        return JsonResponse(r)

    templates_data = r['data']['template_data']

    try:
        result = TaskTemplate.objects.import_templates(templates_data,
                                                       override, biz_cc_id)
    except Exception as e:
        logger.error(traceback.format_exc(e))
        return JsonResponse({
            'result':
            False,
            'message':
            'invalid flow data or error occur, please contact administrator'
        })

    return JsonResponse(result)
예제 #2
0
def import_common_template(request):
    if not check_white_apps(request):
        return JsonResponse({
            'result':
            False,
            'message':
            'you have no permission to call this api.'
        })

    f = request.FILES.get('data_file', None)
    r = read_template_data_file(f)
    if not r['result']:
        return JsonResponse(r)

    override = BooleanField().to_python(request.POST.get('override', False))

    try:
        import_result = CommonTemplate.objects.import_templates(
            r['data']['template_data'], override)
    except Exception as e:
        logger.exception(e)
        return JsonResponse({
            'result':
            False,
            'message':
            'invalid flow data or error occur, please contact administrator'
        })

    return JsonResponse(import_result)
예제 #3
0
파일: api.py 프로젝트: manlucas/atom
def check_before_import(request):
    f = request.FILES.get('data_file', None)
    r = read_template_data_file(f)
    if not r['result']:
        return JsonResponse(r)

    check_info = CommonTemplate.objects.import_operation_check(
        r['data']['template_data'])

    perms_tuples = [(common_template_resource,
                     [common_template_resource.actions.create.id], None)]
    if check_info['override_template']:
        templates_id = [
            template_info['id']
            for template_info in check_info['override_template']
        ]
        templates = CommonTemplate.objects.filter(id__in=templates_id,
                                                  is_deleted=False)
        for template in templates:
            perms_tuples.append(
                (common_template_resource,
                 [common_template_resource.actions.edit.id], template))
    permissions = verify_or_return_insufficient_perms(
        principal_type='user',
        principal_id=request.user.username,
        perms_tuples=perms_tuples)

    return JsonResponse({
        'result': True,
        'data': check_info,
        'permission': permissions
    })
예제 #4
0
def import_templates(request, project_id):
    f = request.FILES.get('data_file', None)
    form_data = TemplateImportForm(request.POST)
    if not form_data.is_valid():
        return JsonResponse({'result': False, 'message': form_data.errors})
    override = form_data.clean()['override']

    r = read_template_data_file(f)
    if not r['result']:
        return JsonResponse(r)

    templates_data = r['data']['template_data']

    # check again and authenticate
    check_info = TaskTemplate.objects.import_operation_check(
        templates_data, project_id)
    perms_tuples = []
    if override:
        if check_info['new_template']:
            project = Project.objects.get(id=project_id)
            perms_tuples.append(
                (project_resource,
                 [project_resource.actions.create_template.id], project))

        if check_info['override_template']:
            templates_id = [
                template_info['id']
                for template_info in check_info['override_template']
            ]
            templates = TaskTemplate.objects.filter(id__in=templates_id,
                                                    project_id=project_id,
                                                    is_deleted=False)
            for template in templates:
                perms_tuples.append(
                    (task_template_resource,
                     [task_template_resource.actions.edit.id], template))
    else:
        project = Project.objects.get(id=project_id)
        perms_tuples.append(
            (project_resource, [project_resource.actions.create_template.id],
             project))

    batch_verify_or_raise_auth_failed(principal_type='user',
                                      principal_id=request.user.username,
                                      perms_tuples=perms_tuples)

    try:
        result = TaskTemplate.objects.import_templates(templates_data,
                                                       override, project_id)
    except Exception as e:
        logger.error(traceback.format_exc(e))
        return JsonResponse({
            'result':
            False,
            'message':
            'invalid flow data or error occur, please contact administrator'
        })

    return JsonResponse(result)
예제 #5
0
파일: api.py 프로젝트: zyh1234/bk-sops
def check_before_import(request, biz_cc_id):
    f = request.FILES.get('data_file', None)
    r = read_template_data_file(f)
    if not r['result']:
        return JsonResponse(r)

    check_info = TaskTemplate.objects.import_operation_check(
        r['data']['template_data'], biz_cc_id)
    return JsonResponse({'result': True, 'data': check_info})
예제 #6
0
파일: api.py 프로젝트: zyh1234/bk-sops
def import_preset_template_and_replace_job_id(request, biz_cc_id):
    f = request.FILES.get('data_file', None)
    r = read_template_data_file(f)
    if not r['result']:
        return JsonResponse(r)

    job_id_map_json = request.POST.get('job_id_map', None)

    if job_id_map_json is None:
        return JsonResponse({
            'result': False,
            'message': 'job_id_map can not be None'
        })

    # replace str to int
    try:
        job_id_map = json.loads(job_id_map_json)
    except Exception:
        return JsonResponse({
            'result': False,
            'message': 'job_id_map is not a valid json string'
        })

    job_id_map = job_id_map_convert(job_id_map)

    # replace job id
    templates_data = r['data']['template_data']

    # for each template
    replace_job_relate_id_in_templates_data(job_id_map, templates_data)

    try:
        result = TaskTemplate.objects.import_templates(templates_data, False,
                                                       biz_cc_id)
    except Exception as e:
        logger.error(traceback.format_exc(e))
        return JsonResponse({
            'result':
            False,
            'message':
            'invalid flow data or error occur, please contact administrator'
        })

    return JsonResponse(result)