Azure / Azure/azure-sdk-for-python

`BatchClient.begin_terminate_job` crashes with default value for option parameter

Abierto
#47,201 2 comentarios 0 reacciones 2 asignados Reclamado por @msyyc Ver en GitHub
Batch customer-reported needs-team-attention question Service Attention
Lenguaje dominante
Python
Estrellas
5.6k
Forks
3.4k
Merge medio
2 d 2 h
PR fusionados (30 d)
213

Descripción

- **Package Name**: azure-batch
- **Package Version**: 15.1.0
- **Operating System**: Ubuntu 24.04
- **Python Version**: 3.13.13

**Describe the bug**
`BatchClient.begin_terminate_job()` doesn't correctly handle the case where you call it with the default value for the `options` parameter. It also fails identically with a default-constructed `BatchJobTerminateOptions` passed to it. The stack trace is:

```
File "/opt/hostedtoolcache/Python/3.13.13/x64/lib/python3.13/site-packages/azure/batch/_operations/_patch.py", line 1008, in begin_terminate_job
self._terminate_job_internal(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
job_id,
^^^^^^^
...<9 lines>...
**kwargs,
^^^^^^^^^
),
^
File "/opt/hostedtoolcache/Python/3.13.13/x64/lib/python3.13/site-packages/azure/core/tracing/decorator.py", line 119, in wrapper_use_tracer
return func(*args, **kwargs)
File "/opt/hostedtoolcache/Python/3.13.13/x64/lib/python3.13/site-packages/azure/batch/_operations/_operations.py", line 5806, in _terminate_job_internal
_request = build_batch_terminate_job_internal_request(
job_id=job_id,
...<11 lines>...
params=_params,
)
File "/opt/hostedtoolcache/Python/3.13.13/x64/lib/python3.13/site-packages/azure/batch/_operations/_operations.py", line 1071, in build_batch_terminate_job_internal_request
_headers["content-type"] = _SERIALIZER.header("content_type", content_type, "str")
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/hostedtoolcache/Python/3.13.13/x64/lib/python3.13/site-packages/azure/batch/_utils/serialization.py", line 758, in header
output = self.serialize_data(data, data_type, **kwargs)
File "/opt/hostedtoolcache/Python/3.13.13/x64/lib/python3.13/site-packages/azure/batch/_utils/serialization.py", line 777, in serialize_data
raise ValueError("No value for given attribute")
ValueError: No value for given attribute
```

From this we can determine what the happens to cause this bug:

1. `_terminate_job_internal` only sets `content_type` if `options` is true (in the bool sense). Neither the default value (`None`) nor the default-constructed `BatchJobTerminateOptions` evaluate to true. So `content_type` ends up equal to `None`.
2. `build_batch_terminate_job_internal_request` will always set the content-type header, regardless of if content-type was actually provided (`_headers["content-type"] = _SERIALIZER.header("content_type", content_type, "str")`). This should be guarded by an `if` statement like all of the other headers are.

**To Reproduce**
Steps to reproduce the behavior:
1. Call `BatchClient.begin_terminate_job` with the default value for `options` (or with a default constructed `BatchJobTerminateOptions`).
2. Observe the crash above.

**Expected behavior**
The default value should work.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Additional context**
Add any other context about the problem here.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.