Esempio n. 1
0
    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()
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
    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()
Esempio n. 5
0
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'
Esempio n. 6
0
    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')
Esempio n. 7
0
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))
Esempio n. 8
0
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))
Esempio n. 9
0
 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')
Esempio n. 10
0
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)
Esempio n. 11
0
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())
Esempio n. 12
0
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