Skip to main content

Streaming async CSV — no fake async, no GIL stalls.

Project description

rapcsv

Streaming async CSV — no fake async, no GIL stalls.

PyPI version Downloads Python 3.8+ License: MIT

Overview

rapcsv provides true async CSV reading and writing for Python, backed by Rust and Tokio. Unlike libraries that wrap blocking I/O in async syntax, rapcsv guarantees that all CSV operations execute outside the Python GIL, ensuring event loops never stall under load, even when processing large files.

Roadmap Goal: Achieve drop-in replacement compatibility with aiocsv, 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 CSV reading and writing
  • Streaming support for large files
  • 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

Requirements

  • Python 3.8+
  • Rust 1.70+ (for building from source)

Installation

pip install rapcsv

Building from Source

git clone https://github.com/eddiethedean/rapcsv.git
cd rapcsv
pip install maturin
maturin develop

Usage

import asyncio
from rapcsv import Reader, Writer

async def main():
    # Write CSV file (one row per Writer instance for MVP)
    writer = Writer("output.csv")
    await writer.write_row(["name", "age", "city"])
    
    # Read CSV file (reads first row)
    reader = Reader("output.csv")
    row = await reader.read_row()
    print(row)  # Output: ['name', 'age', 'city']

asyncio.run(main())

Writing Multiple Rows

import asyncio
from rapcsv import Writer

async def main():
    # Write multiple rows with a single Writer instance (file handle reused)
    writer = Writer("output.csv")
    rows = [
        ["name", "age", "city"],
        ["Alice", "30", "New York"],
        ["Bob", "25", "London"],
    ]
    
    for row in rows:
        await writer.write_row(row)
    
    # Verify file contents
    with open("output.csv") as f:
        print(f.read())

asyncio.run(main())

Note: The Writer reuses the file handle across multiple write_row() calls for efficient writing. The Reader maintains position state across read_row() calls and streams data incrementally without loading the entire file into memory.

Using Context Managers

import asyncio
from rapcsv import Reader, Writer

async def main():
    # Using context managers for automatic resource cleanup
    async with Writer("output.csv") as writer:
        await writer.write_row(["name", "age", "city"])
        await writer.write_row(["Alice", "30", "New York"])
    
    async with Reader("output.csv") as reader:
        row = await reader.read_row()
        print(row)  # Output: ['name', 'age', 'city']

asyncio.run(main())

aiocsv Compatibility

rapcsv provides compatibility aliases for aiocsv:

from rapcsv import AsyncReader, AsyncWriter  # aiocsv-compatible names

async def main():
    async with AsyncWriter("output.csv") as writer:
        await writer.write_row(["col1", "col2"])
    
    async with AsyncReader("output.csv") as reader:
        row = await reader.read_row()
        print(row)

asyncio.run(main())

API Reference

Reader(path: str)

Create a new async CSV reader.

Parameters:

  • path (str): Path to the CSV file to read

Example:

reader = Reader("data.csv")

Reader.read_row() -> List[str]

Read the next row from the CSV file.

Returns:

  • List[str]: A list of string values for the row, or an empty list if EOF

Raises:

  • IOError: If the file cannot be read
  • CSVError: If the CSV file is malformed or cannot be parsed

Note: The Reader maintains position state across read_row() calls, reading sequentially through the file. Files are streamed incrementally without loading the entire file into memory.

Context Manager Support:

async with Reader("data.csv") as reader:
    row = await reader.read_row()

Writer(path: str)

Create a new async CSV writer.

Parameters:

  • path (str): Path to the CSV file to write

Example:

writer = Writer("output.csv")

Writer.write_row(row: List[str]) -> None

Write a row to the CSV file.

Parameters:

  • row (List[str]): A list of string values to write as a CSV row

Raises:

  • IOError: If the file cannot be written

Note: The Writer reuses the file handle across multiple write_row() calls for efficient writing. Proper RFC 4180 compliant CSV escaping and quoting is applied automatically.

Writer.close() -> None

Explicitly close the file handle and flush any pending writes.

Example:

writer = Writer("output.csv")
await writer.write_row(["col1", "col2"])
await writer.close()

Context Manager Support:

async with Writer("output.csv") as writer:
    await writer.write_row(["col1", "col2"])
    # File is automatically closed and flushed on exit

Exception Types

CSVError

Raised when a CSV parsing error occurs (e.g., malformed CSV file).

CSVFieldCountError

Raised when there's a mismatch in the number of fields between rows.

Testing

rapcsv includes comprehensive test coverage with tests adapted from the aiocsv test suite to validate compatibility:

# Run all tests
pytest

# Run aiocsv compatibility tests
pytest test_aiocsv_compatibility.py -v

# Run all tests with coverage
pytest --cov=rapcsv --cov-report=html

The test suite includes:

  • Basic read/write operations
  • Context manager support
  • Quoted fields with special characters
  • Large file streaming
  • Concurrent operations
  • aiocsv compatibility validation

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 rapcsv

Roadmap

See docs/ROADMAP.md for detailed development plans. Key goals include:

  • Drop-in replacement for aiocsv (Phase 1)
  • Full streaming support for large files
  • Comprehensive CSV dialect support
  • Zero-copy optimizations

Related Projects

Limitations

Current limitations:

  • No advanced CSV dialect support (delimiters, quote characters, line terminators) - planned for Phase 2
  • No header detection or manipulation - planned for Phase 2
  • Not designed for synchronous use cases

Phase 1 improvements:

  • ✅ Streaming file reading - files are read incrementally without loading entire file into memory
  • ✅ Context manager support (async with) for automatic resource cleanup
  • ✅ CSV-specific exception types (CSVError, CSVFieldCountError)
  • ✅ Improved error handling with detailed error messages
  • close() method for explicit file handle closure
  • ✅ aiocsv compatibility aliases (AsyncReader, AsyncWriter)
  • ✅ Comprehensive test coverage (29 tests including aiocsv compatibility tests)
  • ✅ aiocsv test suite migration - tests adapted from aiocsv test suite

Version 0.1.0 - Phase 1 Complete:

  • ✅ Streaming file reading - files are read incrementally without loading entire file into memory
  • ✅ Context manager support (async with) for automatic resource cleanup
  • ✅ CSV-specific exception types (CSVError, CSVFieldCountError)
  • ✅ Improved error handling with detailed error messages
  • close() method for explicit file handle closure
  • ✅ aiocsv compatibility aliases (AsyncReader, AsyncWriter)
  • ✅ Comprehensive test coverage (29 tests including aiocsv compatibility tests)
  • ✅ aiocsv test suite migration - tests adapted from aiocsv test suite

Previous improvements (v0.0.2):

  • ✅ Security fixes: Upgraded dependencies (pyo3 0.27, pyo3-async-runtimes 0.27), fixed CSV injection vulnerability
  • ✅ Position tracking: Reader now maintains position state across read_row() calls
  • ✅ File handle reuse: Writer reuses file handle across multiple write_row() calls
  • ✅ CSV escaping: Implemented RFC 4180 compliant CSV escaping and quoting
  • ✅ Input validation: Added path validation (non-empty, no null bytes)
  • ✅ Improved error handling: Enhanced error messages with file path context
  • ✅ Type stubs: Added .pyi type stubs for better IDE support and type checking

Roadmap: See docs/ROADMAP.md for planned improvements. Our goal is to achieve drop-in replacement compatibility with aiocsv while providing true async performance with GIL-independent I/O.

Contributing

Contributions are welcome! Please see our contributing guidelines (coming soon).

License

MIT

Changelog

See CHANGELOG.md (coming soon) for version history.

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

rapcsv-0.1.0.tar.gz (34.6 kB view details)

Uploaded Source

Built Distributions

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

rapcsv-0.1.0-cp312-cp312-win_arm64.whl (406.5 kB view details)

Uploaded CPython 3.12Windows ARM64

rapcsv-0.1.0-cp312-cp312-win_amd64.whl (444.9 kB view details)

Uploaded CPython 3.12Windows x86-64

rapcsv-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl (534.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

rapcsv-0.1.0-cp312-cp312-manylinux_2_28_aarch64.whl (515.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

rapcsv-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (484.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rapcsv-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl (494.5 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

rapcsv-0.1.0-cp311-cp311-win_arm64.whl (408.5 kB view details)

Uploaded CPython 3.11Windows ARM64

rapcsv-0.1.0-cp311-cp311-win_amd64.whl (445.8 kB view details)

Uploaded CPython 3.11Windows x86-64

rapcsv-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl (537.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

rapcsv-0.1.0-cp311-cp311-manylinux_2_28_aarch64.whl (517.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

rapcsv-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (486.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rapcsv-0.1.0-cp311-cp311-macosx_10_12_x86_64.whl (494.9 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

rapcsv-0.1.0-cp310-cp310-win_amd64.whl (446.0 kB view details)

Uploaded CPython 3.10Windows x86-64

rapcsv-0.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (536.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

rapcsv-0.1.0-cp310-cp310-manylinux_2_28_aarch64.whl (518.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

rapcsv-0.1.0-cp310-cp310-macosx_11_0_arm64.whl (488.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

rapcsv-0.1.0-cp310-cp310-macosx_10_12_x86_64.whl (494.9 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

rapcsv-0.1.0-cp39-cp39-win_amd64.whl (447.5 kB view details)

Uploaded CPython 3.9Windows x86-64

rapcsv-0.1.0-cp39-cp39-manylinux_2_28_x86_64.whl (537.7 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

rapcsv-0.1.0-cp39-cp39-manylinux_2_28_aarch64.whl (520.6 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

rapcsv-0.1.0-cp39-cp39-macosx_11_0_arm64.whl (490.8 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

rapcsv-0.1.0-cp39-cp39-macosx_10_12_x86_64.whl (497.0 kB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

rapcsv-0.1.0-cp38-cp38-win_amd64.whl (448.2 kB view details)

Uploaded CPython 3.8Windows x86-64

rapcsv-0.1.0-cp38-cp38-manylinux_2_28_x86_64.whl (539.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ x86-64

rapcsv-0.1.0-cp38-cp38-manylinux_2_28_aarch64.whl (519.4 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ ARM64

rapcsv-0.1.0-cp38-cp38-macosx_11_0_arm64.whl (489.1 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

rapcsv-0.1.0-cp38-cp38-macosx_10_12_x86_64.whl (497.3 kB view details)

Uploaded CPython 3.8macOS 10.12+ x86-64

File details

Details for the file rapcsv-0.1.0.tar.gz.

File metadata

  • Download URL: rapcsv-0.1.0.tar.gz
  • Upload date:
  • Size: 34.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for rapcsv-0.1.0.tar.gz
Algorithm Hash digest
SHA256 356be6a4ec01f63c42d4a727b4f3967fede0ccecfd1db8cfef6a41440dc5161e
MD5 3607dd419f279ec2764996c5deda8639
BLAKE2b-256 a6d423f51ed053cc7966ef6623db061e86100bb78bcaf23288bf7d254116035f

See more details on using hashes here.

File details

Details for the file rapcsv-0.1.0-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: rapcsv-0.1.0-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 406.5 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 rapcsv-0.1.0-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 2443a2b0f9755e68cf6892a9d2bfb36389d1910b5650770b7182bcdaf36b01f1
MD5 7b5f2f349f355886e8037cd62a6f0936
BLAKE2b-256 aa6bfb2ee5276fcfc76b72b5d02c347b8e838b868115bced75526894678f979b

See more details on using hashes here.

File details

Details for the file rapcsv-0.1.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: rapcsv-0.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 444.9 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 rapcsv-0.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 fd013cf02ca6a37d298a31fadfcd819755490d2d0a9120da02193bca2bd997b1
MD5 2b307e123c9c9864aeb1d320ee7c590d
BLAKE2b-256 3b7683467efded10200b626547dd4cc94b3b9bed4a7cb314bc56309d26136e8a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c6e8cefc49ee6760d4ee461babfb288603a177fe009c47ea785c82d1874b2e98
MD5 625c548f9ea5909cb834c7056c1dfcc7
BLAKE2b-256 4bb3da17a3a4417f7bb01b518ff5945ddb21ab4d6a3d0f86a3256beba355318d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4eaca3aec71e5a717e633d1fe3eff70e914a1eb657362389b375f1278300d62e
MD5 83326fa3135e694c92a30e3785fae03a
BLAKE2b-256 3f8145a14bcde78a71af97df925f2ce4950d77fed002fc40e20fc565d56b46c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2ae742a36de8986f471d8e963da86c5bc0f0bb0ab8cec5efee1fe4d783bca0a2
MD5 19bf79dd72b988029d9aa63c050c7953
BLAKE2b-256 6f2c348e42a70690dec43afb5131dc7669a02c2ef6866d651c650d8e63b9b9c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e28dbc0267f7dd2bc8b8918d215991a72fea5a670ed01bf6d8a0166074424540
MD5 9af238ab6f397e4030d7e6a9b2fb80d5
BLAKE2b-256 b126bb5026ba64cd6fdee16d024183c77664f40e3d41fbf3d638535ff5d0d8db

See more details on using hashes here.

File details

Details for the file rapcsv-0.1.0-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: rapcsv-0.1.0-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 408.5 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 rapcsv-0.1.0-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 3d7936d32ec047b4b255e0e3180a809e8235f3c96b218a4a3f1d5d27b57dc92d
MD5 3b2a7a476fbd5d82b1b04aea8c046971
BLAKE2b-256 3fc5fab96ac05647c9b4747aff060edc441a53b9dd78d214fd6dd44a98a3b241

See more details on using hashes here.

File details

Details for the file rapcsv-0.1.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: rapcsv-0.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 445.8 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 rapcsv-0.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b473709c152a19559b8d39015275949cd3b3ecede672aed3c0b4679fe1862707
MD5 3633a7cbcf242bde7bd24d2f1fbb6a9d
BLAKE2b-256 0f09cd36310a3bba2eca5fbb7a4cb389f1686d5c28b1aa6324e7951855d73856

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d64974fba55aa82ce1e901e069ec618dfbd953ff19e0c52b2716b8f4a7844a93
MD5 45ef976ae466543b78251887a1b5ffe8
BLAKE2b-256 a0ba3883da2a95c1830b20d2ce56659a7d075c9356e9653ab35ba3f39f154101

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 82927454f1f804e46d773598b2a03520a4480e3a12aade4731383c08e6852a48
MD5 d824d37bd744264ac192c8f856718882
BLAKE2b-256 28db2de94f0afe1b75d524d5255cabe610769e64a9f171fd9cb6ff42475096f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c8cca5459c62d6772dbcbf286d8bc69697b3c685d9b9ee9742ded63a59bc3793
MD5 bc8e28bbf9722660b3f5a1e275dfaed6
BLAKE2b-256 b3030e2068399bb7161646639fe9a1bfa409070b00c10abac30b2ff7ca891650

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5393325c39f6b28259287456621a5a66c23883742eb39c72ab61e8351e2fd75c
MD5 80795851c947a784bff40c6a954e5db4
BLAKE2b-256 07617d41d1e547bfb61f0a1f853c0139c11e7773d87b9b047a7d324e7dba622a

See more details on using hashes here.

File details

Details for the file rapcsv-0.1.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: rapcsv-0.1.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 446.0 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 rapcsv-0.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9a8dc8fc95fd9e9269e25a55c5875f2fc4bb37093f4b037771bf70ac96aaaa7b
MD5 1c96bb2c66287b85a72e5dd8dedc6fd4
BLAKE2b-256 46bd809348b925f69eb6f68ca7ed1e5ab48faebe809b7d3c8a5273586172e5cc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 81f60b004b558cef2fcbe1a17271da3c4efd49493b75238bf0fa527a6fc750e1
MD5 20223ec4d7df935bd8cf685825458e24
BLAKE2b-256 58cde1cba8e2543e7b7d5ce84d04b3cb8e398fad3760bebca0df95c975a79aab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5aad3e14514defe5353b28a981189913c533e3b48d4fd84473321c0ff9ccddd1
MD5 dbe5ee97816c67f19b5c83a7ef79236b
BLAKE2b-256 310558d1bd7c27837df444ed4ce81d49ac495b56fe39ea67e0fd3073331fc28a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 832716c9377851f341dc7dc24cd19d72a82f9eade41bfa7c134fbd0b96bfa799
MD5 916be56dd9ebe20bf4fc5525eca9c08e
BLAKE2b-256 5ab4021edefc9bebfec7e198ace6709f414089733f1f26feeeed8ee453183567

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 926a57d2792cfee0216f028ffc1e086239564ebf6b47819cab4a0ae221d150ab
MD5 76f9d6e3ff610af5921458bcc3f374cd
BLAKE2b-256 fb18e212b4a0322ea818c7030df7764e731df501767a7da7ed704850ed8774ef

See more details on using hashes here.

File details

Details for the file rapcsv-0.1.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: rapcsv-0.1.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 447.5 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 rapcsv-0.1.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 4f0a13daaf976eee0acd3f7caba7989b86f79ab281623f6534791f7aa62a4e66
MD5 d0b68c24641e152c44d0fb26241635ea
BLAKE2b-256 4592b7ccd9ca7247aa74688419cc8ba63b0f37e78269ddb81861bcec8c6dbaa5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6d7a4ec4328bc7dad24ec49dcddc38e873a2aad4b42cc635bd95d676d66284d8
MD5 48957aaec2a5a434d36ed857897e03fa
BLAKE2b-256 6a2f239c466ad265813540ab6b6378cc4838d054ca79c25c098329d94b994e65

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 701d36061bb2ccfbf1caa278da1582834c8eed6e941da84b15aea55892979aee
MD5 e2e0963d1fcf0db9bba780bff68e93c6
BLAKE2b-256 a519cc4f24e708d3db29024b3913e905104f6b17e102fd38b7181e53ddf003cb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9c47b98383d066293556bde92f42637da2d9cf55dc22d1e18895690696f5d0b5
MD5 5142dc8d895c8726742f7bc8edb11fa9
BLAKE2b-256 4c327b45806ff4e254dfb77b3839dd13e88525aba19175d0a6b3dc393c3b6fbd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 28f3b0a076e0fe1527130e2e318bd1c74a18c132479b217e2696737e21bb595f
MD5 34cb20437124acfcecfd493f988fbde4
BLAKE2b-256 90c2a57880198f9d7b87659e9598fa1e3bd5cd38b9ce8c20f8e7cd43d55c4f41

See more details on using hashes here.

File details

Details for the file rapcsv-0.1.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: rapcsv-0.1.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 448.2 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 rapcsv-0.1.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 36c07b9a2e43aa9ebd281303d4bf21b77ee9f7cc2b9742d7847521f98f5ab92b
MD5 9713f947ecf47b08c1471eeb4f6291f4
BLAKE2b-256 086a2555449702bc390f854815b02002b4b96a998a875ccaf92f4db0e6d4b013

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8df04819580947ef450d6cbb540789fc6db5e13eafdf328c9107cd5194b4b4be
MD5 fc1c90891d34ee9a2bee6a334bc71164
BLAKE2b-256 12cf633325f3674fd8c97e740cb7c89397aa1b09751a6e8301857798438dd956

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 211aa0d8d4aa2c64054b81d32394141889e3fef1af9bbecf6e3f53620b731e42
MD5 47835c0db2e05b039804c7b371077e56
BLAKE2b-256 700ad5c0585bf0c73aecf96148294bc4f343fe2f1cc9d11038a7a9d660f5411b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 387691ba3d75fe3d6cbfb82b3bd417b2877cccbf0d01df9927bf68ea625716d6
MD5 e5eae50c7e64fad2aa992dc97d25abde
BLAKE2b-256 1333f5646db75153376b1d23b5792c78fc5fbcb3e9793ff49dc86ec1aa4b31a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rapcsv-0.1.0-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e957c947629f66aee51c83e60151fe4ccfa42cf4e4bfa21c6fb97fd548209956
MD5 f41053ff09c3466f444929bc14cd3e57
BLAKE2b-256 616627fad0887c28843fffd13952d0621f3ea5624cd93503cf523ecb65fa023b

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