def make_cipher_adapter()

in oss2/utils.py [0:0]


def make_cipher_adapter(data, cipher_callback, discard=0):
    """返回一个适配器,从而在读取 `data` ,即调用read或者对其进行迭代的时候,能够进行加解密操作。

        :param encrypt:
        :param cipher_callback:
        :param discard: 读取时需要丢弃的字节
        :param data: 可以是bytes、file object或iterable

        :return: 能够客户端加密函数的适配器
        """
    data = to_bytes(data)

    # bytes or file object
    if _has_data_size_attr(data):
        if discard:
            raise ClientError('Bytes of file object adapter does not support discard bytes')
        return _BytesAndFileAdapter(data, size=_get_data_size(data), cipher_callback=cipher_callback)
    if hasattr(data, 'read'):
        return _FileLikeAdapter(data, cipher_callback=cipher_callback, discard=discard)
    # iterator
    elif hasattr(data, '__iter__'):
        if discard:
            raise ClientError('Iterator adapter does not support discard bytes')
        return _IterableAdapter(data, cipher_callback=cipher_callback)
    else:
        raise ClientError('{0} is not a file object'.format(data.__class__.__name__))