code: def import_string(import_name, silent=False):
      
      try:
          if ':' in import_name:
              module, obj = import_name.split(':', 1)
          elif '.' in import_name:
              items = import_name.split('.')
              module = '.'.join(items[:-1])
              obj = items[-1]
          else:
              return __import__(import_name)
          return getattr(__import__(module, None, None, [obj]), obj)
      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 the `silent` is True the return value will be `None` if the import
      fails.
  
      :return: imported object