Skip to main content

Cross-platform file operations toolkit with path handling, verification, and metadata preservation

Project description

dazzle-filekit

PyPI version Python 3.9+ License: MIT Platform GitHub Discussions

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 unctools for 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 format
  • path_exists_cross_platform(path) - Check path existence across formats
  • is_windows() / is_unix() - Platform detection

Path Functions

  • normalize_path(path) - Normalize path to canonical form
  • is_same_file(path1, path2) - Check if paths refer to same file
  • split_drive_letter(path) - Split drive letter from path (Windows)
  • is_unc_path(path) - Check if path is UNC format
  • get_relative_path(path, base) - Get relative path from base
  • find_files(directory, patterns, exclude) - Find files matching patterns
  • get_path_type(path) - Detect path type (unc, network, subst, local)

File Operations

  • copy_file(src, dst, preserve_metadata) - Copy file with options
  • move_file(src, dst, preserve_metadata) - Move file with options
  • collect_file_metadata(path) - Collect file metadata
  • apply_file_metadata(path, metadata) - Apply metadata to file
  • create_directory_structure(path) - Create directory tree
  • remove_file(path) - Remove file safely
  • remove_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 sufficient
  • calculate_total_size(paths) - Calculate total size of files/directories
  • ensure_disk_space(dest, sources, margin) - Verify space for copy operation

Verification Functions

  • calculate_file_hash(path, algorithm) - Calculate file hash
  • verify_file_hash(path, expected_hash, algorithm) - Verify hash
  • calculate_directory_hashes(directory, algorithm) - Hash all files in directory
  • save_hashes_to_file(hashes, output_file) / load_hashes_from_file(hash_file) - Hash persistence
  • compare_directories(dir1, dir2) - Compare directory contents
  • verify_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?

"Buy Me A Coffee"

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

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

dazzle_filekit-0.2.0.tar.gz (32.4 kB view details)

Uploaded Source

Built Distribution

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

dazzle_filekit-0.2.0-py3-none-any.whl (30.7 kB view details)

Uploaded Python 3

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

Hashes for dazzle_filekit-0.2.0.tar.gz
Algorithm Hash digest
SHA256 387eed2d3b4f3a39ebcac291f5d99c3a76b819cbc2fae72e7caa1d28f1efab7a
MD5 ca3828ef716ca35729b42352f4aa1475
BLAKE2b-256 cd99b522fa974fe3ed8043dc28b14478ca2f0c0b07a15e413060a0ae5a1e19bb

See more details on using hashes here.

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

Hashes for dazzle_filekit-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bdda0ac335da9d30f2fd2b8e9d35c8e08ec2bc8f8c739aed692b7469a7ff7cbf
MD5 7b5a1771fc566f56310c96a35ae8251f
BLAKE2b-256 f95f559ea90da9548d64ea0194db9ab49c176451ca4c75bee9bb10a2f269eae9

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