leoperegrino commented on issue #42524:
URL: https://github.com/apache/airflow/issues/42524#issuecomment-2651516881

   @jscheffl maybe this is related if not I can open a separate issue. I'm 
running `apache/airflow:2.8.1-python3.11` container and working with `Enum` and 
`StrEnum` to help me with the type system. The main difference between these 
two enum types is that `StrEnum` when cast to string (`f'{MyStrEnum.A}'` or 
`str(MyStrEnum.A)`) will auto use the `.value` attribute.
   
   When passing a `StrEnum` to a `tasks` decorated function, `StrEnum` 
arguments will be cast to string. Calls to `StrEnum` methods then raise 
`AttributeError`. Normal enums work as usual. 
   
   
   ```python
   from enum import Enum
   from enum import StrEnum
   
   from airflow.decorators import dag
   from airflow.decorators import task
   
   
   class MyEnum(Enum):
       A = 'A'
   
   
   class MyStrEnum(StrEnum):
       A = 'A'
   
   
   @dag(schedule_interval=None)
   def enum_dag():
   
       @task(task_id='test_enum')
       def test_enum(enum: MyEnum):
           return enum.name
   
       @task(task_id='test_str_enum')
       def test_str_enum(str_enum: MyStrEnum):
           return str_enum.name
   
       test_enum(enum=MyEnum.A)
       test_str_enum(str_enum=MyStrEnum.A)
   
   
   enum_dag()
   
   ```
   
   `test_enum`
   
   ```log
   f063d55d4244
   *** Found local files:
   ***   * 
/opt/airflow/logs/dag_id=enum_dag/run_id=manual__2025-02-11T16:58:48.370587+00:00/task_id=test_enum/attempt=1.log
   [2025-02-11, 16:58:50 UTC] {taskinstance.py:1956} INFO - Dependencies all 
met for dep_context=non-requeueable deps ti=<TaskInstance: enum_dag.test_enum 
manual__2025-02-11T16:58:48.370587+00:00 [queued]>
   [2025-02-11, 16:58:50 UTC] {taskinstance.py:1956} INFO - Dependencies all 
met for dep_context=requeueable deps ti=<TaskInstance: enum_dag.test_enum 
manual__2025-02-11T16:58:48.370587+00:00 [queued]>
   [2025-02-11, 16:58:50 UTC] {taskinstance.py:2170} INFO - Starting attempt 1 
of 1
   [2025-02-11, 16:58:50 UTC] {taskinstance.py:2191} INFO - Executing 
<Task(_PythonDecoratedOperator): test_enum> on 2025-02-11 16:58:48.370587+00:00
   [2025-02-11, 16:58:50 UTC] {standard_task_runner.py:60} INFO - Started 
process 2879665 to run task
   [2025-02-11, 16:58:50 UTC] {standard_task_runner.py:87} INFO - Running: 
['***', 'tasks', 'run', 'enum_dag', 'test_enum', 
'manual__2025-02-11T16:58:48.370587+00:00', '--job-id', '6650', '--raw', 
'--subdir', 'DAGS_FOLDER/enum_dag.py', '--cfg-path', '/tmp/tmppaapxvvf']
   [2025-02-11, 16:58:50 UTC] {standard_task_runner.py:88} INFO - Job 6650: 
Subtask test_enum
   [2025-02-11, 16:58:50 UTC] {task_command.py:423} INFO - Running 
<TaskInstance: enum_dag.test_enum manual__2025-02-11T16:58:48.370587+00:00 
[running]> on host f063d55d4244
   [2025-02-11, 16:58:50 UTC] {taskinstance.py:2480} INFO - Exporting env vars: 
AIRFLOW_CTX_DAG_OWNER='***' AIRFLOW_CTX_DAG_ID='enum_dag' 
AIRFLOW_CTX_TASK_ID='test_enum' 
AIRFLOW_CTX_EXECUTION_DATE='2025-02-11T16:58:48.370587+00:00' 
AIRFLOW_CTX_TRY_NUMBER='1' 
AIRFLOW_CTX_DAG_RUN_ID='manual__2025-02-11T16:58:48.370587+00:00'
   [2025-02-11, 16:58:50 UTC] {python.py:201} INFO - Done. Returned value was: A
   [2025-02-11, 16:58:50 UTC] {taskinstance.py:1138} INFO - Marking task as 
SUCCESS. dag_id=enum_dag, task_id=test_enum, execution_date=20250211T165848, 
start_date=20250211T165850, end_date=20250211T165850
   [2025-02-11, 16:58:50 UTC] {local_task_job_runner.py:234} INFO - Task exited 
with return code 0
   [2025-02-11, 16:58:50 UTC] {taskinstance.py:3280} INFO - 0 downstream tasks 
scheduled from follow-on schedule check
   ```
   
   `test_str_enum`
   
   ```log
   f063d55d4244
   *** Found local files:
   ***   * 
/opt/airflow/logs/dag_id=enum_dag/run_id=manual__2025-02-11T16:58:48.370587+00:00/task_id=test_str_enum/attempt=1.log
   [2025-02-11, 16:58:50 UTC] {taskinstance.py:1956} INFO - Dependencies all 
met for dep_context=non-requeueable deps ti=<TaskInstance: 
enum_dag.test_str_enum manual__2025-02-11T16:58:48.370587+00:00 [queued]>
   [2025-02-11, 16:58:50 UTC] {taskinstance.py:1956} INFO - Dependencies all 
met for dep_context=requeueable deps ti=<TaskInstance: enum_dag.test_str_enum 
manual__2025-02-11T16:58:48.370587+00:00 [queued]>
   [2025-02-11, 16:58:50 UTC] {taskinstance.py:2170} INFO - Starting attempt 1 
of 1
   [2025-02-11, 16:58:50 UTC] {taskinstance.py:2191} INFO - Executing 
<Task(_PythonDecoratedOperator): test_str_enum> on 2025-02-11 
16:58:48.370587+00:00
   [2025-02-11, 16:58:50 UTC] {standard_task_runner.py:60} INFO - Started 
process 2879664 to run task
   [2025-02-11, 16:58:50 UTC] {standard_task_runner.py:87} INFO - Running: 
['***', 'tasks', 'run', 'enum_dag', 'test_str_enum', 
'manual__2025-02-11T16:58:48.370587+00:00', '--job-id', '6649', '--raw', 
'--subdir', 'DAGS_FOLDER/enum_dag.py', '--cfg-path', '/tmp/tmp5lou4idb']
   [2025-02-11, 16:58:50 UTC] {standard_task_runner.py:88} INFO - Job 6649: 
Subtask test_str_enum
   [2025-02-11, 16:58:50 UTC] {task_command.py:423} INFO - Running 
<TaskInstance: enum_dag.test_str_enum manual__2025-02-11T16:58:48.370587+00:00 
[running]> on host f063d55d4244
   [2025-02-11, 16:58:50 UTC] {taskinstance.py:2480} INFO - Exporting env vars: 
AIRFLOW_CTX_DAG_OWNER='***' AIRFLOW_CTX_DAG_ID='enum_dag' 
AIRFLOW_CTX_TASK_ID='test_str_enum' 
AIRFLOW_CTX_EXECUTION_DATE='2025-02-11T16:58:48.370587+00:00' 
AIRFLOW_CTX_TRY_NUMBER='1' 
AIRFLOW_CTX_DAG_RUN_ID='manual__2025-02-11T16:58:48.370587+00:00'
   [2025-02-11, 16:58:50 UTC] {taskinstance.py:2698} ERROR - Task failed with 
exception
   Traceback (most recent call last):
     File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/models/taskinstance.py",
 line 433, in _execute_task
       result = execute_callable(context=context, **execute_callable_kwargs)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/decorators/base.py", 
line 241, in execute
       return_value = super().execute(context)
                      ^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/operators/python.py",
 line 199, in execute
       return_value = self.execute_callable()
                      ^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/operators/python.py",
 line 216, in execute_callable
       return self.python_callable(*self.op_args, **self.op_kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File "/opt/airflow/dags/enum_dag.py", line 27, in test_str_enum
       return str_enum.name
              ^^^^^^^^^^^^^
   AttributeError: 'str' object has no attribute 'name'
   [2025-02-11, 16:58:50 UTC] {taskinstance.py:1138} INFO - Marking task as 
FAILED. dag_id=enum_dag, task_id=test_str_enum, execution_date=20250211T165848, 
start_date=20250211T165850, end_date=20250211T165850
   [2025-02-11, 16:58:50 UTC] {standard_task_runner.py:107} ERROR - Failed to 
execute job 6649 for task test_str_enum ('str' object has no attribute 'name'; 
2879664)
   [2025-02-11, 16:58:50 UTC] {local_task_job_runner.py:234} INFO - Task exited 
with return code 1
   [2025-02-11, 16:58:50 UTC] {taskinstance.py:3280} INFO - 0 downstream tasks 
scheduled from follow-on schedule check
   ```


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