Esempio n. 1
0
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()
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
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()
Esempio n. 5
0
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()
Esempio n. 6
0
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)
Esempio n. 7
0
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
Esempio n. 8
0
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)
Esempio n. 9
0
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
Esempio n. 10
0
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)
Esempio n. 11
0
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()
Esempio n. 12
0
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)
Esempio n. 13
0
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()