Skip to content
Snippets Groups Projects
PostmonServer.py 2.26 KiB
Newer Older
import bottle
Alê Borba's avatar
Alê Borba committed
import json
from bottle import route, run, response
from CepTracker import CepTracker
from requests import ConnectionError
from correios import Correios
from database import MongoDb as Database
app_v1 = bottle.Bottle()
def expired(record_date):
	from datetime import datetime, timedelta

	WEEKS = 26 #6 months

	now = datetime.now()

	return ( now - record_date['v_date'] >= timedelta(weeks=WEEKS))


def _get_info_from_source(cep):
	info = tracker.track(cep)
	if len(info) == 0:
		raise ValueError()
	return info

@app_v1.route('/cep/<cep:re:\d{5}-?\d{3}>')
Alê Borba's avatar
Alê Borba committed
def verifica_cep(cep):
	cep = cep.replace('-','')
	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 ConnectionError:
			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 })
Alê Borba's avatar
Alê Borba committed
	if result:

		response.headers['Cache-Control'] = 'public, max-age=2592000'
		return result
	else:
		response.status = '404 O CEP %s informado nao pode ser localizado' % cep
		return
Alê Borba's avatar
Alê Borba committed

@app_v1.route('/rastreio/<provider>/<track>')
def track_pack(provider, track):
	if provider == 'ect':
		try:
			encomenda = Correios.encomenda(track)

			result = []

			for status in encomenda.status:
				historico['data'] = status.data
				historico['local'] = status.local
				historico['situacao'] = status.situacao
				historico['detalhes'] = status.detalhes
			resposta['servico'] = provider
			resposta['codigo'] = track
			resposta['historico'] = result

			return json.dumps(resposta)

		except AttributeError:
			response.status = '404 O pacote %s informado nao pode ser localizado' %track
	else:
		response.status = '404 O Servico %s nao pode ser encontrado' %provider
Alê Borba's avatar
Alê Borba committed

bottle.mount('/v1', app_v1)
Alê Borba's avatar
Alê Borba committed

def _standalone(port=9876):
Alê Borba's avatar
Alê Borba committed
    run(host='localhost', port=port)