This repository has been archived by the owner on Jul 31, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 8
/
servidores-carrega-couchbase.py
59 lines (53 loc) · 2.67 KB
/
servidores-carrega-couchbase.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
# -*- coding: utf-8 -*-
import io
import os
import csv
from couchbase.bucket import Bucket
from couchbase.exceptions import KeyExistsError
bucket = Bucket('couchbase://localhost/servidorescomissionados')
# procura o nome da planilha de cadastro
cadastro_filename = [filename for filename in os.listdir('dados/servidores/') if os.path.isfile(os.path.join('dados/servidores/', filename)) and filename.split('.')[-1] == 'csv' and 'Cadastro' in filename][0]
print u'Processando {}...'.format(cadastro_filename)
with open(os.path.join('dados/servidores/', cadastro_filename)) as f:
dados = f.read()
# retira os bytes NUL (nao deveriam existir na planilha e dao erro)
dados = dados.replace('\x00', '')
planilha = csv.DictReader(io.BytesIO(dados), delimiter='\t')
for linha in planilha:
# definicao da chave
# se o eleitor se filiou e se desfiliou mais de uma vez,
# nao sera considerado (geralmente eh uma desfiliacao
# a pedido e outra via judicial)
chave = "-".join((
linha['CPF'].decode('iso-8859-1'),
linha['NOME'].decode('iso-8859-1'),
linha['MATRICULA'].decode('iso-8859-1'),
linha['FUNCAO'].decode('iso-8859-1'),
linha['DATA_INGRESSO_ORGAO'].decode('iso-8859-1'),
linha['DATA_INGRESSO_CARGOFUNCAO'].decode('iso-8859-1'),
))
dados = {
'type': 'servidor',
'cpf': linha['CPF'],
'matricula': linha['MATRICULA'],
'nome': linha['NOME'],
'sigla_funcao': linha['SIGLA_FUNCAO'],
'nivel_funcao': linha['NIVEL_FUNCAO'],
'funcao': linha['FUNCAO'],
'codigo_orgao_lotacao': linha['COD_ORG_LOTACAO'],
'codigo_orgao_superior_lotacao': linha['COD_ORGSUP_LOTACAO'],
'codigo_uorg_exercicio': linha['COD_UORG_EXERCICIO'],
'codigo_orgao_exercicio': linha['COD_ORG_EXERCICIO'],
'codigo_orgao_superior_exercicio': linha['COD_ORGSUP_EXERCICIO'],
'tipo_vinculo': linha['TIPO_VINCULO'],
'situacao_vinculo': linha['SITUACAO_VINCULO'],
'regime_juridico': linha['REGIME_JURIDICO'],
'data_ingresso_orgao': linha['DATA_INGRESSO_CARGOFUNCAO'],
'data_ingresso_cargofuncao': linha['DATA_INGRESSO_CARGOFUNCAO'],
'data_nomeacao_cargofuncao': linha['DATA_NOMEACAO_CARGOFUNCAO'],
}
# decodificar acentuacao, trocar para utf-8, exigido pelo couchbase
dados = dict(((key, value.decode('iso-8859-1')) for key, value in dados.items()))
# carregar somente os servidores que tem funcao
if dados['funcao']:
bucket.insert(chave, dados)