code: def augment_items(cls, items, **defaults):
  		
  		properties = defaults
  		for item in items:
  			# allow the Sentinel to be just the class itself, which is to be
  			#  constructed with no parameters.
  			if isinstance(item, type) and issubclass(item, Sentinel):
  				item = item()
  			if isinstance(item, Sentinel):
  				properties.update(item.properties)
  				continue
  			yield AugmentableMessage(item, **properties)
docs: Iterate over the items, keeping a adding properties as supplied by
  		Sentinel objects encountered.
  
  		>>> from more_itertools.recipes import consume
  		>>> res = Sentinel.augment_items(['a', 'b', NoLog, 'c'], secret=False)
  		>>> res = tuple(res)
  		>>> consume(map(print, res))
  		a
  		b
  		c
  		>>> [msg.secret for msg in res]
  		[False, False, True]
  
  		>>> msgs = ['a', NoLog, 'b', SwitchChannel('#foo'), 'c']
  		>>> res = Sentinel.augment_items(msgs, secret=False, channel=None)
  		>>> res = tuple(res)
  		>>> consume(map(print, res))
  		a
  		b
  		c
  		>>> [msg.channel for msg in res] == [None, None, '#foo']
  		True
  		>>> [msg.secret for msg in res]
  		[False, True, True]
  
  		>>> res = Sentinel.augment_items(msgs, channel='#default', secret=False)
  		>>> consume(map(print, [msg.channel for msg in res]))
  		#default
  		#default
  		#foo