- Add weather router with OpenWeatherMap integration and 1-hour cache - Add is_starred column to calendar events with countdown widget - Add weather_city setting with Settings page input - Replace people/locations stats with open todos count + weather card - Add quick-add dropdown (event/todo/reminder) to dashboard header - Make CalendarWidget events single-line thin rows - Add rain warnings to smart briefing when chance > 40% - Invalidate dashboard/upcoming queries on form mutations - Migration 004: is_starred + weather_city columns Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
29 lines
799 B
Python
29 lines
799 B
Python
"""Add is_starred to calendar_events and weather_city to settings
|
|
|
|
Revision ID: 004
|
|
Revises: 003
|
|
Create Date: 2026-02-20 00:00:00.000000
|
|
|
|
"""
|
|
from typing import Sequence, Union
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision: str = '004'
|
|
down_revision: Union[str, None] = '003'
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
op.add_column('calendar_events', sa.Column('is_starred', sa.Boolean(), server_default=sa.text('false'), nullable=False))
|
|
op.add_column('settings', sa.Column('weather_city', sa.String(100), nullable=True))
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_column('calendar_events', 'is_starred')
|
|
op.drop_column('settings', 'weather_city')
|