コード例 #1
0
def languages(req):
    """
    :param req:
    :return: list of (language, med) pairs with matching endangerment and doctype.
    """
    langs = []
    macroarea = req.params.get('macroarea')
    family = _get_families(req)
    year = req.params.get('year')

    label = 'Languages'
    try:
        ed = ENDANGERMENTS[int(req.matchdict['ed'])]
        label = HTML.em(ed.name) + ' languages'
    except IndexError:
        ed = None

    if family:
        label = label + ' of the %s families' % ', '.join(f.name for f in family)

    if macroarea:
        label = label + ' from ' + macroarea

    try:
        sdt = SIMPLIFIED_DOCTYPES[int(req.matchdict['sdt'])]
    except IndexError:
        sdt = None

    if sdt:
        label = label + ' whose most extensive description'

        if year:
            year = int(year)
            label = label + ' in %s' % year

        label = label + ' is a ' + sdt.name

    stats = ldstatus()
    for lang in language_query(req):
        if ed:
            _ed = lang.status.value
            if ed.name != _ed:
                continue

        med_, sources, _ = stats.get(lang.id, (None, [], None))
        med = None
        if year:
            for s in sources:
                s = src2dict(s)
                if s['year'] <= year:
                    med = s
                    break
        else:
            med = med_

        if sdt:
            _sdt = SIMPLIFIED_DOCTYPE_MAP[med['doctype'] if med else None]
            if _sdt.ord != sdt.ord:
                continue

        langs.append((lang, med))

    return {'languages': sorted(langs, key=lambda l: l[0].name), 'label': label}
コード例 #2
0
def languages(req):
    """
    Called when cells in the tally table are clicked to load the corresponding languages.

    :param req:
    :return: list of (language, med) pairs with matching endangerment and doctype.
    """
    macroarea = req.params.get('macroarea')
    family = _get_families(req)
    year = req.params.get('year')

    demap = defaultdict(dict)
    for pid in ['aes', 'med']:
        for de in get_parameter(pid).domain:
            demap[pid][de.number] = de

    aes, aeslpks, med, medlpks = None, [], None, []

    label = 'Languages'
    if int(req.matchdict['ed']) in demap['aes']:
        aes = demap['aes'][int(req.matchdict['ed'])]
        label = HTML.em(aes.name) + ' languages'
        aeslpks = {
            v.valueset.language_pk for v in DBSession.query(common.Value)\
                .filter(common.Value.domainelement_pk == aes.pk)\
                .options(joinedload(common.Value.valueset))}

    if family:
        label = label + ' of the %s families' % ', '.join(f.name
                                                          for f in family)

    if macroarea:
        label = label + ' from ' + macroarea

    if int(req.matchdict['sdt']) in demap['med']:
        med = demap['med'][int(req.matchdict['sdt'])]
        medlpks = {
            v.valueset.language_pk for v in DBSession.query(common.Value) \
                .filter(common.Value.domainelement_pk == med.pk) \
                .options(joinedload(common.Value.valueset))}

        label = label + ' whose most extensive description'

        if year:
            year = int(year)
            label = label + ' in %s' % year

        label = label + ' is a ' + med.name

    stats = ldstatus(get_parameter('aes').pk)
    langs = []
    for lang in language_query(req):
        if aes and lang.pk not in aeslpks:
            continue
        if not year and (med and lang.pk not in medlpks):
            continue

        aespk, med_, sources, _ = stats.get(lang.id, (None, None, [], None))
        gmed = None
        if year:
            drop = True
            for s in sources:
                s = src2dict(
                    s, {v.id.split('-')[1]: v
                        for v in demap['med'].values()})
                if s['year'] <= int(year):
                    gmed = s
                    if med and gmed['med_type'] == med.id.split('-')[1]:
                        drop = False
                    break
            if drop and med:
                continue
        else:
            gmed = med_
        langs.append((lang, gmed))

    return {
        'languages': sorted(langs, key=lambda l: l[0].name),
        'label': label
    }
コード例 #3
0
ファイル: langdocstatus.py プロジェクト: clld/glottolog3
def languages(req):
    """
    :param req:
    :return: list of (language, med) pairs with matching endangerment and doctype.
    """
    langs = []
    macroarea = req.params.get('macroarea')
    family = _get_families(req)
    year = req.params.get('year')

    label = 'Languages'
    try:
        ed = ENDANGERMENTS[int(req.matchdict['ed'])]
        label = HTML.em(ed.name) + ' languages'
    except IndexError:
        ed = None

    if family:
        label = label + ' of the %s families' % ', '.join(f.name for f in family)

    if macroarea:
        label = label + ' from ' + macroarea

    try:
        sdt = SIMPLIFIED_DOCTYPES[int(req.matchdict['sdt'])]
    except IndexError:
        sdt = None

    if sdt:
        label = label + ' whose most extensive description'

        if year:
            year = int(year)
            label = label + ' in %s' % year

        label = label + ' is a ' + sdt.name

    stats = ldstatus()
    for lang in language_query(req):
        if ed:
            _ed = lang.status.description
            if ed.name != _ed:
                continue

        med_, sources, _ = stats.get(lang.id, (None, [], None))
        med = None
        if year:
            for s in sources:
                s = src2dict(s)
                if s['year'] <= int(year):
                    med = s
                    break
        else:
            med = med_

        if sdt:
            _sdt = SIMPLIFIED_DOCTYPE_MAP[med['doctype'] if med else None]
            if _sdt.ord != sdt.ord:
                continue

        langs.append((lang, med))

    return {'languages': sorted(langs, key=lambda l: l[0].name), 'label': label}