potiuk commented on code in PR #50960:
URL: https://github.com/apache/airflow/pull/50960#discussion_r2128361867


##########
providers/fab/src/airflow/providers/fab/auth_manager/models/__init__.py:
##########
@@ -153,93 +192,100 @@ def __repr__(self):
         return self.name
 
 
-class Group(Model):
-    """Represents a user group."""
-
-    __tablename__ = "ab_group"
-
-    id = Column(Integer, primary_key=True)
-    name = Column(String(100), unique=True, nullable=False)
-    label = Column(String(150))
-    description = Column(String(512))
-    users = relationship("User", secondary=assoc_user_group, backref="groups", 
passive_deletes=True)
-    roles = relationship("Role", secondary=assoc_group_role, backref="groups", 
passive_deletes=True)
-
-    def __repr__(self):
-        return self.name
-
-
 class Permission(Model):
     """Permission pair comprised of an Action + Resource combo."""
 
     __tablename__ = "ab_permission_view"
     __table_args__ = (UniqueConstraint("permission_id", "view_menu_id"),)
-    id = Column(Integer, primary_key=True)
-    action_id = Column("permission_id", Integer, 
ForeignKey("ab_permission.id"))
-    action = relationship(
-        "Action",
-        uselist=False,
-        lazy="joined",
-    )
-    resource_id = Column("view_menu_id", Integer, 
ForeignKey("ab_view_menu.id"))
-    resource = relationship(
-        "Resource",
-        uselist=False,
-        lazy="joined",
+    id: Mapped[int] = mapped_column(
+        Integer,
+        Sequence("ab_permission_view_id_seq", start=1, increment=1, 
minvalue=1, cycle=False),
+        primary_key=True,
     )
+    action_id: Mapped[int] = mapped_column("permission_id", Integer, 
ForeignKey("ab_permission.id"))
+    action: Mapped[Action] = relationship("Action", lazy="joined", 
uselist=False)
+    resource_id: Mapped[int] = mapped_column("view_menu_id", Integer, 
ForeignKey("ab_view_menu.id"))
+    resource: Mapped[Resource] = relationship("Resource", lazy="joined", 
uselist=False)
 
     def __repr__(self):
-        return str(self.action).replace("_", " ") + " on " + str(self.resource)
+        return str(self.action).replace("_", " ") + f" on {str(self.resource)}"
 
 
-assoc_user_role = Table(
-    "ab_user_role",
-    Model.metadata,
-    Column("id", Integer, primary_key=True),
-    Column("user_id", Integer, ForeignKey("ab_user.id", ondelete="CASCADE")),
-    Column("role_id", Integer, ForeignKey("ab_role.id", ondelete="CASCADE")),
-    UniqueConstraint("user_id", "role_id"),
-)
+class Group(Model):
+    """Represents an Airflow user group."""
+
+    __tablename__ = "ab_group"
+
+    id: Mapped[int] = mapped_column(
+        Integer,
+        Sequence("ab_group_id_seq", start=1, increment=1, minvalue=1, 
cycle=False),
+        primary_key=True,
+    )
+    name: Mapped[str] = Column(String(100), unique=True, nullable=False)
+    label: Mapped[str] = Column(String(150))
+    description: Mapped[str] = Column(String(512))
+    users: Mapped[list[User]] = relationship(
+        "User", secondary=assoc_user_group, backref="groups", 
passive_deletes=True
+    )
+    roles: Mapped[list[Role]] = relationship(
+        "Role", secondary=assoc_group_role, backref="groups", 
passive_deletes=True
+    )
+
+    def __repr__(self):
+        return self.name
 
 
 class User(Model, BaseUser):
     """Represents an Airflow user which has roles assigned to it."""
 
     __tablename__ = "ab_user"
-    id = Column(Integer, primary_key=True)
-    first_name = Column(String(256), nullable=False)
-    last_name = Column(String(256), nullable=False)
-    username = Column(
+
+    id: Mapped[int] = mapped_column(
+        Integer,
+        Sequence("ab_user_id_seq", start=1, increment=1, minvalue=1, 
cycle=False),
+        primary_key=True,
+    )
+    first_name: Mapped[str] = mapped_column(String(64), nullable=False)
+    last_name: Mapped[str] = mapped_column(String(64), nullable=False)
+    username: Mapped[str] = mapped_column(

Review Comment:
   @dpgaspar -> why did you get rid of case-sensitiveness for username in FAB 
(We brought it back as it failed our tests, but this was a bit of a surprise.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to