Skip to content

BatchClient.begin_terminate_job crashes with default value for option parameter #47201

@arvid-norlander

Description

@arvid-norlander
  • 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    customer-reportedIssues that are reported by GitHub users external to the Azure organization.needs-triageWorkflow: This is a new issue that needs to be triaged to the appropriate team.questionThe issue doesn't require a change to the product in order to be resolved. Most issues start as that

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions