Пример #1
0
def save(pairs,
         root=ROOT,
         basename=BASENAME,
         assume_changed=False,
         verbose=False,
         load=ConfigParser.from_file):
    """Write ((<path_part>, ...), <dict of dicts>) pairs to root."""
    for path_tuple, d in pairs:
        path = str(root.joinpath(*path_tuple) / basename)
        cfg = load(path)
        # FIXME: missing sections and options
        drop_sections = set(
            cfg.sections()).difference(set(d) | {'core', 'sources'})
        changed = assume_changed or bool(drop_sections)
        for s in drop_sections:
            cfg.remove_section(s)
        for section, s in iteritems(d):
            if section != 'core':
                drop_options = set(cfg.options(section))
                if section == 'iso_retirement':
                    drop_options.discard('change_to')
                drop_options.difference_update(set(s))
                changed = changed or bool(drop_options)
                for o in drop_options:
                    cfg.remove_option(section, o)
            for option, value in iteritems(s):
                if cfg.get(section, option) != value:
                    changed = True
                    cfg.set(section, option, value)
        if changed:
            if verbose:
                print(path)
            cfg.to_file(path)
Пример #2
0
 def iterpairs(records):
     for p, r in records:
         path_tuple = pathlib.Path(p).parts
         for section, s in iteritems(r):
             for option in s:
                 if is_lines(section, option):
                     s[option] = '\n'.join([''] + s[option])
         yield path_tuple, r
Пример #3
0
def _load(conn, root):
    insert_lang = sa.insert(Languoid, bind=conn).execute

    sa.insert(Macroarea, bind=conn).execute([{
        'name': n
    } for n in sorted(MACROAREA)])
    lang_ma = languoid_macroarea.insert(bind=conn).execute

    has_country = sa.select(
        [sa.exists().where(Country.id == sa.bindparam('id'))],
        bind=conn).scalar
    insert_country = sa.insert(Country, bind=conn).execute
    lang_country = languoid_country.insert(bind=conn).execute

    insert_source = sa.insert(Source, bind=conn).execute
    insert_altname = sa.insert(Altname, bind=conn).execute
    insert_trigger = sa.insert(Trigger, bind=conn).execute
    insert_ident = sa.insert(Identifier, bind=conn).execute
    insert_comment = sa.insert(ClassificationComment, bind=conn).execute
    insert_ref = sa.insert(ClassificationRef, bind=conn).execute
    insert_enda = sa.insert(Endangerment, bind=conn).execute
    insert_el = sa.insert(EthnologueComment, bind=conn).execute

    insert_ir = sa.insert(IsoRetirement, bind=conn).execute
    insert_irct = sa.insert(IsoRetirementChangeTo, bind=conn).execute

    for l in iterlanguoids(root):
        lid = l['id']

        macroareas = l.pop('macroareas')
        countries = l.pop('countries')

        sources = l.pop('sources', None)
        altnames = l.pop('altnames', None)
        triggers = l.pop('triggers', None)
        identifier = l.pop('identifier', None)
        classification = l.pop('classification', None)
        endangerment = l.pop('endangerment', None)
        hh_ethnologue_comment = l.pop('hh_ethnologue_comment', None)
        iso_retirement = l.pop('iso_retirement', None)

        insert_lang(l)
        for ma in macroareas:
            lang_ma(languoid_id=lid, macroarea_name=ma)
        for name, cc in countries:
            if not has_country(id=cc):
                insert_country(id=cc, name=name)
            lang_country(languoid_id=lid, country_id=cc)
        if sources is not None:
            for provider, data in iteritems(sources):
                for i, s in enumerate(data, 1):
                    insert_source(languoid_id=lid,
                                  provider=provider,
                                  ord=i,
                                  **s)
        if altnames is not None:
            for provider, names in iteritems(altnames):
                for i, n in enumerate(names, 1):
                    insert_altname(languoid_id=lid,
                                   provider=provider,
                                   ord=i,
                                   **n)
        if triggers is not None:
            for field, triggers in iteritems(triggers):
                for i, t in enumerate(triggers, 1):
                    insert_trigger(languoid_id=lid,
                                   field=field,
                                   trigger=t,
                                   ord=i)
        if identifier is not None:
            for site, i in iteritems(identifier):
                insert_ident(languoid_id=lid, site=site, identifier=i)
        if classification is not None:
            for c, value in iteritems(classification):
                isref, kind = CLASSIFICATION[c]
                if isref:
                    for i, r in enumerate(value, 1):
                        insert_ref(languoid_id=lid, kind=kind, ord=i, **r)
                else:
                    insert_comment(languoid_id=lid, kind=kind, comment=value)
        if endangerment is not None:
            insert_enda(languoid_id=lid, **endangerment)
        if hh_ethnologue_comment is not None:
            insert_el(languoid_id=lid, **hh_ethnologue_comment)
        if iso_retirement is not None:
            change_to = iso_retirement.pop('change_to')
            insert_ir(languoid_id=lid, **iso_retirement)
            for i, c in enumerate(change_to, 1):
                insert_irct(languoid_id=lid, code=c, ord=i)
Пример #4
0
 def __init__(self, defaults=None, **kwargs):
     for k, v in iteritems(self._init_defaults):
         kwargs.setdefault(k, v)
     super(ConfigParser, self).__init__(defaults=defaults, **kwargs)