Migration¶
This page documents breaking API changes between major mango releases.
mango 1.2.x → 2.0.0¶
ACL message helpers removed¶
send_acl_message and schedule_instant_acl_message have been removed.
In 2.0 all message types share the same internal routing envelope, so explicit
ACL wrappers are no longer needed.
# Before (1.2.x)
await agent.send_acl_message(content, receiver_addr=addr)
# After (2.0)
await agent.send_message(content, receiver_addr=addr)
# If you explicitly need an ACLMessage wrapper:
from mango import create_acl
await agent.send_message(create_acl(content), receiver_addr=addr)
Container factory consolidation¶
create_container has been removed. Use the type-specific factory instead:
# Before (1.2.x)
from mango import create_container
c = await create_container(connection_type='tcp', addr=('127.0.0.1', 5555))
# After (2.0)
from mango import create_tcp_container
c = create_tcp_container(addr=('127.0.0.1', 5555)) # synchronous!
Container startup moved to activate¶
The TCP server / MQTT client no longer starts inside the factory method.
Call activate (or container.start()) to start the network layer.
This guarantees cleanup even when exceptions occur:
# Before (1.2.x)
c = await create_container(...)
# … do work …
await c.shutdown()
# After (2.0)
from mango import activate
async with activate(c):
# … do work …
# shutdown is automatic
Agents created independently of containers¶
Agents are now created first, then registered with a container. This is what
enables run_with_tcp and similar helpers to accept agents before any
container exists.
# Before (1.2.x)
agent = MyAgent(container) # container passed to __init__
# After (2.0)
agent = MyAgent()
container.register(agent, suggested_aid="optional_id")
AgentAddress for routing¶
The receiver_addr / receiver_id pair has been replaced by a single
AgentAddress. Use agent.addr or
sender_addr() to obtain addresses:
# Before (1.2.x)
await agent.send_message(content, receiver_addr=('127.0.0.1', 5555),
receiver_id='agent0')
# After (2.0)
await agent.send_message(content, receiver_addr=other_agent.addr)
# Replying to a received message:
from mango import sender_addr
await agent.send_message(reply, receiver_addr=sender_addr(meta))
mango 0.4.0 → 1.0.0¶
Import paths changed —
Agent,Container, all role classes, and the container factory are now importable from the top-levelmangopackage:from mango import Agent, RoleAgent, Role
``handle_msg`` renamed to
handle_messagein bothAgentandRole.``send_message`` signature cleaned up — the
create_aclandacl_metadataparameters have been removed; usesend_acl_messageinstead (removed in 2.0, see above). Themqtt_kwargsparameter has been removed; use plain**kwargs.``DateTimeScheduledTask`` removed — use
TimestampScheduledTaskwith a Unix timestamp instead.Context and scheduler are no longer public attributes — use the scheduling convenience methods (e.g.
schedule_periodic_task) or access_context/_schedulerfrom within an agent subclass.