code: def import_string(import_name, silent=False):
      
  
      try:
          if ':' in import_name:
              module, obj_name = import_name.split(':', 1)
          elif '.' in import_name:
              module, obj_name = import_name.rsplit('.', 1)
          else:
              return __import__(import_name)
  
          return getattr(__import__(module, None, None, [obj_name]), obj_name)
      except (ImportError, AttributeError):
          if not silent:
              raise
docs: Imports an object based on a string.  This is useful if you want to
      use import paths as endpoints or something similar.  An import path can
      be specified either in dotted notation (``xml.sax.saxutils.escape``)
      or with a colon as object delimiter (``xml.sax.saxutils:escape``).
  
      If `silent` is True the return value will be `None` if the import fails.
  
      :param import_name: the dotted name for the object to import.
      :param silent: if set to `True` import errors are ignored and
                     `None` is returned instead.
      :return: imported object