Skip to content

Commit 79f2816

Browse files
committed
Trata cidades com parenteses. Fix #157
1 parent 09d83d0 commit 79f2816

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

database.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# -*- coding: utf-8 -*-
33
from datetime import datetime
44
import os
5+
import re
56

67
import pymongo
78

@@ -20,11 +21,12 @@ class MongoDb(object):
2021

2122
def __init__(self, address='localhost'):
2223
self._client = pymongo.MongoClient(address)
24+
DATABASE = os.environ.get('POSTMON_DB_NAME', 'postmon')
2325
USERNAME = os.environ.get('POSTMON_DB_USER')
2426
PASSWORD = os.environ.get('POSTMON_DB_PASSWORD')
27+
self._db = self._client[DATABASE]
2528
if all((USERNAME, PASSWORD)):
26-
self._client.postmon.authenticate(USERNAME, PASSWORD)
27-
self._db = self._client.postmon
29+
self._db.authenticate(USERNAME, PASSWORD)
2830
self.packtrack = PackTrack(self._db.packtrack)
2931

3032
def create_indexes(self):
@@ -42,10 +44,18 @@ def get_one_uf(self, sigla, **kwargs):
4244
return self._db.ufs.find_one({'sigla': sigla}, **kwargs)
4345

4446
def get_one_cidade(self, sigla_uf, nome_cidade, **kwargs):
45-
sigla_uf = slug(sigla_uf)
46-
nome_cidade = slug(nome_cidade)
47-
sigla_uf_nome_cidade = u'{}_{}'.format(sigla_uf, nome_cidade)
47+
key_func = lambda u, c: u'{}_{}'.format(slug(u), slug(c))
48+
sigla_uf_nome_cidade = key_func(sigla_uf, nome_cidade)
4849
spec = {'sigla_uf_nome_cidade': sigla_uf_nome_cidade}
50+
51+
search = re.search(r'\((.+)\)', nome_cidade)
52+
if search:
53+
nome_cidade_alternativa = search.group(1)
54+
spec_alternativa = {
55+
'sigla_uf_nome_cidade': key_func(
56+
sigla_uf, nome_cidade_alternativa)
57+
}
58+
spec = {'$or': [spec, spec_alternativa]}
4959
return self._db.cidades.find_one(spec, **kwargs)
5060

5161
def get_one_uf_by_nome(self, nome, **kwargs):

test/database_test.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ def test_get(self):
8989
for key, expected in self.cidade_sp.items():
9090
self.assertEqual(expected, result[key])
9191

92+
def test_get_alt(self):
93+
result = self.db.get_one_cidade(u'SP', u'Outro lugar (São Paulo)')
94+
self.assertEqual('1099', result['area_km2'])
95+
9296
def test_update(self):
9397
self.db.insert_or_update_cidade({
9498
'sigla_uf_nome_cidade': u'SP_SAO PAULO',

0 commit comments

Comments
 (0)