コード例 #1
0
    def _get_module(self, request):
        # look for existing values
        try:
            # keyrefId = request.GET['keyref'] if 'keyref' in request.GET else None
            module_id = request.GET['module_id']
            module = SchemaElement.objects().get(pk=module_id)
            keyrefId = module.options['params']['keyref']
            # register the module id in the structure
            if str(module_id) not in request.session['keyrefs'][keyrefId]['module_ids']:
                request.session['keyrefs'][keyrefId]['module_ids'].append(str(module_id))

            # get the list of values for this key
            keyId = request.session['keyrefs'][keyrefId]['refer']
            values = []
            modules_ids = request.session['keys'][keyId]['module_ids']
            for key_module_id in modules_ids:
                key_module = SchemaElement.objects().get(pk=key_module_id)
                if key_module.options['data'] is not None:
                    values.append(key_module.options['data'])

            # add empty value
            self.options.update({'': ''})
            for value in values:
                self.options.update({str(value): str(value)})

            self.selected = ''
            if 'data' in request.GET:
                self.selected = request.GET['data']
            elif 'data' in module.options and module.options['data'] is not None:
                self.selected = str(module.options['data'])
        except Exception:
            self.options = {}
        return OptionsModule.get_module(self, request)
コード例 #2
0
    def test_xsd_data_is_schema_element(self):
        xsd_data = SchemaElement()
        xsd_data.tag = "test"

        renderer = AbstractListRenderer(xsd_data)

        self.assertEqual(xsd_data, renderer.data)
コード例 #3
0
ファイル: test_init.py プロジェクト: Huchikoma/internship_MMQ
    def test_xsd_data_is_schema_element(self):
        xsd_data = SchemaElement()
        xsd_data.tag = "test"

        renderer = AbstractListRenderer(xsd_data)

        self.assertEqual(xsd_data, renderer.data)
コード例 #4
0
    def _get_module(self, request):

        # get the name of the key
        # keyId = request.GET['key']
        module_id = request.GET['module_id']
        module = SchemaElement.objects().get(pk=module_id)
        keyId = module.options['params']['key']

        # register the module id in the structure
        if str(module_id) not in request.session['keys'][keyId]['module_ids']:
            request.session['keys'][keyId]['module_ids'].append(str(module_id))

        # get the list of values for this key
        values = []
        modules_ids = request.session['keys'][keyId]['module_ids']
        for key_module_id in modules_ids:
            key_module = SchemaElement.objects().get(pk=key_module_id)
            if key_module.options['data'] is not None:
                values.append(key_module.options['data'])

        # if data are present
        if 'data' in request.GET:
            # set the key coming from data
            key = request.GET['data']
        else:
            # generate a unique key
            key = self.generateKey(values)
        # set the value of the module with the key
        self.default_value = key

        return SyncInputModule.get_module(self, request)
コード例 #5
0
    def test_template_list_not_set(self):
        xsd_data = SchemaElement()
        xsd_data.tag = "test"

        renderer = AbstractListRenderer(xsd_data)

        # Loose comparison is enough for this test
        self.assertEqual(len(renderer.templates), 7)
コード例 #6
0
ファイル: test_init.py プロジェクト: Huchikoma/internship_MMQ
    def test_template_list_not_set(self):
        xsd_data = SchemaElement()
        xsd_data.tag = "test"

        renderer = AbstractListRenderer(xsd_data)

        # Loose comparison is enough for this test
        self.assertEqual(len(renderer.templates), 7)
コード例 #7
0
def get_parent_element(element):
    """Get the parent element (tag is element not direct parent) of the current element.

    Parameters:
        element:
    """
    try:
        parent = SchemaElement.objects().get(children__contains=ObjectId(element.id))
        while parent.tag != 'element':
            parent = SchemaElement.objects().get(children__contains=ObjectId(parent.id))
        return parent
    except:
        return None
コード例 #8
0
def create_mock_db_input(value='', placeholder='', title=''):
    input_element = SchemaElement()
    input_element.tag = "input"

    input_element.value = value
    input_element.options = {
        'title': title,
        'placeholder': placeholder
    }

    input_element.pk = 'mock'

    return input_element
コード例 #9
0
    def test_template_list_not_dict(self):
        xsd_data = SchemaElement()
        xsd_data.tag = "test"

        template_list = None

        try:
            for template_list in self.type_generator.generate_types_excluding(['dict', 'none']):
                with self.assertRaises(Exception):
                    AbstractListRenderer(xsd_data, template_list)
        except AssertionError as error:
            template_list_type = str(type(template_list))
            error.message += ' (template_list type: ' + template_list_type + ')'
            raise AssertionError(error.message)
コード例 #10
0
    def test_template_list_not_dict(self):
        xsd_data = SchemaElement()
        xsd_data.tag = "test"

        template_list = None

        try:
            for template_list in self.type_generator.generate_types_excluding(['dict', 'none']):
                with self.assertRaises(Exception):
                    AbstractListRenderer(xsd_data, template_list)
        except AssertionError as error:
            template_list_type = str(type(template_list))
            error.message += ' (template_list type: ' + template_list_type + ')'
            raise AssertionError(error.message)
コード例 #11
0
def get_parent_element(element):
    """Get the parent element (tag is element not direct parent) of the current element.

    Parameters:
        element:
    """
    try:
        parent = SchemaElement.objects().get(
            children__contains=ObjectId(element.id))
        while parent.tag != 'element':
            parent = SchemaElement.objects().get(
                children__contains=ObjectId(parent.id))
        return parent
    except:
        return None
コード例 #12
0
    def render(self):
        """

        Parameters:
            partial:

        :return:
        """
        if self.data.tag == 'element':
            return self.render_element(self.data)
        elif self.data.tag == 'choice':
            content = self.render_choice(self.data)
            root = self.data.children[0]
            root_elem_id = root.value
            root_elem = SchemaElement.objects().get(pk=root_elem_id)
            root_name = root_elem.options['name']

            if 'xmlns' in root_elem.options and root_elem.options['xmlns'] is not None:
                xmlns = ' xmlns="{}"'.format(root_elem.options['xmlns'])
                content[0] += xmlns

            if content[0] == "":  # Multi-root with element (no need for an element wrapper)
                return content[1]
            else:  # Multi-root with complexType
                return self._render_xml(root_name, content[0], content[1])
        else:
            message = 'render: ' + self.data.tag + ' not handled'
            self.warnings.append(message)
            return ''
コード例 #13
0
    def render(self):
        """

        Parameters:
            partial:

        :return:
        """
        if self.data.tag == 'element':
            return self.render_element(self.data)
        elif self.data.tag == 'choice':
            content = self.render_choice(self.data)
            root = self.data.children[0]
            root_elem_id = root.value
            root_elem = SchemaElement.objects().get(pk=root_elem_id)
            root_name = root_elem.options['name']

            if 'xmlns' in root_elem.options and root_elem.options[
                    'xmlns'] is not None:
                xmlns = ' xmlns="{}"'.format(root_elem.options['xmlns'])
                content[0] += xmlns

            return self._render_xml(root_name, content[0], content[1])
        else:
            message = 'render: ' + self.data.tag + ' not handled'
            self.warnings.append(message)
            return ''
コード例 #14
0
ファイル: test_init.py プロジェクト: Huchikoma/internship_MMQ
    def test_template_list_is_incorrect_dict(self):
        xsd_data = SchemaElement()
        xsd_data.tag = "test"

        template = None

        try:
            for template in self.type_generator.generate_types_excluding([]):
                template_list = {"wrong": template}

                with self.assertRaises(Exception):
                    AbstractListRenderer(xsd_data, template_list)
        except AssertionError as error:
            template_type = str(type(template))
            error.message += ' (template type: ' + template_type + ')'
            raise AssertionError(error.message)
コード例 #15
0
    def test_template_list_is_correct_dict(self):
        xsd_data = SchemaElement()
        xsd_data.tag = "test"

        template_list = {
            "t1": Template('a'),
            "t2": Template('b'),
            "t3": Template('c')
        }

        base_renderer = AbstractListRenderer(xsd_data)
        base_renderer.templates.update(template_list)

        renderer = AbstractListRenderer(xsd_data, template_list)

        self.assertEqual(renderer.templates.keys(), base_renderer.templates.keys())
コード例 #16
0
    def _get(self, request):
        module_id = request.GET['module_id']
        url = request.GET[
            'url'] if 'url' in request.GET else SchemaElement.objects().get(
                pk=module_id).options['url']
        template_data = {
            'module_id': module_id,
            'module': '',
            'display': '',
            'result': '',
            'url': url
        }

        try:
            template_data['module'] = self._get_module(request)
            template_data['display'] = self._get_display(request)

            result = self._get_result(request)
            template_data['result'] = result

            module_element = SchemaElement.objects.get(
                pk=request.GET['module_id'])
            options = module_element.options

            options['data'] = result
            module_element.update(set__options=options)

            module_element.reload()
        except Exception, e:
            raise ModuleError(
                'Something went wrong during module initialization: ' +
                e.message)
コード例 #17
0
    def _get(self, request):
        module_id = request.GET['module_id']
        url = request.GET['url'] if 'url' in request.GET else SchemaElement.objects().get(pk=module_id).options['url']
        template_data = {
            'module_id': module_id,
            'module': '',
            'display': '',
            'result': '',
            'url': url
        }

        try:
            template_data['module'] = self._get_module(request)
            template_data['display'] = self._get_display(request)

            result = self._get_result(request)
            template_data['result'] = result

            module_element = SchemaElement.objects.get(pk=request.GET['module_id'])
            options = module_element.options

            options['data'] = result
            module_element.update(set__options=options)

            module_element.reload()
        except Exception, e:
            raise ModuleError('Something went wrong during module initialization: ' + e.message)
コード例 #18
0
    def test_template_list_is_correct_dict(self):
        xsd_data = SchemaElement()
        xsd_data.tag = "test"

        template_list = {
            "t1": Template('a'),
            "t2": Template('b'),
            "t3": Template('c')
        }

        base_renderer = AbstractListRenderer(xsd_data)
        base_renderer.templates.update(template_list)

        renderer = AbstractListRenderer(xsd_data, template_list)

        self.assertEqual(renderer.templates.keys(), base_renderer.templates.keys())
コード例 #19
0
def remove_element(request):
    element_id = request.POST['id']
    # sub_element = SchemaElement.objects.get(pk=element_id)
    element_list = SchemaElement.objects(children=element_id)

    if len(element_list) == 0:
        raise ValueError("No SchemaElement found")
    elif len(element_list) > 1:
        raise ValueError("More than one SchemaElement found")

    # Removing the element from the data structure
    schema_element = element_list[0]
    schema_element_to_pull = SchemaElement.objects.get(pk=element_id)
    schema_element.update(pull__children=schema_element_to_pull)

    schema_element.reload()
    update_branch_xpath(schema_element)

    # Deleting the branch from the database
    delete_branch_from_db(element_id)

    children_number = len(schema_element.children)

    # TODO Move it to parser function
    # FIXME Sequence elem it might not work
    if len(schema_element.children) == 0:
        elem_iter = SchemaElement()

        if schema_element.tag == 'element':
            elem_iter.tag = 'elem-iter'
        elif schema_element.tag == 'choice':
            elem_iter.tag = 'choice-iter'
        elif schema_element.tag == 'sequence':
            elem_iter.tag = 'sequence-iter'

        elem_iter.save()
        schema_element.update(add_to_set__children=[elem_iter])
        schema_element.reload()

    response = {
        'code': 0,
        'html': ""
    }

    if children_number > schema_element.options['min']:
        return HttpResponse(json.dumps(response), status=HTTP_200_OK)
    else:  # len(schema_element.children) == schema_element.options['min']
        if schema_element.options['min'] != 0:
            response['code'] = 1
        else:  # schema_element.options['min'] == 0
            renderer = ListRenderer(schema_element, request)
            html_form = renderer.render(True)

            response['code'] = 2
            response['html'] = html_form

        return HttpResponse(json.dumps(response))
コード例 #20
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')
コード例 #21
0
    def test_template_list_is_incorrect_dict(self):
        xsd_data = SchemaElement()
        xsd_data.tag = "test"

        template = None

        try:
            for template in self.type_generator.generate_types_excluding([]):
                template_list = {
                    "wrong": template
                }

                with self.assertRaises(Exception):
                    AbstractListRenderer(xsd_data, template_list)
        except AssertionError as error:
            template_type = str(type(template))
            error.message += ' (template type: ' + template_type + ')'
            raise AssertionError(error.message)
コード例 #22
0
    def test_input_not_schema_element(self):
        input_element = SchemaElement()

        try:
            for input_element in self.types_generator.possible_types:
                with self.assertRaises(TypeError):
                    self.renderer._render_input(input_element)
        except AssertionError as error:
            input_type = str(type(input_element))
            error.message += ' (input type: ' + input_type + ')'
            raise AssertionError(error.message)
コード例 #23
0
def get_updated_keys(request):
    """
        updated_keys[key] = {'ids': [],
                            'tagIDs': []}
        key = key name
        ids = list of posssible values for a key
        tagIDs = HTML element that needs to be updated with the values (keyrefs)
    """

    # delete keys that have been deleted
    for key, values in request.session['keys'].iteritems():
        deleted_ids = []
        for module_id in values['module_ids']:
            try:
                SchemaElement.objects().get(pk=module_id)
            except Exception:
                deleted_ids.append(module_id)
        request.session['keys'][key]['module_ids'] = [
            item for item in request.session['keys'][key]['module_ids']
            if item not in deleted_ids
        ]
    # delete keyrefs that have been deleted
    for keyref, values in request.session['keyrefs'].iteritems():
        deleted_ids = []
        for module_id in values['module_ids']:
            try:
                SchemaElement.objects().get(pk=module_id)
            except Exception:
                deleted_ids.append(module_id)
        request.session['keyrefs'][keyref]['module_ids'] = [
            item for item in request.session['keyrefs'][keyref]['module_ids']
            if item not in deleted_ids
        ]

    # get the list of keyrefs to update
    updated_keyrefs = []
    for keyref, values in request.session['keyrefs'].iteritems():
        updated_keyrefs.extend(values['module_ids'])

    return HttpResponse(json.dumps(updated_keyrefs),
                        content_type='application/javascript')
コード例 #24
0
def remove_element(request):
    element_id = request.POST['id']
    # sub_element = SchemaElement.objects.get(pk=element_id)
    element_list = SchemaElement.objects(children=element_id)

    if len(element_list) == 0:
        raise ValueError("No SchemaElement found")
    elif len(element_list) > 1:
        raise ValueError("More than one SchemaElement found")

    # Removing the element from the data structure
    schema_element = element_list[0]
    schema_element.update(pull__children=element_id)

    schema_element.reload()
    update_branch_xpath(schema_element)

    # Deleting the branch from the database
    delete_branch_from_db(element_id)

    children_number = len(schema_element.children)

    # TODO Move it to parser function
    # FIXME Sequence elem it might not work
    if len(schema_element.children) == 0:
        elem_iter = SchemaElement()

        if schema_element.tag == 'element':
            elem_iter.tag = 'elem-iter'
        elif schema_element.tag == 'choice':
            elem_iter.tag = 'choice-iter'
        elif schema_element.tag == 'sequence':
            elem_iter.tag = 'sequence-iter'

        elem_iter.save()
        schema_element.update(add_to_set__children=[elem_iter])
        schema_element.reload()

    response = {
        'code': 0,
        'html': ""
    }

    if children_number > schema_element.options['min']:
        return HttpResponse(json.dumps(response), status=HTTP_200_OK)
    else:  # len(schema_element.children) == schema_element.options['min']
        if schema_element.options['min'] != 0:
            response['code'] = 1
        else:  # schema_element.options['min'] == 0
            renderer = ListRenderer(schema_element, request)
            html_form = renderer.render(True)

            response['code'] = 2
            response['html'] = html_form

        return HttpResponse(json.dumps(response))
コード例 #25
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']

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

            flattener = XSDFlattenerURL(xsd_doc_data)
            xml_doc_tree_str = flattener.get_flat()

            request.session['xmlDocTree'] = xml_doc_tree_str
            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)
            request.session['form_id'] = str(root_element_id)

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

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

    return HttpResponse(json.dumps({'xsdForm': html_form}), content_type='application/javascript')
コード例 #26
0
def get_updated_keys(request):
    """
        updated_keys[key] = {'ids': [],
                            'tagIDs': []}
        key = key name
        ids = list of posssible values for a key
        tagIDs = HTML element that needs to be updated with the values (keyrefs)
    """

    # delete keys that have been deleted
    for key, values in request.session['keys'].iteritems():
        deleted_ids = []
        for module_id in values['module_ids']:
            try:
                SchemaElement.objects().get(pk=module_id)
            except Exception:
                deleted_ids.append(module_id)
        request.session['keys'][key]['module_ids'] = [item for item in request.session['keys'][key]['module_ids']
                                                if item not in deleted_ids]
    # delete keyrefs that have been deleted
    for keyref, values in request.session['keyrefs'].iteritems():
        deleted_ids = []
        for module_id in values['module_ids']:
            try:
                SchemaElement.objects().get(pk=module_id)
            except Exception:
                deleted_ids.append(module_id)
        request.session['keyrefs'][keyref]['module_ids'] = [item for item in request.session['keyrefs'][keyref]['module_ids']
                                                    if item not in deleted_ids]

    # get the list of keyrefs to update
    updated_keyrefs = []
    for keyref, values in request.session['keyrefs'].iteritems():
        updated_keyrefs.extend(values['module_ids'])


    return HttpResponse(json.dumps(updated_keyrefs), content_type='application/javascript')
コード例 #27
0
ファイル: models.py プロジェクト: Huchikoma/internship_MMQ
    def _get_module(self, request):
        # look for existing values
        try:
            # keyrefId = request.GET['keyref'] if 'keyref' in request.GET else None
            module_id = request.GET['module_id']
            module = SchemaElement.objects().get(pk=module_id)
            keyrefId = module.options['params']['keyref']
            # register the module id in the structure
            if str(module_id
                   ) not in request.session['keyrefs'][keyrefId]['module_ids']:
                request.session['keyrefs'][keyrefId]['module_ids'].append(
                    str(module_id))

            # get the list of values for this key
            keyId = request.session['keyrefs'][keyrefId]['refer']
            values = []
            modules_ids = request.session['keys'][keyId]['module_ids']
            for key_module_id in modules_ids:
                key_module = SchemaElement.objects().get(pk=key_module_id)
                if key_module.options['data'] is not None:
                    values.append(key_module.options['data'])

            # add empty value
            self.options.update({'': ''})
            for value in values:
                self.options.update({str(value): str(value)})

            self.selected = ''
            if 'data' in request.GET:
                self.selected = request.GET['data']
            elif 'data' in module.options and module.options[
                    'data'] is not None:
                self.selected = str(module.options['data'])
        except Exception:
            self.options = {}
        return OptionsModule.get_module(self, request)
コード例 #28
0
def create_mock_db_input(value='', placeholder='', title=''):
    input_element = SchemaElement()
    input_element.tag = "input"

    input_element.value = value
    input_element.options = {'title': title, 'placeholder': placeholder}

    input_element.pk = 'mock'

    return input_element
コード例 #29
0
from curate.models import SchemaElement

MONGODB_URI = 'mongodb://*****:*****@localhost/mgi'
projectIDs = set(["blank"])
DB_NAME = "mgi"
client = MongoClient(MONGODB_URI)
db = client[DB_NAME]
xmldata = db['xmldata']

for cursor in xmldata.find({
        "content.amProjectDB.@xmlns:xsi":
        "http://www.w3.org/2001/XMLSchema-instance"
}):
    projectIDs.add(cursor["content"]["amProjectDB"]["amProject"]["projectID"])

product_element = SchemaElement()
product_element.tag = u'restriction'
product_element.value = u"blank"
product_element.options = {u'base': u'xs:string'}
product_element.children = []
product_element.save()

for ProjectID in projectIDs:
    xsd_element = SchemaElement()
    xsd_element.tag = u'enumeration'
    xsd_element.value = str(ProjectID).decode('UTF-8')
    xsd_element.options = {}
    xsd_element.children = []
    xsd_element.save()
    product_element.children.append(xsd_element)
    product_element.save()
コード例 #30
0
def create_mock_html_renderer():
    element = SchemaElement()
    element.tag = "mock"

    return HtmlRenderer(element)
コード例 #31
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')
コード例 #32
0
def create_mock_html_renderer():
    element = SchemaElement()
    element.tag = "mock"

    return HtmlRenderer(element)