示例#1
0
def verifica_cep(cep):
    cep = cep.replace('-', '')
    db = Database()

    response.headers['Access-Control-Allow-Origin'] = '*'

    try:
        result = db.get_one(cep, fields={'_id': False})

        if not result or not result.has_key('v_date') or expired(result):
            try:
                for item in _get_info_from_source(cep):
                    db.insert_or_update(item)

            except ConnectionError:
                response.status = '503 Servico Temporariamente Indisponivel'

        result = db.get_one(cep, fields={'_id': False, 'v_date': False})

        response.headers['Cache-Control'] = 'public, max-age=2592000'

    except ValueError:
        response.status = '404 O CEP %s informado nao pode ser localizado' % cep

    return result
示例#2
0
def verifica_cep(cep):
    cep = cep.replace('-', '')
    db = Database()
    response.headers['Access-Control-Allow-Origin'] = '*'
    message = None
    result = db.get_one(cep, fields={'_id': False})
    if not result or expired(result):
        result = None
        try:
            info = _get_info_from_source(cep)
        except requests.exceptions.RequestException:
            message = '503 Servico Temporariamente Indisponivel'
            logger.exception(message)
            return make_error(message)
        else:
            for item in info:
                db.insert_or_update(item)
            result = db.get_one(cep, fields={'_id': False, 'v_date': False})

    if not result or '__notfound__' in result:
        message = '404 CEP %s nao encontrado' % cep
        return make_error(message)

    result.pop('v_date', None)
    response.headers['Cache-Control'] = 'public, max-age=2592000'
    sigla_uf = result['estado']
    estado_info = _get_estado_info(db, sigla_uf)
    if estado_info:
        result['estado_info'] = estado_info
    nome_cidade = result['cidade']
    cidade_info = _get_cidade_info(db, sigla_uf, nome_cidade)
    if cidade_info:
        result['cidade_info'] = cidade_info
    return format_result(result)
示例#3
0
def verifica_cep(cep):
	cep = cep.replace('-','')
	db = Database()
	response.headers['Access-Control-Allow-Origin'] = '*'

	result = db.get_one(cep, fields={ '_id': False })
	if result and result.has_key('v_date') and not expired(result):
		result.pop('v_date')
	else:
		try:
			info = _get_info_from_source(cep)
		except ValueError:
			response.status = '404 O CEP %s informado nao pode ser localizado' % cep
			return
		except requests.exceptions.RequestException:
			response.status = '503 Servico Temporariamente Indisponivel'
			return
		for item in info:
			db.insert_or_update(item)
		result = db.get_one(cep, fields={ '_id': False, 'v_date': False })

	if result:

		response.headers['Cache-Control'] = 'public, max-age=2592000'
		return format_result(result)
	else:
		response.status = '404 O CEP %s informado nao pode ser localizado' % cep
		return
示例#4
0
def verifica_cep(cep):
    cep = cep.replace('-', '')
    db = Database()
    response.headers['Access-Control-Allow-Origin'] = '*'
    message = None
    result = db.get_one(cep, fields={'_id': False})
    if not result or expired(result):
        result = None
        try:
            info = _get_info_from_source(cep)
        except requests.exceptions.RequestException:
            message = '503 Servico Temporariamente Indisponivel'
            logger.exception(message)
            return make_error(message)
        else:
            for item in info:
                db.insert_or_update(item)
            result = db.get_one(cep, fields={'_id': False, 'v_date': False})

    if not result or '__notfound__' in result:
        message = '404 CEP %s nao encontrado' % cep
        return make_error(message)

    result.pop('v_date', None)
    response.headers['Cache-Control'] = 'public, max-age=2592000'
    sigla_uf = result['estado']
    estado_info = _get_estado_info(db, sigla_uf)
    if estado_info:
        result['estado_info'] = estado_info
    nome_cidade = result['cidade']
    cidade_info = _get_cidade_info(db, sigla_uf, nome_cidade)
    if cidade_info:
        result['cidade_info'] = cidade_info
    return format_result(result)
示例#5
0
def verifica_cep(cep):
	cep = cep.replace('-','')
	db = Database()

	response.headers['Access-Control-Allow-Origin'] = '*'

	try:
		result = db.get_one(cep, fields={ '_id': False })

		if not result or not result.has_key('v_date') or expired(result):
			try:
				for item in _get_info_from_source(cep):
					db.insert_or_update(item)

			except ConnectionError:
				response.status = '503 Servico Temporariamente Indisponivel'

		result = db.get_one(cep, fields={ '_id': False, 'v_date': False })

		response.headers['Cache-Control'] = 'public, max-age=2592000'

	except ValueError:
		response.status = '404 O CEP %s informado nao pode ser localizado' %cep

	return result
示例#6
0
class MongoDbTest(unittest.TestCase):
    def setUp(self):
        self.db = MongoDb()

        self.db.insert_or_update({
            'cep': 'UNIQUE_KEY',
            'logradouro': 'A',
            'bairro': 'A',
            'cidade': 'A',
            'estado': 'A'
        })

    def test_remove_empty_fields(self):
        '''
        Quando um registro é atualizado no banco de dados,
        as chaves inexistentes devem ser removidas.
        '''

        self.db.insert_or_update({'cep': 'UNIQUE_KEY', 'estado': 'B'})

        result = self.db.get_one('UNIQUE_KEY')

        self.assertEqual(result['estado'], 'B')
        self.assertNotIn('logradouro', result)
        self.assertNotIn('bairro', result)
        self.assertNotIn('cidade', result)

    def tearDown(self):
        self.db.remove('UNIQUE_KEY')
示例#7
0
class MongoDbTest(unittest.TestCase):

    def setUp(self):
        self.db = MongoDb()

        self.db.insert_or_update({
            'cep': 'UNIQUE_KEY',
            'logradouro': 'A',
            'bairro': 'A',
            'cidade': 'A',
            'estado': 'A'
        })

    def test_remove_empty_fields(self):

        '''
        Quando um registro é atualizado no banco de dados,
        as chaves inexistentes devem ser removidas.
        '''

        self.db.insert_or_update({
            'cep': 'UNIQUE_KEY',
            'estado': 'B'
        })

        result = self.db.get_one('UNIQUE_KEY')

        self.assertEqual(result['estado'], 'B')
        self.assertNotIn('logradouro', result)
        self.assertNotIn('bairro', result)
        self.assertNotIn('cidade', result)

    def tearDown(self):
        self.db.remove('UNIQUE_KEY')
示例#8
0
def verifica_cep(cep):
    cep = cep.replace('-', '')
    db = Database()
    response.headers['Access-Control-Allow-Origin'] = '*'

    result = db.get_one(cep, fields={'_id': False})
    if result and 'v_date' in result and not expired(result):
        result.pop('v_date')
    else:
        try:
            info = _get_info_from_source(cep)
        except ValueError:
            response.status = "404 O CEP {0} informado nao pode ser "
            "localizado".format(cep)
            return
        except requests.exceptions.RequestException:
            response.status = '503 Servico Temporariamente Indisponivel'
            return
        for item in info:
            db.insert_or_update(item)
        result = db.get_one(cep, fields={'_id': False, 'v_date': False})

    if result:
        response.headers['Cache-Control'] = 'public, max-age=2592000'
        sigla_uf = result['estado']
        estado_info = _get_estado_info(db, sigla_uf)
        if estado_info:
            result['estado_info'] = estado_info
        nome_cidade = result['cidade']
        cidade_info = _get_cidade_info(db, sigla_uf, nome_cidade)
        if cidade_info:
            result['cidade_info'] = cidade_info
        return format_result(result)
    else:
        response.status = '404 O CEP %s informado nao pode ser '
        'localizado' % cep
        return
示例#9
0
def verifica_cep(cep):
    cep = cep.replace('-', '')
    db = Database()
    response.headers['Access-Control-Allow-Origin'] = '*'

    result = db.get_one(cep, fields={'_id': False})
    if result and 'v_date' in result and not expired(result):
        result.pop('v_date')
    else:
        try:
            info = _get_info_from_source(cep)
        except ValueError:
            response.status = "404 O CEP {0} informado nao pode ser "
            "localizado".format(cep)
            return
        except requests.exceptions.RequestException:
            response.status = '503 Servico Temporariamente Indisponivel'
            return
        for item in info:
            db.insert_or_update(item)
        result = db.get_one(cep, fields={'_id': False, 'v_date': False})

    if result:
        response.headers['Cache-Control'] = 'public, max-age=2592000'
        sigla_uf = result['estado']
        estado_info = _get_estado_info(db, sigla_uf)
        if estado_info:
            result['estado_info'] = estado_info
        nome_cidade = result['cidade']
        cidade_info = _get_cidade_info(db, sigla_uf, nome_cidade)
        if cidade_info:
            result['cidade_info'] = cidade_info
        return format_result(result)
    else:
        response.status = '404 O CEP %s informado nao pode ser '
        'localizado' % cep
        return
示例#10
0
 def test_insert_notfound(self):
     db = MongoDb()
     cep = u'11111111'
     db.remove(cep)
     db.insert_or_update({
         u'cep': cep,
         u'_meta': {
             u'v_date': 'v_date',
             CepTracker._notfound_key: True,
         }
     })
     expected = {
         u'cep': cep,
         u'estado': u'SP',
         u'_meta': {
             u'v_date': 'v_date',
         }
     }
     db.insert_or_update(expected)
     result = db.get_one(cep, fields={'_id': False})
     self.assertEqual(expected, result)
示例#11
0
 def test_insert_notfound(self):
     db = MongoDb()
     cep = u'11111111'
     db.remove(cep)
     db.insert_or_update({
         u'cep': cep,
         u'_meta': {
             u'v_date': 'v_date',
             CepTracker._notfound_key: True,
         }
     })
     expected = {
         u'cep': cep,
         u'estado': u'SP',
         u'_meta': {
             u'v_date': 'v_date',
         }
     }
     db.insert_or_update(expected)
     result = db.get_one(cep, fields={'_id': False})
     self.assertEqual(expected, result)