code: def _create_subscription(self, server_id, dest_path, filter_path, owned):
          
  
          # Validate server_id
          server = self._get_server(server_id)
  
          sub_path = CIMInstanceName(SUBSCRIPTION_CLASSNAME,
                                     namespace=server.interop_ns)
  
          sub_inst = CIMInstance(SUBSCRIPTION_CLASSNAME)
          sub_inst.path = sub_path
          sub_inst['Filter'] = filter_path
          sub_inst['Handler'] = dest_path
  
          if owned:
              for inst in self._owned_subscriptions[server_id]:
                  if inst.path == sub_path:
                      # It does not have any properties besides its keys,
                      # so checking the path is sufficient.
                      return sub_inst
              sub_path = server.conn.CreateInstance(sub_inst)
              sub_inst = server.conn.GetInstance(sub_path)
              self._owned_subscriptions[server_id].append(sub_inst)
          else:
              # Responsibility to ensure it does not exist yet is with the user
              sub_path = server.conn.CreateInstance(sub_inst)
              sub_inst = server.conn.GetInstance(sub_path)
  
          return sub_inst
docs: Create an indication subscription instance in the Interop namespace of
          a WBEM server and return that instance.
  
          In order to catch any changes the server applies, the instance is
          retrieved again using the instance path returned by instance creation.
  
          Parameters:
  
            server_id (:term:`string`):
              The server ID of the WBEM server, returned by
              :meth:`~pywbem.WBEMSubscriptionManager.add_server`.
  
            dest_path (:class:`~pywbem.CIMInstanceName`):
              Instance path of the listener destination instance in the WBEM
              server that references this listener.
  
            filter_path (:class:`~pywbem.CIMInstanceName`):
              Instance path of the indication filter instance in the WBEM
              server that specifies the indications to be sent.
  
            owned (:class:`py:bool`):
              Defines whether or not the created instance is *owned* by the
              subscription manager.
  
          Returns:
  
              :class:`~pywbem.CIMInstance`: The created instance, as retrieved
              from the server.
  
          Raises:
  
              Exceptions raised by :class:`~pywbem.WBEMConnection`.