Skip to main content

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.

PyPI version Downloads Python 3.8+ License: MIT

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.ospath module)
  • 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 exist
  • IOError: If the file cannot be read
  • ValueError: 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 write
  • contents (str): Content to write to the file

Raises:

  • IOError: If the file cannot be written
  • PermissionError: If write permission is denied
  • ValueError: 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 exist
  • IOError: 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 write
  • contents (bytes): Bytes to write to the file

Raises:

  • IOError: If the file cannot be written
  • PermissionError: 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 to
  • contents (str): Content to append to the file

Raises:

  • IOError: If the file cannot be written
  • PermissionError: 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 file
  • mode (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 AsyncFile instance

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 written
  • readline(size: int = -1) -> Union[str, bytes]: Read a single line
  • readlines(hint: int = -1) -> List[Union[str, bytes]]: Read all lines
  • seek(offset: int, whence: int = 0) -> int: Seek to position (0=start, 1=current, 2=end)
  • tell() -> int: Get current file position
  • close() -> 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 exists
  • IOError: 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 exist
  • IOError: 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 exist
  • IOError: 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 exist
  • IOError: 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 exist
  • IOError: 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 exist
  • IOError: 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 bytes
  • is_file (bool): True if path is a file
  • is_dir (bool): True if path is a directory
  • modified (float): Modification time as Unix timestamp
  • accessed (float): Access time as Unix timestamp
  • created (float): Creation time as Unix timestamp

Path Operations

The rapfiles.ospath module provides synchronous path operations compatible with aiofiles.ospath:

  • exists(path) -> bool
  • isfile(path) -> bool
  • isdir(path) -> bool
  • getsize(path) -> int
  • join(*paths) -> str
  • normpath(path) -> str
  • abspath(path) -> str
  • dirname(path) -> str
  • basename(path) -> str
  • splitext(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

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

Current Status (v0.1.0)

Phase 1 Complete ✅:

  • ✅ File handle operations (AsyncFile class with async with support)
  • ✅ 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(), FileMetadata class
  • ✅ Path operations: rapfiles.ospath module (aiofiles.ospath compatible)
  • ✅ aiofiles compatibility: Drop-in replacement for basic aiofiles operations
  • ✅ Comprehensive test suite: 34+ tests covering all features
  • ✅ Type stubs: Complete .pyi files 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, opener parameters 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

rapfiles-0.1.0.tar.gz (51.8 kB view details)

Uploaded Source

Built Distributions

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

rapfiles-0.1.0-cp313-cp313-win_arm64.whl (596.1 kB view details)

Uploaded CPython 3.13Windows ARM64

rapfiles-0.1.0-cp313-cp313-win_amd64.whl (668.1 kB view details)

Uploaded CPython 3.13Windows x86-64

rapfiles-0.1.0-cp313-cp313-manylinux_2_28_x86_64.whl (705.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

rapfiles-0.1.0-cp313-cp313-manylinux_2_28_aarch64.whl (688.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

rapfiles-0.1.0-cp313-cp313-macosx_11_0_arm64.whl (648.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rapfiles-0.1.0-cp313-cp313-macosx_10_12_x86_64.whl (655.7 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

rapfiles-0.1.0-cp312-cp312-win_arm64.whl (598.6 kB view details)

Uploaded CPython 3.12Windows ARM64

rapfiles-0.1.0-cp312-cp312-win_amd64.whl (669.3 kB view details)

Uploaded CPython 3.12Windows x86-64

rapfiles-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl (704.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

rapfiles-0.1.0-cp312-cp312-manylinux_2_28_aarch64.whl (688.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

rapfiles-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (650.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rapfiles-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl (658.9 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

rapfiles-0.1.0-cp311-cp311-win_arm64.whl (600.4 kB view details)

Uploaded CPython 3.11Windows ARM64

rapfiles-0.1.0-cp311-cp311-win_amd64.whl (670.1 kB view details)

Uploaded CPython 3.11Windows x86-64

rapfiles-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl (707.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

rapfiles-0.1.0-cp311-cp311-manylinux_2_28_aarch64.whl (691.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

rapfiles-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (652.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rapfiles-0.1.0-cp311-cp311-macosx_10_12_x86_64.whl (659.8 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

rapfiles-0.1.0-cp310-cp310-win_amd64.whl (669.5 kB view details)

Uploaded CPython 3.10Windows x86-64

rapfiles-0.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (705.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

rapfiles-0.1.0-cp310-cp310-manylinux_2_28_aarch64.whl (692.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

rapfiles-0.1.0-cp310-cp310-macosx_11_0_arm64.whl (653.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

rapfiles-0.1.0-cp310-cp310-macosx_10_12_x86_64.whl (659.8 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

rapfiles-0.1.0-cp39-cp39-win_amd64.whl (671.3 kB view details)

Uploaded CPython 3.9Windows x86-64

rapfiles-0.1.0-cp39-cp39-manylinux_2_28_x86_64.whl (706.8 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

rapfiles-0.1.0-cp39-cp39-manylinux_2_28_aarch64.whl (694.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

rapfiles-0.1.0-cp39-cp39-macosx_11_0_arm64.whl (655.8 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

rapfiles-0.1.0-cp39-cp39-macosx_10_12_x86_64.whl (663.3 kB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

rapfiles-0.1.0-cp38-cp38-win_amd64.whl (672.7 kB view details)

Uploaded CPython 3.8Windows x86-64

rapfiles-0.1.0-cp38-cp38-manylinux_2_28_x86_64.whl (709.4 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ x86-64

rapfiles-0.1.0-cp38-cp38-manylinux_2_28_aarch64.whl (694.9 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ ARM64

rapfiles-0.1.0-cp38-cp38-macosx_11_0_arm64.whl (655.7 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

rapfiles-0.1.0-cp38-cp38-macosx_10_12_x86_64.whl (663.1 kB view details)

Uploaded CPython 3.8macOS 10.12+ x86-64

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

Hashes for rapfiles-0.1.0.tar.gz
Algorithm Hash digest
SHA256 5e8d4ebc795791522f16b7fba2b710f8a5e895c59023d0a80d324c1ba6985412
MD5 89b806e7b6c37eb9b0b5740295db4e0b
BLAKE2b-256 bb245372e0324eee686ee61817c58b6c7624d2f5a0d6468693489dbf4e3598fe

See more details on using hashes here.

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

Hashes for rapfiles-0.1.0-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 3d4b8898578f33ff3696ffd4697e92145c2d872d9a83090ed7d7e83c4f35acf2
MD5 85e964ec62abc28f3c4d64d97e85278a
BLAKE2b-256 8ea2bfbdaa1eeeecbd4dbfa2c66213a44cc2d27fe4294059a76ccecda04c7d99

See more details on using hashes here.

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

Hashes for rapfiles-0.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 bdf7363cb62db0f15a320935c3a934f4f03bb4c197f62ecd6b36fb4eaf942e75
MD5 e6f6fb53fe9263c86a8e34693f841689
BLAKE2b-256 35143720f423d2ad389ab5d372799774c3d97e1d943757973b51fb8d0801e152

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e66bdb3c3097a67947bbece7d2be6cabdc950dde1be5590fc992a896d36e2af3
MD5 62d12c124f4c4dd2e92e6f1eb2798a98
BLAKE2b-256 3e485ed90bbd49d540cfd4e2d09310563fa0b873944142a517c37d625ec413a5

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7cd66281336be0675bada7abc8e422bb19d9cb74f1307245525fda9997c1861c
MD5 0d965de83b7682ed94aa31410fa79ce6
BLAKE2b-256 888735f418f5c0a01ac7727478a2240b87d2bcadd38e411bec4819f1ee47a388

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 564b420353919ee56b28ae8f3784daf8b86395716d5a5bf7be3ad566c12fb710
MD5 c33e129cdaec838638df0c21a5551bb4
BLAKE2b-256 b6652be65768737efc3f140b336efb622a80d799a80ebdbd946bdad5099af2d4

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 27c226651140dcd67f822331dc64b860650b44c5e3962f6d0822b17fd9441212
MD5 0c5f536faf2d2cc2e415bb0558147457
BLAKE2b-256 d25d38abbeecd1df834313e631b7b1bdcca5920999ace291c8a69b2ef9f373d5

See more details on using hashes here.

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

Hashes for rapfiles-0.1.0-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 4ba73a3e8103c55607643b22b358a881175f7ca7551ac408a751c415d96f037c
MD5 cd9e37315d4d47ff4105a29f744ad450
BLAKE2b-256 eba46bd4ba07d90a8e62d8b3e6f9b24041fb03131b0064937d9b587519a18823

See more details on using hashes here.

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

Hashes for rapfiles-0.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7cea75ffa814c2fec002714fec03f927109ba2d5c073423afa82157e307f8f71
MD5 a61d44418763af114883c9032b27cc97
BLAKE2b-256 2292a209445d820d25f7c78838ea2dd78a70f7c5799b3d89969d1f45ee2ca506

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b4f4ca1bcc2738778c478106646f56952e8930f3150030719e2fcb4f276b0d03
MD5 64ad340bd0b7b30b685c4339f5db8d7c
BLAKE2b-256 9c662f2b9a08d0f57c7ff1b4d2ae71c28c53436a5fd15104b732427cbc037349

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7c75b2c3ae986502ebae266c2903b1a6cdd7d42405a26a23505feec9ff6338aa
MD5 cec642d0eec3fa18e5ba1d060b1b679a
BLAKE2b-256 1533149968c12553900f68178d7fcdbe95eb4b2d20f601dc7c3cd690393ae446

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c25bd5578585895f830a1cc0da689f27c65970947d4eabd6826947b8cd7002bb
MD5 e1034aa6b10e30b934eda126f91891e1
BLAKE2b-256 6fd45e22d5b25cfe63a9e01d4d7d6550e664e81894b143c86f8c7b1b731ee115

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1a3c53871c8c3612a84fc4ce83b5b9a8c992a61a81aeecb23b853c15746d08a2
MD5 07a306ae580be250f511ab2175225d37
BLAKE2b-256 f44e5f60cb92cf582fa1915ffe65281fac556d9f4f1d4e161244fe4d331d92cb

See more details on using hashes here.

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

Hashes for rapfiles-0.1.0-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 a611f1c88e437cecb2ced5fec8416507dd2ce1dcee1db6dd245199ae66355327
MD5 e95424973f8394b49c30594c3a4bf78a
BLAKE2b-256 8ad7f5b56cd19645c1f63ad2aab778f9c31175f49356b45388df7bc7aa1b60d9

See more details on using hashes here.

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

Hashes for rapfiles-0.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 56343589a4306989c53ceae875d064b6e49e5895cc37fc4e05ea1cdca5221a40
MD5 c6595de834fb15ec0ff78e5bfa95d6aa
BLAKE2b-256 50daea0f9d6b5d355fcd9cd9610ae5d8c4912408be89c585d525ea256bb8fa3c

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8c74aeca1626802fcbcf17f60860f5cd9d64f5d82c13f7a0704a51755785fd97
MD5 5b3d74eb5d373057131834b8c77c128d
BLAKE2b-256 6723a19ddefdb5107a9a775cb60152f1a50101bd0bbd677d9c895a67fd0a55ad

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7d9987bff5a154adc81850d72ea3add8a9a56c960d79c35cb1792deef6ba33bb
MD5 102f96eded6a71a083832cf02a04ab6e
BLAKE2b-256 1b26ca977563591103e692ee6e07c9311afd57dfc65877490e89508e3e656ee7

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 65ea1fb5f2b585ab241066338e7e11997f11bf727e286b8037b14f3928121025
MD5 2c2f1570f0c26f3ecec5dc5a1da9162f
BLAKE2b-256 1ab6ba095b88863268e26718fb46f68c7519d0582e806a12567f82b7c0e8c117

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 38ea6e74601bc80bca3d360db9caf057b2e358aef81c1a9aa87ca1f79c19dee5
MD5 8dec10547c827edf7a8054ac1bbc8017
BLAKE2b-256 d0750f768f96e477d3ae66aa97c0ad13f8623c504f39e1cea9334638ee8a134f

See more details on using hashes here.

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

Hashes for rapfiles-0.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 3d1e006293e55742eae103bfcd2afa7340b15d1d35a0f4392ca4e09ba2988167
MD5 0cf8f284b95b7b2f0c49bd1528ad0e50
BLAKE2b-256 14700a29a84367e53213ea571fec8a976375312997115bd90408d03f5aa6d017

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8595e685d611ce790c49be113431a179326120c1c5581c98fb69e99ff79a6327
MD5 dbcf7b4907f6b9027146ca4199db2fba
BLAKE2b-256 09681966b2909d6f37b4643535651fb5329e46d2fa6eddacafadeab65c8c22f6

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4683c879da22bb8d6ad9579044b585f24f67feaa73d9b0528768ea04dd0e4b86
MD5 19b9e7b7e50a8438b9373023ad1762a3
BLAKE2b-256 df430306bb7eee6cac5a997f52f78d9e32dcb7e5e5bf9300764425d492e04863

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c4e2f63683a149f6c999dd762d961c81aee294dde4c3fb37b791d795a9135420
MD5 e091913d34e6ead94e74149df4bc92da
BLAKE2b-256 00a745fe14cffa95ad497e542a3e2e2151ca462e65df486bef33e7f9ee70d8af

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ae65158d822a3883794ece0e547aa23621c189247be308486213cdba17ad5c24
MD5 dc747400fffbbe8505e184f00a401fe1
BLAKE2b-256 fecdda470b720df8f533e75937f1518790dc86aff6da8ec2c7be3718d7bbd459

See more details on using hashes here.

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

Hashes for rapfiles-0.1.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 a37f2036b36d89a0de962fe3f24f21b20bbe60758bc5d7e56493fd0de3fde3fc
MD5 b3d29405888af1448b379dbf92adf197
BLAKE2b-256 f451537a65b31737eded332139c4bc804c7c185d1ce76b58acfd126441610c98

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2355297eb7d74a20b88447e0c2621cc4027ae2b3c0e4f42a1d2d9cdf549602e3
MD5 02ea842899386b1d57bac5ceadff4504
BLAKE2b-256 553bb97926baa1ad72f45e5a3163faad36dc7c67bb9e8513ea0eca208290c776

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp39-cp39-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a75025647bb31929bd197894dc3fbbdb5ebab6dff7a36f81730c14b191b3eb77
MD5 3d2781bfcd05b2f3544e2589a2593c12
BLAKE2b-256 7ec171176c6fb1f5cfabfdb7c3cdb887a29987813c060f08544aabbe887c0138

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ff983e1e8d21d5c8188ca824e488d2f09054a879153e939cc0bba22a11fcf15a
MD5 cba71a10de7cdc6c522e56a2955f0cea
BLAKE2b-256 bd4b289357f06095c33f8b6a0e713c97e3db79398e255eaef246e406e6b4233f

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 edf2fdf380b5dfa2dda6bd855d3314ab4df5dff871be756dbb3c03885430bf47
MD5 87af864a34966ef6ba03c2c3662a2a8a
BLAKE2b-256 a19825b2f5f6481148f5d8f13964deca991923a8f1974d13dee6646417675255

See more details on using hashes here.

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

Hashes for rapfiles-0.1.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 1424fbb9b1ab696fca1351ccc05b8d2a3c224271aadcdab3a083042ee4627081
MD5 609f24974b828f3430eddff7bb2fac58
BLAKE2b-256 a3ac29c1d243fe9ce7325591c33394fd2841037c7ed719f40e84b6ad9831c34a

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp38-cp38-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 501eac440b50d6100cb5906964dbd9ba456787c3a5651e50b058143efc6ea9b3
MD5 05d449115308bfd3dcc393a3edff01f6
BLAKE2b-256 714d56c3dd4b59d52afb703bb032fb0a97eef15cbab64d81946b85f1cc188eaa

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp38-cp38-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7d15c2d7d0a096b6de764846ece56732ab5dc69f68573b1ed422995aa94f143d
MD5 b3806cf48c27e521a0b53fcaf894378d
BLAKE2b-256 ed711f62e20c54cf1c2bb980203ed31e708850a665077d69739c13993f1e9646

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a576ac4719f6d34c155e82e5be1ae579fe2396c7f2211350f9f0253fd471efec
MD5 3a8874481b6fb44ca6b68e7e8a2a3cfb
BLAKE2b-256 baaa9fe2a96fec4c6fb0473c91826f6b01a7921301b30ba995eabb9545039fd4

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.0-cp38-cp38-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapfiles-0.1.0-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e6b80cdfb4edd42b512859c94144aaaa18cda0f88e01205e605bf95e33797be0
MD5 b946c64ccab883a33b2d0f81e0fb1d66
BLAKE2b-256 a029bcfe32238aca1b1ee07647399480db774c1cba272c6d603b780a2643e8fa

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