|  | 
|  | 1 | +from sqlalchemy.orm import Mapped, mapped_column, relationship | 
|  | 2 | +from sqlalchemy import ForeignKey | 
| 1 | 3 | from datetime import datetime | 
| 2 | 4 | from datetime import timezone | 
| 3 | 5 | 
 | 
|  | 
| 7 | 9 | from flaskr.auth.models import User | 
| 8 | 10 | 
 | 
| 9 | 11 | 
 | 
| 10 |  | -def now_utc(): | 
|  | 12 | +def now_utc() -> datetime: | 
| 11 | 13 |     return datetime.now(timezone.utc) | 
| 12 | 14 | 
 | 
| 13 | 15 | 
 | 
| 14 | 16 | class Post(db.Model): | 
| 15 |  | -    id = db.Column(db.Integer, primary_key=True) | 
| 16 |  | -    author_id = db.Column(db.ForeignKey(User.id), nullable=False) | 
| 17 |  | -    created = db.Column(db.DateTime, nullable=False, default=now_utc) | 
| 18 |  | -    title = db.Column(db.String, nullable=False) | 
| 19 |  | -    body = db.Column(db.String, nullable=False) | 
|  | 17 | +    id: Mapped[int] = mapped_column(primary_key=True) | 
|  | 18 | +    author_id: Mapped[int] = mapped_column(ForeignKey("user.id")) | 
|  | 19 | +    created: Mapped[datetime] = mapped_column(default=now_utc) | 
|  | 20 | +    title: Mapped[str] | 
|  | 21 | +    body: Mapped[str] | 
| 20 | 22 | 
 | 
| 21 | 23 |     # User object backed by author_id | 
| 22 | 24 |     # lazy="joined" means the user is returned with the post in one query | 
| 23 |  | -    author = db.relationship(User, lazy="joined", back_populates="posts") | 
|  | 25 | +    author: Mapped[User] = relationship(lazy="joined", back_populates="posts") | 
| 24 | 26 | 
 | 
| 25 | 27 |     @property | 
| 26 |  | -    def update_url(self): | 
|  | 28 | +    def update_url(self) -> str: | 
| 27 | 29 |         return url_for("blog.update", id=self.id) | 
| 28 | 30 | 
 | 
| 29 | 31 |     @property | 
| 30 |  | -    def delete_url(self): | 
|  | 32 | +    def delete_url(self) -> str: | 
| 31 | 33 |         return url_for("blog.delete", id=self.id) | 
0 commit comments