code: def ef_plugin(service_name):
    
    def class_rebuilder(cls):
  
      class EFPlugin(cls):
        """
        Base class of ef-plugins. Defines which service is extended and provides access to the current instance of
        EFContext to the plugin.
  
        Args:
          context (obj:EFContext): Instance of EFContext created by ef-open command line tool
          clients (dict): Dictionary of boto3 clients created by ef_utils.create_aws_clients()
        """
  
        def __init__(self, context, clients):
          self.service = service_name
          self.context = context
          self.clients = clients
          self.oInstance = cls()
  
        def __getattribute__(self, s):
          """
          This is called whenever any attribute of a EFPlugin object is accessed. This function first tries to
          get the attribute off EFPlugin. If it fails then it tries to fetch the attribute from self.oInstance
          (an instance of the decorated class).
          """
          try:
            x = super(EFPlugin, self).__getattribute__(s)
          except AttributeError:
            pass
          else:
            return x
          return self.oInstance.__getattribute__(s)
  
      return EFPlugin
  
    return class_rebuilder
docs: Decorator for ef plugin classes. Any wrapped classes should contain a run() method which executes the plugin code.
  
    Args:
      service_name (str): The name of the service being extended.
  
    Example:
      @ef_plugin('ef-generate')
      class NewRelicPlugin(object):
  
        def run(self):
          exec_code()