Skip to content

Commit 40ee425

Browse files
committed
chore: format codebase with ruff
1 parent ae6e6c0 commit 40ee425

File tree

5 files changed

+141
-124
lines changed

5 files changed

+141
-124
lines changed

migrations/env.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,7 @@ async def main(engine: AsyncEngine):
9797
)
9898

9999
with connectable.connect() as connection:
100-
context.configure(
101-
connection=connection, target_metadata=target_metadata
102-
)
100+
context.configure(connection=connection, target_metadata=target_metadata)
103101

104102
with context.begin_transaction():
105103
context.run_migrations()
Lines changed: 129 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
"""initial schema
22
33
Revision ID: 56e1a9d2ba59
4-
Revises:
4+
Revises:
55
Create Date: 2025-10-18 16:36:38.674310
66
77
"""
8+
89
from typing import Sequence, Union
910

1011
from alembic import op
1112
import sqlalchemy as sa
1213

1314

1415
# revision identifiers, used by Alembic.
15-
revision: str = '56e1a9d2ba59'
16+
revision: str = "56e1a9d2ba59"
1617
down_revision: Union[str, Sequence[str], None] = None
1718
branch_labels: Union[str, Sequence[str], None] = None
1819
depends_on: Union[str, Sequence[str], None] = None
@@ -21,132 +22,142 @@
2122
def upgrade() -> None:
2223
"""Upgrade schema."""
2324
# ### commands auto generated by Alembic - please adjust! ###
24-
op.create_table('alignment_events',
25-
sa.Column('id', sa.Integer(), nullable=False),
26-
sa.Column('event_id', sa.String(length=64), nullable=False),
27-
sa.Column('title', sa.String(length=512), nullable=False),
28-
sa.Column('context', sa.Text(), nullable=True),
29-
sa.Column('suggestions', sa.JSON(), nullable=False),
30-
sa.Column('notification_status', sa.String(length=64), nullable=False),
31-
sa.Column('notification_meta', sa.JSON(), nullable=False),
32-
sa.Column('followup_status', sa.String(length=64), nullable=True),
33-
sa.Column('followup_recorded_at', sa.DateTime(timezone=True), nullable=True),
34-
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
35-
sa.PrimaryKeyConstraint('id')
25+
op.create_table(
26+
"alignment_events",
27+
sa.Column("id", sa.Integer(), nullable=False),
28+
sa.Column("event_id", sa.String(length=64), nullable=False),
29+
sa.Column("title", sa.String(length=512), nullable=False),
30+
sa.Column("context", sa.Text(), nullable=True),
31+
sa.Column("suggestions", sa.JSON(), nullable=False),
32+
sa.Column("notification_status", sa.String(length=64), nullable=False),
33+
sa.Column("notification_meta", sa.JSON(), nullable=False),
34+
sa.Column("followup_status", sa.String(length=64), nullable=True),
35+
sa.Column("followup_recorded_at", sa.DateTime(timezone=True), nullable=True),
36+
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
37+
sa.PrimaryKeyConstraint("id"),
3638
)
37-
op.create_index(op.f('ix_alignment_events_created_at'), 'alignment_events', ['created_at'], unique=False)
38-
op.create_index(op.f('ix_alignment_events_event_id'), 'alignment_events', ['event_id'], unique=True)
39-
op.create_table('feedback',
40-
sa.Column('id', sa.Integer(), nullable=False),
41-
sa.Column('plan_id', sa.String(length=64), nullable=False),
42-
sa.Column('user', sa.String(length=255), nullable=True),
43-
sa.Column('rating', sa.Integer(), nullable=True),
44-
sa.Column('edited_prd', sa.Text(), nullable=True),
45-
sa.Column('comments', sa.Text(), nullable=True),
46-
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
47-
sa.PrimaryKeyConstraint('id')
39+
op.create_index(op.f("ix_alignment_events_created_at"), "alignment_events", ["created_at"], unique=False)
40+
op.create_index(op.f("ix_alignment_events_event_id"), "alignment_events", ["event_id"], unique=True)
41+
op.create_table(
42+
"feedback",
43+
sa.Column("id", sa.Integer(), nullable=False),
44+
sa.Column("plan_id", sa.String(length=64), nullable=False),
45+
sa.Column("user", sa.String(length=255), nullable=True),
46+
sa.Column("rating", sa.Integer(), nullable=True),
47+
sa.Column("edited_prd", sa.Text(), nullable=True),
48+
sa.Column("comments", sa.Text(), nullable=True),
49+
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
50+
sa.PrimaryKeyConstraint("id"),
4851
)
49-
op.create_index(op.f('ix_feedback_created_at'), 'feedback', ['created_at'], unique=False)
50-
op.create_index(op.f('ix_feedback_plan_id'), 'feedback', ['plan_id'], unique=False)
51-
op.create_table('plans',
52-
sa.Column('id', sa.Integer(), nullable=False),
53-
sa.Column('plan_id', sa.String(length=64), nullable=False),
54-
sa.Column('title', sa.String(length=512), nullable=False),
55-
sa.Column('context', sa.Text(), nullable=True),
56-
sa.Column('constraints', sa.JSON(), nullable=False),
57-
sa.Column('prd_markdown', sa.Text(), nullable=True),
58-
sa.Column('ticket_plan', sa.JSON(), nullable=True),
59-
sa.Column('status_digest', sa.Text(), nullable=True),
60-
sa.Column('critic_review', sa.JSON(), nullable=True),
61-
sa.Column('revision_history', sa.JSON(), nullable=False),
62-
sa.Column('trace_name', sa.String(length=255), nullable=True),
63-
sa.Column('embedding', sa.JSON(), nullable=True),
64-
sa.Column('tokens_used', sa.Integer(), nullable=True),
65-
sa.Column('cost_usd', sa.Float(), nullable=True),
66-
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
67-
sa.Column('completed_at', sa.DateTime(timezone=True), nullable=True),
68-
sa.PrimaryKeyConstraint('id')
52+
op.create_index(op.f("ix_feedback_created_at"), "feedback", ["created_at"], unique=False)
53+
op.create_index(op.f("ix_feedback_plan_id"), "feedback", ["plan_id"], unique=False)
54+
op.create_table(
55+
"plans",
56+
sa.Column("id", sa.Integer(), nullable=False),
57+
sa.Column("plan_id", sa.String(length=64), nullable=False),
58+
sa.Column("title", sa.String(length=512), nullable=False),
59+
sa.Column("context", sa.Text(), nullable=True),
60+
sa.Column("constraints", sa.JSON(), nullable=False),
61+
sa.Column("prd_markdown", sa.Text(), nullable=True),
62+
sa.Column("ticket_plan", sa.JSON(), nullable=True),
63+
sa.Column("status_digest", sa.Text(), nullable=True),
64+
sa.Column("critic_review", sa.JSON(), nullable=True),
65+
sa.Column("revision_history", sa.JSON(), nullable=False),
66+
sa.Column("trace_name", sa.String(length=255), nullable=True),
67+
sa.Column("embedding", sa.JSON(), nullable=True),
68+
sa.Column("tokens_used", sa.Integer(), nullable=True),
69+
sa.Column("cost_usd", sa.Float(), nullable=True),
70+
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
71+
sa.Column("completed_at", sa.DateTime(timezone=True), nullable=True),
72+
sa.PrimaryKeyConstraint("id"),
6973
)
70-
op.create_index(op.f('ix_plans_created_at'), 'plans', ['created_at'], unique=False)
71-
op.create_index(op.f('ix_plans_plan_id'), 'plans', ['plan_id'], unique=True)
72-
op.create_table('prd_approvals',
73-
sa.Column('id', sa.Integer(), nullable=False),
74-
sa.Column('version_id', sa.String(length=64), nullable=False),
75-
sa.Column('reviewer', sa.String(length=255), nullable=False),
76-
sa.Column('reviewer_email', sa.String(length=255), nullable=True),
77-
sa.Column('status', sa.String(length=64), nullable=False),
78-
sa.Column('comments', sa.Text(), nullable=True),
79-
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
80-
sa.PrimaryKeyConstraint('id')
74+
op.create_index(op.f("ix_plans_created_at"), "plans", ["created_at"], unique=False)
75+
op.create_index(op.f("ix_plans_plan_id"), "plans", ["plan_id"], unique=True)
76+
op.create_table(
77+
"prd_approvals",
78+
sa.Column("id", sa.Integer(), nullable=False),
79+
sa.Column("version_id", sa.String(length=64), nullable=False),
80+
sa.Column("reviewer", sa.String(length=255), nullable=False),
81+
sa.Column("reviewer_email", sa.String(length=255), nullable=True),
82+
sa.Column("status", sa.String(length=64), nullable=False),
83+
sa.Column("comments", sa.Text(), nullable=True),
84+
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
85+
sa.PrimaryKeyConstraint("id"),
8186
)
82-
op.create_index(op.f('ix_prd_approvals_created_at'), 'prd_approvals', ['created_at'], unique=False)
83-
op.create_index(op.f('ix_prd_approvals_version_id'), 'prd_approvals', ['version_id'], unique=False)
84-
op.create_table('prd_versions',
85-
sa.Column('id', sa.Integer(), nullable=False),
86-
sa.Column('version_id', sa.String(length=64), nullable=False),
87-
sa.Column('plan_id', sa.String(length=64), nullable=False),
88-
sa.Column('parent_version_id', sa.String(length=64), nullable=True),
89-
sa.Column('branch', sa.String(length=255), nullable=False),
90-
sa.Column('prd_markdown', sa.Text(), nullable=False),
91-
sa.Column('commit_message', sa.String(length=512), nullable=True),
92-
sa.Column('author', sa.String(length=255), nullable=True),
93-
sa.Column('author_email', sa.String(length=255), nullable=True),
94-
sa.Column('status', sa.String(length=64), nullable=False),
95-
sa.Column('diff_summary', sa.JSON(), nullable=True),
96-
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
97-
sa.PrimaryKeyConstraint('id')
87+
op.create_index(op.f("ix_prd_approvals_created_at"), "prd_approvals", ["created_at"], unique=False)
88+
op.create_index(op.f("ix_prd_approvals_version_id"), "prd_approvals", ["version_id"], unique=False)
89+
op.create_table(
90+
"prd_versions",
91+
sa.Column("id", sa.Integer(), nullable=False),
92+
sa.Column("version_id", sa.String(length=64), nullable=False),
93+
sa.Column("plan_id", sa.String(length=64), nullable=False),
94+
sa.Column("parent_version_id", sa.String(length=64), nullable=True),
95+
sa.Column("branch", sa.String(length=255), nullable=False),
96+
sa.Column("prd_markdown", sa.Text(), nullable=False),
97+
sa.Column("commit_message", sa.String(length=512), nullable=True),
98+
sa.Column("author", sa.String(length=255), nullable=True),
99+
sa.Column("author_email", sa.String(length=255), nullable=True),
100+
sa.Column("status", sa.String(length=64), nullable=False),
101+
sa.Column("diff_summary", sa.JSON(), nullable=True),
102+
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
103+
sa.PrimaryKeyConstraint("id"),
98104
)
99-
op.create_index(op.f('ix_prd_versions_branch'), 'prd_versions', ['branch'], unique=False)
100-
op.create_index(op.f('ix_prd_versions_created_at'), 'prd_versions', ['created_at'], unique=False)
101-
op.create_index(op.f('ix_prd_versions_parent_version_id'), 'prd_versions', ['parent_version_id'], unique=False)
102-
op.create_index(op.f('ix_prd_versions_plan_id'), 'prd_versions', ['plan_id'], unique=False)
103-
op.create_index(op.f('ix_prd_versions_status'), 'prd_versions', ['status'], unique=False)
104-
op.create_index(op.f('ix_prd_versions_version_id'), 'prd_versions', ['version_id'], unique=True)
105-
op.create_table('tasks',
106-
sa.Column('id', sa.Integer(), nullable=False),
107-
sa.Column('task_id', sa.String(length=64), nullable=False),
108-
sa.Column('name', sa.String(length=255), nullable=False),
109-
sa.Column('status', sa.Enum('PENDING', 'RUNNING', 'COMPLETED', 'FAILED', 'RETRYING', name='taskstatusdb'), nullable=False),
110-
sa.Column('payload', sa.JSON(), nullable=True),
111-
sa.Column('result', sa.JSON(), nullable=True),
112-
sa.Column('error', sa.Text(), nullable=True),
113-
sa.Column('retry_count', sa.Integer(), nullable=False),
114-
sa.Column('max_retries', sa.Integer(), nullable=False),
115-
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
116-
sa.Column('started_at', sa.DateTime(timezone=True), nullable=True),
117-
sa.Column('completed_at', sa.DateTime(timezone=True), nullable=True),
118-
sa.PrimaryKeyConstraint('id')
105+
op.create_index(op.f("ix_prd_versions_branch"), "prd_versions", ["branch"], unique=False)
106+
op.create_index(op.f("ix_prd_versions_created_at"), "prd_versions", ["created_at"], unique=False)
107+
op.create_index(op.f("ix_prd_versions_parent_version_id"), "prd_versions", ["parent_version_id"], unique=False)
108+
op.create_index(op.f("ix_prd_versions_plan_id"), "prd_versions", ["plan_id"], unique=False)
109+
op.create_index(op.f("ix_prd_versions_status"), "prd_versions", ["status"], unique=False)
110+
op.create_index(op.f("ix_prd_versions_version_id"), "prd_versions", ["version_id"], unique=True)
111+
op.create_table(
112+
"tasks",
113+
sa.Column("id", sa.Integer(), nullable=False),
114+
sa.Column("task_id", sa.String(length=64), nullable=False),
115+
sa.Column("name", sa.String(length=255), nullable=False),
116+
sa.Column(
117+
"status",
118+
sa.Enum("PENDING", "RUNNING", "COMPLETED", "FAILED", "RETRYING", name="taskstatusdb"),
119+
nullable=False,
120+
),
121+
sa.Column("payload", sa.JSON(), nullable=True),
122+
sa.Column("result", sa.JSON(), nullable=True),
123+
sa.Column("error", sa.Text(), nullable=True),
124+
sa.Column("retry_count", sa.Integer(), nullable=False),
125+
sa.Column("max_retries", sa.Integer(), nullable=False),
126+
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
127+
sa.Column("started_at", sa.DateTime(timezone=True), nullable=True),
128+
sa.Column("completed_at", sa.DateTime(timezone=True), nullable=True),
129+
sa.PrimaryKeyConstraint("id"),
119130
)
120-
op.create_index(op.f('ix_tasks_created_at'), 'tasks', ['created_at'], unique=False)
121-
op.create_index(op.f('ix_tasks_status'), 'tasks', ['status'], unique=False)
122-
op.create_index(op.f('ix_tasks_task_id'), 'tasks', ['task_id'], unique=True)
131+
op.create_index(op.f("ix_tasks_created_at"), "tasks", ["created_at"], unique=False)
132+
op.create_index(op.f("ix_tasks_status"), "tasks", ["status"], unique=False)
133+
op.create_index(op.f("ix_tasks_task_id"), "tasks", ["task_id"], unique=True)
123134
# ### end Alembic commands ###
124135

125136

126137
def downgrade() -> None:
127138
"""Downgrade schema."""
128139
# ### commands auto generated by Alembic - please adjust! ###
129-
op.drop_index(op.f('ix_tasks_task_id'), table_name='tasks')
130-
op.drop_index(op.f('ix_tasks_status'), table_name='tasks')
131-
op.drop_index(op.f('ix_tasks_created_at'), table_name='tasks')
132-
op.drop_table('tasks')
133-
op.drop_index(op.f('ix_prd_versions_version_id'), table_name='prd_versions')
134-
op.drop_index(op.f('ix_prd_versions_status'), table_name='prd_versions')
135-
op.drop_index(op.f('ix_prd_versions_plan_id'), table_name='prd_versions')
136-
op.drop_index(op.f('ix_prd_versions_parent_version_id'), table_name='prd_versions')
137-
op.drop_index(op.f('ix_prd_versions_created_at'), table_name='prd_versions')
138-
op.drop_index(op.f('ix_prd_versions_branch'), table_name='prd_versions')
139-
op.drop_table('prd_versions')
140-
op.drop_index(op.f('ix_prd_approvals_version_id'), table_name='prd_approvals')
141-
op.drop_index(op.f('ix_prd_approvals_created_at'), table_name='prd_approvals')
142-
op.drop_table('prd_approvals')
143-
op.drop_index(op.f('ix_plans_plan_id'), table_name='plans')
144-
op.drop_index(op.f('ix_plans_created_at'), table_name='plans')
145-
op.drop_table('plans')
146-
op.drop_index(op.f('ix_feedback_plan_id'), table_name='feedback')
147-
op.drop_index(op.f('ix_feedback_created_at'), table_name='feedback')
148-
op.drop_table('feedback')
149-
op.drop_index(op.f('ix_alignment_events_event_id'), table_name='alignment_events')
150-
op.drop_index(op.f('ix_alignment_events_created_at'), table_name='alignment_events')
151-
op.drop_table('alignment_events')
140+
op.drop_index(op.f("ix_tasks_task_id"), table_name="tasks")
141+
op.drop_index(op.f("ix_tasks_status"), table_name="tasks")
142+
op.drop_index(op.f("ix_tasks_created_at"), table_name="tasks")
143+
op.drop_table("tasks")
144+
op.drop_index(op.f("ix_prd_versions_version_id"), table_name="prd_versions")
145+
op.drop_index(op.f("ix_prd_versions_status"), table_name="prd_versions")
146+
op.drop_index(op.f("ix_prd_versions_plan_id"), table_name="prd_versions")
147+
op.drop_index(op.f("ix_prd_versions_parent_version_id"), table_name="prd_versions")
148+
op.drop_index(op.f("ix_prd_versions_created_at"), table_name="prd_versions")
149+
op.drop_index(op.f("ix_prd_versions_branch"), table_name="prd_versions")
150+
op.drop_table("prd_versions")
151+
op.drop_index(op.f("ix_prd_approvals_version_id"), table_name="prd_approvals")
152+
op.drop_index(op.f("ix_prd_approvals_created_at"), table_name="prd_approvals")
153+
op.drop_table("prd_approvals")
154+
op.drop_index(op.f("ix_plans_plan_id"), table_name="plans")
155+
op.drop_index(op.f("ix_plans_created_at"), table_name="plans")
156+
op.drop_table("plans")
157+
op.drop_index(op.f("ix_feedback_plan_id"), table_name="feedback")
158+
op.drop_index(op.f("ix_feedback_created_at"), table_name="feedback")
159+
op.drop_table("feedback")
160+
op.drop_index(op.f("ix_alignment_events_event_id"), table_name="alignment_events")
161+
op.drop_index(op.f("ix_alignment_events_created_at"), table_name="alignment_events")
162+
op.drop_table("alignment_events")
152163
# ### end Alembic commands ###

tests/storage/test_database.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ async def test_init_db_creates_tables():
3030

3131
engine = database.get_engine()
3232
async with engine.begin() as conn:
33+
3334
def _inspect_tables(sync_conn):
3435
from sqlalchemy import inspect
3536

tests/test_auth.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ async def test_verify_api_key_no_key_configured(monkeypatch):
1414
result = await verify_api_key(None)
1515
assert result == "anonymous"
1616

17+
1718
@pytest.mark.asyncio
1819
async def test_verify_api_key_invalid():
1920
"""Invalid API key should raise 403."""

tests/test_planner.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ def _record(event: dict[str, object]) -> dict[str, object]:
2929

3030

3131
def test_generate_plan_produces_status_digest(monkeypatch):
32-
monkeypatch.setattr(planner_module, "openai_client", SimpleNamespace(create_plan=lambda *args, **kwargs: "stubbed plan"))
32+
monkeypatch.setattr(
33+
planner_module, "openai_client", SimpleNamespace(create_plan=lambda *args, **kwargs: "stubbed plan")
34+
)
3335
monkeypatch.setattr(planner_module.vector_memory, "record_prd", lambda *args, **kwargs: None)
3436
monkeypatch.setattr(planner_module.vector_memory, "to_dataframe", lambda: pd.DataFrame())
3537
fired_hooks: list[str] = []
@@ -85,7 +87,9 @@ def test_generate_plan_produces_status_digest(monkeypatch):
8587

8688

8789
def test_generate_plan_revision_flow(monkeypatch):
88-
monkeypatch.setattr(planner_module, "openai_client", SimpleNamespace(create_plan=lambda *args, **kwargs: "stubbed plan"))
90+
monkeypatch.setattr(
91+
planner_module, "openai_client", SimpleNamespace(create_plan=lambda *args, **kwargs: "stubbed plan")
92+
)
8993
monkeypatch.setattr(planner_module.vector_memory, "record_prd", lambda *args, **kwargs: None)
9094
monkeypatch.setattr(planner_module.vector_memory, "to_dataframe", lambda: pd.DataFrame())
9195

@@ -578,7 +582,9 @@ async def _fake_post(body_md: str, channel: str | None = None) -> dict[str, obje
578582
monkeypatch.setattr(planner_module, "record_alignment_notification", lambda status: statuses.append(status))
579583

580584
first_status, first_meta = planner_module._notify_alignment("Test Initiative", "Note", [{"idea": "Other"}])
581-
second_status, second_meta = planner_module._notify_alignment("Test Initiative", "Another note", [{"idea": "Other"}])
585+
second_status, second_meta = planner_module._notify_alignment(
586+
"Test Initiative", "Another note", [{"idea": "Other"}]
587+
)
582588

583589
assert len(calls) == 1
584590
assert first_status == "success"

0 commit comments

Comments
 (0)