splurge-dsv


Namesplurge-dsv JSON
Version 2025.3.1 PyPI version JSON
download
home_pageNone
SummaryA utility library for working with DSV (Delimited String Values) files
upload_time2025-10-14 01:17:42
maintainerNone
docs_urlNone
authorJim Schilling
requires_python>=3.10
licenseNone
keywords dsv csv tsv delimited parsing file-processing
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # splurge-dsv

[![PyPI version](https://badge.fury.io/py/splurge-dsv.svg)](https://pypi.org/project/splurge-dsv/)
[![Python versions](https://img.shields.io/pypi/pyversions/splurge-dsv.svg)](https://pypi.org/project/splurge-dsv/)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)

[![CI](https://github.com/jim-schilling/splurge-dsv/actions/workflows/ci-quick-test.yml/badge.svg)](https://github.com/jim-schilling/splurge-dsv/actions/workflows/ci-quick-test.yml)
[![Coverage](https://img.shields.io/badge/coverage-93%25-brightgreen.svg)](https://github.com/jim-schilling/splurge-dsv)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
[![mypy](https://img.shields.io/badge/mypy-checked-black)](https://mypy-lang.org/)

A robust Python library for parsing and processing delimited-separated value (DSV) files with advanced features for data validation, streaming, and error handling.

## Features

- **Multi-format DSV Support**: Parse CSV, TSV, pipe-delimited, and custom delimiter separated value files/objects
- **Configurable Parsing**: Flexible options for delimiters, quote characters, escape characters, header/footer row(s) handling
- **Memory-Efficient Streaming**: Process large files without loading entire content into memory
- **Security & Validation**: Comprehensive path validation and file permission checks
- **Unicode Support**: Full Unicode character and encoding support
- **Type Safety**: Full type annotations with mypy validation
- **Deterministic Newline Handling**: Consistent handling of CRLF, CR, and LF newlines across platforms
- **CLI Tool**: Command-line interface for quick parsing and inspection of DSV files
- **Robust Error Handling**: Clear and specific exceptions for various error scenarios
- **Modern API**: Object-oriented API with `Dsv` and `DsvConfig` classes for easy configuration and reuse
- **Comprehensive Documentation**: In-depth API reference and usage examples
- **Exhaustive Testing**: 283 tests with 93% code coverage including property-based testing, edge case testing, and cross-platform compatibility validation

**⚠️ CHANGES in v2025.3.1**
> - **skip_empty_lines** option added to `DsvConfig`, `DsvHelper`, and CLI.
>   - This option allows users to skip logical empty lines when parsing DSV files.

**⚠️ CHANGES in v2025.3.0**
> - **Commit-Only Release**: v2025.3.0 is a commit-only release and will not be published to PyPI.
> - The legacy `parse_stream()` helpers were removed in release 2025.3.0.
>   - Use `parse_file_stream()` on `Dsv`/`DsvHelper` for stream-based parsing of files. This standardizes the API naming and clarifies that streaming helpers accept file paths rather than arbitrary iterables.
> - TextFileHelper, SafeTextFileReader, SafeTextFileWriter, and PathValidator, as well as all their associated tests have been removed in this release.
>   - Their functionality has been migrated in favor of the `splurge-safe-io` package, which provides robust and secure file I/O operations.
>   - This change reduces code duplication and improves maintainability by leveraging the functionality of `splurge-safe-io`.
>   - Users should refer to the `splurge-safe-io` documentation for details on its usage and features.
> - **See API-REFERENCE.md for migration guidance and complete reference documentation, with usage examples.**

**⚠️ CHANGES in v2025.2.2**
> - **Deprecated Warning**: The following modules and their associated classes and functions are deprecated and will be removed in a future release (2025.3.0). Users are encouraged to transition to the `splurge-safe-io` package for these functionalities:
>   - `splurge_dsv.safe_text_file_reader`
>   - `splurge_dsv.safe_text_file_writer`
>   - `splurge_dsv.path_validator`
>   - `splurge_dsv.text_file_helper`
> - **New Exception**: Added `SplurgeDsvFileExistsError` to handle file existence errors.
> - **Fixed Exception Mapping**: Many errors were incorrectly mapped to SplurgeDsvEncodingError; this has been corrected to use appropriate exception types. 
>   - Some exceptions were not mapped to any SplurgeDsv* exception; these have also been corrected.
> - **3rd-Party Dependency Additions**: Added `splurge-safe-io (v2025.0.4)`.
>   - `splurge-safe-io` is a new dependency that provides robust and secure file I/O operations, including safe text file reading and writing with deterministic newline handling and path validation.
>   - This change reduces code duplication and improves maintainability by leveraging the functionality of `splurge-safe-io`.
>   - Users should refer to the `splurge-safe-io` documentation for details on its usage and features.
> - **Code Refactoring**: Refactored `SafeTextFileReader`, `SafeTextFileWriter`, and `PathValidator` to utilize `splurge-safe-io` implementations internally, ensuring consistent behavior and reducing maintenance overhead.
> - **This release maintains backward compatibility** for existing users, but users are encouraged to transition to `splurge-safe-io` for future-proofing their codebases.
>   - **_This release is a commit-only release and will not be published to PyPI._**

**⚠️ BREAKING CHANGES in v2025.2.0**
>
> - **Exception Names Changed**: All exceptions now use `SplurgeDsv*` prefix (e.g., `SplurgeParameterError` → `SplurgeDsvParameterError`)
> - **Resource Manager Removed**: The `ResourceManager` module and all related classes have been completely removed
>
> See the [CHANGELOG](CHANGELOG.md) for migration guidance.

## Installation

```bash
pip install splurge-dsv
```

## Quick Start

### CLI Usage

```bash
# Parse a CSV file
python -m splurge_dsv data.csv --delimiter ,

# Stream a large file
python -m splurge_dsv large_file.csv --delimiter , --stream --chunk-size 1000
```

### YAML configuration file

You can place CLI-equivalent options in a YAML file and pass it to the CLI
using `--config` (or `-c`). CLI arguments override values found in the
YAML file. Example `config.yaml`:

```yaml
delimiter: ","
strip: true
bookend: '"'
encoding: utf-8
skip_header_rows: 1
skip_footer_rows: 0
skip_empty_lines: false
detect_columns: true
chunk_size: 500
max_detect_chunks: 5
raise_on_missing_columns: false
raise_on_extra_columns: false
```

Usage with CLI:

```bash
python -m splurge_dsv data.csv --config config.yaml --delimiter "|"
# The CLI delimiter '|' overrides the YAML delimiter
```

Example using the shipped example config in the repository:

```bash
# Use the example file provided at examples/config.yaml
python -m splurge_dsv data.csv --config examples/config.yaml
```

### API Usage

```python
from splurge_dsv import DsvHelper

# Parse a CSV string
data = DsvHelper.parse("a,b,c", delimiter=",")
print(data)  # ['a', 'b', 'c']

# Parse a CSV file
rows = DsvHelper.parse_file("data.csv", delimiter=",")
```

### Modern API

```python
from splurge_dsv import Dsv, DsvConfig

# Create configuration and parser
config = DsvConfig.csv(skip_header=1)
dsv = Dsv(config)

# Parse files
rows = dsv.parse_file("data.csv")
```

## Documentation

- **[Detailed Documentation](docs/README-details.md)**: Complete API reference, CLI options, and examples
- **[Testing Best Practices](docs/testing_best_practices.md)**: Comprehensive testing guidelines and patterns
- **[Hypothesis Usage Patterns](docs/hypothesis_usage_patterns.md)**: Property-based testing guide
- **[Changelog](CHANGELOG.md)**: Release notes and migration guides

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
----------------------------

This library enforces deterministic newline handling for text files. The reader
normalizes CRLF (`\r\n`), CR (`\r`) and LF (`\n`) to LF internally and
returns logical lines. The writer utilities normalize any input newlines to LF
before writing. This avoids platform-dependent differences when reading files
produced by diverse sources.

Recommended usage:

- When creating files inside the project, prefer the `open_text_writer` context
    manager or `SafeTextFileWriter` which will normalize to LF.
- When reading unknown files, the `open_text` / `SafeTextFileReader` will
    provide deterministic normalization regardless of the source.
- `SplurgeResourceAcquisitionError` - Resource acquisition failures
- `SplurgeResourceReleaseError` - Resource cleanup failures

## Development

### Testing Suite

splurge-dsv features a comprehensive testing suite designed for robustness and reliability:

#### Test Categories
- **Unit Tests**: Core functionality testing (300+ tests)
- **Integration Tests**: End-to-end workflow validation (50+ tests)
- **Property-Based Tests**: Hypothesis-driven testing for edge cases (50+ tests)
- **Edge Case Tests**: Malformed input, encoding issues, filesystem anomalies
- **Cross-Platform Tests**: Path handling, line endings, encoding consistency

#### Running Tests

```bash
# Run all tests
pytest tests/ -v

# Run with coverage report
pytest tests/ --cov=splurge_dsv --cov-report=html

# Run specific test categories
pytest tests/unit/ -v                    # Unit tests only
pytest tests/integration/ -v            # Integration tests only
pytest tests/property/ -v               # Property-based tests only
pytest tests/platform/ -v               # Cross-platform tests only

# Run with parallel execution
pytest tests/ -n 4 --cov=splurge_dsv

# Run performance benchmarks
pytest tests/ --durations=10
```

#### Test Quality Standards
- **94%+ Code Coverage**: All public APIs and critical paths covered
- **Property-Based Testing**: Hypothesis framework validates complex scenarios
- **Cross-Platform Compatibility**: Tests run on Windows, Linux, and macOS
- **Performance Regression Detection**: Automated benchmarks prevent slowdowns
- **Zero False Positives**: All property tests pass without spurious failures

#### Testing Best Practices
- Tests use `pytest-mock` for modern mocking patterns
- Property tests use Hypothesis strategies for comprehensive input generation
- Edge case tests validate error handling and boundary conditions
- Cross-platform tests ensure consistent behavior across operating systems

### Code Quality

The project follows strict coding standards:
- PEP 8 compliance
- Type annotations for all functions
- Google-style docstrings
- 85%+ coverage gate enforced via CI
- Comprehensive error handling

## Changelog

See the [CHANGELOG](CHANGELOG.md) for full release notes.

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## More Documentation

- Detailed docs: [docs/README-details.md](docs/README-details.md)
- E2E testing coverage: [docs/e2e_testing_coverage.md](docs/e2e_testing_coverage.md)

## Contributing

Contributions are welcome! Please see our [Contributing Guide](CONTRIBUTING.md) for detailed information on:

- Development setup and workflow
- Coding standards and best practices
- Testing requirements and guidelines
- Pull request process and review criteria

For major changes, please open an issue first to discuss what you would like to change.

## Support

For support, please open an issue on the GitHub repository or contact the maintainers.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "splurge-dsv",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "dsv, csv, tsv, delimited, parsing, file-processing",
    "author": "Jim Schilling",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/17/ad/1cbe637e2e5de8b93014727458a9348dddb350494abdb8e79dc1a53c56e7/splurge_dsv-2025.3.1.tar.gz",
    "platform": null,
    "description": "# splurge-dsv\r\n\r\n[![PyPI version](https://badge.fury.io/py/splurge-dsv.svg)](https://pypi.org/project/splurge-dsv/)\r\n[![Python versions](https://img.shields.io/pypi/pyversions/splurge-dsv.svg)](https://pypi.org/project/splurge-dsv/)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\r\n\r\n[![CI](https://github.com/jim-schilling/splurge-dsv/actions/workflows/ci-quick-test.yml/badge.svg)](https://github.com/jim-schilling/splurge-dsv/actions/workflows/ci-quick-test.yml)\r\n[![Coverage](https://img.shields.io/badge/coverage-93%25-brightgreen.svg)](https://github.com/jim-schilling/splurge-dsv)\r\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\r\n[![mypy](https://img.shields.io/badge/mypy-checked-black)](https://mypy-lang.org/)\r\n\r\nA robust Python library for parsing and processing delimited-separated value (DSV) files with advanced features for data validation, streaming, and error handling.\r\n\r\n## Features\r\n\r\n- **Multi-format DSV Support**: Parse CSV, TSV, pipe-delimited, and custom delimiter separated value files/objects\r\n- **Configurable Parsing**: Flexible options for delimiters, quote characters, escape characters, header/footer row(s) handling\r\n- **Memory-Efficient Streaming**: Process large files without loading entire content into memory\r\n- **Security & Validation**: Comprehensive path validation and file permission checks\r\n- **Unicode Support**: Full Unicode character and encoding support\r\n- **Type Safety**: Full type annotations with mypy validation\r\n- **Deterministic Newline Handling**: Consistent handling of CRLF, CR, and LF newlines across platforms\r\n- **CLI Tool**: Command-line interface for quick parsing and inspection of DSV files\r\n- **Robust Error Handling**: Clear and specific exceptions for various error scenarios\r\n- **Modern API**: Object-oriented API with `Dsv` and `DsvConfig` classes for easy configuration and reuse\r\n- **Comprehensive Documentation**: In-depth API reference and usage examples\r\n- **Exhaustive Testing**: 283 tests with 93% code coverage including property-based testing, edge case testing, and cross-platform compatibility validation\r\n\r\n**\u26a0\ufe0f CHANGES in v2025.3.1**\r\n> - **skip_empty_lines** option added to `DsvConfig`, `DsvHelper`, and CLI.\r\n>   - This option allows users to skip logical empty lines when parsing DSV files.\r\n\r\n**\u26a0\ufe0f CHANGES in v2025.3.0**\r\n> - **Commit-Only Release**: v2025.3.0 is a commit-only release and will not be published to PyPI.\r\n> - The legacy `parse_stream()` helpers were removed in release 2025.3.0.\r\n>   - Use `parse_file_stream()` on `Dsv`/`DsvHelper` for stream-based parsing of files. This standardizes the API naming and clarifies that streaming helpers accept file paths rather than arbitrary iterables.\r\n> - TextFileHelper, SafeTextFileReader, SafeTextFileWriter, and PathValidator, as well as all their associated tests have been removed in this release.\r\n>   - Their functionality has been migrated in favor of the `splurge-safe-io` package, which provides robust and secure file I/O operations.\r\n>   - This change reduces code duplication and improves maintainability by leveraging the functionality of `splurge-safe-io`.\r\n>   - Users should refer to the `splurge-safe-io` documentation for details on its usage and features.\r\n> - **See API-REFERENCE.md for migration guidance and complete reference documentation, with usage examples.**\r\n\r\n**\u26a0\ufe0f CHANGES in v2025.2.2**\r\n> - **Deprecated Warning**: The following modules and their associated classes and functions are deprecated and will be removed in a future release (2025.3.0). Users are encouraged to transition to the `splurge-safe-io` package for these functionalities:\r\n>   - `splurge_dsv.safe_text_file_reader`\r\n>   - `splurge_dsv.safe_text_file_writer`\r\n>   - `splurge_dsv.path_validator`\r\n>   - `splurge_dsv.text_file_helper`\r\n> - **New Exception**: Added `SplurgeDsvFileExistsError` to handle file existence errors.\r\n> - **Fixed Exception Mapping**: Many errors were incorrectly mapped to SplurgeDsvEncodingError; this has been corrected to use appropriate exception types. \r\n>   - Some exceptions were not mapped to any SplurgeDsv* exception; these have also been corrected.\r\n> - **3rd-Party Dependency Additions**: Added `splurge-safe-io (v2025.0.4)`.\r\n>   - `splurge-safe-io` is a new dependency that provides robust and secure file I/O operations, including safe text file reading and writing with deterministic newline handling and path validation.\r\n>   - This change reduces code duplication and improves maintainability by leveraging the functionality of `splurge-safe-io`.\r\n>   - Users should refer to the `splurge-safe-io` documentation for details on its usage and features.\r\n> - **Code Refactoring**: Refactored `SafeTextFileReader`, `SafeTextFileWriter`, and `PathValidator` to utilize `splurge-safe-io` implementations internally, ensuring consistent behavior and reducing maintenance overhead.\r\n> - **This release maintains backward compatibility** for existing users, but users are encouraged to transition to `splurge-safe-io` for future-proofing their codebases.\r\n>   - **_This release is a commit-only release and will not be published to PyPI._**\r\n\r\n**\u26a0\ufe0f BREAKING CHANGES in v2025.2.0**\r\n>\r\n> - **Exception Names Changed**: All exceptions now use `SplurgeDsv*` prefix (e.g., `SplurgeParameterError` \u2192 `SplurgeDsvParameterError`)\r\n> - **Resource Manager Removed**: The `ResourceManager` module and all related classes have been completely removed\r\n>\r\n> See the [CHANGELOG](CHANGELOG.md) for migration guidance.\r\n\r\n## Installation\r\n\r\n```bash\r\npip install splurge-dsv\r\n```\r\n\r\n## Quick Start\r\n\r\n### CLI Usage\r\n\r\n```bash\r\n# Parse a CSV file\r\npython -m splurge_dsv data.csv --delimiter ,\r\n\r\n# Stream a large file\r\npython -m splurge_dsv large_file.csv --delimiter , --stream --chunk-size 1000\r\n```\r\n\r\n### YAML configuration file\r\n\r\nYou can place CLI-equivalent options in a YAML file and pass it to the CLI\r\nusing `--config` (or `-c`). CLI arguments override values found in the\r\nYAML file. Example `config.yaml`:\r\n\r\n```yaml\r\ndelimiter: \",\"\r\nstrip: true\r\nbookend: '\"'\r\nencoding: utf-8\r\nskip_header_rows: 1\r\nskip_footer_rows: 0\r\nskip_empty_lines: false\r\ndetect_columns: true\r\nchunk_size: 500\r\nmax_detect_chunks: 5\r\nraise_on_missing_columns: false\r\nraise_on_extra_columns: false\r\n```\r\n\r\nUsage with CLI:\r\n\r\n```bash\r\npython -m splurge_dsv data.csv --config config.yaml --delimiter \"|\"\r\n# The CLI delimiter '|' overrides the YAML delimiter\r\n```\r\n\r\nExample using the shipped example config in the repository:\r\n\r\n```bash\r\n# Use the example file provided at examples/config.yaml\r\npython -m splurge_dsv data.csv --config examples/config.yaml\r\n```\r\n\r\n### API Usage\r\n\r\n```python\r\nfrom splurge_dsv import DsvHelper\r\n\r\n# Parse a CSV string\r\ndata = DsvHelper.parse(\"a,b,c\", delimiter=\",\")\r\nprint(data)  # ['a', 'b', 'c']\r\n\r\n# Parse a CSV file\r\nrows = DsvHelper.parse_file(\"data.csv\", delimiter=\",\")\r\n```\r\n\r\n### Modern API\r\n\r\n```python\r\nfrom splurge_dsv import Dsv, DsvConfig\r\n\r\n# Create configuration and parser\r\nconfig = DsvConfig.csv(skip_header=1)\r\ndsv = Dsv(config)\r\n\r\n# Parse files\r\nrows = dsv.parse_file(\"data.csv\")\r\n```\r\n\r\n## Documentation\r\n\r\n- **[Detailed Documentation](docs/README-details.md)**: Complete API reference, CLI options, and examples\r\n- **[Testing Best Practices](docs/testing_best_practices.md)**: Comprehensive testing guidelines and patterns\r\n- **[Hypothesis Usage Patterns](docs/hypothesis_usage_patterns.md)**: Property-based testing guide\r\n- **[Changelog](CHANGELOG.md)**: Release notes and migration guides\r\n\r\n## License\r\n\r\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\r\n----------------------------\r\n\r\nThis library enforces deterministic newline handling for text files. The reader\r\nnormalizes CRLF (`\\r\\n`), CR (`\\r`) and LF (`\\n`) to LF internally and\r\nreturns logical lines. The writer utilities normalize any input newlines to LF\r\nbefore writing. This avoids platform-dependent differences when reading files\r\nproduced by diverse sources.\r\n\r\nRecommended usage:\r\n\r\n- When creating files inside the project, prefer the `open_text_writer` context\r\n    manager or `SafeTextFileWriter` which will normalize to LF.\r\n- When reading unknown files, the `open_text` / `SafeTextFileReader` will\r\n    provide deterministic normalization regardless of the source.\r\n- `SplurgeResourceAcquisitionError` - Resource acquisition failures\r\n- `SplurgeResourceReleaseError` - Resource cleanup failures\r\n\r\n## Development\r\n\r\n### Testing Suite\r\n\r\nsplurge-dsv features a comprehensive testing suite designed for robustness and reliability:\r\n\r\n#### Test Categories\r\n- **Unit Tests**: Core functionality testing (300+ tests)\r\n- **Integration Tests**: End-to-end workflow validation (50+ tests)\r\n- **Property-Based Tests**: Hypothesis-driven testing for edge cases (50+ tests)\r\n- **Edge Case Tests**: Malformed input, encoding issues, filesystem anomalies\r\n- **Cross-Platform Tests**: Path handling, line endings, encoding consistency\r\n\r\n#### Running Tests\r\n\r\n```bash\r\n# Run all tests\r\npytest tests/ -v\r\n\r\n# Run with coverage report\r\npytest tests/ --cov=splurge_dsv --cov-report=html\r\n\r\n# Run specific test categories\r\npytest tests/unit/ -v                    # Unit tests only\r\npytest tests/integration/ -v            # Integration tests only\r\npytest tests/property/ -v               # Property-based tests only\r\npytest tests/platform/ -v               # Cross-platform tests only\r\n\r\n# Run with parallel execution\r\npytest tests/ -n 4 --cov=splurge_dsv\r\n\r\n# Run performance benchmarks\r\npytest tests/ --durations=10\r\n```\r\n\r\n#### Test Quality Standards\r\n- **94%+ Code Coverage**: All public APIs and critical paths covered\r\n- **Property-Based Testing**: Hypothesis framework validates complex scenarios\r\n- **Cross-Platform Compatibility**: Tests run on Windows, Linux, and macOS\r\n- **Performance Regression Detection**: Automated benchmarks prevent slowdowns\r\n- **Zero False Positives**: All property tests pass without spurious failures\r\n\r\n#### Testing Best Practices\r\n- Tests use `pytest-mock` for modern mocking patterns\r\n- Property tests use Hypothesis strategies for comprehensive input generation\r\n- Edge case tests validate error handling and boundary conditions\r\n- Cross-platform tests ensure consistent behavior across operating systems\r\n\r\n### Code Quality\r\n\r\nThe project follows strict coding standards:\r\n- PEP 8 compliance\r\n- Type annotations for all functions\r\n- Google-style docstrings\r\n- 85%+ coverage gate enforced via CI\r\n- Comprehensive error handling\r\n\r\n## Changelog\r\n\r\nSee the [CHANGELOG](CHANGELOG.md) for full release notes.\r\n\r\n## License\r\n\r\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\r\n\r\n## More Documentation\r\n\r\n- Detailed docs: [docs/README-details.md](docs/README-details.md)\r\n- E2E testing coverage: [docs/e2e_testing_coverage.md](docs/e2e_testing_coverage.md)\r\n\r\n## Contributing\r\n\r\nContributions are welcome! Please see our [Contributing Guide](CONTRIBUTING.md) for detailed information on:\r\n\r\n- Development setup and workflow\r\n- Coding standards and best practices\r\n- Testing requirements and guidelines\r\n- Pull request process and review criteria\r\n\r\nFor major changes, please open an issue first to discuss what you would like to change.\r\n\r\n## Support\r\n\r\nFor support, please open an issue on the GitHub repository or contact the maintainers.\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A utility library for working with DSV (Delimited String Values) files",
    "version": "2025.3.1",
    "project_urls": {
        "Bug Tracker": "https://github.com/jim-schilling/splurge-dsv/issues",
        "Documentation": "https://github.com/jim-schilling/splurge-dsv#readme",
        "Homepage": "https://github.com/jim-schilling/splurge-dsv",
        "Repository": "https://github.com/jim-schilling/splurge-dsv"
    },
    "split_keywords": [
        "dsv",
        " csv",
        " tsv",
        " delimited",
        " parsing",
        " file-processing"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "18b0ef0106a8b28289877991a80119829faec9e0b9775eb3bc615c75be6ef232",
                "md5": "2c5672b766d78ef584cd781d68509eac",
                "sha256": "bc28ce174918a574e75726d7a1ff2c371b3620f5d2d709d0d54ca57a0009fcb1"
            },
            "downloads": -1,
            "filename": "splurge_dsv-2025.3.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "2c5672b766d78ef584cd781d68509eac",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 25306,
            "upload_time": "2025-10-14T01:17:40",
            "upload_time_iso_8601": "2025-10-14T01:17:40.915030Z",
            "url": "https://files.pythonhosted.org/packages/18/b0/ef0106a8b28289877991a80119829faec9e0b9775eb3bc615c75be6ef232/splurge_dsv-2025.3.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "17ad1cbe637e2e5de8b93014727458a9348dddb350494abdb8e79dc1a53c56e7",
                "md5": "c0cda6bd7f6b0e4eba0ff4c52f14aec7",
                "sha256": "df9a68a0515041f4d6c143aee624d45bdef52c3fbc7c538d73125a11534bfa5b"
            },
            "downloads": -1,
            "filename": "splurge_dsv-2025.3.1.tar.gz",
            "has_sig": false,
            "md5_digest": "c0cda6bd7f6b0e4eba0ff4c52f14aec7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 26591,
            "upload_time": "2025-10-14T01:17:42",
            "upload_time_iso_8601": "2025-10-14T01:17:42.020454Z",
            "url": "https://files.pythonhosted.org/packages/17/ad/1cbe637e2e5de8b93014727458a9348dddb350494abdb8e79dc1a53c56e7/splurge_dsv-2025.3.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-14 01:17:42",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jim-schilling",
    "github_project": "splurge-dsv",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "splurge-dsv"
}
        
Elapsed time: 1.41700s