Ejemplo n.º 1
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()
Ejemplo n.º 2
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)
Ejemplo n.º 3
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)
Ejemplo n.º 4
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()
Ejemplo n.º 5
0
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()
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
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)
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
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
Ejemplo n.º 11
0
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()
Ejemplo n.º 12
0
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.')
Ejemplo n.º 13
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)
Ejemplo n.º 14
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
Ejemplo n.º 15
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)
Ejemplo n.º 16
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()
Ejemplo n.º 17
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)
Ejemplo n.º 18
0
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)
Ejemplo n.º 19
0
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)
Ejemplo n.º 20
0
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
Ejemplo n.º 21
0
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)
Ejemplo n.º 22
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()
Ejemplo n.º 23
0
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()