def _default_value_formatter( human_readable, field_limit, utc_timestamps=True, encoding='utf-8', ): """ Create a value formatter based on several user-specified options. """ fields = {} if human_readable: fields = { eliot_ns(u'timestamp'): format.timestamp(include_microsecond=False, utc_timestamps=utc_timestamps), eliot_ns(u'duration'): format.duration(), } return compose( # We want tree-format to handle newlines. partial(format.escape_control_characters, overrides={0x0a: u'\n'}), partial(format.truncate_value, field_limit) if field_limit else identity, format.some(format.fields(fields), format.text(), format.binary(encoding), format.anything(encoding)))
def test_mapping(self): """ Values for known field names are passed through their processor. """ fields = { u'a': format.binary('utf-8'), } self.assertThat( format.fields(fields)(u'\N{SNOWMAN}'.encode('utf-8'), u'a'), ExactlyEquals(u'\N{SNOWMAN}'))
def test_missing_mapping(self): """ Values for unknown field names are ignored. """ self.assertThat(format.fields({})(b'hello', u'a'), Is(None))