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_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_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_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_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_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_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_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_value(value_node, nsmap, project, snapshot=None): try: attribute_uri = value_node['attribute'].get(get_ns_tag('dc:uri', nsmap)) 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'] 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_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_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()