class_docstr: Manager for backend model objects
code: def __init__(
      self,
      upload_storage_uri,
      cache_dir,
      model_id=None,
      upload_storage_suffix="models",
      session=None,
      log=None,
  ):
      super(Model, self).__init__(id=model_id, session=session, log=log)
      self._upload_storage_suffix = upload_storage_suffix
      if model_id == self._EMPTY_MODEL_ID:
          # Set an empty data object
          self._data = models.Model()
      else:
          self._data = None
      self._cache_dir = cache_dir
      self.upload_storage_uri = upload_storage_uri
  
imports: from collections import namedtuple
  from functools import partial
  import six
  from pathlib2 import Path
  from .base import IdObjectBase
  from .util import make_message
  from ..backend_api import Session
  from ..backend_api.services import models, tasks
  from ..storage import StorageManager
  from ..storage.helper import StorageHelper
  from ..utilities.async_manager import AsyncManagerMixin
label_desc: Use image node_id 2 to create a new Model object from inherited base classes: IdObjectBase, AsyncManagerMixin, _StorageUriMixin with example: obj = Model(upload_storage_uri, cache_dir, model_id, upload_storage_suffix, session, log)