trading_agent.requests.user_request
¶
One thing a desk asked the user: a question, a plan to approve, or permission for an action.
A desk never waits for the answer. The request is saved and shown to the user, the desk's turn ends, and the user's answer reaches the desk later as a new message.
Typical usage example:
request = UserRequest.new('main', QUESTION, {'questions': [...]}) request.to_json_dictionary()
UserRequest
dataclass
¶
UserRequest(request_id, desk, kind, content, created_at, status, response=None, responded_at=None, responded_via=None, expires_at=None)
A question, plan or permission request, and the user's response once given.
Attributes:
| Name | Type | Description |
|---|---|---|
request_id |
str
|
Its identifier. |
desk |
str
|
The desk that asked. |
kind |
str
|
"question", "plan" or "permission". |
content |
dict[str, Any]
|
What was asked: the questions, the plan, or the action awaiting permission. |
created_at |
str
|
When it was asked, as ISO 8601 text in UTC. |
status |
str
|
"pending", "answered", "dismissed" or "expired". |
response |
dict[str, Any] | None
|
The user's response, or None while pending. |
responded_at |
str | None
|
When the user responded, as ISO 8601 text, or None. |
responded_via |
str | None
|
Where the user responded, "web", "terminal" or "telegram", or None. |
expires_at |
str | None
|
When the request lapses, as ISO 8601 text, or None when it never does. |
new
classmethod
¶
Creates a pending request with a new identifier.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
desk
|
str
|
The desk asking. |
required |
kind
|
str
|
"question", "plan" or "permission". |
required |
content
|
dict[str, Any]
|
What is asked. |
required |
expires_at
|
datetime | None
|
When it lapses, or None for never. |
None
|
Returns:
| Type | Description |
|---|---|
UserRequest
|
The request. |
Raises:
| Type | Description |
|---|---|
ValueError
|
The kind is not one of KINDS. |
Source code in src/trading_agent/requests/user_request.py
from_json_dictionary
classmethod
¶
Reads a request saved by to_json_dictionary.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
dictionary
|
dict[str, Any]
|
The saved fields. |
required |
Returns:
| Type | Description |
|---|---|
UserRequest
|
The request. |
Source code in src/trading_agent/requests/user_request.py
to_json_dictionary
¶
Converts the request to a dictionary that json.dumps can write.
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
Every field. |
title
¶
A short name for the request, for messages and notifications.
Returns:
| Type | Description |
|---|---|
str
|
The plan's title, the action's name, or the first question. |
Source code in src/trading_agent/requests/user_request.py
is_expired
¶
Says whether a pending request has passed its expiry time.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
now
|
datetime
|
The current time, with a time zone. |
required |
Returns:
| Type | Description |
|---|---|
bool
|
True when it has an expiry time and that time has passed. |