Vendor synchronization tool.
Project description
splurge-vendor-sync
A powerful CLI tool for one-way vendor synchronization of Python libraries and applications. Automatically synchronize internal package dependencies into your project's vendor directory with selective file filtering and automatic cleanup.
Features
- One-way synchronization: Clean removal and fresh copy of vendor packages
- Selective file filtering: Include only the file types you need (default:
.py,.json,.yml,.yaml,.ini) - Automatic cleanup: Removes outdated vendor files before syncing new ones
- Exclusion support: Automatically excludes
__pycache__and other build artifacts - Version scanning: Scan vendored packages to extract version information with
--scan - Cross-platform: Works on Windows, Linux, and macOS
- Safe I/O: Uses deterministic newline normalization and secure path validation
- Clear error reporting: Domain-based exception hierarchy with actionable error messages
Quick Start
Installation
# From source
pip install -e .
# Or after packaging
pip install splurge-vendor-sync
Basic Usage
Synchronize a source package to your project's vendor directory:
splurge-vendor-sync \
--source /path/to/splurge-vendor-sync \
--package splurge_exceptions \
--target /path/to/my-project/my_project
This will:
- Remove all existing files from
/path/to/my-project/my_project/_vendor/splurge_exceptions/ - Copy all
.py,.json,.yml,.yaml,.inifiles from the source package - Preserve the directory structure
- Exclude
__pycache__directories
With Custom Extensions
splurge-vendor-sync \
--source /path/to/splurge-vendor-sync \
--package splurge_exceptions \
--target /path/to/my-project/my_project \
--ext "py;json;yaml"
With Custom Vendor Directory
splurge-vendor-sync \
--source /path/to/splurge-vendor-sync \
--package splurge_exceptions \
--target /path/to/my-project/my_project \
--vendor "_vendored"
Scan Vendored Packages
# Scan for __version__ in all vendored packages
splurge-vendor-sync \
--target /path/to/my-project/my_project \
--scan
# Scan with custom version tag
splurge-vendor-sync \
--target /path/to/my-project/my_project \
--scan MY_VERSION
# Scan with custom vendor directory
splurge-vendor-sync \
--target /path/to/my-project/my_project \
--vendor custom_vendor \
--scan
Documentation
- CLI Reference: Complete command-line interface documentation with examples
- API Reference: Complete Python API reference for programmatic use
- Features & Errors: Comprehensive guide to features, error handling, and troubleshooting
Exit Codes
0: Synchronization completed successfully1: Runtime error (I/O failure, permission denied, etc.)2: Validation error (invalid paths, missing arguments, etc.)
Common Scenarios
Sync after updating source package
# Re-run the same command - old files are automatically removed
splurge-vendor-sync \
--source /path/to/splurge-vendor-sync \
--package splurge_exceptions \
--target /path/to/my-project/my_project
Sync multiple packages
# Create a script to sync all your vendored dependencies
splurge-vendor-sync --source /path/to/splurge-vendor-sync --package splurge_exceptions --target /path/to/my-project/my_project
splurge-vendor-sync --source /path/to/splurge-safe-io --package splurge_safe_io --target /path/to/my-project/my_project
Troubleshooting
Q: "File not found" error
A: Verify the --source and --target paths exist and the --package directory name is correct.
Q: "Permission denied" error
A: Ensure you have write permissions to the target directory.
Q: Files not being copied
A: Check that the file extensions match your --ext parameter (default: py;json;yml;yaml;ini)
For more help, see Features & Errors.
Development
Running Tests
pytest tests/
pytest --cov=splurge_vendor_sync tests/
Code Quality
black splurge_vendor_sync/
pylint splurge_vendor_sync/
mypy splurge_vendor_sync/
License
See LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file splurge_vendor_sync-2025.1.2.tar.gz.
File metadata
- Download URL: splurge_vendor_sync-2025.1.2.tar.gz
- Upload date:
- Size: 46.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
baf8c60f577234f5db9d24df8eb368699cfd409ccc9ffff7d5cb5e599c0f720f
|
|
| MD5 |
c7f4bccd11cff6bfb98b12ac9b78d3c9
|
|
| BLAKE2b-256 |
e0366b276fceade368fdcd7d3c663147c23cc01f0318f46346837fd789f8b4a1
|
File details
Details for the file splurge_vendor_sync-2025.1.2-py3-none-any.whl.
File metadata
- Download URL: splurge_vendor_sync-2025.1.2-py3-none-any.whl
- Upload date:
- Size: 55.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6ca59c7ff3e9c8d8daebf3199e0886d76cc601e18987ab74491d532940c016a
|
|
| MD5 |
3fa1006c73f8ee2ec777c81b99e499d2
|
|
| BLAKE2b-256 |
83ac7eea3af3c2f1ef6c0671dbc58996a6e825e4cc8caf26fe98d52532f88770
|