Esempio n. 1
0
def validate_and_add_new_handler_object(data, rowData, request, errors,
                                        row_counter, is_validate_only=False,
                                        is_sort_relationships=False,
                                        cache={}, obj=None):
    """
    Validate an object and then add it to the database.

    :param data: The data for the object.
    :type data: dict
    :param rowData: Data from the row if using mass object upload.
    :type rowData: dict
    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :param errors: List of existing errors to append to.
    :type errors: list
    :param row_counter: Which row we are working on (for error tracking).
    :type row_counter: int
    :param is_validate_only: Only validate.
    :type is_validate_only: bool
    :param cache: Cached data, typically for performance enhancements
                  during bulk operations.
    :type cache: dict
    :returns: tuple of (<result>, <errors>, <retVal>)
    """

    result = False
    retVal = {}

    bound_form = parse_row_to_bound_object_form(request, rowData, cache)

    if bound_form.is_valid():
        (result,
         retVal) = add_new_handler_object(data, rowData, request, obj=obj,
                                          is_validate_only=is_validate_only,
                                          is_sort_relationships=is_sort_relationships)
        if not result and 'message' in retVal:
            errors.append("%s #%s - %s" % (form_consts.Common.OBJECTS_DATA,
                                           str(row_counter),
                                           retVal['message']))
    else:
        formdict = cache.get("object_formdict")

        if formdict == None:
            object_form = AddObjectForm(request.user)
            formdict = form_to_dict(object_form)
            cache['object_formdict'] = formdict

        for name, errorMessages in bound_form.errors.items():
            entry = get_field_from_label(name, formdict)
            if entry == None:
                continue
            for message in errorMessages:
                errors.append("%s #%s - %s - %s" % (form_consts.Common.OBJECTS_DATA,
                                                    str(row_counter),
                                                    name,
                                                    message))
        result = False

    return result, errors, retVal
Esempio n. 2
0
def validate_and_add_new_handler_object(data, rowData, request, errors,
                                        row_counter, is_validate_only=False,
                                        is_sort_relationships=False,
                                        cache={}, obj=None):
    """
    Validate an object and then add it to the database.

    :param data: The data for the object.
    :type data: dict
    :param rowData: Data from the row if using mass object upload.
    :type rowData: dict
    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :param errors: List of existing errors to append to.
    :type errors: list
    :param row_counter: Which row we are working on (for error tracking).
    :type row_counter: int
    :param is_validate_only: Only validate.
    :type is_validate_only: bool
    :param cache: Cached data, typically for performance enhancements
                  during bulk operations.
    :type cache: dict
    :returns: tuple of (<result>, <errors>, <retVal>)
    """

    result = False
    retVal = {}

    bound_form = parse_row_to_bound_object_form(request, rowData, cache)

    if bound_form.is_valid():
        (result,
         retVal) = add_new_handler_object(data, rowData, request, obj=obj,
                                          is_validate_only=is_validate_only,
                                          is_sort_relationships=is_sort_relationships)
        if not result and 'message' in retVal:
            errors.append("%s #%s - %s" % (form_consts.Common.OBJECTS_DATA,
                                           str(row_counter),
                                           retVal['message']))
    else:
        formdict = cache.get("object_formdict")

        if formdict == None:
            object_form = AddObjectForm(request.user)
            formdict = form_to_dict(object_form)
            cache['object_formdict'] = formdict

        for name, errorMessages in bound_form.errors.items():
            entry = get_field_from_label(name, formdict)
            if entry == None:
                continue
            for message in errorMessages:
                errors.append("%s #%s - %s - %s" % (form_consts.Common.OBJECTS_DATA,
                                                    str(row_counter),
                                                    name,
                                                    message))
        result = False

    return result, errors, retVal
Esempio n. 3
0
def bulk_add_object_inline(request):
    """
    Bulk add objects inline.

    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :returns: :class:`django.http.HttpResponse`
    """

    formdict = form_to_dict(AddObjectForm(request.user))

    if request.method == "POST" and request.is_ajax():
        user = request.user
        acl = get_acl_object(request.POST['otype'])

        if user.has_access_to(acl.OBJECTS_ADD):
            response = parse_bulk_upload(
                request,
                parse_row_to_bound_object_form,
                add_new_handler_object_via_bulk,
                formdict)

            secondary_data_array = response.get('secondary')
            if secondary_data_array:
                latest_secondary_data = secondary_data_array[-1]
                class_type = class_from_id(
                    latest_secondary_data['type'],
                    latest_secondary_data['id'])

                subscription = {'type': latest_secondary_data['type'],
                                'id': latest_secondary_data['id'],
                                'value': latest_secondary_data['id']}

                object_listing_html = render_to_string('objects_listing_widget.html',
                                                       {'objects': class_type.sort_objects(),
                                                        'subscription': subscription},
                                                       RequestContext(request))

                response['html'] = object_listing_html

                is_relationship_made = False
                for secondary_data in secondary_data_array:
                    if secondary_data.get('relationships'):
                        is_relationship_made = True
                        break

                if is_relationship_made == True:
                    rel_html = render_to_string('relationships_listing_widget.html',
                                                {'relationship': subscription,
                                                 'relationships': class_type.sort_relationships(request.user, meta=True)},
                                                RequestContext(request))

                    response['rel_msg'] = rel_html
                    response['rel_made'] = True

        return HttpResponse(json.dumps(response,
                            default=json_handler),
                            content_type="application/json")
    else:
        is_prevent_initial_table = request.GET.get('isPreventInitialTable', False)
        is_use_item_source = request.GET.get('useItemSource', False)

        if is_use_item_source == True or is_use_item_source == "true":
            otype = request.GET.get('otype')
            oid = request.GET.get('oid')

            # Get the item with the type and ID from the database
            obj = class_from_id(otype, oid)

            if obj:
                source_field_name = get_source_field_for_class(otype)
                if source_field_name:

                    # If the item has a source, then use the source value
                    # to set as the default source
                    if hasattr(obj, "source"):
                        source_field = get_field_from_label("source", formdict)
                        earliest_source = None
                        earliest_date = None

                        # Get the earliest source, compared by date
                        for source in obj.source:
                            for source_instance in source.instances:
                                if earliest_source == None or source_instance.date < earliest_date:
                                    earliest_date = source_instance.date
                                    earliest_source = source

                        if earliest_source:
                            source_field['initial'] = earliest_source.name

        return render_to_response('bulk_add_object_inline.html',
                                  {'formdict': formdict,
                                   'title': "Bulk Add Objects",
                                   'is_prevent_initial_table': is_prevent_initial_table,
                                   'table_name': 'object_inline'},
                                  RequestContext(request))
Esempio n. 4
0
File: views.py Progetto: vsbca/crits
def bulk_add_object_inline(request):
    """
    Bulk add objects inline.

    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :returns: :class:`django.http.HttpResponse`
    """

    formdict = form_to_dict(AddObjectForm(request.user))

    if request.method == "POST" and request.is_ajax():
        user = request.user
        acl = get_acl_object(request.POST['otype'])

        if user.has_access_to(acl.OBJECTS_ADD):
            response = parse_bulk_upload(request,
                                         parse_row_to_bound_object_form,
                                         add_new_handler_object_via_bulk,
                                         formdict)

            secondary_data_array = response.get('secondary')
            if secondary_data_array:
                latest_secondary_data = secondary_data_array[-1]
                class_type = class_from_id(latest_secondary_data['type'],
                                           latest_secondary_data['id'])

                subscription = {
                    'type': latest_secondary_data['type'],
                    'id': latest_secondary_data['id'],
                    'value': latest_secondary_data['id']
                }

                object_listing_html = render_to_string(
                    'objects_listing_widget.html', {
                        'objects': class_type.sort_objects(),
                        'subscription': subscription
                    }, RequestContext(request))

                response['html'] = object_listing_html

                is_relationship_made = False
                for secondary_data in secondary_data_array:
                    if secondary_data.get('relationships'):
                        is_relationship_made = True
                        break

                if is_relationship_made == True:
                    rel_html = render_to_string(
                        'relationships_listing_widget.html', {
                            'relationship':
                            subscription,
                            'relationships':
                            class_type.sort_relationships(request.user,
                                                          meta=True)
                        }, RequestContext(request))

                    response['rel_msg'] = rel_html
                    response['rel_made'] = True

        return HttpResponse(json.dumps(response, default=json_handler),
                            content_type="application/json")
    else:
        is_prevent_initial_table = request.GET.get('isPreventInitialTable',
                                                   False)
        is_use_item_source = request.GET.get('useItemSource', False)

        if is_use_item_source == True or is_use_item_source == "true":
            otype = request.GET.get('otype')
            oid = request.GET.get('oid')

            # Get the item with the type and ID from the database
            obj = class_from_id(otype, oid)

            if obj:
                source_field_name = get_source_field_for_class(otype)
                if source_field_name:

                    # If the item has a source, then use the source value
                    # to set as the default source
                    if hasattr(obj, "source"):
                        source_field = get_field_from_label("source", formdict)
                        earliest_source = None
                        earliest_date = None

                        # Get the earliest source, compared by date
                        for source in obj.source:
                            for source_instance in source.instances:
                                if earliest_source == None or source_instance.date < earliest_date:
                                    earliest_date = source_instance.date
                                    earliest_source = source

                        if earliest_source:
                            source_field['initial'] = earliest_source.name

        return render_to_response(
            'bulk_add_object_inline.html', {
                'formdict': formdict,
                'title': "Bulk Add Objects",
                'is_prevent_initial_table': is_prevent_initial_table,
                'table_name': 'object_inline'
            }, RequestContext(request))
Esempio n. 5
0
def bulk_add_object_inline(request):
    """
    Bulk add objects inline.

    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :returns: :class:`django.http.HttpResponse`
    """
    all_obj_type_choices = [
        (c[0], c[0], {"datatype": c[1].keys()[0], "datatype_value": c[1].values()[0]})
        for c in get_object_types(False, query={"datatype.file": {"$exists": 0}})
    ]

    formdict = form_to_dict(AddObjectForm(request.user, all_obj_type_choices))

    if request.method == "POST" and request.is_ajax():
        response = parse_bulk_upload(request, parse_row_to_bound_object_form, add_new_handler_object_via_bulk, formdict)

        secondary_data_array = response.get("secondary")
        if secondary_data_array:
            latest_secondary_data = secondary_data_array[-1]
            class_type = class_from_id(latest_secondary_data["type"], latest_secondary_data["id"])

            subscription = {
                "type": latest_secondary_data["type"],
                "id": latest_secondary_data["id"],
                "value": latest_secondary_data["id"],
            }

            object_listing_html = render_to_string(
                "objects_listing_widget.html",
                {"objects": class_type.sort_objects(), "subscription": subscription},
                RequestContext(request),
            )

            response["html"] = object_listing_html

            is_relationship_made = False
            for secondary_data in secondary_data_array:
                if secondary_data.get("relationships"):
                    is_relationship_made = True
                    break

            if is_relationship_made == True:
                rel_html = render_to_string(
                    "relationships_listing_widget.html",
                    {
                        "relationship": subscription,
                        "relationships": class_type.sort_relationships(request.user, meta=True),
                    },
                    RequestContext(request),
                )

                response["rel_msg"] = rel_html
                response["rel_made"] = True

        return HttpResponse(json.dumps(response, default=json_handler), mimetype="application/json")
    else:
        is_prevent_initial_table = request.GET.get("isPreventInitialTable", False)
        is_use_item_source = request.GET.get("useItemSource", False)

        if is_use_item_source == True or is_use_item_source == "true":
            otype = request.GET.get("otype")
            oid = request.GET.get("oid")

            # Get the item with the type and ID from the database
            obj = class_from_id(otype, oid)

            if obj:
                source_field_name = get_source_field_for_class(otype)
                if source_field_name:

                    # If the item has a source, then use the source value
                    # to set as the default source
                    if hasattr(obj, "source"):
                        source_field = get_field_from_label("source", formdict)
                        earliest_source = None
                        earliest_date = None

                        # Get the earliest source, compared by date
                        for source in obj.source:
                            for source_instance in source.instances:
                                if earliest_source == None or source_instance.date < earliest_date:
                                    earliest_date = source_instance.date
                                    earliest_source = source

                        if earliest_source:
                            source_field["initial"] = earliest_source.name

        return render_to_response(
            "bulk_add_object_inline.html",
            {
                "formdict": formdict,
                "title": "Bulk Add Objects",
                "is_prevent_initial_table": is_prevent_initial_table,
                "table_name": "object_inline",
            },
            RequestContext(request),
        )