def import_question(question_node, nsmap, subsection=None, parent=None): question_uri = question_node[get_ns_tag('dc:uri', nsmap)].text try: question = Question.objects.get(uri=question_uri) except Question.DoesNotExist: question = Question() question.uri_prefix = question_uri.split('/questions/')[0] question.key = question_uri.split('/')[-1] question.comment = question_node[get_ns_tag('dc:comment', nsmap)] question.subsection = subsection question.parent = parent question.order = question_node['order'] question.widget_type = question_node.widget_type for element in question_node['text']: setattr(question, 'text_' + element.get('lang'), element.text) for element in question_node['help']: setattr(question, 'help_' + element.get('lang'), element.text) try: attribute_entity_uri = question_node['attribute_entity'].get(get_ns_tag('dc:uri', nsmap)) question.attribute_entity = AttributeEntity.objects.get(uri=attribute_entity_uri) except (AttributeError, AttributeEntity.DoesNotExist): question.attribute_entity = None question.save()
def import_questionset(questionset_node, nsmap, subsection=None): questionset_uri = questionset_node[get_ns_tag('dc:uri', nsmap)].text try: questionset = QuestionEntity.objects.get(uri=questionset_uri) except QuestionEntity.DoesNotExist: questionset = QuestionEntity() questionset.uri_prefix = questionset_uri.split('/questions/')[0] questionset.key = questionset_uri.split('/')[-1] questionset.comment = questionset_node[get_ns_tag('dc:comment', nsmap)] questionset.subsection = subsection questionset.order = questionset_node['order'] for element in questionset_node['help']: setattr(questionset, 'help_' + element.get('lang'), element.text) try: attribute_entity_uri = questionset_node['attribute_entity'].get(get_ns_tag('dc:uri', nsmap)) questionset.attribute_entity = AttributeEntity.objects.get(uri=attribute_entity_uri) except (AttributeError, AttributeEntity.DoesNotExist): questionset.attribute_entity = None questionset.save() if hasattr(questionset_node, 'questions'): for question_node in questionset_node.questions.iterchildren(): import_question(question_node, nsmap, subsection=subsection, parent=questionset)
def import_attribute_entity(entity_node, nsmap, parent=None): uri = entity_node[get_ns_tag('dc:uri', nsmap)].text try: entity = AttributeEntity.objects.get(uri=uri, parent=parent) except AttributeEntity.DoesNotExist: entity = AttributeEntity() entity.parent = parent entity.uri_prefix = uri.split('/domain/')[0] entity.key = uri.split('/')[-1] entity.comment = entity_node[get_ns_tag('dc:comment', nsmap)] entity.is_collection = entity_node['is_collection'] == 'True' entity.save() if hasattr(entity_node, 'verbosename'): import_verbose_name(entity_node.verbosename, entity) if hasattr(entity_node, 'conditions'): for condition_node in entity_node.conditions.iterchildren(): try: condition_uri = condition_node.get(get_ns_tag('dc:uri', nsmap)) condition = Condition.objects.get(uri=condition_uri) entity.conditions.add(condition) except Condition.DoesNotExist: pass if hasattr(entity_node, 'children'): for child_node in entity_node.children.iterchildren(): if child_node.tag == 'entity': import_attribute_entity(child_node, nsmap, parent=entity) else: import_attribute(child_node, nsmap, parent=entity)
def import_options(optionsets_node): nsmap = optionsets_node.nsmap for optionset_node in optionsets_node.iterchildren(): uri = optionset_node[get_ns_tag('dc:uri', nsmap)].text try: optionset = OptionSet.objects.get(uri=uri) except OptionSet.DoesNotExist: optionset = OptionSet() optionset.uri_prefix = uri.split('/options/')[0] optionset.key = uri.split('/')[-1] optionset.comment = optionset_node[get_ns_tag('dc:comment', nsmap)] optionset.order = optionset_node['order'] optionset.save() for option_node in optionset_node.options.iterchildren(): uri = option_node[get_ns_tag('dc:uri', nsmap)].text try: option = Option.objects.get(uri=uri) except Option.DoesNotExist: option = Option() option.optionset = optionset option.uri_prefix = uri.split('/options/')[0] option.key = uri.split('/')[-1] option.comment = option_node[get_ns_tag('dc:comment', nsmap)] option.order = option_node['order'] for element in option_node['text']: setattr(option, 'text_' + element.get('lang'), element.text) option.additional_input = option_node['additional_input'] option.save()
def import_conditions(conditions_node): log.info('Importing conditions') nsmap = get_ns_map(conditions_node.getroot()) for condition_node in conditions_node.findall('condition'): condition_uri = get_uri(condition_node, nsmap) try: condition = Condition.objects.get(uri=condition_uri) except Condition.DoesNotExist: condition = Condition() log.info('Condition not in db. Created with uri ' + condition_uri) else: log.info('Condition does exist. Loaded from uri ' + condition_uri) condition.uri_prefix = condition_uri.split('/conditions/')[0] condition.key = condition_uri.split('/')[-1] condition.comment = get_value_from_treenode( condition_node, get_ns_tag('dc:comment', nsmap)) condition.relation = get_value_from_treenode(condition_node, 'relation') try: # condition_source = get_value_from_treenode(condition_node, 'source', 'attrib') # source_uri = str(condition_source[get_ns_tag('dc:uri', nsmap)]) source_node = condition_node.find('source') source_uri = source_node.get(get_ns_tag('dc:uri', nsmap)) condition.source = Attribute.objects.get(uri=source_uri) except (AttributeError, Attribute.DoesNotExist): condition.source = None if get_value_from_treenode(condition_node, 'target_text') != '': condition.target_text = get_value_from_treenode( condition_node, 'target_text') else: condition.target_text = None try: target_option_node = condition_node.find('target_option') target_option_uri = target_option_node.get( get_ns_tag('dc:uri', nsmap)) condition.target_option = Option.objects.get(uri=target_option_uri) except (AttributeError, Option.DoesNotExist): condition.target_option = None try: ConditionUniqueKeyValidator(condition).validate() except ValidationError: log.info('Condition not saving "' + str(condition_uri) + '" due to validation error') pass else: log.info('Condition saving to "' + str(condition_uri) + '"') condition.save()
def import_attribute(attribute_node, nsmap, parent=None): attribute_uri = get_uri(attribute_node, nsmap) try: attribute = Attribute.objects.get(uri=attribute_uri) except Attribute.DoesNotExist: log.info('Attribute not in db. Created with uri ' + str(attribute_uri)) attribute = Attribute() pass else: log.info('Attribute does exist. Loaded from uri ' + str(attribute_uri)) attribute.uri = attribute_uri attribute.parent = parent attribute.uri_prefix = attribute_uri.split('/domain/')[0] attribute.key = attribute_uri.split('/')[-1] attribute.comment = get_value_from_treenode(attribute_node, get_ns_tag('dc:comment', nsmap)) attribute.is_collection = make_bool(attribute_node.find('is_collection').text) attribute.value_type = get_value_from_treenode(attribute_node, 'value_type') attribute.unit = get_value_from_treenode(attribute_node, 'unit') try: AttributeEntityUniquePathValidator(attribute).validate() except ValidationError: log.info('Attribute not saving "' + str(attribute_uri) + '" due to validation error') pass else: log.info('Attribute saving to "' + str(attribute_uri) + '", parent "' + str(parent) + '"') attribute.save() if hasattr(attribute_node, 'range'): import_verbose_name(attribute_node.range, attribute) if hasattr(attribute_node, 'verbosename'): import_verbose_name(attribute_node.verbosename, attribute) if hasattr(attribute_node, 'optionsets'): for optionset_node in attribute_node.optionsets.iterchildren(): try: optionset_uri = optionset_node.get(get_ns_tag('dc:uri', nsmap)) optionset = OptionSet.objects.get(uri=optionset_uri) attribute.optionsets.add(optionset) except OptionSet.DoesNotExist: pass if hasattr(attribute_node, 'conditions'): for condition_node in attribute_node.conditions.iterchildren(): try: condition_uri = condition_node.get(get_ns_tag('dc:uri', nsmap)) condition = Condition.objects.get(uri=condition_uri) attribute.conditions.add(condition) except Condition.DoesNotExist: pass
def import_questionset(questionset_node, nsmap, subsection=None): questionset_uri = get_uri(questionset_node, nsmap) log.info('Importing questionset ' + questionset_uri) try: questionset = QuestionEntity.objects.get(uri=questionset_uri) except QuestionEntity.DoesNotExist: questionset = QuestionEntity() log.info('Questionset not in db. Created with uri ' + str(questionset_uri)) else: log.info('Questionset does exist. Loaded from uri ' + str(questionset_uri)) questionset.uri_prefix = questionset_uri.split('/questions/')[0] questionset.key = questionset_uri.split('/')[-1] questionset.comment = get_value_from_treenode( questionset_node, get_ns_tag('dc:comment', nsmap)) questionset.subsection = subsection questionset.order = get_value_from_treenode(questionset_node, 'order') for element in questionset_node.findall('help'): setattr(questionset, 'help_' + element.attrib['lang'], element.text) try: urimap = questionset_node.find('attribute_entity').attrib nstag = get_ns_tag('dc:uri', nsmap) attribute_entity_uri = urimap[nstag] questionset.attribute_entity = AttributeEntity.objects.get( uri=attribute_entity_uri) except (AttributeError, AttributeEntity.DoesNotExist): questionset.attribute_entity = None try: QuestionEntityUniquePathValidator(questionset).validate() except ValidationError: log.info('Questionset not saving "' + str(questionset_uri) + '" due to validation error') pass else: log.info('Questionset saving to "' + str(questionset_uri) + '"') questionset.save() for question_node in questionset_node.find('questions').findall( 'question'): import_question(question_node, nsmap, subsection=subsection, parent=questionset)
def import_project(project_node, nsmap, user): try: project = Project.objects.get(title=project_node['title'], user=user) print('skipping existing project "%s".' % project_node['title']) return except Project.DoesNotExist: project = Project(title=project_node['title']) try: catalog_uri = project_node['catalog'].get(get_ns_tag('dc:uri', nsmap)) project.catalog = Catalog.objects.get(uri=catalog_uri) except Catalog.DoesNotExist: print('Skipping project "%s". Catalog not found.' % project_node['title']) return project.description = project_node['description'] project.created = project_node['created'].text project.save() # add user to project membership = Membership(project=project, user=user, role='admib') membership.save() # loop over snapshots if hasattr(project_node, 'snapshots'): for snapshot_node in project_node['snapshots'].iterchildren(): import_snapshot(snapshot_node, nsmap, project) # loop over values if hasattr(project_node, 'values'): for value_node in project_node['values'].iterchildren(): import_value(value_node, nsmap, project)
def import_catalog(catalog_node): nsmap = get_ns_map(catalog_node.getroot()) catalog_uri = get_uri(catalog_node, nsmap) log.info('Importing catalog ' + catalog_uri) try: catalog = Catalog.objects.get(uri=catalog_uri) except Catalog.DoesNotExist: catalog = Catalog() log.info('Catalog not in db. Created with uri ' + str(catalog_uri)) else: log.info('Catalog does exist. Loaded from uri ' + str(catalog_uri)) catalog.uri_prefix = catalog_uri.split('/questions/')[0] catalog.key = catalog_uri.split('/')[-1] catalog.comment = get_value_from_treenode(catalog_node, get_ns_tag('dc:comment', nsmap)) catalog.order = get_value_from_treenode(catalog_node, 'order') for element in catalog_node.findall('title'): setattr(catalog, 'title_' + element.attrib['lang'], element.text) try: CatalogUniqueKeyValidator(catalog).validate() except ValidationError: log.info('Catalog not saving "' + str(catalog_uri) + '" due to validation error') pass else: log.info('Catalog saving to "' + str(catalog_uri) + '"') catalog.save() for section_node in catalog_node.find('sections').findall('section'): import_section(section_node, nsmap, catalog=catalog)
def import_attribute(attribute_node, nsmap, parent=None): uri = attribute_node[get_ns_tag('dc:uri', nsmap)].text try: attribute = Attribute.objects.get(uri=uri) except Attribute.DoesNotExist: attribute = Attribute() attribute.parent = parent attribute.uri_prefix = uri.split('/domain/')[0] attribute.key = uri.split('/')[-1] attribute.comment = attribute_node[get_ns_tag('dc:comment', nsmap)] attribute.is_collection = attribute_node['is_collection'] == 'True' attribute.value_type = attribute_node['value_type'] attribute.unit = attribute_node['unit'] attribute.save() if hasattr(attribute_node, 'range'): import_verbose_name(attribute_node.range, attribute) if hasattr(attribute_node, 'verbosename'): import_verbose_name(attribute_node.verbosename, attribute) if hasattr(attribute_node, 'optionsets'): for optionset_node in attribute_node.optionsets.iterchildren(): try: optionset_uri = optionset_node.get(get_ns_tag('dc:uri', nsmap)) optionset = OptionSet.objects.get(uri=optionset_uri) attribute.optionsets.add(optionset) except OptionSet.DoesNotExist: pass if hasattr(attribute_node, 'conditions'): for condition_node in attribute_node.conditions.iterchildren(): try: condition_uri = condition_node.get(get_ns_tag('dc:uri', nsmap)) condition = Condition.objects.get(uri=condition_uri) attribute.conditions.add(condition) except Condition.DoesNotExist: pass
def import_value(value_node, nsmap, project, snapshot=None): attribute_uri = value_node['attribute'].get(get_ns_tag('dc:uri', nsmap)) if not attribute_uri: print('Skipping value without Attribute.') return try: attribute = Attribute.objects.get(uri=attribute_uri) except Attribute.DoesNotExist: print('Skipping value for Attribute "%s". Attribute not found.' % attribute_uri) return try: value = Value.objects.get( project=project, snapshot=snapshot, attribute=attribute, set_index=value_node['set_index'], collection_index=value_node['collection_index'] ) except Value.DoesNotExist: value = Value( project=project, snapshot=snapshot, attribute=attribute, set_index=value_node['set_index'], collection_index=value_node['collection_index'] ) value.created = value_node['created'].text value.text = value_node['text'].text try: option_uri = value_node['option'].get(get_ns_tag('dc:uri', nsmap)) value.option = Option.objects.get(uri=option_uri) except Option.DoesNotExist: value.option = None value.save()
def import_value(value_node, nsmap, project, snapshot=None): log.info('Importing value node: ' + str(value_node)) attribute_node = value_node.find('attribute') attribute_uri = attribute_node.get(get_ns_tag('dc:uri', nsmap)) if attribute_uri is not None: try: attribute = Attribute.objects.get(uri=attribute_uri) except Attribute.DoesNotExist: log.info('Skipping value for Attribute "%s". Attribute not found.' % attribute_uri) return try: value = Value.objects.get( project=project, snapshot=snapshot, attribute=attribute, set_index=get_value_from_treenode(value_node, 'set_index'), collection_index=get_value_from_treenode(value_node, 'collection_index') ) except Value.DoesNotExist: value = Value( project=project, snapshot=snapshot, attribute=attribute, set_index=get_value_from_treenode(value_node, 'set_index'), collection_index=get_value_from_treenode(value_node, 'collection_index') ) value.created = value_node.find('created').text value.text = get_value_from_treenode(value_node, 'text') try: option_uri = value_node.find('option').get(get_ns_tag('dc:uri', nsmap)) value.option = Option.objects.get(uri=option_uri) except Option.DoesNotExist: value.option = None value.save() else: log.info('Skipping value without Attribute.')
def import_section(section_node, nsmap, catalog=None): section_uri = section_node[get_ns_tag('dc:uri', nsmap)].text try: section = Section.objects.get(uri=section_uri) except Section.DoesNotExist: section = Section() section.uri_prefix = section_uri.split('/questions/')[0] section.key = section_uri.split('/')[-1] section.comment = section_node[get_ns_tag('dc:comment', nsmap)] section.catalog = catalog section.order = section_node['order'] for element in section_node.title: setattr(section, 'title_' + element.get('lang'), element.text) section.save() if hasattr(section_node, 'subsections'): for subsection_node in section_node.subsections.iterchildren(): import_subsection(subsection_node, nsmap, section=section)
def import_tasks(tasks_node): nsmap = tasks_node.nsmap for task_node in tasks_node.iterchildren(): task_uri = task_node[get_ns_tag('dc:uri', nsmap)].text try: task = Task.objects.get(uri=task_uri) except Task.DoesNotExist: task = Task() task.uri_prefix = task_uri.split('/tasks/')[0] task.key = task_uri.split('/')[-1] try: attribute_uri = task_node['attribute'].get( get_ns_tag('dc:uri', nsmap)) task.attribute = Attribute.objects.get(uri=attribute_uri) except (AttributeError, Attribute.DoesNotExist): task.attribute = None for element in task_node['title']: setattr(task, 'title_' + element.get('lang'), element.text) for element in task_node['text']: setattr(task, 'text_' + element.get('lang'), element.text) task.save() if hasattr(task_node, 'conditions'): for condition_node in task_node.conditions.iterchildren(): try: condition_uri = condition_node.get( get_ns_tag('dc:uri', nsmap)) condition = Condition.objects.get(uri=condition_uri) task.conditions.add(condition) except Condition.DoesNotExist: pass
def import_catalog(catalog_node): nsmap = catalog_node.nsmap catalog_uri = catalog_node[get_ns_tag('dc:uri', nsmap)].text try: catalog = Catalog.objects.get(uri=catalog_uri) except Catalog.DoesNotExist: catalog = Catalog() catalog.uri_prefix = catalog_uri.split('/questions/')[0] catalog.key = catalog_uri.split('/')[-1] catalog.comment = catalog_node[get_ns_tag('dc:comment', nsmap)] catalog.order = catalog_node['order'] for element in catalog_node.title: setattr(catalog, 'title_' + element.get('lang'), element.text) catalog.save() if hasattr(catalog_node, 'sections'): for section_node in catalog_node.sections.iterchildren(): import_section(section_node, nsmap, catalog=catalog)
def import_conditions(conditions_node): nsmap = conditions_node.nsmap for condition_node in conditions_node.iterchildren(): condition_uri = condition_node[get_ns_tag('dc:uri', nsmap)].text try: condition = Condition.objects.get(uri=condition_uri) except Condition.DoesNotExist: condition = Condition() condition.uri_prefix = condition_uri.split('/conditions/')[0] condition.key = condition_uri.split('/')[-1] condition.comment = condition_node[get_ns_tag('dc:comment', nsmap)] condition.relation = condition_node['relation'] try: source_uri = condition_node['source'].get( get_ns_tag('dc:uri', nsmap)) condition.source = Attribute.objects.get(uri=source_uri) except (AttributeError, Attribute.DoesNotExist): condition.source = None try: condition.target_text = condition_node['target_text'] except AttributeError: condition.target_text = None try: option_uid = condition_node['target_option'].get( get_ns_tag('dc:uri', nsmap)) condition.target_option = Option.objects.get(uri=option_uid) except (AttributeError, Option.DoesNotExist): condition.target_option = None condition.save()
def import_subsection(subsection_node, nsmap, section=None): subsection_uri = subsection_node[get_ns_tag('dc:uri', nsmap)].text try: subsection = Subsection.objects.get(uri=subsection_uri) except Subsection.DoesNotExist: subsection = Subsection() subsection.uri_prefix = subsection_uri.split('/questions/')[0] subsection.key = subsection_uri.split('/')[-1] subsection.comment = subsection_node[get_ns_tag('dc:comment', nsmap)] subsection.section = section subsection.order = subsection_node['order'] for element in subsection_node.title: setattr(subsection, 'title_' + element.get('lang'), element.text) subsection.save() if hasattr(subsection_node, 'entities'): for entity_node in subsection_node.entities.iterchildren(): if entity_node.tag == 'questionset': import_questionset(entity_node, nsmap, subsection=subsection) else: import_question(entity_node, nsmap, subsection=subsection)
def import_project(project_node, user): log.info('Importing project') nsmap = get_ns_map(project_node.getroot()) project_title = get_value_from_treenode(project_node, 'title') project_created = project_node.find('created').text project_description = get_value_from_treenode(project_node, 'description') log.info('Creating new project "' + str(project_title) + '".') project = Project(title=project_title) try: project_catalog = project_node.find('catalog') catalog_uri = project_catalog.get(get_ns_tag('dc:uri', nsmap)) project.catalog = Catalog.objects.get(uri=catalog_uri) except Catalog.DoesNotExist: project.catalog = Catalog.objects.first() log.info('Project catalog not in db. Created with uri "' + str(catalog_uri) + '".') else: log.info('Project catalog does exist. Loaded from uri ' + str(catalog_uri)) if project_description: project.description = project_description else: project.description = '' project.created = project_created log.info('Project saving with title "' + str(project_title) + '"') project.save() # add user to project membership = Membership(project=project, user=user, role='owner') membership.save() # loop over snapshots try: for snapshot_node in project_node.find('snapshots').iter('snapshot'): import_snapshot(snapshot_node, nsmap, project) except AttributeError: log.error(str(AttributeError)) pass loop_over_values(project_node, nsmap, project)
def import_attribute_entity(entity_node, nsmap, parent=None): uri = get_uri(entity_node, nsmap) try: entity = AttributeEntity.objects.get(uri=uri, parent=parent) except AttributeEntity.DoesNotExist: entity = AttributeEntity() log.info('Entity not in db. Created with uri ' + str(uri)) else: log.info('Entity does exist. Loaded from uri ' + str(uri)) entity.parent = parent entity.uri_prefix = uri.split('/domain/')[0] entity.key = uri.split('/')[-1] entity.comment = get_value_from_treenode(entity_node, get_ns_tag('dc:comment', nsmap)) entity.is_collection = make_bool(entity_node.find('is_collection').text) try: AttributeEntityUniquePathValidator(entity).validate() except ValidationError: log.info('Entity not saving "' + str(uri) + '" due to validation error') pass else: log.info('Entity saving to "' + str(uri) + '", parent "' + str(parent) + '"') entity.save() if entity_node.find('verbosename').text is not None: import_verbose_name(get_value_from_treenode(entity_node, 'verbosename'), entity) if entity_node.find('conditions') is not None: for condition_node in entity_node.find('conditions').findall('condition'): try: condition_uri = get_uri(condition_node, nsmap, 'plain') condition = Condition.objects.get(uri=condition_uri) entity.conditions.add(condition) except Condition.DoesNotExist: log.info('Condition import failed: ' + str(Condition.DoesNotExist)) pass for child_node in entity_node.find('children').findall('entity'): import_attribute_entity(child_node, nsmap, parent=entity) for child_node in entity_node.find('children').findall('attribute'): import_attribute(child_node, nsmap, parent=entity)
def import_project(project_node, user): nsmap = project_node.nsmap try: project = Project.objects.get(title=project_node['title'], user=user) print('skipping existing project "%s".' % project_node['title']) return except Project.DoesNotExist: project = Project(title=project_node['title']) try: catalog_uri = project_node['catalog'].get(get_ns_tag('dc:uri', nsmap)) project.catalog = Catalog.objects.get(uri=catalog_uri) except Catalog.DoesNotExist: project.catalog = Catalog.objects.first() if project.description: project.description = project_node['description'].text else: project.description = '' project.created = project_node['created'].text project.save() # add user to project membership = Membership(project=project, user=user, role='owner') membership.save() # loop over snapshots try: for snapshot_node in project_node['snapshots'].iterchildren(): import_snapshot(snapshot_node, nsmap, project) except AttributeError: pass # loop over values try: for value_node in project_node['values'].iterchildren(): import_value(value_node, nsmap, project) except AttributeError: pass
def import_subsection(subsection_node, nsmap, section=None): subsection_uri = get_uri(subsection_node, nsmap) log.info('Importing subsection ' + subsection_uri) try: subsection = Subsection.objects.get(uri=subsection_uri) except Subsection.DoesNotExist: subsection = Subsection() log.info('Subsection not in db. Created with uri ' + str(subsection_uri)) else: log.info('Subsection does exist. Loaded from uri ' + str(subsection_uri)) subsection.uri_prefix = subsection_uri.split('/questions/')[0] subsection.key = subsection_uri.split('/')[-1] subsection.comment = get_value_from_treenode( subsection_node, get_ns_tag('dc:comment', nsmap)) subsection.section = section subsection.order = get_value_from_treenode(subsection_node, 'order') for element in subsection_node.findall('title'): setattr(subsection, 'title_' + element.attrib['lang'], element.text) try: SubsectionUniquePathValidator(subsection).validate() except ValidationError: log.info('Subsection not saving "' + str(subsection_uri) + '" due to validation error') pass else: log.info('Subsection saving to "' + str(subsection_uri) + '"') subsection.save() for questionset_node in subsection_node.find('entities').findall( 'questionset'): import_questionset(questionset_node, nsmap, subsection=subsection) for question_node in subsection_node.find('entities').findall('question'): import_question(question_node, nsmap, subsection=subsection)
def import_views(views_node): nsmap = views_node.nsmap for view_node in views_node.iterchildren(): view_uri = view_node[get_ns_tag('dc:uri', nsmap)].text try: view = View.objects.get(uri=view_uri) except View.DoesNotExist: view = View() view.uri_prefix = view_uri.split('/views/')[0] view.key = view_uri.split('/')[-1] for element in view_node['title']: setattr(view, 'title_' + element.get('lang'), element.text) for element in view_node['help']: setattr(view, 'help_' + element.get('lang'), element.text) view.template = view_node['template'].text view.save()
def import_options(optionsets_node): log.info('Importing options') nsmap = get_ns_map(optionsets_node.getroot()) for optionset_node in optionsets_node.findall('optionset'): uri = get_uri(optionset_node, nsmap) try: optionset = OptionSet.objects.get(uri=uri) except OptionSet.DoesNotExist: optionset = OptionSet() log.info('Optionset not in db. Created with uri ' + str(uri)) else: log.info('Optionset does exist. Loaded from uri ' + str(uri)) optionset.uri_prefix = uri.split('/options/')[0] optionset.key = uri.split('/')[-1] optionset.comment = get_value_from_treenode( optionset_node, get_ns_tag('dc:comment', nsmap)) optionset.order = get_value_from_treenode(optionset_node, 'order') try: OptionSetUniqueKeyValidator(optionset).validate() except ValidationError: log.info('Optionset not saving "' + str(uri) + '" due to validation error') pass else: log.info('Optionset saving to "' + str(uri) + '"') optionset.save() for options_node in optionset_node.findall('options'): for option_node in options_node.findall('option'): uri = get_uri(option_node, nsmap) try: option = Option.objects.get(uri=uri) except Option.DoesNotExist: log.info(Option.DoesNotExist) option = Option() option.optionset = optionset option.uri_prefix = uri.split('/options/')[0] option.key = uri.split('/')[-1] option.comment = get_value_from_treenode( option_node, get_ns_tag('dc:comment', nsmap)) option.order = get_value_from_treenode(option_node, 'order') for element in option_node.findall('text'): setattr(option, 'text_' + element.attrib['lang'], element.text) option.additional_input = make_bool( get_value_from_treenode(option_node, 'additional_input')) try: OptionSetUniqueKeyValidator(optionset).validate() except ValidationError: log.info('Optionset not saving "' + str(uri) + '" due to validation error') pass else: log.info('Option saving to "' + str(uri) + '"') option.save()