jgoedeke opened a new issue, #55410:
URL: https://github.com/apache/airflow/issues/55410

   ### Apache Airflow version
   
   3.0.6
   
   ### If "Other Airflow 2 version" selected, which one?
   
   _No response_
   
   ### What happened?
   
   In Airflow 3 (TaskFlow), returning a dict from a `@task` where one of the 
dict KEYS contains a "/" causes the task to fail at the end during XCom push 
with:
   
   AirflowRuntimeError: `API_SERVER_ERROR: {'status_code': 404, 'message': 'Not 
Found', 'detail': {'detail': 'Not Found'}}`.
   
   The same code works when the dict keys do NOT contain "/".
   
   It looks like when `@task` returns a dict and Airflow treats it as multiple 
outputs, it creates one XCom per dictionary key. Those per-key XCom writes go 
through the Execution API and the XCom KEY is placed in the URL path. If the 
key contains "/", the path is split and the route doesn't match, yielding a 
404/4xx.
   
   ### What you think should happen instead?
   
   The task should succeed and XComs should be written even when dictionary 
keys contain "/" (either by accepting "/" in the server route, or by 
safe-encoding/sanitizing keys on client/server consistently). At minimum, the 
behavior should be documented or validated early with a clear error if "/" in 
keys is unsupported.
   
   ### How to reproduce
   
   ````python
   from airflow.decorators import dag, task
   
   @dag(schedule=None)
   def xcom_slash_key_bug():
   
       @task
       def this_works() -> dict[str, str]:
           return {"Some Key": "Some Value"}
       @task
       def this_works_as_well() -> str:
           return "/some/path/like/key"
   
       @task
       def this_does_not_work() -> dict[str, str]:
           return {"key with slash /": "Some Value"}
   
       this_works() >> this_works_as_well() >> this_does_not_work()
   
   dag = xcom_slash_key_bug()
   ````
   
   ### Operating System
   
   Docker image
   
   ### Versions of Apache Airflow Providers
   
   _No response_
   
   ### Deployment
   
   Other Docker-based deployment
   
   ### Deployment details
   
   _No response_
   
   ### Anything else?
   
   Log output:
   
   ````
   [2025-09-09, 08:33:14] INFO - Done. Returned value was: 
{'/some/path/like/key': 'Some Value'}: 
source="airflow.task.operators.airflow.providers.standard.decorators.python._PythonDecoratedOperator"
   [2025-09-09, 08:33:14] INFO - Pushing xcom: 
ti="RuntimeTaskInstance(id=UUID('01992d2d-836b-716c-b17d-03be4ec4c67a'), 
task_id='this_does_not_work', dag_id='testing', 
run_id='manual__2025-09-09T06:33:01.531829+00:00', try_number=1, map_index=-1, 
hostname='e7e821981d6d', context_carrier={}, 
task=<Task(_PythonDecoratedOperator): this_does_not_work>, 
bundle_instance=LocalDagBundle(name=dags-folder), max_tries=0, 
start_date=datetime.datetime(2025, 9, 9, 6, 33, 11, 94959, tzinfo=TzInfo(UTC)), 
end_date=None, state=<TaskInstanceState.RUNNING: 'running'>, is_mapped=False, 
rendered_map_index=None, 
log_url='https://airflow.damas.pilatus-aircraft.com/dags/testing/runs/manual__2025-09-09T06%3A33%3A01.531829%2B00%3A00/tasks/this_does_not_work?try_number=1')":
 source="task"
   [2025-09-09, 08:33:14] ERROR - Task failed with exception: source="task"
   AirflowRuntimeError: API_SERVER_ERROR: {'status_code': 404, 'message': 'Not 
Found', 'detail': {'detail': 'Not Found'}}
   File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/sdk/execution_time/task_runner.py",
 line 931 in run
   
   File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/sdk/execution_time/task_runner.py",
 line 1275 in _push_xcom_if_needed
   
   File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/sdk/execution_time/task_runner.py",
 line 414 in xcom_push
   
   File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/sdk/execution_time/task_runner.py",
 line 561 in _xcom_push
   
   File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/sdk/bases/xcom.py", 
line 84 in set
   
   File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/sdk/execution_time/comms.py",
 line 204 in send
   
   File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/sdk/execution_time/comms.py",
 line 264 in _get_response
   
   File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/sdk/execution_time/comms.py",
 line 251 in _from_frame
   
   ````
   
   ### Are you willing to submit PR?
   
   - [ ] Yes I am willing to submit a PR!
   
   ### Code of Conduct
   
   - [x] I agree to follow this project's [Code of 
Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)
   


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