| 5 | |
| 6 | |
| 7 | class MongoDb(object): |
| 8 | |
| 9 | _fields = [ |
| 10 | 'logradouro', |
| 11 | 'bairro', |
| 12 | 'cidade', |
| 13 | 'estado', |
| 14 | 'complemento' |
| 15 | ] |
| 16 | |
| 17 | def __init__(self, address='localhost'): |
| 18 | self._client = pymongo.MongoClient(address) |
| 19 | USERNAME = os.environ.get('POSTMON_DB_USER') |
| 20 | PASSWORD = os.environ.get('POSTMON_DB_PASSWORD') |
| 21 | if all((USERNAME, PASSWORD)): |
| 22 | self._client.postmon.authenticate(USERNAME, PASSWORD) |
| 23 | self._db = self._client.postmon |
| 24 | |
| 25 | def get_one(self, cep, **kwargs): |
| 26 | return self._db.ceps.find_one({'cep': cep}, **kwargs) |
| 27 | |
| 28 | def get_one_uf(self, sigla, **kwargs): |
| 29 | return self._db.ufs.find_one({'sigla': sigla}, **kwargs) |
| 30 | |
| 31 | def get_one_cidade(self, sigla_uf_nome_cidade, **kwargs): |
| 32 | spec = {'sigla_uf_nome_cidade': sigla_uf_nome_cidade} |
| 33 | return self._db.cidades.find_one(spec, **kwargs) |
| 34 | |
| 35 | def get_one_uf_by_nome(self, nome, **kwargs): |
| 36 | return self._db.ufs.find_one({'nome': nome}, **kwargs) |
| 37 | |
| 38 | def insert_or_update(self, obj, **kwargs): |
| 39 | |
| 40 | update = {'$set': obj} |
| 41 | empty_fields = set(self._fields) - set(obj) |
| 42 | update['$unset'] = dict((x, 1) for x in empty_fields) |
| 43 | |
| 44 | self._db.ceps.update({'cep': obj['cep']}, update, upsert=True) |
| 45 | |
| 46 | def insert_or_update_uf(self, obj, **kwargs): |
| 47 | update = {'$set': obj} |
| 48 | self._db.ufs.update({'sigla': obj['sigla']}, update, upsert=True) |
| 49 | |
| 50 | def insert_or_update_cidade(self, obj, **kwargs): |
| 51 | update = {'$set': obj} |
| 52 | chave = 'sigla_uf_nome_cidade' |
| 53 | self._db.cidades.update({chave: obj[chave]}, update, upsert=True) |
| 54 | |
| 55 | def remove(self, cep): |
| 56 | self._db.ceps.remove({'cep': cep}) |