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.1.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.1-cp313-cp313-win_arm64.whl (596.7 kB view details)

Uploaded CPython 3.13Windows ARM64

rapfiles-0.1.1-cp313-cp313-win_amd64.whl (667.1 kB view details)

Uploaded CPython 3.13Windows x86-64

rapfiles-0.1.1-cp313-cp313-manylinux_2_28_x86_64.whl (704.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

rapfiles-0.1.1-cp313-cp313-manylinux_2_28_aarch64.whl (688.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

rapfiles-0.1.1-cp313-cp313-macosx_10_12_x86_64.whl (655.8 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

rapfiles-0.1.1-cp312-cp312-win_arm64.whl (599.4 kB view details)

Uploaded CPython 3.12Windows ARM64

rapfiles-0.1.1-cp312-cp312-win_amd64.whl (668.2 kB view details)

Uploaded CPython 3.12Windows x86-64

rapfiles-0.1.1-cp312-cp312-manylinux_2_28_x86_64.whl (703.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

rapfiles-0.1.1-cp312-cp312-manylinux_2_28_aarch64.whl (688.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

rapfiles-0.1.1-cp312-cp312-macosx_11_0_arm64.whl (649.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.12+ x86-64

rapfiles-0.1.1-cp311-cp311-win_arm64.whl (601.3 kB view details)

Uploaded CPython 3.11Windows ARM64

rapfiles-0.1.1-cp311-cp311-win_amd64.whl (669.4 kB view details)

Uploaded CPython 3.11Windows x86-64

rapfiles-0.1.1-cp311-cp311-manylinux_2_28_x86_64.whl (707.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

rapfiles-0.1.1-cp311-cp311-manylinux_2_28_aarch64.whl (691.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

rapfiles-0.1.1-cp311-cp311-macosx_11_0_arm64.whl (652.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rapfiles-0.1.1-cp311-cp311-macosx_10_12_x86_64.whl (659.6 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

rapfiles-0.1.1-cp310-cp310-win_amd64.whl (668.8 kB view details)

Uploaded CPython 3.10Windows x86-64

rapfiles-0.1.1-cp310-cp310-manylinux_2_28_x86_64.whl (705.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.10macOS 11.0+ ARM64

rapfiles-0.1.1-cp310-cp310-macosx_10_12_x86_64.whl (659.5 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

rapfiles-0.1.1-cp39-cp39-win_amd64.whl (670.6 kB view details)

Uploaded CPython 3.9Windows x86-64

rapfiles-0.1.1-cp39-cp39-manylinux_2_28_x86_64.whl (706.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

rapfiles-0.1.1-cp39-cp39-manylinux_2_28_aarch64.whl (695.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

rapfiles-0.1.1-cp39-cp39-macosx_11_0_arm64.whl (655.7 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

rapfiles-0.1.1-cp39-cp39-macosx_10_12_x86_64.whl (663.0 kB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

rapfiles-0.1.1-cp38-cp38-win_amd64.whl (671.9 kB view details)

Uploaded CPython 3.8Windows x86-64

rapfiles-0.1.1-cp38-cp38-manylinux_2_28_x86_64.whl (709.3 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.8manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.8macOS 11.0+ ARM64

rapfiles-0.1.1-cp38-cp38-macosx_10_12_x86_64.whl (662.9 kB view details)

Uploaded CPython 3.8macOS 10.12+ x86-64

File details

Details for the file rapfiles-0.1.1.tar.gz.

File metadata

  • Download URL: rapfiles-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 317898ebcf15c096e43ae3ac0a9a37dd2987e43960ecaa80c6391d3e6af1c90c
MD5 e9a66c3a1a0c53a4bf411740e3bf3186
BLAKE2b-256 86e1c3fb1eeabcc6b06b72b7f2560e0fa85ae34ed16fb96b2a6eed5603d26968

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.1-cp313-cp313-win_arm64.whl.

File metadata

  • Download URL: rapfiles-0.1.1-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 596.7 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.1-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 6fcd355a034689891d325ce0c5ead491dbe120f20dcb9029c7326fad5a42bd8a
MD5 af246724ab29bef3106fceb862026a2a
BLAKE2b-256 d044c814026edf9bee9c3d8d63183526abac17b341fdb6c085aa1c7e3578d40e

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: rapfiles-0.1.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 667.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.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 211d53271a07e297812081575eb884f7bcab5223175887833f97427c77c2f1e1
MD5 a5d7168765803c00e0a717cfa84d500b
BLAKE2b-256 46c4b5b770a14d0fe73d2299481b7376b2eda475855701438fb39b012ce46d29

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 518bfe0b20d702a974f663d0eae262c701707af434352003d445937e1e621e59
MD5 e2ebacb3d759b14b6e573f677cfcabd3
BLAKE2b-256 b12ce6dabcd596481cce93f2c033a45399094cd1c0ea16863d150b99963ed035

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 daf6e3687a72ff1c27c279dcbe4f4c427f8cd52fe3378cfaae1aff7e285ad687
MD5 6c5e501cbbb144a96332d9bc46916c69
BLAKE2b-256 49efe6437871a420eddcec671032e4234ad24f3779866236c416297482451c99

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8a5522c4b0e01ec8102f3e542c0ec1760712cfaac530fffb9e59fe7f3a9f9b93
MD5 55e582d2c5d380a91cabdbbbbb3c1350
BLAKE2b-256 0a051ad767dd5a1f67d04ad1d600a9edbcc584a315dc414298783732c1fa5013

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 371eef20cd18cfbf16f18892af7c066aa9ffbcf0fba6174578c7a1c187aa18ef
MD5 3e7b6d5521aa57772d7e6ab7dba57c98
BLAKE2b-256 53e225b4758a8d300280178228cb0fdab160bd1272d6ddcf052fdc1db96135ba

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.1-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: rapfiles-0.1.1-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 599.4 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.1-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 bfa48760472b3708712f6cb2c167a77ffed4f8ca90531cc6d1815bc60882b249
MD5 ff29bb5e52e5cebe621c7b42860cc51f
BLAKE2b-256 bcce4427b4f801944e5b145cc52218f8e7dfae7b6410e9f30f2aa09ebbf8237e

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: rapfiles-0.1.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 668.2 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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 9bc26c1f5d1ad060ea9a7f9e82daa2e415ccccdd5cb78f73871d749a3f7746aa
MD5 4d90a2e6fc3e842b7b8c897f59d90726
BLAKE2b-256 25c3a3b28c089c7db86b683ebb9b267f3bb5e6f93dcfffa1defc639b434c7865

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b20ad3e5fdee330b4f3e95330d58b0194999c39b5d27ac6ff763f2dee434f985
MD5 eb883a36da20352975fcf8cc44341690
BLAKE2b-256 0140be30cd4db1343a6cbfb0fcb2906f7ff5900abb7436f8f6b443cb65f32aa2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b22d0a588f294528a7dfaa96549a9a51b4a00cb7d6137f833edf88fcf5ec996a
MD5 de94b6fc16d88cc95849dc553dff1feb
BLAKE2b-256 ad8c43e6aa95b5d50fe65d205dbc3f55e751fd627e575d412f9ac19c2a6abbff

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3ca05a860a799678f7608d3ebaf9ec2c04c857169b2818b90e4a8c813659a826
MD5 939748d511d7fe3a46f9a5d30a0dcf5a
BLAKE2b-256 8ddee54ac98bd53c73d7a5f447a90f902a3060dbd6eeeea9fb2ed2063a875312

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9eb108c22808cfca73a61cc3f5415abf0eb882349b2dbb44bdd51a8eb0653e7b
MD5 36b5c81cc042c2bc2ac73ee3689a2f4d
BLAKE2b-256 d567e08e822a9b687089e458b078316c5e70e651231988038957e2455c324f15

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.1-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: rapfiles-0.1.1-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 601.3 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.1-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 0b82223a0fc8bacd9fdad554246019163e55657bc6f940b355a9888739641ce5
MD5 45462c8bea56a5ea94d543442d112e10
BLAKE2b-256 a46abe7bb7245b21037b80e172840af3e3b51e805acfa8225194eb0995e0311b

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: rapfiles-0.1.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 669.4 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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 39ce415aa4fc7528e8a456dcad6e2ef280033729a7357c6ac41437346a84a861
MD5 33f9854fc1c2af6ce4c3afce7e9becda
BLAKE2b-256 d151cd670ba97a8528829a8306d2011491dc4363ab1c7936c421a25cff13e734

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7da33c7136192c84e0ed37936321381a4088db2b72ce54780630f8d27bdad3bc
MD5 4f300178460da2441d2d50df3dcdee50
BLAKE2b-256 a7308d47179bb7f1ad3911494c16617ecd941453337fea2c750102f6d80acb08

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3ada77f4f818572851960857d07c0c6bb56e3dc5d58bfb363c3f4aeb5dfd7f13
MD5 5faec7ed0675a489a1706f64e0df6a37
BLAKE2b-256 3b52aa89c21d8862dbc9082ee83407ca96c9ce0c648bd4050ce5d9babf3bae80

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7a352ddbe2da0cd8d2f12fdd6a468d1fa8ae316eab707cc9c0a85e9e584ea85c
MD5 adae42ddf06efefd069e03ccdd44427c
BLAKE2b-256 4470a8a7db9a3013304fa6c4b222d7bcdde1dcbccbe682b697ad143558bb9ebd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 23cb2e99f7f6bf1c1076ef4743cf6434763e1606a4fa0a49aaa644de00e98d6e
MD5 bfc1c6389c01602379b93f1f7772061d
BLAKE2b-256 a45774e6d0bed27de6586f4ea8885ef4757c24dc37e676a9099e3edb1b8a3b5f

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: rapfiles-0.1.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 668.8 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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 17b350a00b266801aa6005a92bdd864b7ebfeabec61b9f58ef657f5adde1e875
MD5 74f436448bb639bf528a184884825088
BLAKE2b-256 10df7130f2fb1d4ffd478f28fdf919f18772f74429d38054aa65d433d74a6fc4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 614d26cddecd7f715f2aaacabdd5ff93f243584eb135f1ebc8c8cdef44837c2c
MD5 d03e2ee13095cd80b23042ff8757d7f2
BLAKE2b-256 cb64e3f828b6d946c73c90dc3dc9b737a8ebba5b4db4c4c3698cceae57794a3c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 284774fc19543398406b30937006766e5f4e20958ea46c78c372f76050e96f0e
MD5 ebd7e2d8d6a29b6b723b0d3ae6c49cb8
BLAKE2b-256 07fa3a315ff62fbb23ab7e2975246283f6180ed40ca6610c52512e646ac69c6b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a17ac7b7aba5dda38c085facb5cd69d4a0753f32208ab455437a77b184a5c4eb
MD5 2712e9c1864151512ff72443ac63bee8
BLAKE2b-256 d8678dd1e678330373f23e6e4066d4f037b2856ef99107d1b99c0e5ea32efeb4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 60ea4943777dbe7ce45e5e4cb636aad35c57f0f283f606bce600b25433d8aac6
MD5 ea1b5b7ff10050a0968af2fe86e3033f
BLAKE2b-256 b19b07b8f54d0f5dc50137bd480c7977d8eb7d39f827a257bd2e90c1d190635b

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: rapfiles-0.1.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 670.6 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.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 7d02b17c719764fd3165330ccbbd7f4bd15fea6931aae5659246ef99d9391bbd
MD5 94783d435ea00b731ce8bc3a42426e59
BLAKE2b-256 e0200875e8ad2d00a799a095594aa7cfaaf6bdf46d0b03b77dd3bf1c83e8a0f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3d95202e97cfb44a988e6781407c501ef9dddaf0d60fab256adac2c4b532ad1f
MD5 2ff9fa3d808cfda790592019e5833ba1
BLAKE2b-256 173b3c6b1312784603e07798c2680457d2ca6ecbedc8310c9fbb621c8a392506

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6777246cefe296bb042436f35f823b8a0fda964e031c32150494b1624a318bb1
MD5 046ac79adcb17854b447c55b9b451422
BLAKE2b-256 0f3c35a1ae257ca5070feca1ea456a3076c1d0be203ac47aac1c6db70a03b318

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d03a9ee6d3bf165d222bde99f5d8fe51950d3b16d0acba7e85b79f520845159e
MD5 f1c72b35dcd6e426f0d2a178d0030608
BLAKE2b-256 9abf34e15d021453e7776898ebb476b811aaa4a0d2a946a7a4ebd27c7591dc2d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 12562709449504af41e6516a9f0fa8f7f89559c836af16816f8cc376ceb22de3
MD5 356a31a4e740ed0ec064546328692704
BLAKE2b-256 f42a91718d564aa3aef716c503d25de86f66f5a6e5f65e771c2137f38f357f13

See more details on using hashes here.

File details

Details for the file rapfiles-0.1.1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: rapfiles-0.1.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 671.9 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.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 64a428bfe6f9cda11161bc48bf1131f26d466e4994a615440fbf91461c5a5ec0
MD5 47e5f44c90f467d7b16fa54b58e42a40
BLAKE2b-256 aeb700e70a4e3201d2b6ab7c4c1d871fd01cd866492615831196d96714a39541

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7ee92ee2bf9e895d1881a48c4bbdbd6e019b58f20e11e9f4b8ab715f3dc58ca5
MD5 dbdc216dc823f7c896fb1c7353f3aea7
BLAKE2b-256 1beed28a6e9a6d713491384c5a440c8d0ef4fd9df6ee1acfab9753e2bc85fcdb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3c014fd39a900eea2b9cf58ef2a47f2b3767aa1971842a8f078a7edf99202294
MD5 d7692bb1bc1ec5e5e0f7932acf6b151e
BLAKE2b-256 f51917b0780656e5d38dcee0ac7e96fb215957aad4db230488049c2ba075e7e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f1eb65585c6471dba9c2f164717f840ebb3f5c9692592b7669f1e5a55496f03d
MD5 40c5024501bfa1e0f2307f4a52309cb3
BLAKE2b-256 72cc2d72e74b98b1f72fffd326af00d79f630cb9c2996c6111a0f7c453a62713

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapfiles-0.1.1-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bd58ce04338e41a9aa912ffaaa21776b9710f5af165cb45a1bfe43b02f510d6b
MD5 65d3bd6cb358a2374793fb480bd6dd00
BLAKE2b-256 4d7d7598cc3616954a3ab3ab642ab9102f6f321855989015b1eefcc86ada3b90

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