Azure / Azure/azure-sdk-for-python

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

Aperta
#47,201 2 commenti 0 reazioni 2 assegnatari Rivendicata da @msyyc Vedi su GitHub
Batch customer-reported needs-team-attention question Service Attention
Lingua principale
Python
Stelle
5.6k
Fork
3.4k
Merge medio
2g 2h
PR unite (30g)
202

Descrizione

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

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.