예제 #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'] = '*'
    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)
예제 #4
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
예제 #5
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
예제 #6
0
    def setUp(self):
        self.db = MongoDb()

        self.db.insert_or_update({
            'cep': 'UNIQUE_KEY',
            'logradouro': 'A',
            'bairro': 'A',
            'cidade': 'A',
            'estado': 'A'
        })
예제 #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
class CidadeTest(unittest.TestCase):
    cidade_sp = {
        'sigla_uf_nome_cidade': u'SP_SAO PAULO',
        'area_km2': '1099',
    }

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

    def tearDown(self):
        self.db._db.ufs.remove()

    def test_get(self):
        result = self.db.get_one_cidade(u'SP', u'São Paulo')
        for key, expected in self.cidade_sp.items():
            self.assertEqual(expected, result[key])

    def test_get_alt(self):
        result = self.db.get_one_cidade(u'SP', u'Outro lugar (São Paulo)')
        self.assertEqual('1099', result['area_km2'])

    def test_update(self):
        self.db.insert_or_update_cidade({
            'sigla_uf_nome_cidade': u'SP_SAO PAULO',
            'area_km2': '2000',
        })

        result = self.db.get_one_cidade(u'SP', u'São Paulo')
        self.assertEqual('2000', result['area_km2'])
예제 #9
0
class CidadeTest(unittest.TestCase):
    cidade_sp = {
        'sigla_uf_nome_cidade': u'SP_SAO PAULO',
        'area_km2': '1099',
    }

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

    def tearDown(self):
        self.db._db.ufs.remove()

    def test_get(self):
        result = self.db.get_one_cidade(u'SP', u'São Paulo')
        for key, expected in self.cidade_sp.items():
            self.assertEqual(expected, result[key])

    def test_get_alt(self):
        result = self.db.get_one_cidade(u'SP', u'Outro lugar (São Paulo)')
        self.assertEqual('1099', result['area_km2'])

    def test_update(self):
        self.db.insert_or_update_cidade({
            'sigla_uf_nome_cidade': u'SP_SAO PAULO',
            'area_km2': '2000',
        })

        result = self.db.get_one_cidade(u'SP', u'São Paulo')
        self.assertEqual('2000', result['area_km2'])
예제 #10
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')
예제 #11
0
 def setUpClass(cls):
     cls.db = MongoDb()
     cls.db.insert_or_update_uf({
         'sigla': 'SP',
         'campo': 'valor',
     })
     cls.db.insert_or_update_cidade({
         'sigla_uf_nome_cidade': u'SP_SAO PAULO',
         'area_km2': '1099',
     })
예제 #12
0
    def setUp(self):
        self.db = MongoDb()

        self.db.insert_or_update({
            'cep': 'UNIQUE_KEY',
            'logradouro': 'A',
            'bairro': 'A',
            'cidade': 'A',
            'estado': 'A'
        })
예제 #13
0
class UFTest(unittest.TestCase):
    uf_sp = {
        'sigla': 'SP',
        'codigo_ibge': '35',
        'nome': u'São Paulo',
    }

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

    def tearDown(self):
        self.db._db.ufs.remove()

    def test_get(self):
        result = self.db.get_one_uf_by_nome(u'São Paulo')
        for key, expected in self.uf_sp.items():
            self.assertEqual(expected, result[key])

    def test_update(self):
        self.db.insert_or_update_uf({'sigla': u'SP', 'codigo_ibge': '36'})

        result = self.db.get_one_uf_by_nome(u'São Paulo')
        self.assertEqual('36', result['codigo_ibge'])
        self.assertEqual('SP', result['sigla'])
예제 #14
0
class UFTest(unittest.TestCase):
    uf_sp = {
        'sigla': 'SP',
        'codigo_ibge': '35',
        'nome': u'São Paulo',
    }

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

    def tearDown(self):
        self.db._db.ufs.remove()

    def test_get(self):
        result = self.db.get_one_uf_by_nome(u'São Paulo')
        for key, expected in self.uf_sp.items():
            self.assertEqual(expected, result[key])

    def test_update(self):
        self.db.insert_or_update_uf({
            'sigla': u'SP',
            'codigo_ibge': '36'
        })

        result = self.db.get_one_uf_by_nome(u'São Paulo')
        self.assertEqual('36', result['codigo_ibge'])
        self.assertEqual('SP', result['sigla'])
예제 #15
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
예제 #16
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
예제 #17
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)
예제 #18
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)
예제 #19
0
 def setUp(self):
     db = MongoDb()
     self.collection = db.packtrack._collection
     self.app = webtest.TestApp(bottle.app())
예제 #20
0
 def setUp(self):
     self.db = MongoDb()
     self.db.insert_or_update_cidade(self.cidade_sp)
예제 #21
0
 def setUp(self):
     self.db = MongoDb()
     self.db.insert_or_update_uf(self.uf_sp)
예제 #22
0
 def setUp(self):
     self.db = MongoDb()
     self.db.insert_or_update_uf(self.uf_sp)
예제 #23
0
 def setUp(self):
     self.db = MongoDb()
     self.db.insert_or_update_cidade(self.cidade_sp)
예제 #24
0
from CepTracker import CepTracker, _notfound_key
import PackTracker
import requests
from database import MongoDb as Database
from utils import EnableCORS

logger = logging.getLogger(__name__)
HealthCheck(bottle, "/__health__")

app = bottle.default_app()
app.catchall = False
app_v1 = bottle.Bottle()
app_v1.catchall = False
jsonp_query_key = 'callback'

db = Database()
db.create_indexes()


def validate_format(callback):
    def wrapper(*args, **kwargs):
        output_format = request.query.format
        if output_format and output_format not in {'json', 'jsonp', 'xml'}:
            message = "400 Parametro format='%s' invalido." % output_format
            return make_error(message, output_format='json')
        return callback(*args, **kwargs)
    return wrapper


def _notfound(record):
    _meta = record.get('_meta', {})