예제 #1
0
def reload_form(request):
    """
    Reload the form string from latest version saved
    :param request:
    :return:
    """
    try:
        form_data_id = request.session['curateFormData']
        form_data = FormData.objects().get(pk=form_data_id)
        xml_data = form_data.xml_data

        template_id = request.session['currentTemplateID']
        template_object = Template.objects.get(pk=template_id)
        xsd_doc_data = template_object.content

        # the form has been saved already
        if xml_data is not None and xml_data != '':
            request.session['curate_edit'] = True
            root_element_id = generate_form(request, xsd_doc_data, xml_data, config=load_config())
        # the form has never been saved
        else:
            root_element_id = generate_form(request, xsd_doc_data, config=load_config())

        root_element = SchemaElement.objects.get(pk=root_element_id)
        renderer = ListRenderer(root_element, request)
        html_form = renderer.render()
        request.session['form_id'] = str(root_element_id)
        return HttpResponse(json.dumps({'xsdForm': html_form}), content_type='application/javascript')
    except Exception, e:
        return HttpResponse({}, status=400)
예제 #2
0
def reload_form(request):
    """
    Reload the form string from latest version saved
    :param request:
    :return:
    """
    try:
        form_data_id = request.session['curateFormData']
        form_data = FormData.objects().get(pk=form_data_id)
        xml_data = form_data.xml_data

        template_id = request.session['currentTemplateID']
        template_object = Template.objects.get(pk=template_id)
        xsd_doc_data = template_object.content

        # the form has been saved already
        if xml_data is not None and xml_data != '':
            request.session['curate_edit'] = True
            root_element_id = generate_form(request, xsd_doc_data, xml_data, config=load_config())
        # the form has never been saved
        else:
            root_element_id = generate_form(request, xsd_doc_data, config=load_config())

        root_element = SchemaElement.objects.get(pk=root_element_id)
        renderer = ListRenderer(root_element, request)
        html_form = renderer.render()
        request.session['form_id'] = str(root_element_id)
        return HttpResponse(json.dumps({'xsdForm': html_form}), content_type='application/javascript')
    except Exception, e:
        return HttpResponse({}, status=400)
예제 #3
0
파일: views.py 프로젝트: RayPlante/RDA
def curate_edit_form(request):
    try:
        if request.method == 'GET':
            if 'id' in request.GET:
                form_data_id = request.GET['id']
                try:
                    form_data = FormData.objects.get(pk=ObjectId(form_data_id))
                except:
                    raise MDCSError(
                        "The form you are looking for doesn't exist.")
                request.session['curate_edit'] = True
                # parameters that will be used during curation
                request.session['curateFormData'] = str(form_data.id)
                request.session['currentTemplateID'] = form_data.template
                templateObject = Template.objects.get(pk=form_data.template)
                xmlDocData = templateObject.content
                XMLtree = etree.parse(BytesIO(xmlDocData.encode('utf-8')))
                request.session['xmlDocTree'] = etree.tostring(XMLtree)

                if form_data.schema_element_root is not None:
                    delete_branch_from_db(form_data.schema_element_root.pk)
                    form_data.schema_element_root = None

                if form_data.template is not None:
                    template_object = Template.objects.get(
                        pk=form_data.template)
                    xsd_doc_data = template_object.content
                else:
                    raise MDCSError("No schema attached to this file")

                if form_data.xml_data is not None:
                    xml_doc_data = form_data.xml_data
                else:
                    xml_doc_data = None

                root_element_id = generate_form(request,
                                                xsd_doc_data,
                                                xml_doc_data,
                                                config=load_config())
                root_element = SchemaElement.objects.get(pk=root_element_id)

                form_data.update(set__schema_element_root=root_element)
                form_data.reload()

                request.session['form_id'] = str(
                    form_data.schema_element_root.id)

                context = RequestContext(request, {})
                template = loader.get_template('curate/curate_enter_data.html')

                return HttpResponse(template.render(context))
            else:
                raise MDCSError("The form ID is missing.")
    except MDCSError, e:
        template = loader.get_template('curate/errors.html')
        context = RequestContext(request, {
            'errors': e.message,
        })
        return HttpResponse(template.render(context))
예제 #4
0
def generate_xsd_form(request):
    """ Renders HTMl form for display.

    Parameters:
        request:

    Returns:
        str: HTML form
    """
    try:
        if 'form_id' in request.session:
            root_element_id = request.session['form_id']
            form_data = None
            request.session['curate_edit'] = False
        else:  # If this is a new form, generate it and store the root ID
            # get the xsd tree when going back and forth with review step
            if 'xmlDocTree' in request.session:
                xsd_doc_data = request.session['xmlDocTree']
            else:
                template_id = request.session['currentTemplateID']
                template_object = Template.objects.get(pk=template_id)
                xsd_doc_data = template_object.content

            # get form data from the database (empty one or existing one)
            form_data_id = request.session['curateFormData']
            form_data = FormData.objects.get(pk=ObjectId(form_data_id))

            if form_data.xml_data is not None:
                xml_doc_data = form_data.xml_data
            else:
                xml_doc_data = None

            root_element_id = generate_form(request, xsd_doc_data, xml_doc_data, config=load_config())
            request.session['form_id'] = str(root_element_id)

        root_element = SchemaElement.objects.get(pk=root_element_id)

        if form_data is not None:
            if form_data.schema_element_root is not None:
                delete_branch_from_db(form_data.schema_element_root.pk)

            form_data.update(set__schema_element_root=root_element)
            form_data.reload()

        renderer = ListRenderer(root_element, request)
        html_form = renderer.render()
    except Exception as e:
        renderer = DefaultRenderer(SchemaElement(), {})

        if e.message is not None:
            err_message = e.message
        else:
            err_message = "An unknown error raised " + e.__class__.__name__

        html_form = renderer._render_form_error(err_message)

    return HttpResponse(json.dumps({'xsdForm': html_form}), content_type='application/javascript')
예제 #5
0
def generate_xsd_form(request):
    """ Renders HTMl form for display.

    Parameters:
        request:

    Returns:
        str: HTML form
    """
    try:
        if 'form_id' in request.session:
            root_element_id = request.session['form_id']
            form_data = None
            request.session['curate_edit'] = False
        else:  # If this is a new form, generate it and store the root ID
            # get the xsd tree when going back and forth with review step
            if 'xmlDocTree' in request.session:
                xsd_doc_data = request.session['xmlDocTree']
            else:
                template_id = request.session['currentTemplateID']
                template_object = Template.objects.get(pk=template_id)
                xsd_doc_data = template_object.content

            # get form data from the database (empty one or existing one)
            form_data_id = request.session['curateFormData']
            form_data = FormData.objects.get(pk=ObjectId(form_data_id))

            if form_data.xml_data is not None:
                xml_doc_data = form_data.xml_data
            else:
                xml_doc_data = None

            root_element_id = generate_form(request, xsd_doc_data, xml_doc_data, config=load_config())
            request.session['form_id'] = str(root_element_id)

        root_element = SchemaElement.objects.get(pk=root_element_id)

        if form_data is not None:
            if form_data.schema_element_root is not None:
                delete_branch_from_db(form_data.schema_element_root.pk)

            form_data.update(set__schema_element_root=root_element)
            form_data.reload()

        renderer = ListRenderer(root_element, request)
        html_form = renderer.render()
    except Exception as e:
        renderer = DefaultRenderer(SchemaElement(), {})

        if e.message is not None:
            err_message = e.message
        else:
            err_message = "An unknown error raised " + e.__class__.__name__

        html_form = renderer._render_form_error(err_message)

    return HttpResponse(json.dumps({'xsdForm': html_form}), content_type='application/javascript')
예제 #6
0
def retrieve_rendered_form(request):
    """Retrieve a form

    :param request:
    :return:
    """
    root_pk = generate_form(request)
    root_element = SchemaElement.objects.get(pk=root_pk)

    renderer = ListRenderer(root_element)
    return renderer.render()
def retrieve_rendered_form(request):
    """Retrieve a form

    :param request:
    :return:
    """
    root_pk = generate_form(request)
    root_element = SchemaElement.objects.get(pk=root_pk)

    renderer = ListRenderer(root_element)
    return renderer.render()
예제 #8
0
    def test_list_renderer(self):
        main_directory = self.schema_data_handler.dirname
        main_dir_len = len(main_directory) + 1

        filepath_list = []

        for root, dirs, files in walk(main_directory):
            for filename in files:
                file_ext = splitext(filename)

                if file_ext[1] == '.xsd':
                    full_path = join(root, file_ext[0])
                    filepath_list.append(full_path[main_dir_len:])

        report_content = []
        error_count = 0

        for filepath in filepath_list:
            report_line = filepath

            try:
                xsd_data = self.schema_data_handler.get_xsd2(filepath)
                self.request.session['xmlDocTree'] = etree.tostring(xsd_data)

                root_pk = generate_form(self.request)
                root_element = SchemaElement.objects.get(pk=root_pk)

                renderer = ListRenderer(root_element)
                renderer.render()

                if len(renderer.warnings) != 0:
                    report_line += ',NOK,' + ','.join(renderer.warnings) + '\n'
                    error_count += 1
                else:  # No warnings yielded by the renderer
                    report_line += ',OK\n'
            except Exception as e:
                report_line += ',NOK,' + e.message + '\n'
                error_count += 1

            report_content.append(report_line)

        with open(join(SITE_ROOT, 'full_tests_report.csv'),
                  'w') as report_file:
            report_file.writelines(report_content)

        self.assertEqual(error_count, 0)
    def test_list_renderer(self):
        main_directory = self.schema_data_handler.dirname
        main_dir_len = len(main_directory) + 1

        filepath_list = []

        for root, dirs, files in walk(main_directory):
            for filename in files:
                file_ext = splitext(filename)

                if file_ext[1] == '.xsd':
                    full_path = join(root, file_ext[0])
                    filepath_list.append(full_path[main_dir_len:])

        report_content = []
        error_count = 0

        for filepath in filepath_list:
            report_line = filepath

            try:
                xsd_data = self.schema_data_handler.get_xsd2(filepath)
                self.request.session['xmlDocTree'] = etree.tostring(xsd_data)

                root_pk = generate_form(self.request)
                root_element = SchemaElement.objects.get(pk=root_pk)

                renderer = ListRenderer(root_element)
                renderer.render()

                if len(renderer.warnings) != 0:
                    report_line += ',NOK,' + ','.join(renderer.warnings) + '\n'
                    error_count += 1
                else:  # No warnings yielded by the renderer
                    report_line += ',OK\n'
            except Exception as e:
                report_line += ',NOK,' + e.message + '\n'
                error_count += 1

            report_content.append(report_line)

        with open(join(SITE_ROOT, 'full_tests_report.csv'), 'w') as report_file:
            report_file.writelines(report_content)

        self.assertEqual(error_count, 0)
예제 #10
0
    def test_schema_generation(self):
        main_directory = self.schema_data_handler.dirname
        main_dir_len = len(main_directory) + 1

        filepath_list = []

        for root, dirs, files in walk(main_directory):
            for filename in files:
                file_ext = splitext(filename)

                if file_ext[1] == '.xsd':
                    full_path = join(root, file_ext[0])
                    filepath_list.append(full_path[main_dir_len:])

        report_content = []
        errors_number = 0

        for filepath in filepath_list:
            report_line = filepath

            try:
                xsd_data = self.schema_data_handler.get_xsd(filepath)
                self.request.session['xmlDocTree'] = etree.tostring(xsd_data)

                root_pk = generate_form(self.request)

                if root_pk != -1:
                    report_line += ',OK\n'
                else:
                    errors_number += 1
                    report_line += ',NOK\n'
            except Exception as e:
                errors_number += 1
                report_line += ',EXC,' + e.message + '\n'

            report_content.append(report_line)

        with open(join(SITE_ROOT, 'full_tests_report.csv'),
                  'w') as report_file:
            report_file.writelines(report_content)

        if errors_number != 0:
            self.fail(str(errors_number) + " errors detected")
    def test_schema_generation(self):
        main_directory = self.schema_data_handler.dirname
        main_dir_len = len(main_directory) + 1

        filepath_list = []

        for root, dirs, files in walk(main_directory):
            for filename in files:
                file_ext = splitext(filename)

                if file_ext[1] == '.xsd':
                    full_path = join(root, file_ext[0])
                    filepath_list.append(full_path[main_dir_len:])

        report_content = []
        errors_number = 0

        for filepath in filepath_list:
            report_line = filepath

            try:
                xsd_data = self.schema_data_handler.get_xsd(filepath)
                self.request.session['xmlDocTree'] = etree.tostring(xsd_data)

                root_pk = generate_form(self.request)

                if root_pk != -1:
                    report_line += ',OK\n'
                else:
                    errors_number += 1
                    report_line += ',NOK\n'
            except Exception as e:
                errors_number += 1
                report_line += ',EXC,' + e.message + '\n'

            report_content.append(report_line)

        with open(join(SITE_ROOT, 'full_tests_report.csv'), 'w') as report_file:
            report_file.writelines(report_content)

        if errors_number != 0:
            self.fail(str(errors_number) + " errors detected")
예제 #12
0
def generate_xsd_form(request):
    """ Renders HTMl form for display.

    Parameters:
        request:

    Returns:
        str: HTML form
    """
    try:
        if 'form_id' in request.session:
            root_element_id = request.session['form_id']
            form_data = None
            request.session['curate_edit'] = False
        else:  # If this is a new form, generate it and store the root ID
            # get the xsd tree when going back and forth with review step
            if 'xmlDocTree' in request.session:
                xsd_doc_data = request.session['xmlDocTree']
            else:
                template_id = request.session['currentTemplateID']
                template_object = Template.objects.get(pk=template_id)
                xsd_doc_data = template_object.content

            # get form data from the database (empty one or existing one)
            form_data_id = request.session['curateFormData']
            form_data = FormData.objects.get(pk=ObjectId(form_data_id))

            if form_data.xml_data is not None:
                xml_doc_data = form_data.xml_data
            else:
                xml_doc_data = None

            root_element_id = generate_form(request,
                                            xsd_doc_data,
                                            xml_doc_data,
                                            config=load_config())
            request.session['form_id'] = str(root_element_id)

        root_element = SchemaElement.objects.get(pk=root_element_id)

        ##### xxxxxxxxxxxxxxx
        text2choice(root_element)

        if form_data is not None:
            if form_data.schema_element_root is not None:
                delete_branch_from_db(form_data.schema_element_root.pk)

            form_data.update(set__schema_element_root=root_element)
            form_data.reload()

        renderer = ListRenderer(root_element, request)
        html_form = renderer.render()
    except Exception as e:
        renderer = DefaultRenderer(SchemaElement(), {})

        if e.message is not None:
            err_message = e.message
        else:
            err_message = "An unknown error raised " + e.__class__.__name__

        html_form = renderer._render_form_error(err_message)

    #### add image upload button
    try:
        page = etree.fromstring(html_form)
        hrefs = page.xpath(u"//li")
        for href in hrefs:
            if href.text.strip() == "imageID":
                form = etree.SubElement(
                    href,
                    'form',
                    attrib={
                        'action':
                        '''javascript:var request = $.ajax({url: "/rest/blob?id=1243",
          method: "POST",
          data: new FormData(document.getElementById('blob321')),
        processData: false,
        contentType: false
        }).done(function(res){document.getElementById('%s').value=res.handle;}).fail(function(res){});'''
                        % (href.getchildren()[0].attrib['id']),
                        'method':
                        'post',
                        'id':
                        'blob321',
                        'enctype':
                        'multipart/form-data'
                    })

                attributes = href.getchildren()[0].attrib
                attributes['type'] = 'submit'
                attributes['value'] = 'upload'
                etree.SubElement(form,
                                 'input',
                                 attrib={
                                     'id': 'blob123',
                                     'type': 'file',
                                     'name': 'blob'
                                 })
                form.append(href.getchildren()[0])

        html_form = etree.tostring(page)
    except Exception as e:
        pass

    return HttpResponse(json.dumps({'xsdForm': html_form}),
                        content_type='application/javascript')