Cross-platform file operations toolkit with path handling, verification, and metadata preservation
Project description
dazzle-filekit
Cross-platform file operations with path handling, verification, and metadata preservation.
A Python toolkit for reliable file operations across Windows, Linux, and macOS. Handles path normalization between Git Bash, WSL, and native formats, file verification with multiple hash algorithms, and metadata-preserving copy/move operations.
Features
- Cross-Platform Paths - Normalize between Git Bash (
/c/...), WSL (/mnt/c/...), and native Windows/Unix paths - File Operations - Copy, move, and manage files with metadata preservation
- File Verification - Calculate and verify file hashes (MD5, SHA1, SHA256, SHA512)
- Disk Space Checking - Pre-flight space verification before operations
- Platform Support - Windows, Linux, macOS, and BSD with platform-specific optimizations
- UNC Path Support - Optional integration with
unctoolsfor Windows UNC path handling
Why dazzle-filekit?
While Python's standard library (shutil, pathlib, os) provides basic file operations, dazzle-filekit offers:
- Metadata Preservation: Automatic preservation of timestamps, permissions, and extended attributes across platforms
- Hash Verification: Built-in file verification with multiple hash algorithms (MD5, SHA1, SHA256, SHA512)
- Cross-Platform Path Handling: Unified API for handling Windows UNC paths, network drives, and Unix paths
- Batch Operations: Process entire directory trees with pattern matching and filtering
- Safe Operations: Built-in conflict resolution, unique path generation, and error handling
- Directory Comparison: Compare directory contents and verify file integrity across locations
dazzle-filekit was designed for applications requiring reliable file operations with verification, such as backup tools, file synchronization, and data preservation systems (like the preserve project).
Installation
pip install dazzle-filekit
Optional Dependencies
# Windows UNC path support
pip install dazzle-filekit[unctools]
# Development tools
pip install dazzle-filekit[dev]
Quick Start
Cross-Platform Path Handling
from dazzle_filekit import normalize_cross_platform_path, path_exists_cross_platform
# Convert Git Bash style paths to native format
# On Windows: /c/Users/foo -> C:\Users\foo
# On Unix: C:\Users\foo -> /c/Users/foo
path = normalize_cross_platform_path("/c/Users/foo/file.txt")
# Also handles WSL paths: /mnt/c/Users/...
path = normalize_cross_platform_path("/mnt/c/Users/foo/file.txt")
# Check if a cross-platform path exists
if path_exists_cross_platform("/c/Users/foo/file.txt"):
print("File exists!")
Path Operations
from dazzle_filekit import normalize_path, find_files, is_unc_path
# Normalize paths (returns Path object)
path = normalize_path("/some/path/../file.txt")
print(path) # PosixPath('/some/file.txt') or WindowsPath('C:/some/file.txt')
# Find files with patterns (returns list of path strings)
files = find_files("/directory", patterns=["*.py", "*.txt"])
# Check UNC paths
if is_unc_path(r"\\server\share"):
print("This is a UNC path")
File Operations
from dazzle_filekit import copy_file, collect_file_metadata
# Copy file with metadata preservation
success = copy_file("source.txt", "dest.txt", preserve_metadata=True)
# Collect file metadata
metadata = collect_file_metadata("file.txt")
print(f"Size: {metadata['size']}, Modified: {metadata['mtime']}")
Disk Space Checking
from dazzle_filekit import get_disk_usage, check_disk_space, ensure_disk_space
# Get disk usage statistics
usage = get_disk_usage("/path/to/check")
print(f"Total: {usage.total}, Free: {usage.free}, Used: {usage.used_percent:.1f}%")
# Check if space is available for an operation
has_space, required, available, message = check_disk_space(
"/destination",
required_bytes=1_000_000_000, # 1GB
safety_margin=0.1 # 10% extra margin
)
# Check space for a list of source files
has_space, message = ensure_disk_space(
dest_path="/destination",
source_paths=["/path/to/file1.zip", "/path/to/dir/"]
)
File Verification
from dazzle_filekit import calculate_file_hash, verify_file_hash
# Calculate hash
hash_value = calculate_file_hash("file.txt", algorithm="sha256")
# Verify hash
is_valid = verify_file_hash("file.txt", expected_hash, algorithm="sha256")
API Reference
Cross-Platform Utilities
normalize_cross_platform_path(path)- Normalize Git Bash/WSL/Windows paths to native formatpath_exists_cross_platform(path)- Check path existence across formatsis_windows()/is_unix()- Platform detection
Path Functions
normalize_path(path)- Normalize path to canonical formis_same_file(path1, path2)- Check if paths refer to same filesplit_drive_letter(path)- Split drive letter from path (Windows)is_unc_path(path)- Check if path is UNC formatget_relative_path(path, base)- Get relative path from basefind_files(directory, patterns, exclude)- Find files matching patternsget_path_type(path)- Detect path type (unc, network, subst, local)
File Operations
copy_file(src, dst, preserve_metadata)- Copy file with optionsmove_file(src, dst, preserve_metadata)- Move file with optionscollect_file_metadata(path)- Collect file metadataapply_file_metadata(path, metadata)- Apply metadata to filecreate_directory_structure(path)- Create directory treeremove_file(path)- Remove file safelyremove_directory(path, recursive)- Remove directory
Disk Space Functions
get_disk_usage(path)- Get disk usage statistics (total, used, free)check_disk_space(dest, required, margin)- Check if space is sufficientcalculate_total_size(paths)- Calculate total size of files/directoriesensure_disk_space(dest, sources, margin)- Verify space for copy operation
Verification Functions
calculate_file_hash(path, algorithm)- Calculate file hashverify_file_hash(path, expected_hash, algorithm)- Verify hashcalculate_directory_hashes(directory, algorithm)- Hash all files in directorysave_hashes_to_file(hashes, output_file)/load_hashes_from_file(hash_file)- Hash persistencecompare_directories(dir1, dir2)- Compare directory contentsverify_copied_files(src_dir, dst_dir)- Verify copy operation
Platform Support
See docs/platform-support.md for the full platform support matrix and platform-specific features.
| Platform | Status |
|---|---|
| Windows 10/11 | Tested |
| Linux | Tested |
| WSL / WSL2 | Tested |
| macOS | Expected to work |
| BSD | Expected to work |
Configuration
Logging
from dazzle_filekit import configure_logging, enable_verbose_logging
import logging
# Configure logging level
configure_logging(level=logging.DEBUG, log_file="dazzle-filekit.log")
# Or enable verbose logging
enable_verbose_logging()
Development
Setup Development Environment
git clone https://github.com/DazzleLib/dazzle-filekit.git
cd dazzle-filekit
pip install -e ".[dev]"
Run Tests
pytest tests/ -v --cov=dazzle_filekit
Code Formatting
black dazzle_filekit tests
flake8 dazzle_filekit tests
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Like the project?
License
This project is licensed under the MIT License - see the LICENSE file for details.
Part of DazzleLib
dazzle-filekit is part of the DazzleLib ecosystem of Python file manipulation tools.
Related Projects
- UNCtools - Windows UNC path utilities
- preserve - File preservation with manifest tracking and restoration
- dazzle-tree-lib - Tree structure utilities
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
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 dazzle_filekit-0.2.0.tar.gz.
File metadata
- Download URL: dazzle_filekit-0.2.0.tar.gz
- Upload date:
- Size: 32.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
387eed2d3b4f3a39ebcac291f5d99c3a76b819cbc2fae72e7caa1d28f1efab7a
|
|
| MD5 |
ca3828ef716ca35729b42352f4aa1475
|
|
| BLAKE2b-256 |
cd99b522fa974fe3ed8043dc28b14478ca2f0c0b07a15e413060a0ae5a1e19bb
|
File details
Details for the file dazzle_filekit-0.2.0-py3-none-any.whl.
File metadata
- Download URL: dazzle_filekit-0.2.0-py3-none-any.whl
- Upload date:
- Size: 30.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdda0ac335da9d30f2fd2b8e9d35c8e08ec2bc8f8c739aed692b7469a7ff7cbf
|
|
| MD5 |
7b5a1771fc566f56310c96a35ae8251f
|
|
| BLAKE2b-256 |
f95f559ea90da9548d64ea0194db9ab49c176451ca4c75bee9bb10a2f269eae9
|