"""Leva a descrição NOBRADE para o mural: grava no `meta` de cada peça do web/atlas/atlas-map.json o código de referência, a data normalizada, a série e o suporte, sem re-renderizar os atlas .webp. python -m nobrade.mural (de dentro de pipeline/, depois de python -m nobrade) Campos novos em meta (curtos: o mapa inteiro desce para o navegador): ref código de referência (1.1) dt data na forma da NOBRADE (1.3) ano ano inicial, para o histograma si índice em `series` do mapa (nível 3) sup espécie e suporte (1.5) rep categoria de reprodução (4.2) """ import json from .config import RAIZ, SAIDA MAPA = RAIZ / 'web' / 'atlas' / 'atlas-map.json' def main(): series, dossies = {}, {} for linha in (SAIDA / 'unidades.jsonl').open(encoding='utf-8'): u = json.loads(linha) if u['nivel'] == 3: series[u['id']] = u['1.2']['titulo'] elif u['nivel'] == 4: dossies[u['handle']] = u d = json.loads(MAPA.read_text(encoding='utf-8')) titulos = sorted(set(series.values()), key=str.casefold) idx = {t: i for i, t in enumerate(titulos)} d['series'] = titulos feitos = 0 for h, e in d['map'].items(): u = dossies.get(h) if not u: continue p = u['1.3']['producao'] dim = u['1.5'] sup = dim['especie'] + (f" {dim['cor']}" if dim.get('cor') else '') + (f", {dim['suporte']}" if dim.get('suporte') else '') e['meta'].update({ 'ref': u['1.1'], 'dt': p.get('forma'), 'ano': p.get('inicio') or p.get('fim'), 'si': idx[series[u['pai']]], 'sup': sup, 'rep': u['4.2']['categoria'], }) feitos += 1 MAPA.write_text(json.dumps(d, ensure_ascii=False, separators=(',', ':')), encoding='utf-8') print(f'{feitos} de {len(d["map"])} peças com descrição NOBRADE; {len(titulos)} séries') if __name__ == '__main__': main()