Skip to content

Commit

Permalink
Add prefix, suffix, dir args to TemporaryDirectory
Browse files Browse the repository at this point in the history
  • Loading branch information
q0w authored and Tinche committed Nov 26, 2021
1 parent 8895eb4 commit 2b2500d
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 90 deletions.
4 changes: 2 additions & 2 deletions src/aiofiles/base.py
Expand Up @@ -12,9 +12,9 @@ def __init__(self, file, loop, executor):
def __aiter__(self):
"""We are our own iterator."""
return self

def __repr__(self):
return super().__repr__() + ' wrapping ' + repr(self._file)
return super().__repr__() + " wrapping " + repr(self._file)

async def __anext__(self):
"""Simulate normal file iteration."""
Expand Down
13 changes: 9 additions & 4 deletions src/aiofiles/tempfile/__init__.py
Expand Up @@ -113,10 +113,12 @@ def SpooledTemporaryFile(
)


def TemporaryDirectory(loop=None, executor=None):
def TemporaryDirectory(suffix=None, prefix=None, dir=None, loop=None, executor=None):
"""Async open a temporary directory"""
return AiofilesContextManagerTempDir(
_temporary_directory(loop=loop, executor=executor)
_temporary_directory(
suffix=suffix, prefix=prefix, dir=dir, loop=loop, executor=executor
)
)


Expand Down Expand Up @@ -213,12 +215,15 @@ async def _spooled_temporary_file(
return AsyncSpooledTemporaryFile(f, loop=loop, executor=executor)


async def _temporary_directory(loop=None, executor=None):
async def _temporary_directory(
suffix=None, prefix=None, dir=None, loop=None, executor=None
):
"""Async method to open a temporary directory with async interface"""
if loop is None:
loop = asyncio.get_event_loop()

f = await loop.run_in_executor(executor, syncTemporaryDirectory)
cb = partial(syncTemporaryDirectory, suffix, prefix, dir)
f = await loop.run_in_executor(executor, cb)

return AsyncTemporaryDirectory(f, loop=loop, executor=executor)

Expand Down
34 changes: 16 additions & 18 deletions tests/test_os.py
Expand Up @@ -19,9 +19,9 @@ async def test_stat():
@pytest.mark.asyncio
async def test_remove():
"""Test the remove call."""
filename = join(dirname(__file__), 'resources', 'test_file2.txt')
with open(filename, 'w') as f:
f.write('Test file for remove call')
filename = join(dirname(__file__), "resources", "test_file2.txt")
with open(filename, "w") as f:
f.write("Test file for remove call")

assert exists(filename)
await aiofiles.os.remove(filename)
Expand All @@ -31,7 +31,7 @@ async def test_remove():
@pytest.mark.asyncio
async def test_mkdir_and_rmdir():
"""Test the mkdir and rmdir call."""
directory = join(dirname(__file__), 'resources', 'test_dir')
directory = join(dirname(__file__), "resources", "test_dir")
await aiofiles.os.mkdir(directory)
assert isdir(directory)
await aiofiles.os.rmdir(directory)
Expand All @@ -41,8 +41,8 @@ async def test_mkdir_and_rmdir():
@pytest.mark.asyncio
async def test_rename():
"""Test the rename call."""
old_filename = join(dirname(__file__), 'resources', 'test_file1.txt')
new_filename = join(dirname(__file__), 'resources', 'test_file2.txt')
old_filename = join(dirname(__file__), "resources", "test_file1.txt")
new_filename = join(dirname(__file__), "resources", "test_file2.txt")
await aiofiles.os.rename(old_filename, new_filename)
assert exists(old_filename) is False and exists(new_filename)
await aiofiles.os.rename(new_filename, old_filename)
Expand Down Expand Up @@ -128,9 +128,7 @@ async def serve_file(_, writer):

server = await asyncio.start_server(serve_file, port=unused_tcp_port)

reader, writer = await asyncio.open_connection(
"127.0.0.1", unused_tcp_port
)
reader, writer = await asyncio.open_connection("127.0.0.1", unused_tcp_port)
actual_contents = await reader.read()
writer.close()

Expand All @@ -143,70 +141,70 @@ async def serve_file(_, writer):
@pytest.mark.asyncio
async def test_exists():
"""Test path.exists call."""
filename = join(dirname(__file__), 'resources', 'test_file1.txt')
filename = join(dirname(__file__), "resources", "test_file1.txt")
result = await aiofiles.os.path.exists(filename)
assert result


@pytest.mark.asyncio
async def test_isfile():
"""Test path.isfile call."""
filename = join(dirname(__file__), 'resources', 'test_file1.txt')
filename = join(dirname(__file__), "resources", "test_file1.txt")
result = await aiofiles.os.path.isfile(filename)
assert result


@pytest.mark.asyncio
async def test_isdir():
"""Test path.isdir call."""
filename = join(dirname(__file__), 'resources')
filename = join(dirname(__file__), "resources")
result = await aiofiles.os.path.isdir(filename)
assert result


@pytest.mark.asyncio
async def test_getsize():
"""Test path.getsize call."""
filename = join(dirname(__file__), 'resources', 'test_file1.txt')
filename = join(dirname(__file__), "resources", "test_file1.txt")
result = await aiofiles.os.path.getsize(filename)
assert result == 10


@pytest.mark.asyncio
async def test_samefile():
"""Test path.samefile call."""
filename = join(dirname(__file__), 'resources', 'test_file1.txt')
filename = join(dirname(__file__), "resources", "test_file1.txt")
result = await aiofiles.os.path.samefile(filename, filename)
assert result


@pytest.mark.asyncio
async def test_sameopenfile():
"""Test path.samefile call."""
filename = join(dirname(__file__), 'resources', 'test_file1.txt')
filename = join(dirname(__file__), "resources", "test_file1.txt")
result = await aiofiles.os.path.samefile(filename, filename)
assert result


@pytest.mark.asyncio
async def test_getmtime():
"""Test path.getmtime call."""
filename = join(dirname(__file__), 'resources', 'test_file1.txt')
filename = join(dirname(__file__), "resources", "test_file1.txt")
result = await aiofiles.os.path.getmtime(filename)
assert result


@pytest.mark.asyncio
async def test_getatime():
"""Test path.getatime call."""
filename = join(dirname(__file__), 'resources', 'test_file1.txt')
filename = join(dirname(__file__), "resources", "test_file1.txt")
result = await aiofiles.os.path.getatime(filename)
assert result


@pytest.mark.asyncio
async def test_getctime():
"""Test path. call."""
filename = join(dirname(__file__), 'resources', 'test_file1.txt')
filename = join(dirname(__file__), "resources", "test_file1.txt")
result = await aiofiles.os.path.getctime(filename)
assert result
28 changes: 16 additions & 12 deletions tests/test_tempfile.py
Expand Up @@ -9,24 +9,24 @@
@pytest.mark.parametrize("mode", ["r+", "w+", "rb+", "wb+"])
async def test_temporary_file(mode):
"""Test temporary file."""
data = b'Hello World!\n' if 'b' in mode else 'Hello World!\n'
data = b"Hello World!\n" if "b" in mode else "Hello World!\n"

async with tempfile.TemporaryFile(mode=mode) as f:
for i in range(3):
await f.write(data)
await f.write(data)

await f.flush()
await f.seek(0)

async for line in f:
assert line == data


@pytest.mark.asyncio
@pytest.mark.parametrize("mode", ["r+", "w+", "rb+", "wb+"])
async def test_named_temporary_file(mode):
"""Test named temporary file."""
data = b'Hello World!' if 'b' in mode else 'Hello World!'
data = b"Hello World!" if "b" in mode else "Hello World!"
filename = None

async with tempfile.NamedTemporaryFile(mode=mode) as f:
Expand All @@ -42,36 +42,40 @@ async def test_named_temporary_file(mode):

assert not os.path.exists(filename)


@pytest.mark.asyncio
@pytest.mark.parametrize("mode", ["r+", "w+", "rb+", "wb+"])
async def test_spooled_temporary_file(mode):
"""Test spooled temporary file."""
data = b'Hello World!' if 'b' in mode else 'Hello World!'
data = b"Hello World!" if "b" in mode else "Hello World!"

async with tempfile.SpooledTemporaryFile(max_size=len(data)+1, mode=mode) as f:
async with tempfile.SpooledTemporaryFile(max_size=len(data) + 1, mode=mode) as f:
await f.write(data)
await f.flush()
if 'b' in mode:
if "b" in mode:
assert type(f._file._file) is io.BytesIO

await f.write(data)
await f.flush()
if 'b' in mode:
if "b" in mode:
assert type(f._file._file) is not io.BytesIO

await f.seek(0)
assert await f.read() == data + data


@pytest.mark.asyncio
async def test_temporary_directory():
@pytest.mark.parametrize("prefix, suffix", [("a", "b"), ("c", "d"), ("e", "f")])
async def test_temporary_directory(prefix, suffix, tmp_path):
"""Test temporary directory."""
dir_path = None

async with tempfile.TemporaryDirectory() as d:
async with tempfile.TemporaryDirectory(
suffix=suffix, prefix=prefix, dir=tmp_path
) as d:
dir_path = d
assert os.path.exists(dir_path)
assert os.path.isdir(dir_path)

assert d[-1] == suffix
assert d.split("/")[-1][0] == prefix
assert not os.path.exists(dir_path)
4 changes: 1 addition & 3 deletions tests/threadpool/test_concurrency.py
Expand Up @@ -57,9 +57,7 @@ async def spam_client():

spam_task = asyncio.ensure_future(spam_client())

reader, writer = await asyncio.open_connection(
"127.0.0.1", port=unused_tcp_port
)
reader, writer = await asyncio.open_connection("127.0.0.1", port=unused_tcp_port)

actual_contents = await reader.read()
writer.close()
Expand Down

0 comments on commit 2b2500d

Please sign in to comment.