uranusjr commented on code in PR #32883:
URL: https://github.com/apache/airflow/pull/32883#discussion_r1280012837


##########
airflow/operators/subdag.py:
##########
@@ -112,7 +113,7 @@ def _validate_pool(self, session):
             conflicts = [t for t in self.subdag.tasks if t.pool == self.pool]
             if conflicts:
                 # only query for pool conflicts if one may exist
-                pool = session.query(Pool).filter(Pool.slots == 
1).filter(Pool.pool == self.pool).first()
+                pool = session.scalar(select(Pool).where(Pool.slots == 
1).where(Pool.pool == self.pool))

Review Comment:
   ```suggestion
                   pool = session.scalar(select(Pool).where(Pool.slots == 1, 
Pool.pool == self.pool))
   ```



##########
airflow/auth/managers/fab/models.py:
##########
@@ -210,12 +211,13 @@ def perms(self):
             if current_app:
                 sm = current_app.appbuilder.sm
                 self._perms: set[tuple[str, str]] = set(
-                    sm.get_session.query(sm.action_model.name, 
sm.resource_model.name)
-                    .join(sm.permission_model.action)
-                    .join(sm.permission_model.resource)
-                    .join(sm.permission_model.role)
-                    .filter(sm.role_model.user.contains(self))
-                    .all()
+                    sm.get_session.execute(
+                        select(sm.action_model.name, sm.resource_model.name)
+                        .join(sm.permission_model.action)
+                        .join(sm.permission_model.resource)
+                        .join(sm.permission_model.role)
+                        .where(sm.role_model.user.contains(self))
+                    ).all()

Review Comment:
   ```suggestion
                       )
   ```
   
   Not needed since this is immediately iterated into a set.



##########
airflow/www/security.py:
##########
@@ -563,11 +561,11 @@ def add_homepage_access_to_custom_roles(self) -> None:
     def get_all_permissions(self) -> set[tuple[str, str]]:
         """Returns all permissions as a set of tuples with the action and 
resource names."""
         return set(
-            self.appbuilder.get_session.query(self.permission_model)
-            .join(self.permission_model.action)
-            .join(self.permission_model.resource)
-            .with_entities(self.action_model.name, self.resource_model.name)
-            .all()
+            self.appbuilder.get_session.execute(
+                select(self.action_model.name, self.resource_model.name)
+                .join(self.permission_model.action)
+                .join(self.permission_model.resource)
+            ).all()

Review Comment:
   ```suggestion
               )
   ```
   
   This is also immediately turned into a set.



##########
airflow/www/security.py:
##########
@@ -578,22 +576,22 @@ def _get_all_non_dag_permissions(self) -> dict[tuple[str, 
str], Permission]:
         return {
             (action_name, resource_name): viewmodel
             for action_name, resource_name, viewmodel in (
-                self.appbuilder.get_session.query(self.permission_model)
-                .join(self.permission_model.action)
-                .join(self.permission_model.resource)
-                
.filter(~self.resource_model.name.like(f"{permissions.RESOURCE_DAG_PREFIX}%"))
-                .with_entities(self.action_model.name, 
self.resource_model.name, self.permission_model)
-                .all()
+                self.appbuilder.get_session.execute(
+                    select(self.action_model.name, self.resource_model.name, 
self.permission_model)
+                    .join(self.permission_model.action)
+                    .join(self.permission_model.resource)
+                    
.where(~self.resource_model.name.like(f"{permissions.RESOURCE_DAG_PREFIX}%"))
+                ).all()
             )
         }
 
     def _get_all_roles_with_permissions(self) -> dict[str, Role]:
         """Returns a dict with a key of role name and value of role with early 
loaded permissions."""
         return {
             r.name: r
-            for r in 
self.appbuilder.get_session.query(self.role_model).options(
-                joinedload(self.role_model.permissions)
-            )
+            for r in self.appbuilder.get_session.scalars(
+                
select(self.role_model).options(joinedload(self.role_model.permissions))
+            ).unique()

Review Comment:
   Is this correct? There wasn’t a unique call previously (although it probably 
doesn’t matter since this is also immediately turned into a set so duplicates 
are eliminated anyway)



##########
airflow/www/security.py:
##########
@@ -578,22 +576,22 @@ def _get_all_non_dag_permissions(self) -> dict[tuple[str, 
str], Permission]:
         return {
             (action_name, resource_name): viewmodel
             for action_name, resource_name, viewmodel in (
-                self.appbuilder.get_session.query(self.permission_model)
-                .join(self.permission_model.action)
-                .join(self.permission_model.resource)
-                
.filter(~self.resource_model.name.like(f"{permissions.RESOURCE_DAG_PREFIX}%"))
-                .with_entities(self.action_model.name, 
self.resource_model.name, self.permission_model)
-                .all()
+                self.appbuilder.get_session.execute(
+                    select(self.action_model.name, self.resource_model.name, 
self.permission_model)
+                    .join(self.permission_model.action)
+                    .join(self.permission_model.resource)
+                    
.where(~self.resource_model.name.like(f"{permissions.RESOURCE_DAG_PREFIX}%"))
+                ).all()

Review Comment:
   ```suggestion
                   )
   ```
   
   Same here.



##########
airflow/utils/scheduler_health.py:
##########
@@ -35,12 +37,12 @@ def do_GET(self):
         if self.path == "/health":
             try:
                 with create_session() as session:
-                    scheduler_job = (
-                        session.query(Job)
+                    scheduler_job = session.scalars(

Review Comment:
   ```suggestion
                       scheduler_job = session.scalar(
   ```
   
   The original query uses `first()`; changing it to `scalars` is wrong (I 
believe)



##########
airflow/www/security.py:
##########
@@ -578,22 +576,22 @@ def _get_all_non_dag_permissions(self) -> dict[tuple[str, 
str], Permission]:
         return {
             (action_name, resource_name): viewmodel
             for action_name, resource_name, viewmodel in (
-                self.appbuilder.get_session.query(self.permission_model)
-                .join(self.permission_model.action)
-                .join(self.permission_model.resource)
-                
.filter(~self.resource_model.name.like(f"{permissions.RESOURCE_DAG_PREFIX}%"))
-                .with_entities(self.action_model.name, 
self.resource_model.name, self.permission_model)
-                .all()
+                self.appbuilder.get_session.execute(
+                    select(self.action_model.name, self.resource_model.name, 
self.permission_model)
+                    .join(self.permission_model.action)
+                    .join(self.permission_model.resource)
+                    
.where(~self.resource_model.name.like(f"{permissions.RESOURCE_DAG_PREFIX}%"))
+                ).all()
             )
         }
 
     def _get_all_roles_with_permissions(self) -> dict[str, Role]:
         """Returns a dict with a key of role name and value of role with early 
loaded permissions."""
         return {
             r.name: r
-            for r in 
self.appbuilder.get_session.query(self.role_model).options(
-                joinedload(self.role_model.permissions)
-            )
+            for r in self.appbuilder.get_session.scalars(
+                
select(self.role_model).options(joinedload(self.role_model.permissions))
+            ).unique()

Review Comment:
   Is this correct? There wasn’t a unique call previously (although it probably 
doesn’t matter since this is also immediately turned into a set so duplicates 
are eliminated anyway)



-- 
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