mirror of https://github.com/interlegis/sigi.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
5.6 KiB
131 lines
5.6 KiB
# -*- coding: utf-8 -*-
|
|
#
|
|
# importa_pesquisa
|
|
#
|
|
# Copyright (c) 2015 by Interlegis
|
|
#
|
|
# GNU General Public License (GPL)
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
# 02110-1301, USA.
|
|
#
|
|
|
|
import csv
|
|
import urlparse
|
|
from datetime import datetime
|
|
|
|
from sigi.apps.casas.models import CasaLegislativa
|
|
from sigi.apps.servidores.models import Servidor
|
|
|
|
|
|
def importa(file_list):
|
|
''' Este script importa dados de um arquivo CSV e dá carga no model casas.CasaLegislativa
|
|
|
|
O arquivo CSV esperado tem um cabeçalho de campos na primeira linha, com os seguintes campos:
|
|
|
|
Indicação de data e hora,Pesquisador,Câmara,Possui portal,Portal Modelo,URL,Observações
|
|
|
|
Indicação de data e hora: Uma string datetime no formato %d/%m/%y %H:%M
|
|
Pesquisador: O nome do servidor que realizou a pesquisa, conforme cadastrado no SIGI
|
|
Câmara: A sigla da UF seguida de um espaço, seguido de um caracter - seguido de um espaço seguido do nome do município,
|
|
exemplo: MG - Montes Claros
|
|
Possui portal: Deve constar "sim" ou "não" indicando se a casa possui ou não portal.
|
|
Portal Modelo: Deve constar "sim" ou "não" indicando se o portal da casa é o portal modelo ou não.
|
|
URL: Deve conter a URL do portal da Casa. Opcionalmente pode ter alguma observação do pesquisador
|
|
Observações: Deve conter as observações do pesquisador, caso existam.'''
|
|
|
|
for filename in file_list:
|
|
print 'Importando '+filename+'.csv'
|
|
with open(filename+'.csv', 'rb') as infile:
|
|
with open(filename+'.out', 'wb') as outfile:
|
|
indata = csv.reader(infile, delimiter=',', quotechar='"')
|
|
outdata = csv.writer(outfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
|
|
|
|
head = next(indata)
|
|
head.append('Erros encontrados')
|
|
outdata.writerow(head)
|
|
|
|
for row in indata:
|
|
data = row[0].strip()
|
|
pesquisador = row[1].strip()
|
|
uf_cidade = row[2].strip()
|
|
tem_portal = row[3].strip()
|
|
pmodelo = row[4].strip()
|
|
url = row[5].strip()
|
|
obs = row[6].strip()
|
|
|
|
if data == '':
|
|
data = None
|
|
else:
|
|
data = datetime.strptime(data, '%d/%m/%y %H:%M')
|
|
|
|
uf = uf_cidade[:2]
|
|
cidade = uf_cidade[5:]
|
|
|
|
if tem_portal.lower() == 'não':
|
|
inclusao = CasaLegislativa.INCLUSAO_DIGITAL_CHOICES[1][0]
|
|
elif pmodelo.lower() == 'não':
|
|
inclusao = CasaLegislativa.INCLUSAO_DIGITAL_CHOICES[3][0]
|
|
else:
|
|
inclusao = CasaLegislativa.INCLUSAO_DIGITAL_CHOICES[2][0]
|
|
|
|
l = url.splitlines()
|
|
url = ''
|
|
|
|
for s in l:
|
|
p = urlparse.urlparse(s)
|
|
if p.netloc:
|
|
url = s
|
|
else:
|
|
obs = obs + '\n' + s
|
|
|
|
if pesquisador == '':
|
|
servidor = None
|
|
else:
|
|
servidor = Servidor.objects.filter(nome_completo__iexact=pesquisador)
|
|
cc = servidor.count()
|
|
if cc == 0:
|
|
row.append('Não encontrado servidor com este nome')
|
|
outdata.writerow(row)
|
|
continue
|
|
else:
|
|
servidor = servidor[0]
|
|
|
|
casa = CasaLegislativa.objects.filter(tipo_id=1, municipio__uf__sigla=uf, municipio__nome__iexact=cidade)
|
|
cc = casa.count()
|
|
if cc == 0:
|
|
row.append('Municipio nao foi encontrado')
|
|
outdata.writerow(row)
|
|
continue
|
|
elif cc > 1:
|
|
row.append('Existem %s casas legislativas nesta cidade')
|
|
outdata.writerow(row)
|
|
continue
|
|
else:
|
|
casa = casa[0]
|
|
|
|
casa.inclusao_digital = inclusao
|
|
casa.data_levantamento = data
|
|
casa.pesquisador = servidor
|
|
|
|
if casa.pagina_web == '':
|
|
casa.pagina_web = url
|
|
else:
|
|
obs = url + '\n' + obs
|
|
|
|
casa.obs_pesquisa = obs
|
|
casa.save()
|
|
|
|
print 'O arquivo '+filename+'.out foi criado com os registros que nao puderam ser importados'
|
|
|