Ejemplo n.º 1
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()
Ejemplo n.º 2
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()
Ejemplo n.º 3
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()
Ejemplo n.º 4
0
    def render_questionset(self, xml, questionset):
        xml.startElement('questionset', {'dc:uri': questionset['uri']})
        self.render_text_element(xml, 'uri_prefix', {}, questionset['uri_prefix'])
        self.render_text_element(xml, 'key', {}, questionset['key'])
        self.render_text_element(xml, 'path', {}, questionset['path'])
        self.render_text_element(xml, 'dc:comment', {}, questionset['comment'])
        self.render_text_element(xml, 'attribute', {'dc:uri': questionset['attribute']}, None)
        self.render_text_element(xml, 'section', {'dc:uri': questionset['section']}, None)
        self.render_text_element(xml, 'questionset', {'dc:uri': questionset['questionset']}, None)
        self.render_text_element(xml, 'is_collection', {}, questionset['is_collection'])
        self.render_text_element(xml, 'order', {}, questionset['order'])

        for lang_code, lang_string, lang_field in get_languages():
            self.render_text_element(xml, 'title', {'lang': lang_code}, questionset['title_%s' % lang_code])
            self.render_text_element(xml, 'help', {'lang': lang_code}, questionset['help_%s' % lang_code])
            self.render_text_element(xml, 'verbose_name', {'lang': lang_code}, questionset['verbose_name_%s' % lang_code])
            self.render_text_element(xml, 'verbose_name_plural', {'lang': lang_code}, questionset['verbose_name_plural_%s' % lang_code])

        xml.startElement('conditions', {})
        if 'conditions' in questionset and questionset['conditions']:
            for condition in questionset['conditions']:
                self.render_text_element(xml, 'condition', {'dc:uri': condition}, None)
        xml.endElement('conditions')

        xml.endElement('questionset')

        if 'questionsets' in questionset and questionset['questionsets']:
            for qs in questionset['questionsets']:
                self.render_questionset(xml, qs)

        if 'questions' in questionset and questionset['questions']:
            for question in questionset['questions']:
                self.render_question(xml, question)
Ejemplo n.º 5
0
    def render_task(self, xml, task):
        xml.startElement('task', {'dc:uri': task['uri']})
        self.render_text_element(xml, 'uri_prefix', {}, task['uri_prefix'])
        self.render_text_element(xml, 'key', {}, task['key'])
        self.render_text_element(xml, 'dc:comment', {}, task['comment'])

        for lang_code, lang_string, lang_field in get_languages():
            self.render_text_element(xml, 'title', {'lang': lang_code},
                                     task['title_%s' % lang_code])
            self.render_text_element(xml, 'text', {'lang': lang_code},
                                     task['text_%s' % lang_code])

        self.render_text_element(xml, 'start_attribute',
                                 {'dc:uri': task['start_attribute']}, None)
        self.render_text_element(xml, 'end_attribute',
                                 {'dc:uri': task['end_attribute']}, None)
        self.render_text_element(xml, 'days_before', {}, task['days_before'])
        self.render_text_element(xml, 'days_after', {}, task['days_after'])

        xml.startElement('conditions', {})
        if 'conditions' in task and task['conditions']:
            for condition in task['conditions']:
                self.render_text_element(xml, 'condition',
                                         {'dc:uri': condition}, None)
        xml.endElement('conditions')

        xml.startElement('catalogs', {})
        if 'catalogs' in task and task['catalogs']:
            for catalog in task['catalogs']:
                self.render_text_element(xml, 'catalog', {'dc:uri': catalog},
                                         None)
        xml.endElement('catalogs')

        xml.endElement('task')
Ejemplo n.º 6
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()
Ejemplo n.º 7
0
def set_lang_field(instance, field_name, element):
    for lang_code, lang_string, lang_field in get_languages():
        field = element.get('%s_%s' % (field_name, lang_code))
        if field:
            setattr(instance, '%s_%s' % (field_name, lang_field), field)
        else:
            setattr(instance, '%s_%s' % (field_name, lang_field), '')
Ejemplo n.º 8
0
    def trans(self, field):
        current_language = get_language()

        languages = get_languages()
        for lang_code, lang_string, lang_field in languages:
            if lang_code == current_language:
                return getattr(self, '%s_%s' % (field, lang_field)) or ''

        primary_lang_field = languages[0][2]
        return getattr(self, '%s_%s' % (field, primary_lang_field)) or ''
Ejemplo n.º 9
0
    def get_instance_as_dict(self, instance):
        model_data = super(TestTranslationMixin,
                           self).get_instance_as_dict(instance)

        for lang_code, lang_string, lang_field in get_languages():
            for field in self.trans_fields:
                model_field = '%s_%s' % (field, lang_field)
                data_field = '%s_%s' % (field, lang_code)
                model_data[data_field] = model_data.get(model_field)

        return model_data
Ejemplo n.º 10
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
Ejemplo n.º 11
0
    def render_option(self, xml, option):
        xml.startElement('option', {'dc:uri': option['uri']})
        self.render_text_element(xml, 'uri_prefix', {}, option['uri_prefix'])
        self.render_text_element(xml, 'key', {}, option['key'])
        self.render_text_element(xml, 'path', {}, option['path'])
        self.render_text_element(xml, 'dc:comment', {}, option['comment'])
        self.render_text_element(xml, 'optionset', {'dc:uri': option['optionset']}, None)
        self.render_text_element(xml, 'order', {}, option['order'])

        for lang_code, lang_string, lang_field in get_languages():
            self.render_text_element(xml, 'title', {'lang': lang_code}, option['text_%s' % lang_code])

        self.render_text_element(xml, 'additional_input', {}, option['additional_input'])
        xml.endElement('option')
Ejemplo n.º 12
0
    def render_view(self, xml, view):
        xml.startElement('view', {'dc:uri': view['uri']})
        self.render_text_element(xml, 'uri_prefix', {}, view['uri_prefix'])
        self.render_text_element(xml, 'key', {}, view['key'])
        self.render_text_element(xml, 'dc:comment', {}, view['comment'])

        for lang_code, lang_string, lang_field in get_languages():
            self.render_text_element(xml, 'title', {'lang': lang_code},
                                     view['title_%s' % lang_code])
            self.render_text_element(xml, 'help', {'lang': lang_code},
                                     view['help_%s' % lang_code])

        self.render_text_element(xml, 'template', {}, view['template'])
        xml.endElement('view')
Ejemplo n.º 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
Ejemplo n.º 14
0
    def trans(self, field):
        current_language = get_language()

        languages = get_languages()
        for lang_code, lang_string, lang_field in languages:
            if lang_code == current_language:
                r = getattr(self, '%s_%s' % (field, lang_field)) or None
                if r is not None:
                    return r
                else:
                    for i in range(1, 6):
                        r = getattr(self, '%s_%s' % (field, 'lang' + str(i))) or None
                        if r is not None:
                            return r
        return ''
Ejemplo n.º 15
0
    def __init__(self, *args, **kwargs):
        super(TranslationSerializerMixin, self).__init__(*args, **kwargs)

        meta = getattr(self, 'Meta', None)
        if meta:
            for lang_code, lang_string, lang_field in get_languages():
                for field in meta.trans_fields:
                    field_name = '%s_%s' % (field, lang_field)
                    model_field = meta.model._meta.get_field(field_name)

                    self.fields['%s_%s' % (field, lang_code)] = serializers.CharField(
                        source=field_name,
                        required=not model_field.blank,
                        allow_null=model_field.null,
                        allow_blank=model_field.blank)
Ejemplo n.º 16
0
    def render_question(self, xml, question):
        xml.startElement('question', {'dc:uri': question['uri']})
        self.render_text_element(xml, 'uri_prefix', {}, question['uri_prefix'])
        self.render_text_element(xml, 'key', {}, question['key'])
        self.render_text_element(xml, 'path', {}, question['path'])
        self.render_text_element(xml, 'dc:comment', {}, question['comment'])
        self.render_text_element(xml, 'attribute',
                                 {'dc:uri': question['attribute']}, None)
        self.render_text_element(xml, 'questionset',
                                 {'dc:uri': question['questionset']}, None)
        self.render_text_element(xml, 'is_collection', {},
                                 question['is_collection'])
        self.render_text_element(xml, 'order', {}, question['order'])

        for lang_code, lang_string, lang_field in get_languages():
            self.render_text_element(xml, 'help', {'lang': lang_code},
                                     question['help_%s' % lang_code])
            self.render_text_element(xml, 'text', {'lang': lang_code},
                                     question['text_%s' % lang_code])
            self.render_text_element(xml, 'verbose_name', {'lang': lang_code},
                                     question['verbose_name_%s' % lang_code])
            self.render_text_element(
                xml, 'verbose_name_plural', {'lang': lang_code},
                question['verbose_name_plural_%s' % lang_code])

        self.render_text_element(xml, 'widget_type', {},
                                 question['widget_type'])
        self.render_text_element(xml, 'value_type', {}, question['value_type'])
        self.render_text_element(xml, 'maximum', {}, question['maximum'])
        self.render_text_element(xml, 'minimum', {}, question['minimum'])
        self.render_text_element(xml, 'step', {}, question['step'])
        self.render_text_element(xml, 'unit', {}, question['unit'])

        xml.startElement('optionsets', {})
        if 'optionsets' in question and question['optionsets']:
            for optionset in question['optionsets']:
                self.render_text_element(xml, 'optionset',
                                         {'dc:uri': optionset}, None)
        xml.endElement('optionsets')

        xml.startElement('conditions', {})
        if 'conditions' in question and question['conditions']:
            for condition in question['conditions']:
                self.render_text_element(xml, 'condition',
                                         {'dc:uri': condition}, None)
        xml.endElement('conditions')

        xml.endElement('question')
Ejemplo n.º 17
0
    def render_catalog(self, xml, catalog):
        xml.startElement('catalog', {'dc:uri': catalog['uri']})
        self.render_text_element(xml, 'uri_prefix', {}, catalog['uri_prefix'])
        self.render_text_element(xml, 'key', {}, catalog['key'])
        self.render_text_element(xml, 'dc:comment', {}, catalog['comment'])
        self.render_text_element(xml, 'order', {}, catalog['order'])

        for lang_code, lang_string, lang_field in get_languages():
            self.render_text_element(xml, 'title', {'lang': lang_code},
                                     catalog['title_%s' % lang_code])

        xml.endElement('catalog')

        if 'sections' in catalog and catalog['sections']:
            for section in catalog['sections']:
                self.render_section(xml, section)
Ejemplo n.º 18
0
    def render_section(self, xml, section):
        xml.startElement('section', {'dc:uri': section['uri']})
        self.render_text_element(xml, 'uri_prefix', {}, section['uri_prefix'])
        self.render_text_element(xml, 'key', {}, section['key'])
        self.render_text_element(xml, 'path', {}, section['path'])
        self.render_text_element(xml, 'dc:comment', {}, section['comment'])
        self.render_text_element(xml, 'catalog', {'dc:uri': section['catalog']}, None)
        self.render_text_element(xml, 'order', {}, section['order'])

        for lang_code, lang_string, lang_field in get_languages():
            self.render_text_element(xml, 'title', {'lang': lang_code}, section['title_%s' % lang_code])

        xml.endElement('section')

        if 'questionsets' in section and section['questionsets']:
            for questionset in section['questionsets']:
                self.render_questionset(xml, questionset)
Ejemplo n.º 19
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