docs: def register(self, resource_class, content_type, configuration=None):
          """
          Registers a representer factory for the given combination of resource
          class and content type.
  
          :param configuration: representer configuration. A default instance
            will be created if this is not given.
          :type configuration:
              :class:`everest.representers.config.RepresenterConfiguration`
          """
          if not issubclass(resource_class, Resource):
              raise ValueError('Representers can only be registered for '
                               'resource classes (got: %s).' % resource_class)
          if not content_type in self.__rpr_classes:
              raise ValueError('No representer class has been registered for '
                               'content type "%s".' % content_type)
          # Register a factory resource -> representer for the given combination
          # of resource class and content type.
          rpr_cls = self.__rpr_classes[content_type]
          self.__rpr_factories[(resource_class, content_type)] = \
                                              rpr_cls.create_from_resource_class
          if issubclass(rpr_cls, MappingResourceRepresenter):
              # Create or update an attribute mapping.
              mp_reg = self.__mp_regs[content_type]
              mp = mp_reg.find_mapping(resource_class)
              if mp is None:
                  # No mapping was registered yet for this resource class or any
                  # of its base classes; create a new one on the fly.
                  new_mp = mp_reg.create_mapping(resource_class, configuration)
              elif not configuration is None:
                  if resource_class is mp.mapped_class:
                      # We have additional configuration for an existing mapping.
                      mp.configuration.update(configuration)
                      new_mp = mp
                  else:
                      # We have a derived class with additional configuration.
                      new_mp = mp_reg.create_mapping(
                                              resource_class,
                                              configuration=mp.configuration)
                      new_mp.configuration.update(configuration)
              elif not resource_class is mp.mapped_class:
                  # We have a derived class without additional configuration.
                  new_mp = mp_reg.create_mapping(resource_class,
                                                 configuration=mp.configuration)
              else:
                  # We found a dynamically created mapping for the right class
                  # without additional configuration; do not create a new one.
                  new_mp = None
              if not new_mp is None:
                  # Store the new (or updated) mapping.
                  mp_reg.set_mapping(new_mp)