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__))