code: def build_reader(validator, reader_namespace=config.DEFAULT):
      
      def reader(config_key, default=UndefToken, namespace=None):
          config_namespace = config.get_namespace(namespace or reader_namespace)
          return validator(_read_config(config_key, config_namespace, default))
      return reader
docs: A factory method for creating a custom config reader from a validation
      function.
  
      :param validator: a validation function which acceptance one argument (the
                        configuration value), and returns that value casted to
                        the appropriate type.
      :param reader_namespace: the default namespace to use. Defaults to
                               `DEFAULT`.