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)
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
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)
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)