Example #1
0
def _get_model_stats(model, filter=lambda x: x):
    default_lang = utils.get_default_language()
    registry = utils.get_registry()
    keyvalues = filter(KeyValue.objects.for_model(model, registry[model].values()).exclude(language=default_lang))
    total = keyvalues.count()
    done = keyvalues.filter(edited=True, fuzzy=False).count()
    return (done * 100 / total if total > 0 else 0, done, total)
Example #2
0
def model_list(request):
    '''
    Shows an overview of models to translate, along with the fields, languages and progress information.
    The context structure is defined as follows:

    context = {'models': [{'languages': [('nl', 'NL', (<percent_done>, <todo>, <total>)), ('fr', 'FR', (<percent_done>, <todo>, <total>))],
                           'field_names': [u'description'],
                           'stats': (75, 15, 20),
                           'slug': u'flags_app.flag',
                           'model_name': u'flag'}]}
    '''
    registry = utils.get_registry()

    default_lang = utils.get_default_language()
    languages = [l for l in settings.LANGUAGES if l[0] != default_lang]

    models = [{'slug': _get_model_slug(model),
               'model_name': u'%s' % model._meta.verbose_name,
               'field_names': [u'%s' % f.verbose_name for f in registry[model].values()],
               'stats': _get_model_stats(model),
               'languages': [(l[0], l[1], _get_model_stats(model, filter=lambda x: x.filter(language=l[0]))) for l in languages],
               } for model in registry]


    context = {'models': models}

    return render_to_response('datatrans/model_list.html', context, context_instance=RequestContext(request))
Example #3
0
def editor(request, model, language, objects):
    registry = utils.get_registry()
    fields = registry[model]

    default_lang = utils.get_default_language()
    model_name = u'%s' % model._meta.verbose_name

    first_unedited_translation = None
    object_list = []
    for object in objects:
        context_object = get_context_object(model, fields, language,
                                            default_lang, object)
        object_list.append(context_object)

        if first_unedited_translation is None:
            for field in context_object['fields']:
                tr = field['translation']
                if not tr.edited:
                    first_unedited_translation = tr
                    break

    context = {
        'model': model_name,
        'objects': object_list,
        'original_language': default_lang,
        'other_language': language,
        'progress': _get_model_stats(model,
                                     lambda x: x.filter(language=language)),
        'first_unedited': first_unedited_translation
    }

    return render_to_response('datatrans/model_detail.html',
                              context,
                              context_instance=RequestContext(request))
Example #4
0
def editor(request, model, language, objects):
    registry = utils.get_registry()
    fields = registry[model]

    default_lang = utils.get_default_language()
    model_name = u'%s' % model._meta.verbose_name

    first_unedited_translation = None
    object_list = []
    for object in objects:
        context_object = get_context_object(
            model, fields, language, default_lang, object)
        object_list.append(context_object)

        if first_unedited_translation is None:
            for field in context_object['fields']:
                tr = field['translation']
                if not tr.edited:
                    first_unedited_translation = tr
                    break

    context = {'model': model_name,
               'objects': object_list,
               'original_language': default_lang,
               'other_language': language,
               'progress': _get_model_stats(
                   model, lambda x: x.filter(language=language)),
               'first_unedited': first_unedited_translation}

    return render_to_response(
        'datatrans/model_detail.html', context,
        context_instance=RequestContext(request))
Example #5
0
 def add_new_records():
     value = "test string that does not already exist in db"
     option = Option(name=value)
     option.save()
     count_kv = KeyValue.objects.filter(language=get_default_language(),
                                        value=value).count()
     self.assertEqual(count_kv, 1,
                      u"Got %d KeyValues after concurrent insert instead of 1." % count_kv)
Example #6
0
def _get_model_stats(model, filter=lambda x: x):
    default_lang = utils.get_default_language()
    registry = utils.get_registry()
    keyvalues = filter(
        KeyValue.objects.for_model(
            model, registry[model].values()).exclude(language=default_lang))
    total = keyvalues.count()
    done = keyvalues.filter(edited=True, fuzzy=False).count()
    return (done * 100 / total if total > 0 else 0, done, total)
Example #7
0
 def add_new_records():
     value = "test string that does not already exist in db"
     option = Option(name=value)
     option.save()
     count_kv = KeyValue.objects.filter(
         language=get_default_language(), value=value).count()
     self.assertEqual(
         count_kv, 1,
         u"Got %d KeyValues after concurrent insert instead of 1." %
         count_kv)
Example #8
0
def obsolete_list(request):
    from django.db.models import Q

    default_lang = utils.get_default_language()
    all_obsoletes = utils.find_obsoletes().order_by('digest')
    obsoletes = all_obsoletes.filter(Q(edited=True) | Q(language=default_lang))

    if request.method == 'POST':
        all_obsoletes.delete()
        return HttpResponseRedirect(reverse('datatrans_obsolete_list'))

    context = {'obsoletes': obsoletes}
    return render(request, 'datatrans/obsolete_list.html', context)
Example #9
0
def obsolete_list(request):
    from django.db.models import Q

    default_lang = utils.get_default_language()
    all_obsoletes = utils.find_obsoletes().order_by('digest')
    obsoletes = all_obsoletes.filter(Q(edited=True) | Q(language=default_lang))

    if request.method == 'POST':
        all_obsoletes.delete()
        return HttpResponseRedirect(reverse('datatrans_obsolete_list'))

    context = {'obsoletes': obsoletes}
    return render_to_response('datatrans/obsolete_list.html', context, context_instance=RequestContext(request))
Example #10
0
def model_list(request):
    """
    Shows an overview of models to translate, along with the fields, languages
    and progress information.
    The context structure is defined as follows:

    context = {'models': [{'languages': [('nl', 'NL', (<percent_done>, <todo>, <total>)), ('fr', 'FR', (<percent_done>, <todo>, <total>))],
                           'field_names': [u'description'],
                           'stats': (75, 15, 20),
                           'slug': u'flags_app.flag',
                           'model_name': u'flag'}]}
    """
    registry = utils.get_registry()

    default_lang = utils.get_default_language()
    languages = [l for l in settings.LANGUAGES if l[0] != default_lang]

    models = [{
        'slug':
        _get_model_slug(model),
        'model_name':
        '{}'.format(model._meta.verbose_name),
        'field_names':
        ['{}'.format(f.verbose_name) for f in registry[model].values()],
        'stats':
        _get_model_stats(model),
        'words':
        count_model_words(model),
        'languages': [(
            l[0],
            l[1],
            _get_model_stats(model, filter=lambda x: x.filter(language=l[0])),
        ) for l in languages],
    } for model in registry]

    total_words = sum(m['words'] for m in models)
    context = {'models': models, 'words': total_words}

    return render(
        request,
        'datatrans/model_list.html',
        context,
    )
Example #11
0
def model_list(request):
    '''
    Shows an overview of models to translate, along with the fields, languages and progress information.
    The context structure is defined as follows:

    context = {'models': [{'languages': [('nl', 'NL', (<percent_done>, <todo>, <total>)), ('fr', 'FR', (<percent_done>, <todo>, <total>))],
                           'field_names': [u'description'],
                           'stats': (75, 15, 20),
                           'slug': u'flags_app.flag',
                           'model_name': u'flag'}]}
    '''
    registry = utils.get_registry()

    default_lang = utils.get_default_language()
    languages = [l for l in settings.LANGUAGES if l[0] != default_lang]

    models = [{
        'slug':
        _get_model_slug(model),
        'model_name':
        u'%s' % model._meta.verbose_name,
        'field_names':
        [u'%s' % f.verbose_name for f in registry[model].values()],
        'stats':
        _get_model_stats(model),
        'languages':
        [(l[0], l[1],
          _get_model_stats(model, filter=lambda x: x.filter(language=l[0])))
         for l in languages],
    } for model in registry]

    context = {'models': models}

    return render_to_response('datatrans/model_list.html',
                              context,
                              context_instance=RequestContext(request))
Example #12
0
def model_detail(request, slug, language):
    '''
    The context structure is defined as follows:

    context = {'model': '<name of model>',
               'fields': {'name': '<name of field>',
                          'items': [{'original': '<KeyValue object with original value>',
                                     'translations': [<KeyValue objects with translation>]}]
                         }
              }
    '''

    if request.method == 'POST':
        translations = [(KeyValue.objects.get(pk=int(k.split('_')[1])), v) for k, v in request.POST.items() if 'translation_' in k]
        section = [k for k, v in request.POST.items() if 'section_' in k]
        section = '#%s' % section[0] if len(section) > 0 else ''
        for keyvalue, translation in translations:
            empty = 'empty_%d' % keyvalue.pk in request.POST
            ignore = 'ignore_%d' % keyvalue.pk in request.POST
            if translation != '' or empty or ignore:
                if keyvalue.value != translation:
                    if not ignore:
                        keyvalue.value = translation
                    keyvalue.fuzzy = False
                if ignore:
                    keyvalue.fuzzy = False
                keyvalue.edited = True
                keyvalue.save()
        return HttpResponseRedirect(reverse('datatrans_model_detail', args=(slug, language)) + section)

    model = _get_model_entry(slug)
    registry = utils.get_registry()
    fields = registry[model]

    default_lang = utils.get_default_language()
    model_name = u'%s' % model._meta.verbose_name

    field_list = []
    first_unedited_translation = None
    for field in fields.values():
        items = []
        objects = model.objects.values(field.name).distinct().all().order_by(field.name)
        for object in objects:
            key = object[field.name]
            original = KeyValue.objects.get_keyvalue(key, default_lang)
            translation = KeyValue.objects.get_keyvalue(key, language)
            if first_unedited_translation is None and (not translation.edited or translation.fuzzy):
                first_unedited_translation = translation
            items.append({'original': original, 'translation': translation})
        field_list.append({'name': field.name, 'verbose_name': unicode(field.verbose_name), 'items': items})


    context = {'model': model_name,
               'fields': field_list,
               'original_language': default_lang,
               'other_language': language,
               'progress': _get_model_stats(model, lambda x: x.filter(language=language)),
               'first_unedited': first_unedited_translation}


    return render_to_response('datatrans/model_detail.html', context, context_instance=RequestContext(request))
Example #13
0
def model_detail(request, slug, language):
    '''
    The context structure is defined as follows:

    context = {'model': '<name of model>',
               'fields': {'name': '<name of field>',
                          'items': [{'original': '<KeyValue object with original value>',
                                     'translations': [<KeyValue objects with translation>]}]
                         }
              }
    '''

    if request.method == 'POST':
        translations = [(KeyValue.objects.get(pk=int(k.split('_')[1])), v)
                        for k, v in request.POST.items()
                        if 'translation_' in k]
        section = [k for k, v in request.POST.items() if 'section_' in k]
        section = '#%s' % section[0] if len(section) > 0 else ''
        for keyvalue, translation in translations:
            empty = 'empty_%d' % keyvalue.pk in request.POST
            ignore = 'ignore_%d' % keyvalue.pk in request.POST
            if translation != '' or empty or ignore:
                if keyvalue.value != translation:
                    if not ignore:
                        keyvalue.value = translation
                    keyvalue.fuzzy = False
                if ignore:
                    keyvalue.fuzzy = False
                keyvalue.edited = True
                keyvalue.save()
        return HttpResponseRedirect(
            reverse('datatrans_model_detail', args=(slug, language)) + section)

    model = _get_model_entry(slug)
    registry = utils.get_registry()
    fields = registry[model]

    default_lang = utils.get_default_language()
    model_name = u'%s' % model._meta.verbose_name

    field_list = []
    first_unedited_translation = None
    for field in fields.values():
        items = []
        objects = model.objects.values(field.name).distinct().all().order_by(
            field.name)
        for object in objects:
            key = object[field.name]
            original = KeyValue.objects.get_keyvalue(key, default_lang)
            translation = KeyValue.objects.get_keyvalue(key, language)
            if first_unedited_translation is None and (not translation.edited
                                                       or translation.fuzzy):
                first_unedited_translation = translation
            items.append({'original': original, 'translation': translation})
        field_list.append({
            'name': field.name,
            'verbose_name': unicode(field.verbose_name),
            'items': items
        })

    context = {
        'model': model_name,
        'fields': field_list,
        'original_language': default_lang,
        'other_language': language,
        'progress': _get_model_stats(model,
                                     lambda x: x.filter(language=language)),
        'first_unedited': first_unedited_translation
    }

    return render_to_response('datatrans/model_detail.html',
                              context,
                              context_instance=RequestContext(request))
Example #14
0
def model_detail(request, slug, language):
    """
    The context structure is defined as follows:

    context = {'model': '<name of model>',
               'fields': {'name': '<name of field>',
                          'items': [{'original': '<KeyValue object with original value>',
                                     'translations': [<KeyValue objects with translation>]}]
                         }
              }
    """

    if request.method == "POST":
        translations = [
            (KeyValue.objects.get(pk=int(k.split("_")[1])), v) for k, v in request.POST.items() if "translation_" in k
        ]
        section = [k for k, v in request.POST.items() if "section_" in k]
        section = "#%s" % section[0] if len(section) > 0 else ""
        for keyvalue, translation in translations:
            empty = "empty_%d" % keyvalue.pk in request.POST
            ignore = "ignore_%d" % keyvalue.pk in request.POST
            if translation != "" or empty or ignore:
                if keyvalue.value != translation:
                    if not ignore:
                        keyvalue.value = translation
                    keyvalue.fuzzy = False
                if ignore:
                    keyvalue.fuzzy = False
                keyvalue.edited = True
                keyvalue.save()
        return HttpResponseRedirect(reverse("datatrans_model_detail", args=(slug, language)) + section)

    model = _get_model_entry(slug)
    registry = utils.get_registry()
    fields = registry[model]

    default_lang = utils.get_default_language()
    model_name = u"%s" % model._meta.verbose_name

    field_list = []
    first_unedited_translation = None
    for field in fields.values():
        items = []
        objects = model.objects.values(field.name).distinct().all().order_by(field.name)
        for object in objects:
            key = object[field.name]
            original = KeyValue.objects.get_keyvalue(key, default_lang)
            translation = KeyValue.objects.get_keyvalue(key, language)
            if first_unedited_translation is None and (not translation.edited or translation.fuzzy):
                first_unedited_translation = translation
            items.append({"original": original, "translation": translation})
        field_list.append({"name": field.name, "verbose_name": unicode(field.verbose_name), "items": items})

    context = {
        "model": model_name,
        "fields": field_list,
        "original_language": default_lang,
        "other_language": language,
        "progress": _get_model_stats(model, lambda x: x.filter(language=language)),
        "first_unedited": first_unedited_translation,
    }

    return render_to_response("datatrans/model_detail.html", context, context_instance=RequestContext(request))
Example #15
0
def profile(request):
    # get the user ID; None, if user is not logged in
    #u = User.objects.get(pk=request.user.pk)
    form = MemberForm()

    try:
        m = Member.objects.active().prefetch_related(
            'u', 'r', 'coordinator', 'coord_bachelor', 'coord_msc',
            'mcoord_msc', 'coord_phd').get(u_id__exact=request.user.pk)
    except Member.DoesNotExist:
        raise Http404

    instance = get_object_or_404(Member, id=m.id)

    ct = ContentType.objects.get(model='member')
    ct = ct.id

    lang = request.LANGUAGE_CODE

    degrees = KeyValue.objects.all().filter(content_type=ct,
                                            field='degrees',
                                            object_id=m.id,
                                            language=lang)
    degrees = degrees[0]
    experience = KeyValue.objects.all().filter(content_type=ct,
                                               field='experience',
                                               object_id=m.id,
                                               language=lang)
    experience = experience[0]
    activity = KeyValue.objects.all().filter(content_type=ct,
                                             field='activity',
                                             object_id=m.id,
                                             language=lang)
    activity = activity[0]
    notes = KeyValue.objects.all().filter(content_type=ct,
                                          field='notes',
                                          object_id=m.id,
                                          language=lang)
    notes = notes[0]

    all_obsoletes = find_obsoletes().order_by('digest')
    obsoletes = all_obsoletes.filter(
        Q(edited=True) | Q(language=get_default_language()))

    if request.method == 'POST':
        form = MemberForm(request.POST or None,
                          request.FILES or None,
                          instance=instance)
        if form.is_valid():
            form.clean()
            details = form.save()
            details.save()
            degrees.save()
            experience.save()
            activity.save()
            notes.save()
            obsoletes.delete()
            update_messages()
            return redirect('pty')

    return render(request, 'members/profile.html', {
        'user': request.user,
        'm': m,
        'form': form
    })