BotRepository API Reference
tradingbot.utils.bot_repository.BotRepository
Handles database operations for Bot entities.
create_or_get_bot(name: str, session: Session | None = None) -> BotModel
staticmethod
Create or retrieve bot from database.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Bot name |
required |
session
|
Session | None
|
Optional existing database session |
None
|
Returns:
| Type | Description |
|---|---|
Bot
|
BotModel instance |
Source code in tradingbot/utils/bot_repository.py
get_bot_locked(session: Session, name: str) -> BotModel
staticmethod
Get a bot by name with a row-level lock (FOR UPDATE). MUST be called within an active transaction.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
session
|
Session
|
Active database session |
required |
name
|
str
|
Bot name |
required |
Returns:
| Type | Description |
|---|---|
Bot
|
Bot model instance |
Source code in tradingbot/utils/bot_repository.py
last_successful_run(name: str, session: Session | None = None) -> datetime | None
staticmethod
Timestamp of a bot's most recent successful run, or None if it never had one.
Used to detect a parent whose CronJob has died: its portfolio row keeps returning the last state it traded into, which looks like a live signal.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Bot name |
required |
session
|
Session | None
|
Optional existing database session |
None
|
Returns:
| Type | Description |
|---|---|
datetime | None
|
Naive UTC datetime of the last RunLog row with success=True, or None. |
Source code in tradingbot/utils/bot_repository.py
log_trade(bot_name: str, symbol: str, quantity: float, price: float, is_buy: bool, profit: float | None = None, session: Session | None = None) -> Trade
staticmethod
Log a trade to the database.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
bot_name
|
str
|
Name of the bot executing the trade |
required |
symbol
|
str
|
Trading symbol |
required |
quantity
|
float
|
Number of shares/units |
required |
price
|
float
|
Price per unit |
required |
is_buy
|
bool
|
True for buy, False for sell |
required |
profit
|
float | None
|
MISNOMER — net cash proceeds credited on a sell, NOT realized P&L (no cost basis is tracked). Leave None on buys. |
None
|
session
|
Session | None
|
Optional existing database session |
None
|
Returns:
| Type | Description |
|---|---|
Trade
|
Created Trade object |
Source code in tradingbot/utils/bot_repository.py
read_portfolio(name: str, session: Session | None = None) -> dict | None
staticmethod
Read another bot's portfolio WITHOUT creating it.
create_or_get_bot() would happily materialise a fresh $10k bot row for a typo'd name, which a reader must never do — meta-bots that mirror a parent need to tell "parent is all cash" apart from "parent does not exist".
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Bot name |
required |
session
|
Session | None
|
Optional existing database session |
None
|
Returns:
| Type | Description |
|---|---|
dict | None
|
A plain dict copy of the portfolio, or None if the bot has no row. |
Source code in tradingbot/utils/bot_repository.py
update_bot(bot: BotModel, session: Session | None = None) -> BotModel
staticmethod
Update bot state in database.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
bot
|
Bot
|
BotModel instance to update |
required |
session
|
Session | None
|
Optional existing database session |
None
|
Returns:
| Type | Description |
|---|---|
Bot
|
Updated BotModel instance |