refactor: use 'import sqlalchemy as sa' pattern in db/base.py

- Replace individual SQLAlchemy imports with 'import sqlalchemy as sa'
- Prefix all SQLAlchemy types with 'sa.' for better code clarity
- Move all imports to the top of the file (remove mid-file Computed import)
- Improve code readability by making SQLAlchemy usage explicit
This commit is contained in:
2025-09-23 00:57:05 -06:00
parent 5e036d17b6
commit 606c5f5059

View File

@@ -1,19 +1,7 @@
from datetime import datetime from datetime import datetime
from typing import Optional from typing import Optional
from sqlalchemy import ( import sqlalchemy as sa
JSON,
Boolean,
Column,
DateTime,
Float,
ForeignKey,
Index,
Integer,
String,
Text,
text,
)
from sqlalchemy.dialects.postgresql import JSONB, TSVECTOR from sqlalchemy.dialects.postgresql import JSONB, TSVECTOR
from sqlalchemy.ext.asyncio import AsyncAttrs from sqlalchemy.ext.asyncio import AsyncAttrs
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
@@ -26,57 +14,55 @@ class Base(AsyncAttrs, DeclarativeBase):
class TranscriptModel(Base): class TranscriptModel(Base):
__tablename__ = "transcript" __tablename__ = "transcript"
id: Mapped[str] = mapped_column(String, primary_key=True) id: Mapped[str] = mapped_column(sa.String, primary_key=True)
name: Mapped[Optional[str]] = mapped_column(String) name: Mapped[Optional[str]] = mapped_column(sa.String)
status: Mapped[Optional[str]] = mapped_column(String) status: Mapped[Optional[str]] = mapped_column(sa.String)
locked: Mapped[Optional[bool]] = mapped_column(Boolean) locked: Mapped[Optional[bool]] = mapped_column(sa.Boolean)
duration: Mapped[Optional[float]] = mapped_column(Float) duration: Mapped[Optional[float]] = mapped_column(sa.Float)
created_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True)) created_at: Mapped[Optional[datetime]] = mapped_column(sa.DateTime(timezone=True))
title: Mapped[Optional[str]] = mapped_column(String) title: Mapped[Optional[str]] = mapped_column(sa.String)
short_summary: Mapped[Optional[str]] = mapped_column(String) short_summary: Mapped[Optional[str]] = mapped_column(sa.String)
long_summary: Mapped[Optional[str]] = mapped_column(String) long_summary: Mapped[Optional[str]] = mapped_column(sa.String)
topics: Mapped[Optional[list]] = mapped_column(JSON) topics: Mapped[Optional[list]] = mapped_column(sa.JSON)
events: Mapped[Optional[list]] = mapped_column(JSON) events: Mapped[Optional[list]] = mapped_column(sa.JSON)
participants: Mapped[Optional[list]] = mapped_column(JSON) participants: Mapped[Optional[list]] = mapped_column(sa.JSON)
source_language: Mapped[Optional[str]] = mapped_column(String) source_language: Mapped[Optional[str]] = mapped_column(sa.String)
target_language: Mapped[Optional[str]] = mapped_column(String) target_language: Mapped[Optional[str]] = mapped_column(sa.String)
reviewed: Mapped[bool] = mapped_column( reviewed: Mapped[bool] = mapped_column(
Boolean, nullable=False, server_default=text("false") sa.Boolean, nullable=False, server_default=sa.text("false")
) )
audio_location: Mapped[str] = mapped_column( audio_location: Mapped[str] = mapped_column(
String, nullable=False, server_default="local" sa.String, nullable=False, server_default="local"
) )
user_id: Mapped[Optional[str]] = mapped_column(String) user_id: Mapped[Optional[str]] = mapped_column(sa.String)
share_mode: Mapped[str] = mapped_column( share_mode: Mapped[str] = mapped_column(
String, nullable=False, server_default="private" sa.String, nullable=False, server_default="private"
) )
meeting_id: Mapped[Optional[str]] = mapped_column(String) meeting_id: Mapped[Optional[str]] = mapped_column(sa.String)
recording_id: Mapped[Optional[str]] = mapped_column(String) recording_id: Mapped[Optional[str]] = mapped_column(sa.String)
zulip_message_id: Mapped[Optional[int]] = mapped_column(Integer) zulip_message_id: Mapped[Optional[int]] = mapped_column(sa.Integer)
source_kind: Mapped[str] = mapped_column( source_kind: Mapped[str] = mapped_column(
String, nullable=False sa.String, nullable=False
) # Enum will be handled separately ) # Enum will be handled separately
audio_deleted: Mapped[Optional[bool]] = mapped_column(Boolean) audio_deleted: Mapped[Optional[bool]] = mapped_column(sa.Boolean)
room_id: Mapped[Optional[str]] = mapped_column(String) room_id: Mapped[Optional[str]] = mapped_column(sa.String)
webvtt: Mapped[Optional[str]] = mapped_column(Text) webvtt: Mapped[Optional[str]] = mapped_column(sa.Text)
__table_args__ = ( __table_args__ = (
Index("idx_transcript_recording_id", "recording_id"), sa.Index("idx_transcript_recording_id", "recording_id"),
Index("idx_transcript_user_id", "user_id"), sa.Index("idx_transcript_user_id", "user_id"),
Index("idx_transcript_created_at", "created_at"), sa.Index("idx_transcript_created_at", "created_at"),
Index("idx_transcript_user_id_recording_id", "user_id", "recording_id"), sa.Index("idx_transcript_user_id_recording_id", "user_id", "recording_id"),
Index("idx_transcript_room_id", "room_id"), sa.Index("idx_transcript_room_id", "room_id"),
Index("idx_transcript_source_kind", "source_kind"), sa.Index("idx_transcript_source_kind", "source_kind"),
Index("idx_transcript_room_id_created_at", "room_id", "created_at"), sa.Index("idx_transcript_room_id_created_at", "room_id", "created_at"),
) )
from sqlalchemy import Computed TranscriptModel.search_vector_en = sa.Column(
TranscriptModel.search_vector_en = Column(
"search_vector_en", "search_vector_en",
TSVECTOR, TSVECTOR,
Computed( sa.Computed(
"setweight(to_tsvector('english', coalesce(title, '')), 'A') || " "setweight(to_tsvector('english', coalesce(title, '')), 'A') || "
"setweight(to_tsvector('english', coalesce(long_summary, '')), 'B') || " "setweight(to_tsvector('english', coalesce(long_summary, '')), 'B') || "
"setweight(to_tsvector('english', coalesce(webvtt, '')), 'C')", "setweight(to_tsvector('english', coalesce(webvtt, '')), 'C')",
@@ -88,83 +74,85 @@ TranscriptModel.search_vector_en = Column(
class RoomModel(Base): class RoomModel(Base):
__tablename__ = "room" __tablename__ = "room"
id: Mapped[str] = mapped_column(String, primary_key=True) id: Mapped[str] = mapped_column(sa.String, primary_key=True)
name: Mapped[str] = mapped_column(String, nullable=False, unique=True) name: Mapped[str] = mapped_column(sa.String, nullable=False, unique=True)
user_id: Mapped[str] = mapped_column(String, nullable=False) user_id: Mapped[str] = mapped_column(sa.String, nullable=False)
created_at: Mapped[datetime] = mapped_column( created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), nullable=False sa.DateTime(timezone=True), nullable=False
) )
zulip_auto_post: Mapped[bool] = mapped_column( zulip_auto_post: Mapped[bool] = mapped_column(
Boolean, nullable=False, server_default=text("false") sa.Boolean, nullable=False, server_default=sa.text("false")
) )
zulip_stream: Mapped[Optional[str]] = mapped_column(String) zulip_stream: Mapped[Optional[str]] = mapped_column(sa.String)
zulip_topic: Mapped[Optional[str]] = mapped_column(String) zulip_topic: Mapped[Optional[str]] = mapped_column(sa.String)
is_locked: Mapped[bool] = mapped_column( is_locked: Mapped[bool] = mapped_column(
Boolean, nullable=False, server_default=text("false") sa.Boolean, nullable=False, server_default=sa.text("false")
) )
room_mode: Mapped[str] = mapped_column( room_mode: Mapped[str] = mapped_column(
String, nullable=False, server_default="normal" sa.String, nullable=False, server_default="normal"
) )
recording_type: Mapped[str] = mapped_column( recording_type: Mapped[str] = mapped_column(
String, nullable=False, server_default="cloud" sa.String, nullable=False, server_default="cloud"
) )
recording_trigger: Mapped[str] = mapped_column( recording_trigger: Mapped[str] = mapped_column(
String, nullable=False, server_default="automatic-2nd-participant" sa.String, nullable=False, server_default="automatic-2nd-participant"
) )
is_shared: Mapped[bool] = mapped_column( is_shared: Mapped[bool] = mapped_column(
Boolean, nullable=False, server_default=text("false") sa.Boolean, nullable=False, server_default=sa.text("false")
) )
webhook_url: Mapped[Optional[str]] = mapped_column(String) webhook_url: Mapped[Optional[str]] = mapped_column(sa.String)
webhook_secret: Mapped[Optional[str]] = mapped_column(String) webhook_secret: Mapped[Optional[str]] = mapped_column(sa.String)
ics_url: Mapped[Optional[str]] = mapped_column(Text) ics_url: Mapped[Optional[str]] = mapped_column(sa.Text)
ics_fetch_interval: Mapped[Optional[int]] = mapped_column( ics_fetch_interval: Mapped[Optional[int]] = mapped_column(
Integer, server_default=text("300") sa.Integer, server_default=sa.text("300")
) )
ics_enabled: Mapped[bool] = mapped_column( ics_enabled: Mapped[bool] = mapped_column(
Boolean, nullable=False, server_default=text("false") sa.Boolean, nullable=False, server_default=sa.text("false")
) )
ics_last_sync: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True)) ics_last_sync: Mapped[Optional[datetime]] = mapped_column(
ics_last_etag: Mapped[Optional[str]] = mapped_column(Text) sa.DateTime(timezone=True)
)
ics_last_etag: Mapped[Optional[str]] = mapped_column(sa.Text)
__table_args__ = ( __table_args__ = (
Index("idx_room_is_shared", "is_shared"), sa.Index("idx_room_is_shared", "is_shared"),
Index("idx_room_ics_enabled", "ics_enabled"), sa.Index("idx_room_ics_enabled", "ics_enabled"),
) )
class MeetingModel(Base): class MeetingModel(Base):
__tablename__ = "meeting" __tablename__ = "meeting"
id: Mapped[str] = mapped_column(String, primary_key=True) id: Mapped[str] = mapped_column(sa.String, primary_key=True)
room_name: Mapped[Optional[str]] = mapped_column(String) room_name: Mapped[Optional[str]] = mapped_column(sa.String)
room_url: Mapped[Optional[str]] = mapped_column(String) room_url: Mapped[Optional[str]] = mapped_column(sa.String)
host_room_url: Mapped[Optional[str]] = mapped_column(String) host_room_url: Mapped[Optional[str]] = mapped_column(sa.String)
start_date: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True)) start_date: Mapped[Optional[datetime]] = mapped_column(sa.DateTime(timezone=True))
end_date: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True)) end_date: Mapped[Optional[datetime]] = mapped_column(sa.DateTime(timezone=True))
room_id: Mapped[Optional[str]] = mapped_column( room_id: Mapped[Optional[str]] = mapped_column(
String, ForeignKey("room.id", ondelete="CASCADE") sa.String, sa.ForeignKey("room.id", ondelete="CASCADE")
) )
is_locked: Mapped[bool] = mapped_column( is_locked: Mapped[bool] = mapped_column(
Boolean, nullable=False, server_default=text("false") sa.Boolean, nullable=False, server_default=sa.text("false")
) )
room_mode: Mapped[str] = mapped_column( room_mode: Mapped[str] = mapped_column(
String, nullable=False, server_default="normal" sa.String, nullable=False, server_default="normal"
) )
recording_type: Mapped[str] = mapped_column( recording_type: Mapped[str] = mapped_column(
String, nullable=False, server_default="cloud" sa.String, nullable=False, server_default="cloud"
) )
recording_trigger: Mapped[str] = mapped_column( recording_trigger: Mapped[str] = mapped_column(
String, nullable=False, server_default="automatic-2nd-participant" sa.String, nullable=False, server_default="automatic-2nd-participant"
) )
num_clients: Mapped[int] = mapped_column( num_clients: Mapped[int] = mapped_column(
Integer, nullable=False, server_default=text("0") sa.Integer, nullable=False, server_default=sa.text("0")
) )
is_active: Mapped[bool] = mapped_column( is_active: Mapped[bool] = mapped_column(
Boolean, nullable=False, server_default=text("true") sa.Boolean, nullable=False, server_default=sa.text("true")
) )
calendar_event_id: Mapped[Optional[str]] = mapped_column( calendar_event_id: Mapped[Optional[str]] = mapped_column(
String, sa.String,
ForeignKey( sa.ForeignKey(
"calendar_event.id", "calendar_event.id",
ondelete="SET NULL", ondelete="SET NULL",
name="fk_meeting_calendar_event_id", name="fk_meeting_calendar_event_id",
@@ -173,73 +161,77 @@ class MeetingModel(Base):
calendar_metadata: Mapped[Optional[dict]] = mapped_column(JSONB) calendar_metadata: Mapped[Optional[dict]] = mapped_column(JSONB)
__table_args__ = ( __table_args__ = (
Index("idx_meeting_room_id", "room_id"), sa.Index("idx_meeting_room_id", "room_id"),
Index("idx_meeting_calendar_event", "calendar_event_id"), sa.Index("idx_meeting_calendar_event", "calendar_event_id"),
) )
class MeetingConsentModel(Base): class MeetingConsentModel(Base):
__tablename__ = "meeting_consent" __tablename__ = "meeting_consent"
id: Mapped[str] = mapped_column(String, primary_key=True) id: Mapped[str] = mapped_column(sa.String, primary_key=True)
meeting_id: Mapped[str] = mapped_column( meeting_id: Mapped[str] = mapped_column(
String, ForeignKey("meeting.id", ondelete="CASCADE"), nullable=False sa.String, sa.ForeignKey("meeting.id", ondelete="CASCADE"), nullable=False
) )
user_id: Mapped[Optional[str]] = mapped_column(String) user_id: Mapped[Optional[str]] = mapped_column(sa.String)
consent_given: Mapped[bool] = mapped_column(Boolean, nullable=False) consent_given: Mapped[bool] = mapped_column(sa.Boolean, nullable=False)
consent_timestamp: Mapped[datetime] = mapped_column( consent_timestamp: Mapped[datetime] = mapped_column(
DateTime(timezone=True), nullable=False sa.DateTime(timezone=True), nullable=False
) )
class RecordingModel(Base): class RecordingModel(Base):
__tablename__ = "recording" __tablename__ = "recording"
id: Mapped[str] = mapped_column(String, primary_key=True) id: Mapped[str] = mapped_column(sa.String, primary_key=True)
meeting_id: Mapped[str] = mapped_column( meeting_id: Mapped[str] = mapped_column(
String, ForeignKey("meeting.id", ondelete="CASCADE"), nullable=False sa.String, sa.ForeignKey("meeting.id", ondelete="CASCADE"), nullable=False
) )
url: Mapped[str] = mapped_column(String, nullable=False) url: Mapped[str] = mapped_column(sa.String, nullable=False)
object_key: Mapped[str] = mapped_column(String, nullable=False) object_key: Mapped[str] = mapped_column(sa.String, nullable=False)
duration: Mapped[Optional[float]] = mapped_column(Float) duration: Mapped[Optional[float]] = mapped_column(sa.Float)
created_at: Mapped[datetime] = mapped_column( created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), nullable=False sa.DateTime(timezone=True), nullable=False
) )
__table_args__ = (Index("idx_recording_meeting_id", "meeting_id"),) __table_args__ = (sa.Index("idx_recording_meeting_id", "meeting_id"),)
class CalendarEventModel(Base): class CalendarEventModel(Base):
__tablename__ = "calendar_event" __tablename__ = "calendar_event"
id: Mapped[str] = mapped_column(String, primary_key=True) id: Mapped[str] = mapped_column(sa.String, primary_key=True)
room_id: Mapped[str] = mapped_column( room_id: Mapped[str] = mapped_column(
String, ForeignKey("room.id", ondelete="CASCADE"), nullable=False sa.String, sa.ForeignKey("room.id", ondelete="CASCADE"), nullable=False
) )
ics_uid: Mapped[str] = mapped_column(Text, nullable=False) ics_uid: Mapped[str] = mapped_column(sa.Text, nullable=False)
title: Mapped[Optional[str]] = mapped_column(Text) title: Mapped[Optional[str]] = mapped_column(sa.Text)
description: Mapped[Optional[str]] = mapped_column(Text) description: Mapped[Optional[str]] = mapped_column(sa.Text)
start_time: Mapped[datetime] = mapped_column( start_time: Mapped[datetime] = mapped_column(
DateTime(timezone=True), nullable=False sa.DateTime(timezone=True), nullable=False
)
end_time: Mapped[datetime] = mapped_column(
sa.DateTime(timezone=True), nullable=False
) )
end_time: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False)
attendees: Mapped[Optional[dict]] = mapped_column(JSONB) attendees: Mapped[Optional[dict]] = mapped_column(JSONB)
location: Mapped[Optional[str]] = mapped_column(Text) location: Mapped[Optional[str]] = mapped_column(sa.Text)
ics_raw_data: Mapped[Optional[str]] = mapped_column(Text) ics_raw_data: Mapped[Optional[str]] = mapped_column(sa.Text)
last_synced: Mapped[datetime] = mapped_column( last_synced: Mapped[datetime] = mapped_column(
DateTime(timezone=True), nullable=False sa.DateTime(timezone=True), nullable=False
) )
is_deleted: Mapped[bool] = mapped_column( is_deleted: Mapped[bool] = mapped_column(
Boolean, nullable=False, server_default=text("false") sa.Boolean, nullable=False, server_default=sa.text("false")
) )
created_at: Mapped[datetime] = mapped_column( created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), nullable=False sa.DateTime(timezone=True), nullable=False
) )
updated_at: Mapped[datetime] = mapped_column( updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), nullable=False sa.DateTime(timezone=True), nullable=False
) )
__table_args__ = (Index("idx_calendar_event_room_start", "room_id", "start_time"),) __table_args__ = (
sa.Index("idx_calendar_event_room_start", "room_id", "start_time"),
)
metadata = Base.metadata metadata = Base.metadata