def generate_scalars_binary(scalars_map, preceding_symbols=0): for ion_type, values in six.iteritems(scalars_map): for native, expected in values: native_expected = expected has_symbols = False if native is None: # An un-adorned 'None' doesn't contain enough information to determine its Ion type native_expected = b'\x0f' elif ion_type is IonType.CLOB: # All six.binary_type are treated as BLOBs unless wrapped by an _IonNature tid = six.byte2int( expected ) + 0x10 # increment upper nibble for clob -> blob; keep lower nibble native_expected = bytearray([tid]) + expected[1:] elif ion_type is IonType.SYMBOL and native is not None: has_symbols = True elif ion_type is IonType.STRING: # Encode all strings as symbols too. symbol_expected = _serialize_symbol( IonEvent(IonEventType.SCALAR, IonType.SYMBOL, SymbolToken(None, 10 + preceding_symbols))) yield _Parameter(IonType.SYMBOL.name + ' ' + native, IonPyText.from_value(IonType.SYMBOL, native), symbol_expected, True) yield _Parameter('%s %s' % (ion_type.name, native), native, native_expected, has_symbols) wrapper = _FROM_ION_TYPE[ion_type].from_value(ion_type, native) yield _Parameter(repr(wrapper), wrapper, expected, has_symbols)
def generate_scalars_binary(scalars_map, preceding_symbols=0): for ion_type, values in six.iteritems(scalars_map): for native, expected in values: native_expected = expected has_symbols = False if native is None: # An un-adorned 'None' doesn't contain enough information to determine its Ion type native_expected = b'\x0f' elif ion_type is IonType.CLOB: # All six.binary_type are treated as BLOBs unless wrapped by an _IonNature tid = six.byte2int(expected) + 0x10 # increment upper nibble for clob -> blob; keep lower nibble native_expected = bytearray([tid]) + expected[1:] elif ion_type is IonType.SYMBOL and native is not None: has_symbols = True elif ion_type is IonType.STRING: # Encode all strings as symbols too. symbol_expected = _serialize_symbol( IonEvent(IonEventType.SCALAR, IonType.SYMBOL, SymbolToken(None, 10 + preceding_symbols))) yield _Parameter(IonType.SYMBOL.name + ' ' + native, IonPyText.from_value(IonType.SYMBOL, native), symbol_expected, True) yield _Parameter('%s %s' % (ion_type.name, native), native, native_expected, has_symbols) wrapper = _FROM_ION_TYPE[ion_type].from_value(ion_type, native) yield _Parameter(repr(wrapper), wrapper, expected, has_symbols)
u'foo': {} } }, [{ u'foo': [{ u'foo': [] }] }], { u'foo': [{ u'foo': [] }] }, { u'foo': IonPyText.from_value(IonType.STRING, u'bar', annotations=(u'str', )), u'baz': 123, u'lst': IonPyList.from_value( IonType.LIST, [True, None, 1.23e4, IonPyText.from_value(IonType.SYMBOL, u'sym')]), u'sxp': IonPyList.from_value(IonType.SEXP, [ False, IonPyNull.from_value(IonType.STRUCT, None, (u'class', )), Decimal('5.678') ]) }, ]
_st(u''), _st(u'abc'), _st(u'abcdefghijklmno'), _st(u'a\U0001f4a9c'), _st(u'a\u3000\x20c'), b'abcd', IonPyBytes.from_value(IonType.CLOB, b'abcd'), [[[]]], [[], [], []], [{}, {}, {}], {u'foo': [], u'bar': [], u'baz': []}, {u'foo': {u'foo': {}}}, [{u'foo': [{u'foo': []}]}], {u'foo': [{u'foo': []}]}, { u'foo': IonPyText.from_value(IonType.STRING, u'bar', annotations=(u'str',)), u'baz': 123, u'lst': IonPyList.from_value(IonType.LIST, [ True, None, 1.23e4, IonPyText.from_value(IonType.SYMBOL, u'sym') ]), u'sxp': IonPyList.from_value(IonType.SEXP, [ False, IonPyNull.from_value(IonType.STRUCT, None, (u'class',)), Decimal('5.678') ]) }, ] def _generate_roundtrips(roundtrips): for is_binary in (True, False):