Metadata-Version: 2.1
Name: async-tail
Version: 0.1.0
Classifier: Development Status :: 3 - Alpha
Classifier: Programming Language :: Rust
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: MacOS
Classifier: Environment :: MacOS X
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Filesystems
License-File: LICENSE
Summary: tail -f utility library providing both sync and async interfaces
Home-Page: https://github.com/TheoBabilon/async-tail
Author-email: Theo BABILON <theo.babilon@gmail.com>
License: MIT
Requires-Python: >=3.7
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Homepage, https://github.com/theobabilon/async-tail
Project-URL: Funding, https://github.com/sponsors/theobabilon
Project-URL: Source, https://github.com/theobabilon/async-tail

# async-tail

Asynchronous tailing library written in Rust.

---

Python wrapper around Rust [linemux](https://github.com/jmagnuson/linemux) library, which uses the [notify](https://crates.io/crates/notify) cross-platform filesystem notification library.

Uses [PyO3](https://github.com/PyO3/pyo3) Rust bindings and [PyO3-asyncio](https://github.com/awestlake87/pyo3-asyncio) to manage Rust/Python event loops lifecycles.

## Usage

Here are some examples of what **async-tail** can do:

### `tail` Usage

```py
from async_tail import tail

for line in tail('./path/to/file.log'):
    print(line)
```

### `atail` Usage

```py
import asyncio
from async_tail import atail

async def main():
    async for line in atail('/path/to/file.txt'):
        print(line)

asyncio.run(main())
```

## Notes

**async-tail** is a way for me to learn Rust and experiment Rust bindings from Python. It is inspired from the great [Samuel COLVIN](https://github.com/samuelcolvin)'s work on [watchfiles](https://github.com/samuelcolvin/watchfiles), which provides a Python wrapper around Rust [notify](https://crates.io/crates/notify) crate. This is still under development and needs several things to be adressed before a first release:

- [x] Write tests
- [ ] Setup proper CI
- [ ] Implement step/debounce_ms/timeout logic for async handler (AIOTail)

