code: def create_card_server(
      card_options: CardServerOptions, port, ctx_obj
  ):
      CardViewerRoutes.card_options = card_options
      global _ClickLogger
      _ClickLogger = ctx_obj.echo
      if card_options.follow_new_runs:
          CardViewerRoutes.run_watcher = RunWatcher(
              card_options.flow_name, card_options.child_conn
          )
          CardViewerRoutes.run_watcher.start()
      server_addr = ("", port)
      ctx_obj.echo(
          "Starting card server on port %d " % (port),
          fg="green",
          bold=True,
      )
      # Disable logging if not in debug mode
      if not _is_debug_mode():
          CardViewerRoutes.log_request = lambda *args, **kwargs: None
          CardViewerRoutes.log_message = lambda *args, **kwargs: None
  
      server = ThreadingHTTPServer(server_addr, CardViewerRoutes)
      server.serve_forever()
  
imports: import os
  import json
  from http.server import BaseHTTPRequestHandler
  from threading import Thread
  from multiprocessing import Pipe
  from multiprocessing.connection import Connection
  from urllib.parse import urlparse
  import time
  from .card_client import CardContainer
  from .exception import CardNotPresentException
  from .card_resolver import resolve_paths_from_task
  from metaflow.metaflow_config import DATASTORE_LOCAL_DIR
  from metaflow import namespace
  from metaflow.exception import CommandException, MetaflowNotFound, MetaflowNamespaceMismatch
label_desc: Use image node_id 4 for calling a global function with example usage: create_card_server(card_options, port, ctx_obj) without return types