code: def get_or_create_project(
      session,
      project_name,
      description=None,
      system_tags=None,
      project_id=None,
  ):
      # noinspection PyBroadException
      try:
          return _get_or_create_project(
              session,
              project_name,
              description=description,
              system_tags=system_tags,
              project_id=project_id,
          )
      except Exception:
          # we only get here if the following race happens:
          # imagine there are 2 processes the call `_get_or_create_project` and the project requested doesn't exist.
          # because it doesn't exist, it needs to be created. the 2 processes will call the `CreateRequest` one after
          # another, one of which will raise an Exception because the project has already been created.
          # so we need to retry in this case (the retry should now succeed)
          return _get_or_create_project(
              session,
              project_name,
              description=description,
              system_tags=system_tags,
              project_id=project_id,
          )
  
imports: import getpass
  import re
  from _socket import gethostname
  from datetime import datetime
  from typing import Optional, Any
  from ..backend_api.services import projects, queues
  from ..debugging.log import get_logger, LoggerRoot
label_desc: Use image node_id 4 for calling a global function with example usage: get_or_create_project(session, project_name, description, system_tags, project_id) and returns: _get_or_create_project, _get_or_create_project