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)
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)
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))
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')
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
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)
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')
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)
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)
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())
def create_mock_html_renderer(): element = SchemaElement() element.tag = "mock" return HtmlRenderer(element)
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')
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()