feat: descrição arquivística NOBRADE multinível com exportação EAD 3, EAC-CPF e AtoM
- pipeline/nobrade: normalizadores de datas (ISO 8601-2), séries, autoridades, espécie/suporte, direitos, lugar e assuntos; montagem dos níveis 0–5 com código de referência BR RJXYZ.BF.<seção>.<série>.<handle>.<imagem> - validador dos elementos obrigatórios: 0 pendências em 26.454 unidades - EAD 3 e 457 EAC-CPF validados contra os XSD - mural: cartão com código, data normalizada, série e reprodução; filtro por série
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
"""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()
|
||||
Reference in New Issue
Block a user