in azure/datalake/store/core.py [0:0]
def __init__(self, azure, path, mode='rb', blocksize=2 ** 25,
delimiter=None):
self.mode = mode
if mode not in {'rb', 'wb', 'ab'}:
raise NotImplementedError("File mode must be {'rb', 'wb', 'ab'}, not %s" % mode)
self.path = path
self.azure = azure
self.cache = b""
self.loc = 0
self.delimiter = delimiter
self.start = 0
self.end = 0
self.closed = False
self.trim = True
self.buffer = io.BytesIO()
self.blocksize = blocksize
uniqueid = str(uuid.uuid4())
self.filesessionid = uniqueid
self.leaseid = uniqueid
# always invalidate the cache when checking for existence of a file
# that may be created or written to (for the first time).
try:
file_data = self.azure.info(path, invalidate_cache=True, expected_error_code=404)
exists = True
except FileNotFoundError:
exists = False
# cannot create a new file object out of a directory
if exists and file_data['type'] == 'DIRECTORY':
raise IOError(
'path: {} is a directory, not a file, and cannot be opened for reading or writing'.format(path))
if mode == 'ab' or mode == 'wb':
self.blocksize = min(2 ** 22, blocksize)
if mode == 'ab' and exists:
self.loc = file_data['length']
elif (mode == 'ab' and not exists) or (mode == 'wb'):
# Create the file
_put_data_with_retry(
rest=self.azure.azure,
op='CREATE',
path=self.path.as_posix(),
data=None,
overwrite='true',
write='true',
syncFlag='DATA',
leaseid=self.leaseid,
filesessionid=self.filesessionid)
logger.debug('Created file %s ' % self.path)
else: # mode == 'rb':
if not exists:
raise FileNotFoundError(path.as_posix())
self.size = file_data['length']