from bottle import route, run, error, response from CepTracker import CepTracker import pymongo, json, re 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_correios(cep): tracker = CepTracker() info = tracker.track(cep) if len(info) == 0: raise ValueError() return info @route('/cep/<cep:re:\d{5}-?\d{3}>') def verifica_cep(cep): cep = cep.replace('-','') response.headers['Access-Control-Allow-Origin'] = '*' try: con = pymongo.MongoClient('localhost') db = con.postmon ceps = db.ceps result = ceps.find_one({'cep':cep}, fields={'_id':False}) if not result or not result.has_key('v_date') or expired(result): for item in _get_info_from_correios(cep): ceps.update({'cep': item['cep']}, {'$set': item}, upsert=True) result = ceps.find_one({'cep':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 def _standalone(port=9876): run(host='localhost', port=port)