Пример #1
0
def bulk_add_email_addresses(request):
    """
    Bulk add Email Addresses via a bulk upload form.
    Args:
        request: The Django context which contains information about the
            session and key/value pairs for the bulk add Email Addresses request
    Returns:
        If the request is not a POST and not a Ajax call then:
            Returns a rendered HTML form for a bulk add of IPs
        If the request is a POST and a Ajax call then:
            Returns a response that contains information about the
            status of the bulk uploaded Email Addresses. This may include information
            such as Email Address that failed or successfully added. This may
            also contain helpful status messages about each operation.
    """

    formdict = form_to_dict(EmailAddressForm(request.user, None))

    if request.method == "POST" and request.is_ajax():
        response = process_bulk_add_email_addresses(request, formdict)

        return HttpResponse(json.dumps(response,
                            default=json_handler),
                            content_type="application/json")
    else:
        return render_to_response('bulk_add_default.html', {'formdict': formdict,
                                                            'title': "Bulk Add Email Addressess",
                                                            'table_name': 'email_address',
                                                            'local_validate_columns': [form_consts.EmailAddress.EMAIL_ADDRESS],
                                                            'is_bulk_add_objects': True}, RequestContext(request))
Пример #2
0
def bulk_add_object(request):
    """
    Bulk add objects.

    :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():
        response = parse_bulk_upload(
            request,
            parse_row_to_bound_object_form,
            add_new_handler_object_via_bulk,
            formdict)

        return HttpResponse(json.dumps(response,
                            default=json_handler),
                            content_type="application/json")
    else:
        return render_to_response('bulk_add_default.html',
                                  {'formdict': formdict,
                                  'title': "Bulk Add Objects",
                                  'table_name': 'object'},
                                  RequestContext(request))
Пример #3
0
def bulk_add_usernames(request):
    """
    Bulk add UserNames via a bulk upload form.
    Args:
        request: The Django context which contains information about the
            session and key/value pairs for the bulk add UserName request
    Returns:
        If the request is not a POST and not a Ajax call then:
            Returns a rendered HTML form for a bulk add of IPs
        If the request is a POST and a Ajax call then:
            Returns a response that contains information about the
            status of the bulk uploaded UserName. This may include information
            such as UserName that failed or successfully added. This may
            also contain helpful status messages about each operation.
    """

    formdict = form_to_dict(UserNameForm(request.user, None))

    if request.method == "POST" and request.is_ajax():
        response = process_bulk_add_usernames(request, formdict)

        return HttpResponse(json.dumps(response, default=json_handler), content_type="application/json")
    else:
        return render_to_response(
            "bulk_add_default.html",
            {
                "formdict": formdict,
                "title": "Bulk Add UserNames",
                "table_name": "username",
                "local_validate_columns": [form_consts.UserName.USERNAME],
                "is_bulk_add_objects": True,
            },
            RequestContext(request),
        )
Пример #4
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
Пример #5
0
def bulk_add_object(request):
    """
    Bulk add objects.

    :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():
        response = parse_bulk_upload(request, parse_row_to_bound_object_form,
                                     add_new_handler_object_via_bulk, formdict)

        return HttpResponse(json.dumps(response, default=json_handler),
                            content_type="application/json")
    else:
        return render_to_response(
            'bulk_add_default.html', {
                'formdict': formdict,
                'title': "Bulk Add Objects",
                'table_name': 'object'
            }, RequestContext(request))
Пример #6
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
Пример #7
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():
        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))
Пример #8
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():
        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))