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)
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))
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))
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))
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)
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)
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)
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)
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))
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, )
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))
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))
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))
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))
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 })