`CronClient.update` / `SyncCronClient.update` stripped all `None`-valued
fields from the PATCH body, so `update(end_time=None)` could never clear
a previously set cron end time. This routes an explicit `None` through
as `end_time: null` (via the existing `NOT_PROVIDED` sentinel), while an
omitted argument still leaves the value unchanged.
Verified with `make format`, `make lint`, and `make test` in
`libs/sdk-py` (493 passed), including two new tests asserting the PATCH
body carries an explicit null `end_time`.