class_docstr: Handler which handles normal input data.
class_docstr_tok: ["Handler","which","handles","normal","input","data","."]
code: def process_timer(self, timer_data) -> Iterable:
      timer_type = timer_data[0]
      watermark = timer_data[1]
      timestamp = timer_data[2]
      key = timer_data[3]
      serialized_namespace = timer_data[4]
  
      self._advance_watermark(watermark)
      if self._namespace_coder is not None:
          namespace = self._namespace_coder.decode(serialized_namespace)
      else:
          namespace = None
      if timer_type == TimerType.EVENT_TIME.value:
          yield from _emit_results(
              timestamp,
              watermark,
              self._on_event_time(timestamp, key, namespace),
              self._has_side_output,
          )
      elif timer_type == TimerType.PROCESSING_TIME.value:
          yield from _emit_results(
              timestamp,
              watermark,
              self._on_processing_time(timestamp, key, namespace),
              self._has_side_output,
          )
      else:
          raise Exception("Unsupported timer type: %d" % timer_type)
  
imports: from abc import ABC
  from enum import Enum
  from typing import cast, Iterable
  from pyflink.common import Row
  from pyflink.common.constants import DEFAULT_OUTPUT_TAG
  from pyflink.datastream.output_tag import OutputTag
  from pyflink.fn_execution.datastream.process.timerservice_impl import InternalTimerServiceImpl
label_desc: Use image node_id 2 for calling the TimerHandler obj's underlying member method code with example usage: obj.process_timer(timer_data) without return types