class_docstr: A launch project specification.
class_docstr_tok: ["A","launch","project","specification","."]
code: def image_name(self) -> str:
      if self.docker_image is not None:
          return self.docker_image
      elif self.uri is not None:
          cleaned_uri = self.uri.replace("https://", "/")
          first_sep = cleaned_uri.find("/")
          shortened_uri = cleaned_uri[first_sep:]
          return wandb.util.make_docker_image_name_safe(shortened_uri)
      else:
          # this will always pass since one of these 3 is required
          assert self.job is not None
          return wandb.util.make_docker_image_name_safe(
              self.job.split(":")[0]
          )
  
imports: import enum
  import json
  import logging
  import os
  import tempfile
  from copy import deepcopy
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, cast
  import wandb
  import wandb.docker
  from wandb.apis.internal import Api
  from wandb.errors import CommError
  from wandb.sdk.launch import utils
  from wandb.sdk.lib.runid import generate_id
  from .errors import LaunchError
  from .utils import LOG_PREFIX, recursive_macro_sub
label_desc: Use image node_id 3 for calling the LaunchProject obj's underlying member method code with example usage: obj.image_name() and returns: self, wandb, wandb