Пример #1
0
    def test_sharded_key_coder(self):
        key_and_coders = [(b'', b'\x00', coders.BytesCoder()),
                          (b'key', b'\x03key', coders.BytesCoder()),
                          ('key', b'\03\x6b\x65\x79', coders.StrUtf8Coder()),
                          (('k', 1), b'\x01\x6b\x01',
                           coders.TupleCoder(
                               (coders.StrUtf8Coder(), coders.VarIntCoder())))]

        for key, bytes_repr, key_coder in key_and_coders:
            coder = coders.ShardedKeyCoder(key_coder)
            # Verify cloud object representation
            self.assertEqual(
                {
                    '@type': 'kind:sharded_key',
                    'component_encodings': [key_coder.as_cloud_object()]
                }, coder.as_cloud_object())
            self.assertEqual(b'\x00' + bytes_repr,
                             coder.encode(ShardedKey(key, b'')))
            self.assertEqual(b'\x03123' + bytes_repr,
                             coder.encode(ShardedKey(key, b'123')))

            # Test unnested
            self.check_coder(coder, ShardedKey(key, b''))
            self.check_coder(coder, ShardedKey(key, b'123'))

            for other_key, _, other_key_coder in key_and_coders:
                other_coder = coders.ShardedKeyCoder(other_key_coder)
                # Test nested
                self.check_coder(
                    coders.TupleCoder((coder, other_coder)),
                    (ShardedKey(key, b''), ShardedKey(other_key, b'')))
                self.check_coder(
                    coders.TupleCoder((coder, other_coder)),
                    (ShardedKey(key, b'123'), ShardedKey(other_key, b'')))
Пример #2
0
    def test_sharded_key_coder(self):
        key_and_coders = [(b'', b'\x00', coders.BytesCoder()),
                          (b'key', b'\x03key', coders.BytesCoder()),
                          ('key', b'\03\x6b\x65\x79', coders.StrUtf8Coder()),
                          (('k', 1), b'\x01\x6b\x01',
                           coders.TupleCoder(
                               (coders.StrUtf8Coder(), coders.VarIntCoder())))]

        for key, bytes_repr, key_coder in key_and_coders:
            coder = coders.ShardedKeyCoder(key_coder)
            # Verify cloud object representation
            self.assertEqual(
                {
                    '@type': 'kind:sharded_key',
                    'component_encodings': [key_coder.as_cloud_object()]
                }, coder.as_cloud_object())

            # Test str repr
            self.assertEqual('%s' % coder, 'ShardedKeyCoder[%s]' % key_coder)

            self.assertEqual(b'\x00' + bytes_repr,
                             coder.encode(ShardedKey(key, b'')))
            self.assertEqual(b'\x03123' + bytes_repr,
                             coder.encode(ShardedKey(key, b'123')))

            # Test unnested
            self.check_coder(coder, ShardedKey(key, b''))
            self.check_coder(coder, ShardedKey(key, b'123'))

            # Test type hints
            self.assertTrue(
                isinstance(coder.to_type_hint(),
                           sharded_key_type.ShardedKeyTypeConstraint))
            key_type = coder.to_type_hint().key_type
            if isinstance(key_type, typehints.TupleConstraint):
                self.assertEqual(key_type.tuple_types,
                                 (type(key[0]), type(key[1])))
            else:
                self.assertEqual(key_type, type(key))
            self.assertEqual(
                coders.ShardedKeyCoder.from_type_hint(
                    coder.to_type_hint(), typecoders.CoderRegistry()), coder)

            for other_key, _, other_key_coder in key_and_coders:
                other_coder = coders.ShardedKeyCoder(other_key_coder)
                # Test nested
                self.check_coder(
                    coders.TupleCoder((coder, other_coder)),
                    (ShardedKey(key, b''), ShardedKey(other_key, b'')))
                self.check_coder(
                    coders.TupleCoder((coder, other_coder)),
                    (ShardedKey(key, b'123'), ShardedKey(other_key, b'')))