code: def register_data(self, typename, value):
      
      if typename in self.data_products:
        raise ProductError('Already have a product registered for {}, cannot over-write with {}'
                           .format(typename, value))
      return self.safe_create_data(typename, lambda: value)
docs: Registers a data product, raising if a product was already registered.
  
      :API: public
  
      :param typename: The type of product to register a value for.
      :param value: The data product to register under `typename`.
      :returns: The registered `value`.
      :raises: :class:`ProductError` if a value for the given product `typename` is already
               registered.