code: def wrapComponent(comp):
      
      # if already wrapped, return object
      if hasattr(comp, 'paint'):
          return comp
      # to avoid manually creating a mapping, get all classes in 
      # this module, assume they are the class name appended with Q
      current_module = sys.modules[__name__]
      module_classes = {name[1:]: obj for name, obj in inspect.getmembers(sys.modules[__name__], inspect.isclass) if
                        obj.__module__ == __name__}
      # print __name__, module_classes
      stimclass = comp.__class__.__name__
      qclass = module_classes.get(stimclass, QStimulusComponent)
      return qclass(comp)
docs: Wraps a StimulusComponent with a class containing methods 
      for painting and editing. Class will in fact, be the same as
      the component provided, but will also be a subclass of 
      QStimulusComponent
  
      :param comp: Component to wrap
      :type comp: subclass of AbstractStimulusComponent
      :returns: sublass of AbstractStimulusComponent and QStimulusComponent