def test_lang2tree(self): old, new = self.tmp_path('old'), self.tmp_path('new') old.mkdir() new.mkdir() lang2tree( Languoid.from_name_id_level('name', 'abcd1234', Level.language), [('parent', 'abcd1233', Level.family)], old, {}) assert old.joinpath('abcd1233', 'abcd1234', 'abcd1234.ini').exists() lang2tree( Languoid.from_name_id_level('name', 'abcd1234', Level.language), [('parent', 'abcd1233', Level.family)], new, {l.id: l for l in walk_tree(old)}) assert new.joinpath('abcd1233', 'abcd1234', 'abcd1234.ini').exists()
def lang2tree(lang, lineage, out, old_tree): groupdir = out for name, id_, level in lineage: groupdir = groupdir.joinpath(id_) if not groupdir.exists(): groupdir.mkdir() if id_ in old_tree: group = old_tree[id_] assert group.level == level if name != group.name: # rename a subgroup! group.name = name else: group = Languoid.from_name_id_level(name, id_, level) group.write_info(groupdir) langdir = groupdir.joinpath(lang.fname()) langdir.mkdir() if lang.id in old_tree: old_lang = old_tree[lang.id] assert old_lang.level == lang.level if old_lang.name != lang.name: old_lang.name = lang.name if old_lang.iso != lang.iso: old_lang.iso = lang.iso old_lang.write_info(langdir) else: lang.write_info(langdir)
def lang2tree(lang, lineage, out, old_tree): groupdir = out for name, id_, level in lineage: groupdir = groupdir.joinpath(id_) if not groupdir.exists(): groupdir.mkdir() if id_ in old_tree: group = old_tree[id_] assert group.level == level if name != group.name: # rename a subgroup! group.name = name else: group = Languoid.from_name_id_level(name, id_, level) group.write_info(groupdir) langdir = groupdir.joinpath(lang.fname()) langdir.mkdir() if lang.id in old_tree: old_lang = old_tree[lang.id] assert old_lang.level == lang.level if old_lang.name != lang.name: old_lang.name = lang.name if old_lang.iso != lang.iso: old_lang.iso = lang.iso old_lang.write_info(langdir) else: lang.write_info(langdir)
def test_lang2tree(self): old, new = self.tmp_path('old'), self.tmp_path('new') old.mkdir() new.mkdir() lang2tree( Languoid.from_name_id_level('name', 'abcd1234', Level.language), [('parent', 'abcd1233', Level.family)], old, {}) assert old.joinpath('abcd1233', 'abcd1234', 'abcd1234.ini').exists() lang2tree( Languoid.from_name_id_level('name', 'abcd1234', Level.language), [('parent', 'abcd1233', Level.family)], new, {l.id: l for l in walk_tree(old)}) assert new.joinpath('abcd1233', 'abcd1234', 'abcd1234.ini').exists()
def test_attrs(api): l = Languoid.from_name_id_level(api.tree, 'name', 'abcd1235', 'language', hid='NOCODE') l.name = 'other' assert l.name == 'other' with pytest.raises(AttributeError): l.glottocode = 'x' with pytest.raises(AttributeError): l.id = 'x' assert l.id == l.glottocode assert l.hid == 'NOCODE'
def test_attrs(self): from pyglottolog.languoids import Languoid, Level l = Languoid.from_name_id_level('name', 'abcd1235', Level.language, hid='NOCODE') l.name = 'other' self.assertEqual(l.name, 'other') with self.assertRaises(ValueError): l.glottocode = 'x' with self.assertRaises(ValueError): l.id = 'x' self.assertEqual(l.id, l.glottocode) self.assertEqual(l.hid, 'NOCODE')
def run(args): if Glottocode.pattern.match(args.parent): args.parent = get_languoid(args, args.parent).dir else: args.parent = pathlib.Path(args.parent) if not args.parent.exists(): raise ParserError('invalid parent dir specified') lang = Languoid.from_name_id_level( args.parent, args.name, args.repos.glottocodes.new(args.name), args.level, **dict(prop.split('=') for prop in args.props)) print("Info written to %s" % lang.write_info(outdir=args.parent))
def create(args): """Create a new languoid directory for a languoid specified by name and level. glottolog create <parent> <name> <level> """ assert args.args[2] in ['family', 'language', 'dialect'] parent = args.repos.languoid(args.args[0]) or None outdir = parent.dir if parent else args.repos.tree lang = Languoid.from_name_id_level( outdir, args.args[1], args.repos.glottocodes.new(args.args[1]), getattr(Level, args.args[2]), **dict(prop.split('=') for prop in args.args[3:])) print("Info written to %s" % lang.write_info(outdir=outdir))
def test_attrs(self): l = Languoid.from_name_id_level(self.api.tree, 'name', 'abcd1235', Level.language, hid='NOCODE') l.name = 'other' self.assertEqual(l.name, 'other') with self.assertRaises(AttributeError): l.glottocode = 'x' with self.assertRaises(AttributeError): l.id = 'x' self.assertEqual(l.id, l.glottocode) self.assertEqual(l.hid, 'NOCODE')
def lang2tree(api, log, lang, lineage, out, old_tree): groupdir = out for spec in lineage: hid = -1 name, id_, level = spec[:3] if len(spec) == 4: hid = spec[3] groupdir = groupdir.joinpath(id_) if not groupdir.exists(): groupdir.mkdir() if id_ in old_tree: group = old_tree[id_] if group.level != level: log.info('{0} from {1} to {2}'.format( group, group.level, level)) group.level = level if name != group.name: # rename a subgroup! group.name = name else: group = Languoid.from_name_id_level(api.tree, name, id_, level) if hid != -1: if (hid in api.iso or hid is None) and group.iso != hid: group.iso = hid if hid != group.hid: group.hid = hid group.write_info(groupdir) langdir = groupdir.joinpath(lang.id) langdir.mkdir() if lang.id in old_tree: old_lang = old_tree[lang.id] if old_lang.level != lang.level: log.info('{0} from {1} to {2}'.format(old_lang, old_lang.level, lang.level)) old_lang.level = lang.level if old_lang.name != lang.name: old_lang.name = lang.name if old_lang.iso != lang.iso: old_lang.iso = lang.iso if lang.hid and old_lang.hid != lang.hid: old_lang.hid = lang.hid old_lang.write_info(langdir) else: lang.write_info(langdir)
def new_languoid(args): """Create a new languoid directory for a languoid specified by name and level. glottolog new_languoid <name> <level> """ assert args.args[1] in ['family', 'language', 'dialect'] lang = Languoid.from_name_id_level( args.args[0], Glottocode.from_name(args.args[0]), args.args[1], **dict(prop.split('=') for prop in args.args[2:])) # # FIXME: how to specify parent? Just mv there? # print("Info written to %s" % lang.write_info())
def languoid(api, log, new, path, lname, glottocode, isocode, level): if not glottocode: glottocode = new.get((lname, level)) if not glottocode: new[lname, level] = glottocode = api.glottocodes.new(lname) lineage = [] if path: for i, (name, id_, hid) in enumerate(path): if id_ == ISOLATE_ID: if i != 0 or len(path) != 1: log.error( 'invalid classification line for languoid: {0} [{1}]'. format(lname, glottocode)) raise ValueError('invalid isolate line') break _level = Level.family if level == Level.dialect: _level = Level.language if i == 0 else Level.dialect if not id_: id_ = new.get((name, _level)) if not id_: new[name, _level] = id_ = api.glottocodes.new(name) lineage.append((name, id_, _level, hid)) lang = Languoid.from_name_id_level(api.tree, lname, glottocode, level, lineage=[(r[0], r[1], r[2]) for r in lineage]) if (isocode in api.iso) or (isocode is None): lang.iso = isocode lang.hid = isocode return lang, lineage