Skip to main content

📁 Async pathlib for Python

Project description

📁 Async pathlib for Python

aiopath is a complete implementation of pathlib from Python 3.4+ that is compatible with asyncio and the async/await syntax. All I/O performed is asynchronous and awaitable.

aiopath is extensively typed with Python type annotations. aiopath also takes advantage of libaio on Linux.

Usage

aiopath.Path has the same API as pathlib.Path, and aiopath.AsyncPurePath works the same way as pathlib.PurePath. The only difference is that with aiopath, methods that perform I/O are asynchronous and awaitable, and methods that returned iterators now return async generators.

To run the following examples with top-level await expressions, launch an asynchronous Python REPL using python3 -m asyncio.

Basic

All of pathlib.Path's methods that perform synchronous I/O are reimplemented as asynchronous methods.

import tempfile
from pathlib import Path
from aiopath import AsyncPath


with tempfile.NamedTemporaryFile() as temp:
  path = Path(temp.name)
  apath = AsyncPath(temp.name)

  # check existence
  ## sync
  assert path.exists()
  ## async
  assert await apath.exists()

  # check if file
  ## sync
  assert path.is_file()
  ## async
  assert await apath.is_file()

  # touch
  path.touch()
  await apath.touch()

  # read and write text
  text = "example"
  await apath.write_text(text)
  assert text == await apath.read_text()

assert not path.exists()
assert not await apath.exists()

You can convert pathlib.Path objects to aiopath.Path objects easily:

from pathlib import Path
from aiopath import AsyncPath


home: Path = Path.home()
ahome: AsyncPath = AsyncPath(home)

assert isinstance(home, Path)
assert isinstance(ahome, AsyncPath)

Opening a file

You can get an asynchronous file-like object handle by using asynchronous context managers.

import tempfile
from aiopath import AsyncPath


text: str = 'example'

with tempfile.NamedTemporaryFile() as temp:
  apath = AsyncPath(temp.name)

  async with apath.open(mode='w') as afile:
    await afile.write(text)

  result: str = await apath.read_text()
  assert result == text

Globbing

aiopath implements pathlib globbing using async I/O and async generators.

from typing import List
from aiopath import AsyncPath


home: AsyncPath = await AsyncPath.home()

async for path in home.glob('*'):
  assert isinstance(path, AsyncPath)
  print(path)

downloads: AsyncPath = home / 'Downloads'

if await downloads.exists():
  # caution! this might take awhile
  paths: List[AsyncPath] = \
    [path async for path in downloads.glob('**/*')]

Installation

Dependencies

  • A POSIX compliant OS, or Windows
  • Python 3.7+
  • requirements.txt

PyPI

$ python3 -m pip install aiopath

GitHub

$ python3 -m pip install -r requirements.txt
$ python3 setup.py install

Linux

This library will take advantage of libaio, which is compatible with Linux 4.18 and up.

sudo apt install libaio1

Support

Want to support this project and other open-source software like this?

Buy Me A Coffee

License

See LICENSE. If you'd like to use this project with a different license, please get in touch.

Credit

See CREDIT.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aiopath-0.2.0.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aiopath-0.2.0-py2.py3-none-any.whl (13.6 kB view details)

Uploaded Python 2Python 3

File details

Details for the file aiopath-0.2.0.tar.gz.

File metadata

  • Download URL: aiopath-0.2.0.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.6

File hashes

Hashes for aiopath-0.2.0.tar.gz
Algorithm Hash digest
SHA256 e95e9b3648b6762ad1d3073647b84adf22d484c02a498f8067dd5d1f04091fb0
MD5 e426428de79fa63137574c75b678ab4c
BLAKE2b-256 692d4183c89ce24ac8c8dbe0e5c2f1bc6e1d99833a3d0524ce8c1bd97331df73

See more details on using hashes here.

File details

Details for the file aiopath-0.2.0-py2.py3-none-any.whl.

File metadata

  • Download URL: aiopath-0.2.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 13.6 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.6

File hashes

Hashes for aiopath-0.2.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e9ec876271000be78e243820513358255217da7b08113a77c6baf7f7baed9735
MD5 10c12e919ac1d7fb3a1c6048a8af2b0d
BLAKE2b-256 5ee5de9819e2ce5c49677d7524d49ebb09b8120eea90a73c53d03ba590e6bcfe

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page