# splurge-dsv
[](https://pypi.org/project/splurge-dsv/)
[](https://pypi.org/project/splurge-dsv/)
[](https://opensource.org/licenses/MIT)
[](https://github.com/jim-schilling/splurge-dsv/actions/workflows/ci-quick-test.yml)
[](https://github.com/jim-schilling/splurge-dsv)
[](https://github.com/astral-sh/ruff)
[](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[](https://pypi.org/project/splurge-dsv/)\r\n[](https://pypi.org/project/splurge-dsv/)\r\n[](https://opensource.org/licenses/MIT)\r\n\r\n[](https://github.com/jim-schilling/splurge-dsv/actions/workflows/ci-quick-test.yml)\r\n[](https://github.com/jim-schilling/splurge-dsv)\r\n[](https://github.com/astral-sh/ruff)\r\n[](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"
}