Estoy procesando los siguientes datos (datos de muestra) a la API; sin embargo, al enviar estos datos, quiero actualizar el estado a 'listo' desde 'listo' ya que la próxima vez que se ejecute, estos destinatarios deben excluirse y los nuevos destinatarios estarán disponibles con estado 'listo'.

data = [{'lot_number': 'a53f-8fb40cabab7e',
'recipients':
[{'status': 'ready', 'account': '1001'}, 
 {'status': 'ready', 'account': '1002'}]}, 

{'lot_number': 'ad3d-a0849d5c7c7a',
'recipients':
[{'status': 'ready', 'account': '1015'}, 
 {'status': 'ready', 'account': '1019'}, 
 {'status': 'ready', 'account': '1023'}]}]


for final_data in data:
    batch = final_data.get("lot_number")
    url = "https://ext-api-support-dev.llws.com/api/notify/"+ batch
    response = requests.put(url, data=json.dumps(final_data), headers=headers)

El código anterior funciona perfectamente y envía la respuesta correctamente. En este momento hay tres campos (lot_number, recipients.status, recipients.account) que estamos procesando, sin embargo, necesito procesar solo recipients.status, recipients.account only y recipients.status debe actualizarse a 'listo'.

Por ejemplo, supongamos que tenemos 100 lotes de datos con 50 destinatarios en cada lote, quiero actualizar el estado a "hecho" en cada ciclo. Aunque la respuesta falla en medio del proceso (20 lotes procesados ​​y fallaron) quiero actualizar el estado de todos los lotes procesados ​​(primeros 20 lotes).

Dado que podemos actualizar los datos usando put, ¿podemos hacer algún cambio en data = json.dumps (final_data) en respuesta y proceso?

Gracias por su ayuda de antemano.

1
Raju 1 oct. 2019 a las 03:38

1 respuesta

La mejor respuesta

Puedes seguir esto:

done_lots = list()
url = "https://ext-api-support-dev.llws.com/api/notify/{0}"
for final_data in data:
    batch = final_data.get("lot_number")
    # Remove the lot_number
    request_data = {k: v for (k, v) in final_data.items() if k != "lot_number"}
    response = requests.put(url.format(batch), data=json.dumps(request_data), headers=headers)
    # Loop over recipients and update status
    # THIS DOES NOT UPDATE TO THE DATABASE. IT ONLY UPDATES THE final_data variable
    for recipients in final_data.get("recipients"):
        recipients["status"] = "done"
    done_lots.append(final_data)
1
pissall 1 oct. 2019 a las 07:03