Cette page a été traduite par une machine et n'a pas encore été révisée par une personne. L'anglais est la référence ; les corrections sont les bienvenues sur GitHub. GitHub

Cookwala / SDK et scénarios / 080

A delivery runner receives the window and the door, nothing else

The recipient-roles table gives the delivery role three constraint types. Derive them from the example household and see that every health, schedule and device fact is withheld with a reason.

Audience: developer · Objectif: Des robots pour les gens, Rendre les gens en meilleure santé · Niveau: beginner

Lire d'abord: /docs/HOUSEHOLD-CONTEXT/ /trust/

Étapes

  1. Derive what a delivery service may receive from the twelve facets of the example household. deriveConstraints

  2. Both constraints come from one facet, the household's receiving rules; the facet's own value (the hour, the door) is not in the answer.

  3. The child's allergy is the first withheld facet, because the role is not allowed that constraint type; the robot's firmware is withheld because no consent names a delivery service.

Résultat

You know that a role's allow-list in profiles/household/recipient-roles.json decides what travels, and that the answer carries facet ids and reasons, never values. Next: 081 derives the richest role, the meal planner.

Ligne de commande

cookwala constraints examples/household/context.json --role delivery
curl -s -X POST ${COOKWALA_HUB:-http://localhost:7878}/v1/tools/constraints -H 'Content-Type: application/json' -d "{\"facets\": $(jq .facets examples/household/context.json), \"role\": \"delivery\"}"

Sortie enregistrée

Statut: ok

[1] deriveConstraints: {"constraints": [{"type": "delivery_window", "derivedFrom": ["cw.facet.commerce.receiving_rules"]}, {"type": "access_point", "derivedFrom": ["cw.facet.commerce.receiving_rules"]}], "disclosed": [], "withheld": [{"facet": "cw.facet.household.health.allergies", "reason": "not_allowed_for_role"}, {"facet": "cw.facet.household.health.diets", "reason": "not_allowed_for_role"}, {"facet": "cw.facet.household.health.medications", "reason": "not_allowed_for_role"}, {"facet": "cw.facet.household.people.schedule", "reason": "not_allowed_for_role"}, {"facet": "cw.facet.space.environment.foot_traffic", "re…

Code

Exécuter: python scenarios/out/080-delivery-runner-gets-window-and-door/python.py

# Scenario 080: A delivery runner receives the window and the door, nothing else
# The recipient-roles table gives the delivery role three constraint types. Derive them from the example household and see that every health, schedule and device fact is withheld with a reason.
# 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: Derive what a delivery service may receive from the twelve facets of the example household.
delivery = c.derive_constraints(pick(load("examples/household/context.json"), "facets"), "delivery")
assert pick(delivery, "constraints.length") == 2, pick(delivery, "constraints.length")
print("ok", "constraints.length", "=", 2)
assert pick(delivery, "constraints[0].type") == "delivery_window", pick(delivery, "constraints[0].type")
print("ok", "constraints[0].type", "=", "delivery_window")
assert pick(delivery, "constraints[1].type") == "access_point", pick(delivery, "constraints[1].type")
print("ok", "constraints[1].type", "=", "access_point")
assert pick(delivery, "disclosed.length") == 0, pick(delivery, "disclosed.length")
print("ok", "disclosed.length", "=", 0)
assert pick(delivery, "withheld.length") == 11, pick(delivery, "withheld.length")
print("ok", "withheld.length", "=", 11)

# Step 2: Both constraints come from one facet, the household's receiving rules; the facet's own value (the hour, the door) is not in the answer.
assert pick(delivery, "constraints[0].derivedFrom") == ["cw.facet.commerce.receiving_rules"], pick(delivery, "constraints[0].derivedFrom")
print("ok", "constraints[0].derivedFrom", "=", ["cw.facet.commerce.receiving_rules"])
assert pick(delivery, "constraints[1].derivedFrom") == ["cw.facet.commerce.receiving_rules"], pick(delivery, "constraints[1].derivedFrom")
print("ok", "constraints[1].derivedFrom", "=", ["cw.facet.commerce.receiving_rules"])

# Step 3: The child's allergy is the first withheld facet, because the role is not allowed that constraint type; the robot's firmware is withheld because no consent names a delivery service.
assert pick(delivery, "withheld[0].facet") == "cw.facet.household.health.allergies", pick(delivery, "withheld[0].facet")
print("ok", "withheld[0].facet", "=", "cw.facet.household.health.allergies")
assert pick(delivery, "withheld[0].reason") == "not_allowed_for_role", pick(delivery, "withheld[0].reason")
print("ok", "withheld[0].reason", "=", "not_allowed_for_role")
assert pick(delivery, "withheld[9].facet") == "cw.facet.self.firmware", pick(delivery, "withheld[9].facet")
print("ok", "withheld[9].facet", "=", "cw.facet.self.firmware")
assert pick(delivery, "withheld[9].reason") == "no_consent", pick(delivery, "withheld[9].reason")
print("ok", "withheld[9].reason", "=", "no_consent")

print("scenario complete")

scenarios/080-delivery-runner-gets-window-and-door.json

Précédent: 079 Suivant: 081