code: def _create_co_virtual_idp(self, context):
          
          co_name = self._get_co_name(context)
          context.decorate(self.KEY_CO_NAME, co_name)
  
          # Verify that we are configured for this CO. If the CO was not
          # configured most likely the endpoint used was not registered and
          # SATOSA core code threw an exception before getting here, but we
          # include this check in case later the regex used to register the
          # endpoints is relaxed.
          co_names = self._co_names_from_config()
          if co_name not in co_names:
              msg = "CO {} not in configured list of COs {}".format(co_name,
                                                                    co_names)
              satosa_logging(logger, logging.WARN, msg, context.state)
              raise SATOSAError(msg)
  
          # Make a copy of the general IdP config that we will then overwrite
          # with mappings between SAML bindings and CO specific URL endpoints,
          # and the entityID for the CO virtual IdP.
          backend_name = context.target_backend
          idp_config = copy.deepcopy(self.idp_config)
          idp_config = self._add_endpoints_to_config(idp_config,
                                                     co_name,
                                                     backend_name)
          idp_config = self._add_entity_id(idp_config, co_name)
  
          # Use the overwritten IdP config to generate a pysaml2 config object
          # and from it a server object.
          pysaml2_idp_config = IdPConfig().load(idp_config,
                                                metadata_construction=False)
  
          server = Server(config=pysaml2_idp_config)
  
          return server
docs: Create a virtual IdP to represent the CO.
  
          :type context: The current context
          :rtype: saml.server.Server
  
          :param context:
          :return: An idp server