def get(self, **kwargs): self.request.charset = 'utf-8' account = kwargs['account'] # Nos fijamos la ultima vez que lo pedimos, pedimos hasta hoy si estamos dentro de un mes max # Sino bajaremos en dos dias (probabilidad muy baja) upcfg = UPConfig.get_or_insert('main-config', last_ipn=datetime.now().date(), last_ipn_emi=datetime.now().date()) _from = upcfg.last_ipn if account == 'emi': _from = upcfg.last_ipn_emi _to = datetime.utcnow().date() if (_to - _from).days > 28: _to = _from + timedelta(days=28) # _to = date(2011,10,22) # _from = date(2011,9,24) # Bajamos el xml con la api de IPN _xml = ipn_download(account, _from, _to) dom = minidom.parseString(_xml) # self.response.write(_xml) # self.response.write(dom) # return # Verificamos que este todo bien el xml de vuelta state = int(get_xml_value(dom, 'State')) if state != 1: logging.error('Error al traer xml: %d [%s]' % (state, account)) self.response.write('error') return #logging.error('----------traje joya') # Parseamos y generamos los Payment to_save = [] for pay in dom.getElementsByTagName('Pay'): p = Payment() p.trx_id = str(pay.attributes['Trx_id'].value) # Rompemos la fecha (la esperamos en formato YYYYMMDD) tmp = get_xml_value(pay, 'Trx_Date') date_arr = tmp.split(' ')[0].split('-') p.date = date(int(date_arr[0]), int(date_arr[1]), int(date_arr[2])) # El monto lo ponemos en int por 10 p.amount = int(float(get_xml_value(pay, 'Trx_Payment')) * 10) p.tag_data = account p.assinged = 0 to_save.append(p) # Cuantos pagos recibimos? logging.info('Se recibieron %d pagos [%s]' % (len(to_save), account)) # Salvamos todos los payments juntos y la ultima vez que corrimos en una transaccion # def txn(): # if(len(to_save)): # db.put(to_save) # tmp = PaymentAssingMapper() # deferred.defer(tmp.run, _transactional=True) # taskqueue.add(url='/tsk/update_ipn/%s' % account, params={'date': _to.strftime('%Y%m%d'), 'account':account}, transactional=True) # db.run_in_transaction(txn) if (len(to_save)): db.put(to_save) tmp = PaymentAssingMapper() deferred.defer(tmp.run) taskqueue.add(url='/tsk/update_ipn/%s' % account, params={ 'date': _to.strftime('%Y%m%d'), 'account': account }) # Mandamos a correr la tarea de mapeo de pagos si bajamos alguno nuevo self.response.write('ok - end')