True async filesystem I/O — no fake async, no GIL stalls.
Project description
rapfiles
True async filesystem I/O — no fake async, no GIL stalls.
Overview
rapfiles provides true async filesystem I/O operations for Python, backed by Rust and Tokio. Unlike libraries that wrap blocking I/O in async syntax, rapfiles guarantees that all I/O work executes outside the Python GIL, ensuring event loops never stall under load.
Roadmap Goal: Achieve drop-in replacement compatibility with aiofiles, enabling seamless migration with true async performance. See docs/ROADMAP.md for details.
Why rap*?
Packages prefixed with rap stand for Real Async Python. Unlike many libraries that merely wrap blocking I/O in async syntax, rap* packages guarantee that all I/O work is executed outside the Python GIL using native runtimes (primarily Rust). This means event loops are never stalled by hidden thread pools, blocking syscalls, or cooperative yielding tricks. If a rap* API is async, it is structurally non-blocking by design, not by convention. The rap prefix is a contract: measurable concurrency, real parallelism, and verifiable async behavior under load.
See the rap-manifesto for philosophy and guarantees.
Features
- ✅ True async file reads and writes
- ✅ Native Rust-backed execution (Tokio)
- ✅ Zero Python thread pools
- ✅ Event-loop-safe concurrency under load
- ✅ GIL-independent I/O operations
- ✅ Verified by Fake Async Detector
- ✅ File handles with async context managers (
async with) - ✅ Directory operations (create, remove, list, walk)
- ✅ File metadata (stat, size, timestamps)
- ✅ Path operations (
rapfiles.ospathmodule) - ✅ aiofiles compatibility (Phase 1 complete)
Requirements
- Python 3.8+
- Rust 1.70+ (for building from source)
Installation
pip install rapfiles
Building from Source
git clone https://github.com/eddiethedean/rapfiles.git
cd rapfiles
pip install maturin
maturin develop
Usage
Basic File Operations
import asyncio
from rapfiles import read_file, write_file
async def main():
# Write file asynchronously (true async, GIL-independent)
await write_file("example.txt", "Hello from rapfiles!")
# Read file asynchronously (true async, GIL-independent)
content = await read_file("example.txt")
print(content) # Output: Hello from rapfiles!
# Write another file
await write_file("output.txt", content)
asyncio.run(main())
File Handles (aiofiles compatible)
import asyncio
from rapfiles import open
async def main():
# Open file with async context manager
async with open("file.txt", "r") as f:
content = await f.read()
print(content)
# Write mode
async with open("output.txt", "w") as f:
await f.write("Hello, world!")
# Binary mode
async with open("image.png", "rb") as f:
data = await f.read()
# Read lines
async with open("file.txt", "r") as f:
line = await f.readline()
lines = await f.readlines()
asyncio.run(main())
Directory Operations
import asyncio
from rapfiles import create_dir, list_dir, exists, is_file, is_dir, walk_dir
async def main():
# Create directories
await create_dir("new_dir")
await create_dir_all("path/to/nested/dir")
# Check if path exists
if await exists("file.txt"):
print("File exists!")
# Check file/directory type
if await is_file("file.txt"):
print("It's a file")
if await is_dir("directory"):
print("It's a directory")
# List directory contents
files = await list_dir(".")
print(files)
# Recursively walk directory
for path, is_file in await walk_dir("."):
print(f"{path}: {'file' if is_file else 'dir'}")
asyncio.run(main())
File Metadata
import asyncio
from rapfiles import stat, FileMetadata
async def main():
# Get file statistics
metadata: FileMetadata = await stat("file.txt")
print(f"Size: {metadata.size} bytes")
print(f"Is file: {metadata.is_file}")
print(f"Modified: {metadata.modified}")
print(f"Created: {metadata.created}")
asyncio.run(main())
Concurrent File Operations
import asyncio
from rapfiles import read_file, write_file
async def main():
# Process multiple files concurrently
tasks = [
write_file("file1.txt", "Content 1"),
write_file("file2.txt", "Content 2"),
write_file("file3.txt", "Content 3"),
]
await asyncio.gather(*tasks)
# Read all files concurrently
contents = await asyncio.gather(
read_file("file1.txt"),
read_file("file2.txt"),
read_file("file3.txt"),
)
print(contents) # ['Content 1', 'Content 2', 'Content 3']
asyncio.run(main())
API Reference
File Operations
read_file(path: str) -> str
Read a file asynchronously and return its contents as a string.
Parameters:
path(str): Path to the file to read
Returns:
str: File contents as UTF-8 decoded string
Raises:
FileNotFoundError: If the file does not existIOError: If the file cannot be readValueError: If the path is invalid
write_file(path: str, contents: str) -> None
Write content to a file asynchronously.
Parameters:
path(str): Path to the file to writecontents(str): Content to write to the file
Raises:
IOError: If the file cannot be writtenPermissionError: If write permission is deniedValueError: If the path is invalid
read_file_bytes(path: str) -> bytes
Read a file asynchronously and return its contents as bytes.
Parameters:
path(str): Path to the file to read
Returns:
bytes: File contents as raw bytes
Raises:
FileNotFoundError: If the file does not existIOError: If the file cannot be read
write_file_bytes(path: str, contents: bytes) -> None
Write bytes to a file asynchronously.
Parameters:
path(str): Path to the file to writecontents(bytes): Bytes to write to the file
Raises:
IOError: If the file cannot be writtenPermissionError: If write permission is denied
append_file(path: str, contents: str) -> None
Append content to a file asynchronously.
Parameters:
path(str): Path to the file to append tocontents(str): Content to append to the file
Raises:
IOError: If the file cannot be writtenPermissionError: If write permission is denied
File Handles
open(file: Union[str, bytes], mode: str = "r", ...) -> AsyncFile
Open a file asynchronously (aiofiles.open() compatible).
Parameters:
file(Union[str, bytes]): Path to the filemode(str): File mode (r, r+, w, w+, a, a+, rb, rb+, wb, wb+, ab, ab+)buffering(int): Buffer size (accepted for compatibility, not yet implemented)encoding(Optional[str]): Text encoding (accepted for compatibility, not yet implemented)errors(Optional[str]): Error handling (accepted for compatibility, not yet implemented)newline(Optional[str]): Newline handling (accepted for compatibility, not yet implemented)closefd(bool): Close file descriptor (accepted for compatibility, not yet implemented)opener(Optional[Any]): Custom opener (accepted for compatibility, not yet implemented)
Returns:
- Async context manager that yields an
AsyncFileinstance
Example:
async with open("file.txt", "r") as f:
content = await f.read()
AsyncFile Class
An async file handle for true async I/O operations.
Methods:
read(size: int = -1) -> Union[str, bytes]: Read from file (returns str for text mode, bytes for binary)write(data: Union[str, bytes]) -> int: Write to file, returns number of bytes writtenreadline(size: int = -1) -> Union[str, bytes]: Read a single linereadlines(hint: int = -1) -> List[Union[str, bytes]]: Read all linesseek(offset: int, whence: int = 0) -> int: Seek to position (0=start, 1=current, 2=end)tell() -> int: Get current file positionclose() -> None: Close the file (automatic on context exit)
Directory Operations
create_dir(path: str) -> None
Create a directory asynchronously. Parent directories must exist.
Raises:
FileExistsError: If the directory already existsIOError: If the directory cannot be created
create_dir_all(path: str) -> None
Create a directory and all parent directories asynchronously.
Raises:
IOError: If the directory cannot be created
remove_dir(path: str) -> None
Remove an empty directory asynchronously.
Raises:
FileNotFoundError: If the directory does not existIOError: If the directory is not empty or cannot be removed
remove_dir_all(path: str) -> None
Remove a directory and all its contents asynchronously.
Raises:
FileNotFoundError: If the directory does not existIOError: If the directory cannot be removed
list_dir(path: str) -> List[str]
List directory contents asynchronously.
Returns:
List[str]: List of file and directory names
Raises:
FileNotFoundError: If the directory does not existIOError: If the directory cannot be read
exists(path: str) -> bool
Check if a path exists asynchronously.
Returns:
bool: True if path exists, False otherwise
is_file(path: str) -> bool
Check if a path is a file asynchronously.
Returns:
bool: True if path is a file, False otherwise
Raises:
IOError: If the path does not exist
is_dir(path: str) -> bool
Check if a path is a directory asynchronously.
Returns:
bool: True if path is a directory, False otherwise
Raises:
IOError: If the path does not exist
walk_dir(path: str) -> List[Tuple[str, bool]]
Recursively walk a directory asynchronously.
Parameters:
path(str): Directory path to walk
Returns:
List[Tuple[str, bool]]: List of (path, is_file) tuples for all files and directories found
Raises:
FileNotFoundError: If the directory does not existIOError: If the directory cannot be read
File Metadata
stat(path: str) -> FileMetadata
Get file statistics asynchronously.
Returns:
FileMetadata: File metadata object with size, timestamps, and type information
Raises:
FileNotFoundError: If the path does not existIOError: If metadata cannot be retrieved
metadata(path: str) -> FileMetadata
Get file metadata asynchronously (alias for stat).
FileMetadata Class
File metadata structure (aiofiles.stat_result compatible).
Properties:
size(int): File size in bytesis_file(bool): True if path is a fileis_dir(bool): True if path is a directorymodified(float): Modification time as Unix timestampaccessed(float): Access time as Unix timestampcreated(float): Creation time as Unix timestamp
Path Operations
The rapfiles.ospath module provides synchronous path operations compatible with aiofiles.ospath:
exists(path) -> boolisfile(path) -> boolisdir(path) -> boolgetsize(path) -> intjoin(*paths) -> strnormpath(path) -> strabspath(path) -> strdirname(path) -> strbasename(path) -> strsplitext(path) -> Tuple[str, str]split(path) -> Tuple[str, str]
Benchmarks
This package passes the Fake Async Detector. Benchmarks are available in the rap-bench repository.
Run the detector yourself:
pip install rap-bench
rap-bench detect rapfiles
Documentation
Comprehensive documentation is available in the docs/ directory:
- Roadmap - Detailed development plans
- Build and Test - Local development setup
- Release Notes - Version history and changes
- Security - Security policy and reporting
Roadmap
See docs/ROADMAP.md for detailed development plans. Key goals include:
- Drop-in replacement for
aiofiles(Phase 1) - Comprehensive filesystem operations (directories, metadata, permissions)
- Advanced I/O patterns and zero-copy optimizations
- Filesystem traversal and watching capabilities
Related Projects
- rap-manifesto - Philosophy and guarantees
- rap-bench - Fake Async Detector CLI
- rapsqlite - True async SQLite
- rapcsv - Streaming async CSV
Current Status (v0.1.0)
Phase 1 Complete ✅:
- ✅ File handle operations (
AsyncFileclass withasync withsupport) - ✅ File operations:
read(),write(),readline(),readlines(),seek(),tell() - ✅ Binary file operations:
read_file_bytes(),write_file_bytes() - ✅ Append operations:
append_file() - ✅ Directory operations:
create_dir(),create_dir_all(),remove_dir(),remove_dir_all(),list_dir() - ✅ Path checking:
exists(),is_file(),is_dir() - ✅ Directory traversal:
walk_dir()for recursive directory walking - ✅ File metadata:
stat(),metadata(),FileMetadataclass - ✅ Path operations:
rapfiles.ospathmodule (aiofiles.ospath compatible) - ✅ aiofiles compatibility: Drop-in replacement for basic
aiofilesoperations - ✅ Comprehensive test suite: 34+ tests covering all features
- ✅ Type stubs: Complete
.pyifiles for IDE support - ✅ Type checking: Full mypy support with Python 3.8+ compatibility
- ✅ Code quality: Ruff formatted and linted, clippy checked
Known Limitations:
buffering,encoding,errors,newline,closefd,openerparameters accepted for API compatibility but not yet fully implemented- No file watching capabilities (planned for future phases)
- No advanced I/O patterns like zero-copy (planned for future phases)
Roadmap: See docs/ROADMAP.md for planned improvements. Phase 1 (aiofiles compatibility) is complete. Future phases will add advanced features and optimizations.
Contributing
Contributions are welcome! Please see our contributing guidelines (coming soon).
License
MIT
Changelog
See docs/PYPI_RELEASE_NOTES.md for version history and release notes.
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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rapfiles-0.1.0.tar.gz.
File metadata
- Download URL: rapfiles-0.1.0.tar.gz
- Upload date:
- Size: 51.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5e8d4ebc795791522f16b7fba2b710f8a5e895c59023d0a80d324c1ba6985412
|
|
| MD5 |
89b806e7b6c37eb9b0b5740295db4e0b
|
|
| BLAKE2b-256 |
bb245372e0324eee686ee61817c58b6c7624d2f5a0d6468693489dbf4e3598fe
|
File details
Details for the file rapfiles-0.1.0-cp313-cp313-win_arm64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp313-cp313-win_arm64.whl
- Upload date:
- Size: 596.1 kB
- Tags: CPython 3.13, Windows ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d4b8898578f33ff3696ffd4697e92145c2d872d9a83090ed7d7e83c4f35acf2
|
|
| MD5 |
85e964ec62abc28f3c4d64d97e85278a
|
|
| BLAKE2b-256 |
8ea2bfbdaa1eeeecbd4dbfa2c66213a44cc2d27fe4294059a76ccecda04c7d99
|
File details
Details for the file rapfiles-0.1.0-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 668.1 kB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdf7363cb62db0f15a320935c3a934f4f03bb4c197f62ecd6b36fb4eaf942e75
|
|
| MD5 |
e6f6fb53fe9263c86a8e34693f841689
|
|
| BLAKE2b-256 |
35143720f423d2ad389ab5d372799774c3d97e1d943757973b51fb8d0801e152
|
File details
Details for the file rapfiles-0.1.0-cp313-cp313-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp313-cp313-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 705.0 kB
- Tags: CPython 3.13, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e66bdb3c3097a67947bbece7d2be6cabdc950dde1be5590fc992a896d36e2af3
|
|
| MD5 |
62d12c124f4c4dd2e92e6f1eb2798a98
|
|
| BLAKE2b-256 |
3e485ed90bbd49d540cfd4e2d09310563fa0b873944142a517c37d625ec413a5
|
File details
Details for the file rapfiles-0.1.0-cp313-cp313-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp313-cp313-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 688.3 kB
- Tags: CPython 3.13, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7cd66281336be0675bada7abc8e422bb19d9cb74f1307245525fda9997c1861c
|
|
| MD5 |
0d965de83b7682ed94aa31410fa79ce6
|
|
| BLAKE2b-256 |
888735f418f5c0a01ac7727478a2240b87d2bcadd38e411bec4819f1ee47a388
|
File details
Details for the file rapfiles-0.1.0-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 648.1 kB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
564b420353919ee56b28ae8f3784daf8b86395716d5a5bf7be3ad566c12fb710
|
|
| MD5 |
c33e129cdaec838638df0c21a5551bb4
|
|
| BLAKE2b-256 |
b6652be65768737efc3f140b336efb622a80d799a80ebdbd946bdad5099af2d4
|
File details
Details for the file rapfiles-0.1.0-cp313-cp313-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp313-cp313-macosx_10_12_x86_64.whl
- Upload date:
- Size: 655.7 kB
- Tags: CPython 3.13, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
27c226651140dcd67f822331dc64b860650b44c5e3962f6d0822b17fd9441212
|
|
| MD5 |
0c5f536faf2d2cc2e415bb0558147457
|
|
| BLAKE2b-256 |
d25d38abbeecd1df834313e631b7b1bdcca5920999ace291c8a69b2ef9f373d5
|
File details
Details for the file rapfiles-0.1.0-cp312-cp312-win_arm64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp312-cp312-win_arm64.whl
- Upload date:
- Size: 598.6 kB
- Tags: CPython 3.12, Windows ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ba73a3e8103c55607643b22b358a881175f7ca7551ac408a751c415d96f037c
|
|
| MD5 |
cd9e37315d4d47ff4105a29f744ad450
|
|
| BLAKE2b-256 |
eba46bd4ba07d90a8e62d8b3e6f9b24041fb03131b0064937d9b587519a18823
|
File details
Details for the file rapfiles-0.1.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 669.3 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7cea75ffa814c2fec002714fec03f927109ba2d5c073423afa82157e307f8f71
|
|
| MD5 |
a61d44418763af114883c9032b27cc97
|
|
| BLAKE2b-256 |
2292a209445d820d25f7c78838ea2dd78a70f7c5799b3d89969d1f45ee2ca506
|
File details
Details for the file rapfiles-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 704.1 kB
- Tags: CPython 3.12, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4f4ca1bcc2738778c478106646f56952e8930f3150030719e2fcb4f276b0d03
|
|
| MD5 |
64ad340bd0b7b30b685c4339f5db8d7c
|
|
| BLAKE2b-256 |
9c662f2b9a08d0f57c7ff1b4d2ae71c28c53436a5fd15104b732427cbc037349
|
File details
Details for the file rapfiles-0.1.0-cp312-cp312-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp312-cp312-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 688.6 kB
- Tags: CPython 3.12, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c75b2c3ae986502ebae266c2903b1a6cdd7d42405a26a23505feec9ff6338aa
|
|
| MD5 |
cec642d0eec3fa18e5ba1d060b1b679a
|
|
| BLAKE2b-256 |
1533149968c12553900f68178d7fcdbe95eb4b2d20f601dc7c3cd690393ae446
|
File details
Details for the file rapfiles-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 650.0 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c25bd5578585895f830a1cc0da689f27c65970947d4eabd6826947b8cd7002bb
|
|
| MD5 |
e1034aa6b10e30b934eda126f91891e1
|
|
| BLAKE2b-256 |
6fd45e22d5b25cfe63a9e01d4d7d6550e664e81894b143c86f8c7b1b731ee115
|
File details
Details for the file rapfiles-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl
- Upload date:
- Size: 658.9 kB
- Tags: CPython 3.12, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a3c53871c8c3612a84fc4ce83b5b9a8c992a61a81aeecb23b853c15746d08a2
|
|
| MD5 |
07a306ae580be250f511ab2175225d37
|
|
| BLAKE2b-256 |
f44e5f60cb92cf582fa1915ffe65281fac556d9f4f1d4e161244fe4d331d92cb
|
File details
Details for the file rapfiles-0.1.0-cp311-cp311-win_arm64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp311-cp311-win_arm64.whl
- Upload date:
- Size: 600.4 kB
- Tags: CPython 3.11, Windows ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a611f1c88e437cecb2ced5fec8416507dd2ce1dcee1db6dd245199ae66355327
|
|
| MD5 |
e95424973f8394b49c30594c3a4bf78a
|
|
| BLAKE2b-256 |
8ad7f5b56cd19645c1f63ad2aab778f9c31175f49356b45388df7bc7aa1b60d9
|
File details
Details for the file rapfiles-0.1.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 670.1 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56343589a4306989c53ceae875d064b6e49e5895cc37fc4e05ea1cdca5221a40
|
|
| MD5 |
c6595de834fb15ec0ff78e5bfa95d6aa
|
|
| BLAKE2b-256 |
50daea0f9d6b5d355fcd9cd9610ae5d8c4912408be89c585d525ea256bb8fa3c
|
File details
Details for the file rapfiles-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 707.0 kB
- Tags: CPython 3.11, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c74aeca1626802fcbcf17f60860f5cd9d64f5d82c13f7a0704a51755785fd97
|
|
| MD5 |
5b3d74eb5d373057131834b8c77c128d
|
|
| BLAKE2b-256 |
6723a19ddefdb5107a9a775cb60152f1a50101bd0bbd677d9c895a67fd0a55ad
|
File details
Details for the file rapfiles-0.1.0-cp311-cp311-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp311-cp311-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 691.0 kB
- Tags: CPython 3.11, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d9987bff5a154adc81850d72ea3add8a9a56c960d79c35cb1792deef6ba33bb
|
|
| MD5 |
102f96eded6a71a083832cf02a04ab6e
|
|
| BLAKE2b-256 |
1b26ca977563591103e692ee6e07c9311afd57dfc65877490e89508e3e656ee7
|
File details
Details for the file rapfiles-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 652.3 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65ea1fb5f2b585ab241066338e7e11997f11bf727e286b8037b14f3928121025
|
|
| MD5 |
2c2f1570f0c26f3ecec5dc5a1da9162f
|
|
| BLAKE2b-256 |
1ab6ba095b88863268e26718fb46f68c7519d0582e806a12567f82b7c0e8c117
|
File details
Details for the file rapfiles-0.1.0-cp311-cp311-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp311-cp311-macosx_10_12_x86_64.whl
- Upload date:
- Size: 659.8 kB
- Tags: CPython 3.11, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38ea6e74601bc80bca3d360db9caf057b2e358aef81c1a9aa87ca1f79c19dee5
|
|
| MD5 |
8dec10547c827edf7a8054ac1bbc8017
|
|
| BLAKE2b-256 |
d0750f768f96e477d3ae66aa97c0ad13f8623c504f39e1cea9334638ee8a134f
|
File details
Details for the file rapfiles-0.1.0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 669.5 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d1e006293e55742eae103bfcd2afa7340b15d1d35a0f4392ca4e09ba2988167
|
|
| MD5 |
0cf8f284b95b7b2f0c49bd1528ad0e50
|
|
| BLAKE2b-256 |
14700a29a84367e53213ea571fec8a976375312997115bd90408d03f5aa6d017
|
File details
Details for the file rapfiles-0.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp310-cp310-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 705.2 kB
- Tags: CPython 3.10, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8595e685d611ce790c49be113431a179326120c1c5581c98fb69e99ff79a6327
|
|
| MD5 |
dbcf7b4907f6b9027146ca4199db2fba
|
|
| BLAKE2b-256 |
09681966b2909d6f37b4643535651fb5329e46d2fa6eddacafadeab65c8c22f6
|
File details
Details for the file rapfiles-0.1.0-cp310-cp310-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp310-cp310-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 692.5 kB
- Tags: CPython 3.10, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4683c879da22bb8d6ad9579044b585f24f67feaa73d9b0528768ea04dd0e4b86
|
|
| MD5 |
19b9e7b7e50a8438b9373023ad1762a3
|
|
| BLAKE2b-256 |
df430306bb7eee6cac5a997f52f78d9e32dcb7e5e5bf9300764425d492e04863
|
File details
Details for the file rapfiles-0.1.0-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 653.7 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c4e2f63683a149f6c999dd762d961c81aee294dde4c3fb37b791d795a9135420
|
|
| MD5 |
e091913d34e6ead94e74149df4bc92da
|
|
| BLAKE2b-256 |
00a745fe14cffa95ad497e542a3e2e2151ca462e65df486bef33e7f9ee70d8af
|
File details
Details for the file rapfiles-0.1.0-cp310-cp310-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp310-cp310-macosx_10_12_x86_64.whl
- Upload date:
- Size: 659.8 kB
- Tags: CPython 3.10, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae65158d822a3883794ece0e547aa23621c189247be308486213cdba17ad5c24
|
|
| MD5 |
dc747400fffbbe8505e184f00a401fe1
|
|
| BLAKE2b-256 |
fecdda470b720df8f533e75937f1518790dc86aff6da8ec2c7be3718d7bbd459
|
File details
Details for the file rapfiles-0.1.0-cp39-cp39-win_amd64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 671.3 kB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a37f2036b36d89a0de962fe3f24f21b20bbe60758bc5d7e56493fd0de3fde3fc
|
|
| MD5 |
b3d29405888af1448b379dbf92adf197
|
|
| BLAKE2b-256 |
f451537a65b31737eded332139c4bc804c7c185d1ce76b58acfd126441610c98
|
File details
Details for the file rapfiles-0.1.0-cp39-cp39-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp39-cp39-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 706.8 kB
- Tags: CPython 3.9, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2355297eb7d74a20b88447e0c2621cc4027ae2b3c0e4f42a1d2d9cdf549602e3
|
|
| MD5 |
02ea842899386b1d57bac5ceadff4504
|
|
| BLAKE2b-256 |
553bb97926baa1ad72f45e5a3163faad36dc7c67bb9e8513ea0eca208290c776
|
File details
Details for the file rapfiles-0.1.0-cp39-cp39-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp39-cp39-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 694.9 kB
- Tags: CPython 3.9, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a75025647bb31929bd197894dc3fbbdb5ebab6dff7a36f81730c14b191b3eb77
|
|
| MD5 |
3d2781bfcd05b2f3544e2589a2593c12
|
|
| BLAKE2b-256 |
7ec171176c6fb1f5cfabfdb7c3cdb887a29987813c060f08544aabbe887c0138
|
File details
Details for the file rapfiles-0.1.0-cp39-cp39-macosx_11_0_arm64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp39-cp39-macosx_11_0_arm64.whl
- Upload date:
- Size: 655.8 kB
- Tags: CPython 3.9, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff983e1e8d21d5c8188ca824e488d2f09054a879153e939cc0bba22a11fcf15a
|
|
| MD5 |
cba71a10de7cdc6c522e56a2955f0cea
|
|
| BLAKE2b-256 |
bd4b289357f06095c33f8b6a0e713c97e3db79398e255eaef246e406e6b4233f
|
File details
Details for the file rapfiles-0.1.0-cp39-cp39-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp39-cp39-macosx_10_12_x86_64.whl
- Upload date:
- Size: 663.3 kB
- Tags: CPython 3.9, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
edf2fdf380b5dfa2dda6bd855d3314ab4df5dff871be756dbb3c03885430bf47
|
|
| MD5 |
87af864a34966ef6ba03c2c3662a2a8a
|
|
| BLAKE2b-256 |
a19825b2f5f6481148f5d8f13964deca991923a8f1974d13dee6646417675255
|
File details
Details for the file rapfiles-0.1.0-cp38-cp38-win_amd64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp38-cp38-win_amd64.whl
- Upload date:
- Size: 672.7 kB
- Tags: CPython 3.8, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1424fbb9b1ab696fca1351ccc05b8d2a3c224271aadcdab3a083042ee4627081
|
|
| MD5 |
609f24974b828f3430eddff7bb2fac58
|
|
| BLAKE2b-256 |
a3ac29c1d243fe9ce7325591c33394fd2841037c7ed719f40e84b6ad9831c34a
|
File details
Details for the file rapfiles-0.1.0-cp38-cp38-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp38-cp38-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 709.4 kB
- Tags: CPython 3.8, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
501eac440b50d6100cb5906964dbd9ba456787c3a5651e50b058143efc6ea9b3
|
|
| MD5 |
05d449115308bfd3dcc393a3edff01f6
|
|
| BLAKE2b-256 |
714d56c3dd4b59d52afb703bb032fb0a97eef15cbab64d81946b85f1cc188eaa
|
File details
Details for the file rapfiles-0.1.0-cp38-cp38-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp38-cp38-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 694.9 kB
- Tags: CPython 3.8, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d15c2d7d0a096b6de764846ece56732ab5dc69f68573b1ed422995aa94f143d
|
|
| MD5 |
b3806cf48c27e521a0b53fcaf894378d
|
|
| BLAKE2b-256 |
ed711f62e20c54cf1c2bb980203ed31e708850a665077d69739c13993f1e9646
|
File details
Details for the file rapfiles-0.1.0-cp38-cp38-macosx_11_0_arm64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp38-cp38-macosx_11_0_arm64.whl
- Upload date:
- Size: 655.7 kB
- Tags: CPython 3.8, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a576ac4719f6d34c155e82e5be1ae579fe2396c7f2211350f9f0253fd471efec
|
|
| MD5 |
3a8874481b6fb44ca6b68e7e8a2a3cfb
|
|
| BLAKE2b-256 |
baaa9fe2a96fec4c6fb0473c91826f6b01a7921301b30ba995eabb9545039fd4
|
File details
Details for the file rapfiles-0.1.0-cp38-cp38-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rapfiles-0.1.0-cp38-cp38-macosx_10_12_x86_64.whl
- Upload date:
- Size: 663.1 kB
- Tags: CPython 3.8, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e6b80cdfb4edd42b512859c94144aaaa18cda0f88e01205e605bf95e33797be0
|
|
| MD5 |
b946c64ccab883a33b2d0f81e0fb1d66
|
|
| BLAKE2b-256 |
a029bcfe32238aca1b1ee07647399480db774c1cba272c6d603b780a2643e8fa
|