Cookwala / حزمة التطوير والسيناريوهات / 066
HELP, CANCEL and the errors a gateway must answer
Besides the five commands, the grammar has HELP and CANCEL, and four error codes a gateway turns into a reply: usage, bad_date, unknown_command and empty. An error means nothing is written.
اقرأ أولًا: /docs/HUMANITARIAN-PROFILE/ /humanitarian/
الخطوات
HELP: the gateway replies with one example per command, plain ASCII, under 160 characters.
parseSmsWithdraw an offer by id.
parseSmsCANCEL without an id: usage.
parseSmsA message that starts with no known keyword: unknown_command.
parseSmsAn OFFER without a quantity: usage.
parseSmsAn OFFER without a storage code: usage.
parseSmsAn empty message: empty.
parseSms
النتيجة
You can build the reply side of a gateway from these codes. Next: scenario 067 covers the safety checks a gateway applies before writing.
سطر الأوامر
cookwala sms "HELP"
cookwala sms "hello there"المخرجات المسجلة
الحالة: ok
[1] parseSms: {"ok": true, "command": "HELP", "findings": []}
[2] parseSms: {"ok": true, "command": "CANCEL", "id": "A7K", "findings": []}
[3] parseSms: {"ok": false, "error": "usage"}
[4] parseSms: {"ok": false, "error": "unknown_command"}
[5] parseSms: {"ok": false, "error": "usage"}
[6] parseSms: {"ok": false, "error": "usage"}
[7] parseSms: {"ok": false, "error": "empty"}الكود
التشغيل: python scenarios/out/066-help-cancel-and-usage-errors/python.py
# Scenario 066: HELP, CANCEL and the errors a gateway must answer
# Besides the five commands, the grammar has HELP and CANCEL, and four error codes a gateway turns into a reply: usage, bad_date, unknown_command and empty. An error means nothing is written.
# 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: HELP: the gateway replies with one example per command, plain ASCII, under 160 characters.
help = c.parse_sms("HELP")
assert pick(help, "ok") == True, pick(help, "ok")
print("ok", "ok", "=", True)
assert pick(help, "command") == "HELP", pick(help, "command")
print("ok", "command", "=", "HELP")
# Step 2: Withdraw an offer by id.
cancel = c.parse_sms("CANCEL A7K")
assert pick(cancel, "ok") == True, pick(cancel, "ok")
print("ok", "ok", "=", True)
assert pick(cancel, "command") == "CANCEL", pick(cancel, "command")
print("ok", "command", "=", "CANCEL")
assert pick(cancel, "id") == "A7K", pick(cancel, "id")
print("ok", "id", "=", "A7K")
# Step 3: CANCEL without an id: usage.
cancelUsage = c.parse_sms("CANCEL")
assert pick(cancelUsage, "ok") == False, pick(cancelUsage, "ok")
print("ok", "ok", "=", False)
assert pick(cancelUsage, "error") == "usage", pick(cancelUsage, "error")
print("ok", "error", "=", "usage")
# Step 4: A message that starts with no known keyword: unknown_command.
unknown = c.parse_sms("hello there")
assert pick(unknown, "ok") == False, pick(unknown, "ok")
print("ok", "ok", "=", False)
assert pick(unknown, "error") == "unknown_command", pick(unknown, "error")
print("ok", "error", "=", "unknown_command")
# Step 5: An OFFER without a quantity: usage.
noKg = c.parse_sms("OFFER YOGURT C")
assert pick(noKg, "ok") == False, pick(noKg, "ok")
print("ok", "ok", "=", False)
assert pick(noKg, "error") == "usage", pick(noKg, "error")
print("ok", "error", "=", "usage")
# Step 6: An OFFER without a storage code: usage.
noStorage = c.parse_sms("OFFER 36KG YOGURT")
assert pick(noStorage, "ok") == False, pick(noStorage, "ok")
print("ok", "ok", "=", False)
assert pick(noStorage, "error") == "usage", pick(noStorage, "error")
print("ok", "error", "=", "usage")
# Step 7: An empty message: empty.
empty = c.parse_sms("")
assert pick(empty, "ok") == False, pick(empty, "ok")
print("ok", "ok", "=", False)
assert pick(empty, "error") == "empty", pick(empty, "error")
print("ok", "error", "=", "empty")
print("scenario complete")