Skip to content
Snippets Groups Projects
Select Git revision
  • 71d886fafbc47f17540c7a718f6b8d6cf8db01de
  • master default protected
  • vertical_relations
  • lu_without_semantic_frames
  • hierarchy
  • additional-unification-filters
  • v0.1.1
  • v0.1.0
  • v0.0.9
  • v0.0.8
  • v0.0.7
  • v0.0.6
  • v0.0.5
  • v0.0.4
  • v0.0.3
  • v0.0.2
  • v0.0.1
17 results

urls.py

Blame
  • autocompletes.py 2.93 KiB
    from django.http import JsonResponse
    
    from django.utils.translation import gettext as _
    
    from syntax.models_phrase import PhraseType, FixedAttributes, Lemma
    from connections.models import Entry
    from meanings.models import LexicalUnit
    
    from entries.form_fields.query_managers import RegexQueryManager
    
    object_getters = {
        # only take lus that are used as sel. prefs
        'lu' : lambda: LexicalUnit.objects.filter(synset__argument__isnull=False)
    }
    
    lookups = {
        'phrasetype' : (PhraseType, 'text_rep'),
        'lemma'      : (Entry, 'name'),
        'lex_lemma'  : (Lemma, 'name'),
        'fixed'      : (FixedAttributes, 'text'),
        'lu'         : (LexicalUnit,  'text_rep')
    }
    
    def get_lu_tooltip(lu):
        ret = []
        if lu.definition:
            ret.append(_('definicja:') + '<ul><li>{}</li></ul>'.format(lu.definition))
        if lu.gloss:
            ret.append(_('glosa:') + '<ul><li>{}</li></ul>'.format(lu.gloss))
        if lu.synset.definition:
            ret.append(_('definicja synsetu:') + '<ul><li>{}</li></ul>'.format(lu.synset.definition))
        other_lus = list(lu.synset.lexical_units.exclude(id=lu.id))
        if other_lus:
            ret.append(_('inne jednostki w synsecie:') + '<ul>{}</ul>'.format(''.join(map('<li>{}</li>'.format, sorted(map(str, other_lus))))))
        hypernyms = list(lu.synset.hypernyms.all())
        if hypernyms:
            ret.append(_('hiperonimy synsetu:') + '<ul>{}</ul>'.format(''.join(map('<li>{}</li>'.format, sorted(map(str, hypernyms))))))
        return ' '.join(ret)
    
    tooltip_getters = {
        'lu' : get_lu_tooltip,
    }
    
    def autocomplete(request):
        if request.method == 'GET':
            what, text = request.GET['what'], request.GET['text']
            text = '{}.*'.format(text.strip())
            suggestions = []
            tooltips = dict()
            if what in lookups:
                model, field = lookups[what]
                tooltip_getter = tooltip_getters.get(what, None)
                qm = RegexQueryManager(lookup=field)
                try:
                    queries = qm.make_queries(text, None)
                    objects = object_getters.get(what, model.objects.all)()
                    for query in queries:
                        objects = objects.filter(query).distinct()
                    for o in objects:
                        suggestion = getattr(o, field)
                        suggestions.append(suggestion)
                        if tooltip_getter:
                            tooltip = tooltip_getter(o)
                            if tooltip:
                                tooltips[suggestion] = tooltip
                    suggestions = sorted(suggestions)
                except Exception as e:
                    suggestions = ['brak sugestii (błąd) ' + str(e)]
            else:
                suggestions = ['brak sugestii (nie zdefiniowano)']
            if not suggestions:
                suggestions = ['brak sugestii']
            if len(suggestions) > 10:
                suggestions = suggestions[:10] + ['+ {} sugestii'.format(len(suggestions) - 10)]
            return JsonResponse({'suggestions' : suggestions, 'tooltips' : tooltips})