Beispiel #1
0
def import_option(element):
    try:
        option = Option.objects.get(uri=element['uri'])
    except Option.DoesNotExist:
        log.info('Option not in db. Created with uri %s.', element['uri'])
        option = Option()

    try:
        option.optionset = OptionSet.objects.get(uri=element['optionset'])
    except OptionSet.DoesNotExist:
        log.info('OptionSet not in db. Skipping.')
        return

    option.uri_prefix = element['uri_prefix'] or ''
    option.key = element['key'] or ''
    option.comment = element['comment'] or ''

    option.order = element['order']
    option.additional_input = element['additional_input']

    for lang_code, lang_string, lang_field in get_languages():
        set_lang_field(option, 'text', element, lang_code, lang_field)

    try:
        OptionUniquePathValidator(option).validate()
    except ValidationError as e:
        log.info('Option not saving "%s" due to validation error (%s).',
                 element['uri'], e)
        pass
    else:
        log.info('Option saving to "%s".', element['uri'])
        option.save()
Beispiel #2
0
def import_section(element, catalog_uri=False, save=False):
    try:
        if catalog_uri is False:
            section = Section.objects.get(uri=element.get('uri'))
        else:
            section = Section.objects.get(key=element.get('key'),
                                          catalog__uri=catalog_uri)

    except Section.DoesNotExist:
        section = Section()

    set_common_fields(section, element)

    section.catalog = get_foreign_field(section, catalog_uri
                                        or element.get('catalog'), Catalog)
    section.order = element.get('order') or 0

    set_lang_field(section, 'title', element)

    if save and validate_instance(section, SectionLockedValidator,
                                  SectionUniqueURIValidator):
        if section.id:
            logger.info('Section created with uri %s.', element.get('uri'))
        else:
            logger.info('Section %s updated.', element.get('uri'))

        section.save()
        section.imported = True

    return section
Beispiel #3
0
def import_option(element, parent_uri=False, save=False):
    if parent_uri is False:
        parent_uri = element.get('optionset')

    try:
        option = Option.objects.get(uri=element.get('uri'),
                                    optionset__uri=parent_uri)
    except Option.DoesNotExist:
        option = Option()

    set_common_fields(option, element)

    option.parent_uri = parent_uri
    option.optionset = get_foreign_field(option, parent_uri, OptionSet)

    option.order = element.get('order')
    option.additional_input = element.get('additional_input')

    set_lang_field(option, 'text', element)

    if save and validate_instance(option):
        if option.id:
            logger.info('Option created with uri %s.', element.get('uri'))
        else:
            logger.info('Option %s updated.', element.get('uri'))

        option.save()
        option.imported = True

    return option
Beispiel #4
0
def import_view(element):
    try:
        view = View.objects.get(uri=element['uri'])
    except View.DoesNotExist:
        log.info('View not in db. Created with uri %s.', element['uri'])
        view = View()

    view.uri_prefix = element['uri_prefix'] or ''
    view.key = element['key'] or ''
    view.comment = element['comment'] or ''

    view.template = element['template'] or ''

    for lang_code, lang_string, lang_field in get_languages():
        set_lang_field(view, 'title', element, lang_code, lang_field)
        set_lang_field(view, 'help', element, lang_code, lang_field)

    try:
        ViewUniqueKeyValidator(view).validate()
    except ValidationError as e:
        log.info('View not saving "%s" due to validation error (%s).',
                 element['uri'], e)
        pass
    else:
        log.info('View saving to "%s".', element['uri'])
        view.save()
Beispiel #5
0
def import_catalog(element, save=False):
    try:
        catalog = Catalog.objects.get(uri=element.get('uri'))
    except Catalog.DoesNotExist:
        catalog = Catalog()

    set_common_fields(catalog, element)

    catalog.order = element.get('order') or 0

    set_lang_field(catalog, 'title', element)
    set_lang_field(catalog, 'help', element)

    if save and validate_instance(catalog, CatalogLockedValidator,
                                  CatalogUniqueURIValidator):
        if catalog.id:
            logger.info('Catalog created with uri %s.', element.get('uri'))
        else:
            logger.info('Catalog %s updated.', element.get('uri'))

        catalog.save()
        catalog.sites.add(Site.objects.get_current())
        catalog.imported = True

    return catalog
Beispiel #6
0
def import_task(element, save=False):
    try:
        task = Task.objects.get(uri=element.get('uri'))
    except Task.DoesNotExist:
        task = Task()

    set_common_fields(task, element)

    set_lang_field(task, 'title', element)
    set_lang_field(task, 'text', element)

    task.start_attribute = get_foreign_field(task,
                                             element.get('start_attribute'),
                                             Attribute)
    task.end_attribute = get_foreign_field(task, element.get('end_attribute'),
                                           Attribute)

    task.days_before = element.get('days_before')
    task.days_after = element.get('days_after')

    conditions = get_m2m_instances(task, element.get('conditions'), Condition)

    if save and validate_instance(task):
        if task.id:
            logger.info('Task created with uri %s.', element.get('uri'))
        else:
            logger.info('Task %s updated.', element.get('uri'))

        task.save()
        task.sites.add(Site.objects.get_current())
        task.conditions.set(conditions)
        task.imported = True

    return task
Beispiel #7
0
def import_section(element, parent_uri=False, save=False):
    if parent_uri is False:
        parent_uri = element.get('catalog')

    try:
        section = Section.objects.get(uri=element.get('uri'),
                                      catalog__uri=parent_uri)
    except Section.DoesNotExist:
        section = Section()

    set_common_fields(section, element)

    section.parent_uri = parent_uri
    section.catalog = get_foreign_field(section, parent_uri, Catalog)

    section.order = element.get('order')

    set_lang_field(section, 'title', element)

    if save and validate_instance(section):
        if section.id:
            logger.info('Section created with uri %s.', element.get('uri'))
        else:
            logger.info('Section %s updated.', element.get('uri'))

        section.save()
        section.imported = True

    return section
Beispiel #8
0
def import_option(element, optionset_uri=False, save=False):
    try:
        if optionset_uri is False:
            option = Option.objects.get(uri=element.get('uri'))
        else:
            option = Option.objects.get(key=element.get('key'),
                                        optionset__uri=optionset_uri)
    except Option.DoesNotExist:
        option = Option()

    set_common_fields(option, element)

    option.optionset = get_foreign_field(
        option, optionset_uri or element.get('optionset'), OptionSet)
    option.order = element.get('order') or 0
    option.additional_input = element.get('additional_input') or False

    set_lang_field(option, 'text', element)

    if save and validate_instance(option, OptionLockedValidator,
                                  OptionUniqueURIValidator):
        if option.id:
            logger.info('Option created with uri %s.', element.get('uri'))
        else:
            logger.info('Option %s updated.', element.get('uri'))

        option.save()
        option.imported = True

    return option
Beispiel #9
0
def import_view(element, save=False):
    try:
        view = View.objects.get(uri=element.get('uri'))
    except View.DoesNotExist:
        view = View()

    set_common_fields(view, element)

    view.template = element.get('template')

    set_lang_field(view, 'title', element)
    set_lang_field(view, 'help', element)

    catalogs = get_m2m_instances(view, element.get('catalogs'), Catalog)

    if save and validate_instance(view):
        if view.id:
            logger.info('View created with uri %s.', element.get('uri'))
        else:
            logger.info('View %s updated.', element.get('uri'))

        view.save()
        view.sites.add(Site.objects.get_current())
        view.catalogs.set(catalogs)
        view.imported = True

    return view
Beispiel #10
0
def import_question(element, questionset_uri=False, save=False):
    try:
        if questionset_uri is False:
            question = Question.objects.get(uri=element.get('uri'))
        else:
            question = Question.objects.get(key=element.get('key'),
                                            questionset__uri=questionset_uri)
    except Question.DoesNotExist:
        question = Question()

    set_common_fields(question, element)

    question.questionset = get_foreign_field(
        question, questionset_uri or element.get('questionset'), QuestionSet)
    question.attribute = get_foreign_field(question, element.get('attribute'),
                                           Attribute)
    question.is_collection = element.get('is_collection') or False
    question.is_optional = element.get('is_optional') or False
    question.order = element.get('order') or 0

    set_lang_field(question, 'text', element)
    set_lang_field(question, 'help', element)
    set_lang_field(question, 'default_text', element)
    set_lang_field(question, 'verbose_name', element)
    set_lang_field(question, 'verbose_name_plural', element)

    question.default_option = get_foreign_field(question,
                                                element.get('default_option'),
                                                Option)
    question.default_external_id = element.get('default_external_id') or ''

    if element.get('widget_type') in get_widget_types():
        question.widget_type = element.get('widget_type')
    else:
        question.widget_type = 'text'
    question.value_type = element.get('value_type') or ''
    question.maximum = element.get('maximum')
    question.minimum = element.get('minimum')
    question.step = element.get('step')
    question.unit = element.get('unit') or ''
    question.width = element.get('width')

    conditions = get_m2m_instances(question, element.get('conditions'),
                                   Condition)
    optionsets = get_m2m_instances(question, element.get('optionsets'),
                                   OptionSet)

    if save and validate_instance(question, QuestionLockedValidator,
                                  QuestionUniqueURIValidator):
        if question.id:
            logger.info('Question created with uri %s.', element.get('uri'))
        else:
            logger.info('Question %s updated.', element.get('uri'))

        question.save()
        question.conditions.set(conditions)
        question.optionsets.set(optionsets)
        question.imported = True

    return question
Beispiel #11
0
def import_section(element):
    try:
        section = Section.objects.get(uri=element['uri'])
    except Section.DoesNotExist:
        log.info('Section not in db. Created with uri %s.', element['uri'])
        section = Section()

    try:
        section.catalog = Catalog.objects.get(uri=element['catalog'])
    except Catalog.DoesNotExist:
        log.info('Catalog not in db. Skipping.')
        return

    section.uri_prefix = element['uri_prefix'] or ''
    section.key = element['key'] or ''
    section.comment = element['comment'] or ''

    section.order = element['order']

    for lang_code, lang_string, lang_field in get_languages():
        set_lang_field(section, 'title', element, lang_code, lang_field)

    try:
        SectionUniquePathValidator(section).validate()
    except ValidationError as e:
        log.info('Section not saving "%s" due to validation error (%s).',
                 element['uri'], e)
        pass
    else:
        log.info('Section saving to "%s".', element['uri'])
        section.save()
Beispiel #12
0
def import_catalog(element):
    try:
        catalog = Catalog.objects.get(uri=element['uri'])
    except Catalog.DoesNotExist:
        log.info('Catalog not in db. Created with uri %s.', element['uri'])
        catalog = Catalog()

    catalog.uri_prefix = element['uri_prefix'] or ''
    catalog.key = element['key'] or ''
    catalog.comment = element['comment'] or ''

    catalog.order = element['order']

    for lang_code, lang_string, lang_field in get_languages():
        set_lang_field(catalog, 'title', element, lang_code, lang_field)

    try:
        CatalogUniqueKeyValidator(catalog).validate()
    except ValidationError as e:
        log.info('Catalog not saving "%s" due to validation error (%s).',
                 element['uri'], e)
        pass
    else:
        log.info('Catalog saving to "%s".', element['uri'])
        catalog.save()
Beispiel #13
0
def import_task(element):
    try:
        task = Task.objects.get(uri=element['uri'])
    except Task.DoesNotExist:
        log.info('Task not in db. Created with uri %s.', element['uri'])
        task = Task()

    task.uri_prefix = element['uri_prefix'] or ''
    task.key = element['key'] or ''
    task.comment = element['comment'] or ''

    for lang_code, lang_string, lang_field in get_languages():
        set_lang_field(task, 'title', element, lang_code, lang_field)
        set_lang_field(task, 'text', element, lang_code, lang_field)

    if element['start_attribute']:
        try:
            task.start_attribute = Attribute.objects.get(
                uri=element['start_attribute'])
        except Attribute.DoesNotExist:
            pass

    if element['end_attribute']:
        try:
            task.end_attribute = Attribute.objects.get(
                uri=element['end_attribute'])
        except Attribute.DoesNotExist:
            pass

    task.days_before = element['days_before']
    task.days_after = element['days_after']

    try:
        TaskUniqueKeyValidator(task).validate()
    except ValidationError as e:
        log.info('Task not saving "%s" due to validation error (%s).',
                 element['uri'], e)
        pass
    else:
        log.info('Task saving to "%s".', element['uri'])
        task.save()

    task.conditions.clear()
    if element['conditions'] is not None:
        for condition in element['conditions']:
            try:
                task.conditions.add(Condition.objects.get(uri=condition))
            except Condition.DoesNotExist:
                pass
Beispiel #14
0
def import_questionset(element,
                       section_uri=False,
                       questionset_uri=False,
                       save=False):
    try:
        if section_uri is False:
            questionset = QuestionSet.objects.get(uri=element.get('uri'))
        else:
            if questionset_uri is False:
                questionset = QuestionSet.objects.get(key=element.get('key'),
                                                      section__uri=section_uri)
            else:
                questionset = QuestionSet.objects.get(
                    key=element.get('key'),
                    section__uri=section_uri,
                    questionset__uri=questionset_uri)

    except QuestionSet.DoesNotExist:
        questionset = QuestionSet()

    set_common_fields(questionset, element)

    questionset.section = get_foreign_field(
        questionset, section_uri or element.get('section'), Section)
    questionset.questionset = get_foreign_field(
        questionset, questionset_uri or element.get('questionset'),
        QuestionSet)
    questionset.attribute = get_foreign_field(questionset,
                                              element.get('attribute'),
                                              Attribute)
    questionset.is_collection = element.get('is_collection') or False
    questionset.order = element.get('order') or 0

    set_lang_field(questionset, 'title', element)
    set_lang_field(questionset, 'help', element)
    set_lang_field(questionset, 'verbose_name', element)
    set_lang_field(questionset, 'verbose_name_plural', element)

    conditions = get_m2m_instances(questionset, element.get('conditions'),
                                   Condition)

    if save and validate_instance(questionset, QuestionSetLockedValidator,
                                  QuestionSetUniqueURIValidator):
        if questionset.id:
            logger.info('QuestionSet created with uri %s.', element.get('uri'))
        else:
            logger.info('QuestionSet %s updated.', element.get('uri'))

        questionset.save()
        questionset.conditions.set(conditions)
        questionset.imported = True

    return questionset
Beispiel #15
0
def import_questionset(element):
    try:
        questionset = QuestionSet.objects.get(uri=element['uri'])
    except QuestionSet.DoesNotExist:
        log.info('QuestionSet not in db. Created with uri %s.', element['uri'])
        questionset = QuestionSet()

    try:
        questionset.section = Section.objects.get(uri=element['section'])
    except Section.DoesNotExist:
        log.info('Section not in db. Skipping.')
        return

    questionset.uri_prefix = element['uri_prefix'] or ''
    questionset.key = element['key'] or ''
    questionset.comment = element['comment'] or ''

    if element['attribute']:
        try:
            questionset.attribute = Attribute.objects.get(
                uri=element['attribute'])
        except Attribute.DoesNotExist:
            pass

    questionset.is_collection = element['is_collection']
    questionset.order = element['order']

    for lang_code, lang_string, lang_field in get_languages():
        set_lang_field(questionset, 'title', element, lang_code, lang_field)
        set_lang_field(questionset, 'help', element, lang_code, lang_field)
        set_lang_field(questionset, 'verbose_name', element, lang_code,
                       lang_field)
        set_lang_field(questionset, 'verbose_name_plural', element, lang_code,
                       lang_field)

    try:
        QuestionSetUniquePathValidator(questionset).validate()
    except ValidationError as e:
        log.info('QuestionSet not saving "%s" due to validation error (%s).',
                 element['uri'], e)
        pass
    else:
        log.info('QuestionSet saving to "%s".', element['uri'])
        questionset.save()

    questionset.conditions.clear()
    if element['conditions'] is not None:
        for condition in element['conditions']:
            try:
                questionset.conditions.add(
                    Condition.objects.get(uri=condition))
            except Condition.DoesNotExist:
                pass
Beispiel #16
0
def import_question(element, parent_uri=False, save=False):
    if parent_uri is False:
        parent_uri = element.get('questionset')

    try:
        question = Question.objects.get(uri=element.get('uri'),
                                        questionset__uri=parent_uri)
    except Question.DoesNotExist:
        question = Question()

    set_common_fields(question, element)

    question.parent_uri = parent_uri
    question.questionset = get_foreign_field(question, parent_uri, QuestionSet)

    question.attribute = get_foreign_field(question, element.get('attribute'),
                                           Attribute)
    question.is_collection = element.get('is_collection')
    question.order = element.get('order')

    set_lang_field(question, 'text', element)
    set_lang_field(question, 'help', element)
    set_lang_field(question, 'verbose_name', element)
    set_lang_field(question, 'verbose_name_plural', element)

    question.widget_type = element.get('widget_type') or ''
    question.value_type = element.get('value_type') or ''
    question.maximum = element.get('maximum')
    question.minimum = element.get('minimum')
    question.step = element.get('step')
    question.unit = element.get('unit') or ''

    conditions = get_m2m_instances(question, element.get('conditions'),
                                   Condition)
    optionsets = get_m2m_instances(question, element.get('optionsets'),
                                   OptionSet)

    if save and validate_instance(question):
        if question.id:
            logger.info('Question created with uri %s.', element.get('uri'))
        else:
            logger.info('Question %s updated.', element.get('uri'))

        question.save()
        question.conditions.set(conditions)
        question.optionsets.set(optionsets)
        question.imported = True

    return question
Beispiel #17
0
def import_questionset(element, parent_uri=False, save=False):
    if parent_uri is False:
        parent_uri = element.get('section')

    try:
        questionset = QuestionSet.objects.get(uri=element.get('uri'),
                                              section__uri=parent_uri)
    except QuestionSet.DoesNotExist:
        questionset = QuestionSet()

    set_common_fields(questionset, element)

    questionset.parent_uri = parent_uri
    questionset.section = get_foreign_field(questionset, parent_uri, Section)

    questionset.attribute = get_foreign_field(questionset,
                                              element.get('attribute'),
                                              Attribute)
    questionset.is_collection = element.get('is_collection')
    questionset.order = element.get('order')

    set_lang_field(questionset, 'title', element)
    set_lang_field(questionset, 'help', element)
    set_lang_field(questionset, 'verbose_name', element)
    set_lang_field(questionset, 'verbose_name_plural', element)

    conditions = get_m2m_instances(questionset, element.get('conditions'),
                                   Condition)

    if save and validate_instance(questionset):
        if questionset.id:
            logger.info('QuestionSet created with uri %s.', element.get('uri'))
        else:
            logger.info('QuestionSet %s updated.', element.get('uri'))

        questionset.save()
        questionset.conditions.set(conditions)
        questionset.imported = True

    return questionset
Beispiel #18
0
def import_question(element):
    try:
        question = Question.objects.get(uri=element['uri'])
    except Question.DoesNotExist:
        log.info('QuestionSet not in db. Created with uri %s.', element['uri'])
        question = Question()

    try:
        question.questionset = QuestionSet.objects.get(
            uri=element['questionset'])
    except QuestionSet.DoesNotExist:
        log.info('QuestionSet not in db. Skipping.')
        return

    question.uri_prefix = element['uri_prefix'] or ''
    question.key = element['key'] or ''
    question.comment = element['comment'] or ''

    if element['attribute']:
        try:
            question.attribute = Attribute.objects.get(
                uri=element['attribute'])
        except Attribute.DoesNotExist:
            pass

    question.is_collection = element['is_collection']
    question.order = element['order']

    for lang_code, lang_string, lang_field in get_languages():
        set_lang_field(question, 'text', element, lang_code, lang_field)
        set_lang_field(question, 'help', element, lang_code, lang_field)
        set_lang_field(question, 'verbose_name', element, lang_code,
                       lang_field)
        set_lang_field(question, 'verbose_name_plural', element, lang_code,
                       lang_field)

    question.widget_type = element['widget_type'] or ''
    question.value_type = element['value_type'] or ''
    question.maximum = element['maximum']
    question.minimum = element['minimum']
    question.step = element['step']
    question.unit = element['unit'] or ''

    try:
        QuestionUniquePathValidator(question).validate()
    except ValidationError as e:
        log.info('Question not saving "%s" due to validation error (%s).',
                 element['uri'], e)
        pass
    else:
        log.info('Question saving to "%s".', element['uri'])
        question.save()

    question.conditions.clear()
    if element['conditions'] is not None:
        for condition in element['conditions']:
            try:
                question.conditions.add(Condition.objects.get(uri=condition))
            except Condition.DoesNotExist:
                pass

    question.optionsets.clear()
    if element['optionsets'] is not None:
        for condition in element['optionsets']:
            try:
                question.optionsets.add(OptionSet.objects.get(uri=condition))
            except OptionSet.DoesNotExist:
                pass