code: def handle_quota_limits(f):
      """Wrapper for functions which may request for non existing experiment or cause quota limit breach
  
      Limitations:
      Decorated function must be called with experiment argument like this fun(..., experiment=<experiment>, ...)
      """
  
      @wraps(f)
      def handler(*args, **kwargs):
          experiment = kwargs.get("experiment")
          if experiment is None:
              raise NeptuneException(
                  "This function must be called with experiment passed by name,"
                  " like this fun(..., experiment=<experiment>, ...)"
              )
          try:
              return f(*args, **kwargs)
          except HTTPError as e:
              if e.response.status_code == NOT_FOUND:
                  raise ExperimentNotFound(
                      experiment_short_id=experiment.id,
                      project_qualified_name=experiment._project.full_id,
                  )
              if (
                  e.response.status_code == UNPROCESSABLE_ENTITY
                  and extract_response_field(
                      e.response, "title"
                  ).startswith(
                      "Storage limit reached in organization: "
                  )
              ):
                  raise StorageLimitReached()
              raise
  
      return handler
  
file_path: neptune-client/src/neptune/legacy/internal/utils/http.py
imports: import logging
  from functools import wraps
  from http.client import NOT_FOUND, UNPROCESSABLE_ENTITY
  from requests.exceptions import HTTPError
  from neptune.legacy.api_exceptions import ExperimentNotFound, StorageLimitReached
  from neptune.legacy.exceptions import NeptuneException
label_desc: Use image node_id 2 for calling a global function with example usage: handle_quota_limits(f) and returns: handler, f