code: def update_job(
      self, job_metadata: dict[str, Any], status: str, **kwargs: Any
  ) -> None:
      if "channel_id" not in job_metadata:
          raise AsyncQueryJobException("No channel ID specified")
  
      if "job_id" not in job_metadata:
          raise AsyncQueryJobException("No job ID specified")
  
      updates = {"status": status, **kwargs}
      event_data = {"data": json.dumps({**job_metadata, **updates})}
  
      full_stream_name = f"{self._stream_prefix}full"
      scoped_stream_name = (
          f"{self._stream_prefix}{job_metadata['channel_id']}"
      )
  
      logger.debug(
          "********** logging event data to stream %s",
          scoped_stream_name,
      )
      logger.debug(event_data)
  
      self._redis.xadd(
          scoped_stream_name, event_data, "*", self._stream_limit
      )
      self._redis.xadd(
          full_stream_name, event_data, "*", self._stream_limit_firehose
      )
  
imports: import json
  import logging
  import uuid
  from typing import Any, Literal, Optional
  import jwt
  import redis
  from flask import Flask, request, Request, Response, session
  from superset.utils.core import get_user_id
label_desc: Use image node_id 9 for calling the AsyncQueryManager obj's underlying member method code with example usage: obj.update_job(job_metadata, status) without return types