xag / agent_scheduler /db /__init__.py
ddoc's picture
Upload 51 files
6242a59
from pathlib import Path
from sqlalchemy import create_engine, inspect, text, String, Text
from .base import Base, metadata, db_file
from .app_state import AppStateKey, AppState, AppStateManager
from .task import TaskStatus, Task, TaskManager
version = "2"
state_manager = AppStateManager()
task_manager = TaskManager()
def init():
engine = create_engine(f"sqlite:///{db_file}")
# check if database exists
if not Path(db_file).exists():
# create database
metadata.create_all(engine)
state_manager.set_value(AppStateKey.Version, version)
# check if app state exists
if state_manager.get_value(AppStateKey.QueueState) is None:
# create app state
state_manager.set_value(AppStateKey.QueueState, "running")
inspector = inspect(engine)
with engine.connect() as conn:
task_columns = inspector.get_columns("task")
# add result column
if not any(col["name"] == "result" for col in task_columns):
conn.execute(text("ALTER TABLE task ADD COLUMN result TEXT"))
# add api_task_id column
if not any(col["name"] == "api_task_id" for col in task_columns):
conn.execute(text("ALTER TABLE task ADD COLUMN api_task_id VARCHAR(64)"))
# add name column
if not any(col["name"] == "name" for col in task_columns):
conn.execute(text("ALTER TABLE task ADD COLUMN name VARCHAR(255)"))
# add bookmarked column
if not any(col["name"] == "bookmarked" for col in task_columns):
conn.execute(text("ALTER TABLE task ADD COLUMN bookmarked BOOLEAN DEFAULT FALSE"))
params_column = next(col for col in task_columns if col["name"] == "params")
if version > "1" and not isinstance(params_column["type"], Text):
transaction = conn.begin()
conn.execute(
text(
"""
CREATE TABLE task_temp (
id VARCHAR(64) NOT NULL,
type VARCHAR(20) NOT NULL,
params TEXT NOT NULL,
script_params BLOB NOT NULL,
priority INTEGER NOT NULL,
status VARCHAR(20) NOT NULL,
created_at DATETIME DEFAULT (datetime('now')) NOT NULL,
updated_at DATETIME DEFAULT (datetime('now')) NOT NULL,
result TEXT,
PRIMARY KEY (id)
)"""
)
)
conn.execute(text("INSERT INTO task_temp SELECT * FROM task"))
conn.execute(text("DROP TABLE task"))
conn.execute(text("ALTER TABLE task_temp RENAME TO task"))
transaction.commit()
conn.close()
__all__ = [
"init",
"Base",
"metadata",
"db_file",
"AppStateKey",
"AppState",
"TaskStatus",
"Task",
"task_manager",
"state_manager",
]