-
Notifications
You must be signed in to change notification settings - Fork 0
/
cidades.py
executable file
·76 lines (63 loc) · 2.12 KB
/
cidades.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
#!/usr/bin/env python
import csv
import os
import urllib.request
import sqlite3
import zipfile
from cgi import parse_qs
from wsgiref.simple_server import make_server
url = 'http://download.geonames.org/export/zip/BR.zip'
zip_path = '/tmp/BR.zip'
unzip_path = '/tmp/cidades/'
cidades_db = '/tmp/cidades.db'
TEMPLATE_HTML = '''
<form>
<input name="sql">
<input type="submit">
</form>
'''
if not os.path.exists(zip_path):
# Download das cidades brasileiras
print('Baixando cidades brasileiras (BR.zip)')
urllib.request.urlretrieve(url, zip_path)
else:
print('Arquivo de cidades brasileiras já existe')
# Descompacta zip das cidades
with zipfile.ZipFile(zip_path) as cidades_zip:
print('Descompactando arquivo de cidades')
cidades_zip.extractall(unzip_path)
# Cria o bando de dados
conn = sqlite3.connect(cidades_db)
conn.execute('CREATE TABLE IF NOT EXISTS cidades '
'(cep text PRIMARY KEY, nome text, estado text);')
conn.commit()
# Le arquivo CSV
with open(unzip_path + 'BR.txt') as cidades_file:
for linha in csv.reader(cidades_file, delimiter='\t'):
try:
conn.execute('INSERT INTO cidades (cep, nome, estado) '
'VALUES (?, ?, ? )', (linha[1], linha[2], linha[3]))
except sqlite3.IntegrityError:
continue
conn.commit()
def application(environ, start_response):
status = '200 OK'
headers = [('Content-Type', 'text/html; charset=utf-8')]
query_string = environ.get('QUERY_STRING')
template_html = TEMPLATE_HTML[:]
if query_string:
params = parse_qs(query_string)
sql = params.get('sql')[0]
template_html += '<br>' + sql + '<br><br><table>'
tuplas = conn.execute(sql)
for tupla in tuplas:
template_html += '<tr>'
for coluna in tupla:
template_html += '<td>{}</td>'.format(coluna)
template_html += '</tr>'
template_html += '</table>'
start_response(status, headers)
return [template_html.encode('utf-8')]
with make_server('', 8000, application) as server:
print('Servidor http rodando...')
server.serve_forever()