Beispiel #1
0
def do_create(request, recv_data):
    # validation checks
    for attr in recv_data["attrs"]:
        # formalize recv_data format
        if "ref_ids" not in attr:
            attr["ref_ids"] = []

        if int(attr["type"]) & AttrTypeValue["object"] and not attr["ref_ids"]:
            return HttpResponse("Need to specify enabled referral ids",
                                status=400)

        if any([
                not Entity.objects.filter(id=x).exists()
                for x in attr["ref_ids"]
        ]):
            return HttpResponse("Specified referral is invalid", status=400)

    # duplication checks
    counter = collections.Counter([
        attr["name"] for attr in recv_data["attrs"]
        if "deleted" not in attr or not attr["deleted"]
    ])
    if len([v for v, count in counter.items() if count > 1]):
        return HttpResponse("Duplicated attribute names are not allowed",
                            status=400)

    if custom_view.is_custom("create_entity"):
        resp = custom_view.call_custom("create_entity", None,
                                       recv_data["name"], recv_data["attrs"])
        if resp:
            return resp

    # create EntityAttr objects
    entity = Entity(
        name=recv_data["name"],
        note=recv_data["note"],
        created_user=request.user,
        status=Entity.STATUS_CREATING,
    )

    # set status parameters
    if recv_data["is_toplevel"]:
        entity.status = Entity.STATUS_TOP_LEVEL

    entity.save()

    # Create a new job to edit entity and run it
    job = Job.new_create_entity(request.user, entity, params=recv_data)
    job.run()

    return JsonResponse({
        "entity_id": entity.id,
        "entity_name": entity.name,
        "msg": 'Success to create Entity "%s"' % entity.name,
    })
Beispiel #2
0
def do_create(request, recv_data):
    # validation checks
    for attr in recv_data['attrs']:
        # formalize recv_data format
        if 'ref_ids' not in attr:
            attr['ref_ids'] = []

        if int(attr['type']) & AttrTypeValue['object'] and not attr['ref_ids']:
            return HttpResponse('Need to specify enabled referral ids',
                                status=400)

        if any([
                not Entity.objects.filter(id=x).exists()
                for x in attr['ref_ids']
        ]):
            return HttpResponse('Specified referral is invalid', status=400)

    # get user object that current access
    user = User.objects.get(id=request.user.id)

    if custom_view.is_custom('create_entity'):
        resp = custom_view.call_custom('create_entity', None,
                                       recv_data['name'], recv_data['attrs'])
        if resp:
            return resp

    # create EntityAttr objects
    entity = Entity(name=recv_data['name'],
                    note=recv_data['note'],
                    created_user=user,
                    status=Entity.STATUS_CREATING)

    # set status parameters
    if recv_data['is_toplevel']:
        entity.status = Entity.STATUS_TOP_LEVEL

    entity.save()

    # Create a new job to edit entity and run it
    job = Job.new_create_entity(user, entity, params=recv_data)
    job.run()

    return JsonResponse({
        'entity_id': entity.id,
        'entity_name': entity.name,
        'msg': 'Success to create Entity "%s"' % entity.name,
    })