def buy(self, txn, quantity: tc.Number): producer = tc.use(Producer) return self.grant( SCOPE, {"/state/scalar/op/post": [("buy_result", producer.buy(quantity=quantity))]}, {"quantity": quantity}, )
def weigh(self, txn, key: tc.Nil, new_value: tc.Number): left = tc.use(Left) txn.total = CONSERVED txn.current = self.weight.subject() txn.update = tc.After(self.weight.set(new_value), left.weigh(None, txn.total - new_value)) return tc.If(txn.current == new_value, None, txn.update)
def room_area(self, txn, dimensions: tc.Tuple) -> Meters: area_service = tc.use(AreaService) txn.length = area_service.Meters(dimensions[0]) txn.width = area_service.Meters(dimensions[1]) return area_service.area(length=txn.length, width=txn.width)
def testAreaService(self): service = tc.use(AreaService) params = {"length": service.Meters(5), "width": service.Meters(2)} self.assertEqual(self.host.post("/app/area/area", params), 10)
def weigh(self, txn, key: tc.Nil, weight: tc.Number): left = tc.use(Left) txn.total = CONSERVED txn.update = tc.After(left.weigh(None, txn.total - weight), self.weight.set(weight)) return tc.If(self.weight.subject() == weight, None, txn.update)