-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgera_cartela.py
97 lines (78 loc) · 3.51 KB
/
gera_cartela.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
from xml.dom import minidom
import xpath
import os
import json
import base64
import mimetypes
with open("templates/cartela_template_1.svg", 'r', encoding='utf-8') as f:
_cartela1 = minidom.parse(f)
with open("templates/cartela_template_2.svg", 'r', encoding='utf-8') as f:
_cartela2 = minidom.parse(f)
with open("dados/vereadores.json", 'r', encoding='utf-8') as f:
vereadores = json.load(f)
with open("dados/comissoes.json", 'r', encoding='utf-8') as f:
_comissoes = json.load(f)
comissoes = dict(map(lambda c: (c["nome"], c["logo"]), _comissoes))
with open("dados/partidos.json", 'r', encoding='utf-8') as f:
_partidos = json.load(f)
partidos = dict(map(lambda p: (p["sigla"], p["img"]), _partidos))
# abre imagem como base64
def openBase64(filename):
with open(filename, "rb") as image_file:
encoded_string = base64.b64encode(image_file.read()).decode("utf-8")
mime, encoding = mimetypes.guess_type(filename)
return f"data:{mime};base64,{encoded_string}"
def gera_vereadores(start, end, num):
for i in range(start, end):
vereador = vereadores[i]
elem_vereador = elem_vereadores[i - start]
# troca foto
elem_foto = xpath.find("./*[@inkscape:label='foto']", elem_vereador)[0]
elem_foto.setAttribute("xlink:href", openBase64(vereador["foto"]))
# troca nome
elem_nome = xpath.find("./*[@inkscape:label='nome']/tspan/text()",elem_vereador)[0]
elem_nome.nodeValue = vereador["nome"]
# troca partido
elem_partido = xpath.find("./*[@inkscape:label='partido']", elem_vereador)[0]
elem_partido.setAttribute("xlink:href", openBase64(partidos[vereador["partido"]]))
# troca sala
elem_sala = xpath.find("./*[@inkscape:label='texto_sala']/tspan/text()", elem_vereador)[0]
try:
if vereador["sala"]:
elem_sala.nodeValue = str(vereador["sala"])
except KeyError:
elem_sala.parentNode.parentNode.parentNode.removeChild(elem_sala.parentNode.parentNode)
elem_sala_caption = xpath.find("./*[@inkscape:label='texto_sala_caption']", elem_vereador)[0]
elem_sala_caption.parentNode.removeChild(elem_sala_caption)
# troca comissões
comissao = 1
elem_comissao = xpath.find(f"./*[@inkscape:label='comiss{comissao}']", elem_vereador)[0]
# tenta primeira comissão mesa diretora
try:
if vereador["mesa_diretora"]:
elem_comissao.setAttribute("xlink:href", openBase64("comissoes/mesa_diretora.png"))
comissao += 1
elem_comissao = xpath.find(f"./*[@inkscape:label='comiss{comissao}']", elem_vereador)[0]
except KeyError:
pass
# tenta comissões
try:
for c in vereador["comissoes"]:
elem_comissao.setAttribute("xlink:href", openBase64(comissoes[c]))
comissao += 1
elem_comissao = xpath.find(f"./*[@inkscape:label='comiss{comissao}']", elem_vereador)[0]
except (KeyError, IndexError):
pass
# remove icones extra
while comissao <= 5:
elem_comissao = xpath.find(f"./*[@inkscape:label='comiss{comissao}']", elem_vereador)[0]
elem_comissao.parentNode.removeChild(elem_comissao)
comissao += 1
with open(f'output/cartela_{num}.svg', 'w', encoding='utf-8') as f:
cartela.writexml(f)
cartela = _cartela1.cloneNode(True)
elem_vereadores = xpath.find("//*[@inkscape:label='vereador']",cartela)
gera_vereadores(0, 21, 1)
cartela = _cartela2.cloneNode(True)
elem_vereadores = xpath.find("//*[@inkscape:label='vereador']",cartela)
gera_vereadores(21, 55, 2)