Fix #11: Replace deprecated datetime.utcnow with timezone-aware UTC

- Import timezone from datetime
- Add _utcnow() helper using datetime.now(timezone.utc)
- Replace all default=datetime.utcnow column defaults
- Fixes deprecation warnings on Python 3.12+
This commit is contained in:
3nd3r 2026-04-12 13:00:03 -05:00
parent 9570283ad8
commit 01c6c4a1b0
1 changed files with 10 additions and 6 deletions

View File

@ -7,10 +7,14 @@ users Registered accounts
messages Encrypted PM history (useruser and userAI) messages Encrypted PM history (useruser and userAI)
""" """
from datetime import datetime from datetime import datetime, timezone
from database import db from database import db
def _utcnow():
return datetime.now(timezone.utc)
class User(db.Model): class User(db.Model):
__tablename__ = "users" __tablename__ = "users"
@ -21,7 +25,7 @@ class User(db.Model):
has_ai_access = db.Column(db.Boolean, default=False, nullable=False) has_ai_access = db.Column(db.Boolean, default=False, nullable=False)
ai_messages_used = db.Column(db.Integer, default=0, nullable=False) ai_messages_used = db.Column(db.Integer, default=0, nullable=False)
is_verified = db.Column(db.Boolean, default=False, nullable=False) is_verified = db.Column(db.Boolean, default=False, nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) created_at = db.Column(db.DateTime, default=_utcnow, nullable=False)
sent_messages = db.relationship( sent_messages = db.relationship(
"Message", foreign_keys="Message.sender_id", "Message", foreign_keys="Message.sender_id",
@ -52,7 +56,7 @@ class UserIgnore(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
ignorer_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False) ignorer_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)
ignored_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False) ignored_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) created_at = db.Column(db.DateTime, default=_utcnow, nullable=False)
__table_args__ = ( __table_args__ = (
db.Index("ix_ignore_pair", "ignorer_id", "ignored_id", unique=True), db.Index("ix_ignore_pair", "ignorer_id", "ignored_id", unique=True),
@ -70,7 +74,7 @@ class Message(db.Model):
encrypted_content = db.Column(db.Text, nullable=False) encrypted_content = db.Column(db.Text, nullable=False)
# AES-GCM nonce / IV base64 encoded (12 bytes → 16 chars) # AES-GCM nonce / IV base64 encoded (12 bytes → 16 chars)
nonce = db.Column(db.String(64), nullable=False) nonce = db.Column(db.String(64), nullable=False)
timestamp = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) timestamp = db.Column(db.DateTime, default=_utcnow, nullable=False)
__table_args__ = ( __table_args__ = (
# Composite indices for the two common query patterns # Composite indices for the two common query patterns
@ -90,7 +94,7 @@ class Ban(db.Model):
username = db.Column(db.String(20), nullable=False, index=True) username = db.Column(db.String(20), nullable=False, index=True)
ip = db.Column(db.String(45), nullable=True, index=True) ip = db.Column(db.String(45), nullable=True, index=True)
reason = db.Column(db.String(255), nullable=True) reason = db.Column(db.String(255), nullable=True)
created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) created_at = db.Column(db.DateTime, default=_utcnow, nullable=False)
class Mute(db.Model): class Mute(db.Model):
@ -99,4 +103,4 @@ class Mute(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, nullable=False, index=True) username = db.Column(db.String(20), unique=True, nullable=False, index=True)
created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) created_at = db.Column(db.DateTime, default=_utcnow, nullable=False)