Here are the examples of the python api clld.db.models.common.IdentifierType.iso.value taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
6 Examples
3
Example 1
def __json__(self, req=None, core=False):
def ancestor(l):
r = {"name": l.name, "id": l.id}
if req:
r['url'] = req.resource_url(l)
return r
res = super(Languoid, self).__json__(req)
if not core:
res['classification'] = [ancestor(l) for l in reversed(list(self.get_ancestors()))]
if self.iso_code:
res[IdentifierType.iso.value] = self.iso_code
res['macroareas'] = {ma.id: ma.name for ma in self.macroareas}
return res
3
Example 2
Project: glottolog3 Source File: views.py
def iso(request):
q = DBSession.query(Languoid).join(LanguageIdentifier).join(Identifier)\
.filter(Identifier.type == IdentifierType.iso.value)\
.filter(Identifier.name == request.matchdict['id']).first()
if not q:
return HTTPNotFound()
params = {}
if 'ext' in request.matchdict:
params['ext'] = request.matchdict['ext']
return HTTPFound(location=request.resource_url(q, **params))
0
Example 3
Project: glottolog3 Source File: import_tree.py
def main(args): # pragma: no cover
global MAX_IDENTIFIER_PK
with transaction.manager:
MAX_IDENTIFIER_PK = DBSession.query(
Identifier.pk).order_by(desc(Identifier.pk)).first()[0]
gl_name = glottolog_name()
gl_names = glottolog_names()
languoids = {l.pk: l for l in DBSession.query(Languoid)}
for attrs in jsonload(args.data_dir.joinpath('languoids', 'changes.json')):
replacement = attrs.pop('replacement', None)
hname = attrs.pop('hname', None)
for name, enum in [('level', LanguoidLevel), ('status', LanguoidStatus)]:
if name in attrs:
attrs[name] = enum.from_string(attrs[name])
l = languoids.get(attrs['pk'])
if l:
for k, v in attrs.items():
setattr(l, k, v)
#
# We do not assign ISO codes for existing languages, because it could be
# that the ISO code is now assigned to a family node, due to a change
# request, e.g. see https://github.com/clld/glottolog-data/issues/40
#
if len(l.hid or '') == 3 and not l.iso_code:
args.log.warn('Language with hid %s but no iso code!' % l.hid)
else:
l = Languoid(**attrs)
DBSession.add(l)
languoids[l.pk] = l
if len(attrs.get('hid', '')) == 3:
create_identifier(
None, l, name=attrs['hid'], type=IdentifierType.iso.value)
create_identifier(
gl_names.get(l.name),
l,
name=l.name,
description=gl_name.description,
type=gl_name.type)
if hname:
l.update_jsondata(hname=hname)
if replacement:
DBSession.add(Superseded(
languoid_pk=l.pk,
replacement_pk=replacement,
relation='classification update'))
DBSession.flush()
recreate_treeclosure()
0
Example 4
Project: glottolog3 Source File: iso.py
def update(args):
author = 'ISO 639-3 Registration Authority'
pid = 'iso6393'
dtid = 'overview'
dt = Doctype.get(dtid)
provider = Provider.get(pid, default=None)
if provider is None:
provider = Provider(
id=pid,
abbr=pid,
name=author,
description="Change requests submitted to the ISO 639-3 registration authority.")
iid = max(int(DBSession.execute(
"select max(cast(id as integer)) from source").fetchone()[0]), 500000)
pk = int(DBSession.execute("select max(pk) from source").fetchone()[0])
for crno, affected in args.json['changerequests'].items():
year, serial = crno.split('-')
title = 'Change Request Number %s' % crno
ref = Ref.get(title, key='title', default=None)
if not ref:
iid += 1
pk += 1
ref = Ref(
pk=pk,
id=str(iid),
name='%s %s' % (author, year),
bibtex_type=EntryType.misc,
number=crno,
description=title,
year=year,
year_int=int(year),
title=title,
author=author,
address='Dallas',
publisher='SIL International',
url='http://www.sil.org/iso639-3/cr_files/%s.pdf' % crno,
language_note=', '.join('%(Language Name)s [%(Affected Identifier)s]' % spec for spec in affected),
jsondata=dict(hhtype=dtid, src=pid))
ref.doctypes.append(dt)
ref.providers.append(provider)
for spec in affected:
lang = Languoid.get(spec['Affected Identifier'], key='hid', default=None)
if lang and lang not in ref.languages:
ref.languages.append(lang)
DBSession.add(ref)
transaction.commit()
transaction.begin()
matched = 0
near = 0
max_identifier_pk = DBSession.query(
Identifier.pk).order_by(desc(Identifier.pk)).first()[0]
families = []
for family in DBSession.query(Languoid)\
.filter(Languoid.level == LanguoidLevel.family)\
.filter(Language.active == True)\
.all():
isoleafs = set()
for row in DBSession.query(TreeClosureTable.child_pk, Languoid.hid)\
.filter(family.pk == TreeClosureTable.parent_pk)\
.filter(Languoid.pk == TreeClosureTable.child_pk)\
.filter(Languoid.hid != None)\
.filter(Languoid.level == LanguoidLevel.language)\
.filter(Languoid.status == LanguoidStatus.established)\
.all():
if len(row[1]) == 3:
isoleafs.add(row[1])
families.append((family, isoleafs))
families = sorted(families, key=lambda p: len(p[1]))
for mid, leafs in args.json['macrolanguages'].items():
leafs = set(leafs)
found = False
for family, isoleafs in families:
if leafs == isoleafs:
if mid not in [c.name for c in family.identifiers
if c.type == IdentifierType.iso.value]:
identifier = Identifier(
pk=max_identifier_pk + 1,
id=str(max_identifier_pk + 1),
name=mid,
type=IdentifierType.iso.value)
DBSession.add(identifier)
DBSession.flush()
DBSession.add(LanguageIdentifier(
identifier_pk=identifier.pk, language_pk=family.pk))
max_identifier_pk += 1
matched += 1
found = True
break
elif leafs.issubset(isoleafs):
print '~~~', family.name, '-->', mid, 'distance:', len(leafs), len(isoleafs)
near += 1
found = True
break
if not found:
print '---', mid, leafs
print 'matched', matched, 'of', len(args.json['macrolanguages']), 'macrolangs'
print near
0
Example 5
Project: glottolog3 Source File: views.py
def getLanguoids(name=False,
iso=False,
namequerytype='part',
country=False,
multilingual=False,
inactive=False):
"""return an array of languoids responding to the specified criterion.
"""
if not (name or iso or country):
return []
query = DBSession.query(Languoid)\
.options(joinedload(Languoid.family))\
.order_by(Languoid.name)
if not inactive:
query = query.filter(Language.active == True)
if name:
namequeryfilter = {
"regex": func.lower(Identifier.name).like(name.lower()),
"part": func.lower(Identifier.name).contains(name.lower()),
"whole": func.lower(Identifier.name) == name.lower(),
}[namequerytype if namequerytype in ('regex', 'whole') else 'part']
crit = [Identifier.type == 'name', namequeryfilter]
if not multilingual:
crit.append(func.coalesce(Identifier.lang, '').in_((u'', u'eng', u'en')))
query = query.filter(Language.identifiers.any(and_(*crit)))
elif country:
return [] # pragma: no cover
else:
query = query.join(LanguageIdentifier, Identifier)\
.filter(Identifier.name.contains(iso.lower()))\
.filter(Identifier.type == IdentifierType.iso.value)
return query
0
Example 6
Project: glottolog3 Source File: views.py
def quicksearch(request):
message = None
query = DBSession.query(Languoid)
term = request.params['search'].strip()
titlecase = term.istitle()
term = term.lower()
params = {'iso': '', 'country': '',
'name': '', 'namequerytype': 'part', 'multilingual': ''}
if not term:
query = None
elif len(term) < 3:
query = None
message = ('Please enter at least four characters for a name search '
'or three characters for an iso code')
elif len(term) == 3 and not titlecase:
query = query.filter(Languoid.identifiers.any(
type=IdentifierType.iso.value, name=term))
kind = 'ISO 639-3'
elif len(term) == 8 and GLOTTOCODE_PATTERN.match(term):
query = query.filter(Languoid.id == term)
kind = 'Glottocode'
else:
query = query.filter(Languoid.active == True, Languoid.identifiers.any(and_(
Identifier.type == u'name', Identifier.description == u'Glottolog',
func.lower(Identifier.name).contains(term))))
kind = 'name part'
params['name'] = term
if query is None:
languoids = []
else:
languoids = query.order_by(Languoid.name)\
.options(joinedload(Languoid.family)).all()
if not languoids:
message = 'No matching languoids found for %s "%s"' % (kind, term)
elif len(languoids) == 1:
raise HTTPFound(request.resource_url(languoids[0]))
map_, icon_map, family_map = get_selected_languages_map(request, languoids)
layer = list(map_.get_layers())[0]
if not layer.data['features']:
map_ = None
countries = json.dumps(['%s (%s)' % (c.name, c.id) for c in
DBSession.query(Country).order_by(Country.description)])
return {'message': message, 'params': params, 'languoids': languoids,
'map': map_, 'countries': countries}