reports.py 2.75 KB
# -*- coding: utf-8 -*-
from django.utils.translation import ugettext as _

from dictionary.models import Lexeme, LexemeAttributeValue, CrossReferenceType
from patterns.models import Pattern

report_functions = []


def report_list(fun):
    report_functions.append(fun)
    return fun


@report_list
def derivatives_without_verb():
    derivatives = Lexeme.objects.filter(
        part_of_speech__symbol__in=('ger', 'pact', 'ppas', 'appas'))
    return {
        _(u'No cross-reference to the verb'):
            derivatives.exclude(refs_to__type__symbol__endswith='ver'),
    }


@report_list
def verbs_without_derivatives():
    proper = list(LexemeAttributeValue.objects.filter(
        attribute__name=u'właściwy').exclude(value='Q'))
    trans = LexemeAttributeValue.objects.get(
        attribute__name=u'przechodniość', value='T')
    q_trans = LexemeAttributeValue.objects.get(
        attribute__name=u'przechodniość', value='qT')
    imperf = list(LexemeAttributeValue.objects.filter(
        attribute__name=u'aspekt').exclude(value='dk'))
    ppas = CrossReferenceType.objects.get(
        symbol='verppas', to_pos__symbol='ppas')
    appas = CrossReferenceType.objects.get(
        symbol='verppas', to_pos__symbol='appas')
    patterns10 = list(Pattern.objects.filter(
        type__inflection_type_id='v', endings__base_form_label__symbol='10'))
    patterns11 = list(Pattern.objects.filter(
        type__inflection_type_id='v', endings__base_form_label__symbol='11'))
    patterns3 = list(Pattern.objects.filter(
        type__inflection_type_id='v', endings__base_form_label__symbol='3'))
    proper_verbs = Lexeme.objects.filter(
        part_of_speech__symbol='v', lexemeattributevalue__in=proper)
    # czasownik właściwy przechodni wymaga imiesłowu biernego
    proper_trans = proper_verbs.filter(
        lexemeattributevalue=trans, patterns__in=patterns10)
    no_ppas = proper_trans.exclude(refs_to__type=ppas)
    # czasownik właściwy quasi-przechodni wymaga quasi-imiesłowu biernego
    proper_qt = proper_verbs.filter(
        lexemeattributevalue=q_trans, patterns__in=patterns10)
    no_appas = proper_qt.exclude(refs_to__type=appas)
    # czasownik właściwy niedokononany wymaga imiesłowu czynnego
    proper_imperf = proper_verbs.filter(
        lexemeattributevalue__in=imperf, patterns__in=patterns3)
    no_pact = proper_imperf.exclude(refs_to__type__symbol='verpact')
    # czasownik właściwy z wzorem z zakończeniem 11 wymaga gerundium
    proper_11 = proper_verbs.filter(patterns__in=patterns11)
    no_ger = proper_11.exclude(refs_to__type__symbol='verger')
    return {
        _(u'No passive participle'): no_ppas,
        _(u'No passive quasi-participle'): no_appas,
        _(u'No active participle'): no_pact,
        _(u'No gerund'): no_ger,
    }