Esta página fue traducida por una máquina y aún no ha sido revisada por una persona. El inglés es la referencia; las correcciones son bienvenidas en GitHub. GitHub

Cookwala / SDK y escenarios / 062

Record a handover: all accepted, partly accepted, or all rejected

HAND names the offer, the kilograms accepted, optionally REJ with the kilograms rejected and a reason code, and a temperature. Zero accepted with REJ means the whole load was turned away.

Audiencia: food bank · Objetivo: Ayudar a acabar con el hambre · Nivel: beginner

Leer primero: /docs/HUMANITARIAN-PROFILE/ /humanitarian/

Pasos

  1. All 36 kg accepted at 4.6 °C; no rejected line is written. parseSms

  2. 30 kg accepted, 6 kg rejected for damaged packaging. parseSms

  3. Nothing accepted: 18 kg of hot food measured at 52 °C is rejected for temperature. parseSms

  4. REJ without a quantity and reason: usage error. parseSms

  5. No quantity at all: usage error. parseSms

Resultado

You can record the three outcomes of a handover. Next: scenarios 063 and 064 list every rejection reason code.

Línea de comandos

cookwala sms "HAND A7K 36 T4.6"
cookwala sms "HAND A7K 0 REJ 18 TEMP T52"

Salida grabada

Estado: ok

[1] parseSms: {"ok": true, "command": "HAND", "offer": "A7K", "kgAccepted": 36.0, "tempC": 4.6, "findings": []}
[2] parseSms: {"ok": true, "command": "HAND", "offer": "A7K", "kgAccepted": 30.0, "kgRejected": 6.0, "reason": "packaging_damaged", "reasonCode": "PACK", "tempC": 4.6, "findings": []}
[3] parseSms: {"ok": true, "command": "HAND", "offer": "A7K", "kgAccepted": 0.0, "kgRejected": 18.0, "reason": "temp_out_of_range", "reasonCode": "TEMP", "tempC": 52.0, "findings": []}
[4] parseSms: {"ok": false, "error": "usage"}
[5] parseSms: {"ok": false, "error": "usage"}

Código

Ejecutar: python scenarios/out/062-handover-accepted-partly-accepted-or-rejected/python.py

# Scenario 062: Record a handover: all accepted, partly accepted, or all rejected
# HAND names the offer, the kilograms accepted, optionally REJ with the kilograms rejected and a reason code, and a temperature. Zero accepted with REJ means the whole load was turned away.
# Run a hub first: python hub/cookwala_hub.py --recipes examples
import json, os
from cookwala.client import CookwalaClient, CookwalaProblem

def load(path):
    with open(path, encoding="utf-8") as f:
        return json.load(f)

def pick(obj, path):
    for part in path.replace("]", "").replace("[", ".").split("."):
        obj = obj[int(part)] if part.isdigit() else (len(obj) if part == "length" else obj.get(part))
    return obj

c = CookwalaClient(os.environ.get("COOKWALA_HUB", "http://localhost:7878"))


# Step 1: All 36 kg accepted at 4.6 °C; no rejected line is written.
full = c.parse_sms("HAND A7K 36 T4.6")
assert pick(full, "ok") == True, pick(full, "ok")
print("ok", "ok", "=", True)
assert pick(full, "command") == "HAND", pick(full, "command")
print("ok", "command", "=", "HAND")
assert pick(full, "kgAccepted") == 36.0, pick(full, "kgAccepted")
print("ok", "kgAccepted", "=", 36.0)
assert pick(full, "kgRejected") == None, pick(full, "kgRejected")
print("ok", "kgRejected", "=", None)
assert pick(full, "tempC") == 4.6, pick(full, "tempC")
print("ok", "tempC", "=", 4.6)

# Step 2: 30 kg accepted, 6 kg rejected for damaged packaging.
partial = c.parse_sms("HAND A7K 30 REJ 6 PACK T4.6")
assert pick(partial, "kgAccepted") == 30.0, pick(partial, "kgAccepted")
print("ok", "kgAccepted", "=", 30.0)
assert pick(partial, "kgRejected") == 6.0, pick(partial, "kgRejected")
print("ok", "kgRejected", "=", 6.0)
assert pick(partial, "reason") == "packaging_damaged", pick(partial, "reason")
print("ok", "reason", "=", "packaging_damaged")
assert pick(partial, "reasonCode") == "PACK", pick(partial, "reasonCode")
print("ok", "reasonCode", "=", "PACK")

# Step 3: Nothing accepted: 18 kg of hot food measured at 52 °C is rejected for temperature.
rejected = c.parse_sms("HAND A7K 0 REJ 18 TEMP T52")
assert pick(rejected, "kgAccepted") == 0.0, pick(rejected, "kgAccepted")
print("ok", "kgAccepted", "=", 0.0)
assert pick(rejected, "kgRejected") == 18.0, pick(rejected, "kgRejected")
print("ok", "kgRejected", "=", 18.0)
assert pick(rejected, "reason") == "temp_out_of_range", pick(rejected, "reason")
print("ok", "reason", "=", "temp_out_of_range")
assert pick(rejected, "tempC") == 52.0, pick(rejected, "tempC")
print("ok", "tempC", "=", 52.0)

# Step 4: REJ without a quantity and reason: usage error.
usage = c.parse_sms("HAND A7K 36 REJ")
assert pick(usage, "ok") == False, pick(usage, "ok")
print("ok", "ok", "=", False)
assert pick(usage, "error") == "usage", pick(usage, "error")
print("ok", "error", "=", "usage")

# Step 5: No quantity at all: usage error.
usage2 = c.parse_sms("HAND A7K")
assert pick(usage2, "ok") == False, pick(usage2, "ok")
print("ok", "ok", "=", False)
assert pick(usage2, "error") == "usage", pick(usage2, "error")
print("ok", "error", "=", "usage")

print("scenario complete")

scenarios/062-handover-accepted-partly-accepted-or-rejected.json

Anterior: 061 Siguiente: 063