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()
def main(args): # pragma: no cover global MAX_IDENTIFIER_PK stats = Counter() with transaction.manager: MAX_IDENTIFIER_PK = DBSession.query(Identifier.pk).order_by( desc(Identifier.pk)).first()[0] gl_names = glottolog_names() for l in DBSession.query(Languoid).options( joinedload_all(Language.languageidentifier, LanguageIdentifier.identifier)): stats.update(create_name(gl_names, l)) args.log.info('%s' % stats)
def main(args): # pragma: no cover global MAX_IDENTIFIER_PK stats = Counter() with transaction.manager: MAX_IDENTIFIER_PK = DBSession.query( Identifier.pk).order_by(desc(Identifier.pk)).first()[0] gl_names = glottolog_names() for l in DBSession.query(Languoid).options(joinedload_all( Language.languageidentifier, LanguageIdentifier.identifier )): stats.update(create_name(gl_names, l)) args.log.info('%s' % stats)