5.7 KiB
add-file.py Refactor Summary
Changes Made
1. Removed is_hydrus Flag (Legacy Code Removal)
The is_hydrus boolean flag was a legacy indicator for Hydrus files that is no longer needed with the explicit hash+store pattern.
Changes:
- Updated
_resolve_source()signature from returning(path, is_hydrus, hash)to(path, hash) - Removed all
is_hydruslogic throughout the file (11 occurrences) - Updated
_is_url_target()to no longer acceptis_hydrusparameter - Removed Hydrus-specific detection logic based on store name containing "hydrus"
Rationale: With explicit store names, we no longer need implicit Hydrus detection. The store field in PipeObject provides clear backend identification.
2. Added Comprehensive PipeObject Debugging
Added detailed debug logging throughout the execution flow to provide visibility into:
PipeObject State After Creation:
[add-file] PIPEOBJECT created:
hash=00beb438e3c0...
store=local
file_path=C:\Users\Admin\Downloads\Audio\yapping.m4a
tags=[]
title=None
extra keys=[]
Input Result Details:
[add-file] INPUT result type=NoneType
Parsed Arguments:
[add-file] PARSED args: location=test, provider=None, delete=False
Source Resolution:
[add-file] RESOLVED source: path=C:\Users\Admin\Downloads\Audio\yapping.m4a, hash=N/A...
Execution Path Decision:
[add-file] DECISION POINT: provider=None, location=test
media_path=C:\Users\Admin\Downloads\Audio\yapping.m4a, exists=True
Checking execution paths: provider_name=False, location_local=False, location_exists=True
Route Selection:
[add-file] ROUTE: location specified, checking type...
[add-file] _is_local_path check: location=test, slash=False, backslash=False, colon=False, result=False
[add-file] _is_storage_backend check: location=test, backends=['default', 'home', 'test'], result=True
[add-file] ROUTE: storage backend path
Error Paths:
[add-file] ERROR: No location or provider specified - all checks failed
[add-file] ERROR: Invalid location (not local path or storage backend): {location}
3. Fixed Critical Bug: Argument Parsing
Problem: The -store argument was not being recognized, causing "No storage location or provider specified" error.
Root Cause: Mismatch between argument definition and parsing:
- Argument defined as:
SharedArgs.STORE(name="store") - Code was looking for:
parsed.get("storage")
Fix: Changed line 65 from:
location = parsed.get("storage")
to:
location = parsed.get("store") # Fixed: was "storage", should be "store"
4. Enhanced Helper Method Debugging
_is_local_path():
debug(f"[add-file] _is_local_path check: location={location}, slash={has_slash}, backslash={has_backslash}, colon={has_colon}, result={result}")
_is_storage_backend():
debug(f"[add-file] _is_storage_backend check: location={location}, backends={backends}, result={is_backend}")
debug(f"[add-file] _is_storage_backend ERROR: {exc}") # On exception
Testing Results
Before Fix:
[add-file] PARSED args: location=None, provider=None, delete=False
[add-file] ERROR: No location or provider specified - all checks failed
No storage location or provider specified
After Fix:
[add-file] PARSED args: location=test, provider=None, delete=False
[add-file] _is_storage_backend check: location=test, backends=['default', 'home', 'test'], result=True
[add-file] ROUTE: storage backend path
✓ File added to 'test': 00beb438e3c02cdc0340526deb0c51f916ffd6330259be4f350009869c5448d9
Impact
Files Modified:
cmdlets/add_file.py: ~15 replacements across 350+ lines
Backwards Compatibility:
- ✅ No breaking changes to command-line interface
- ✅ Existing pipelines continue to work
- ✅ Hash+store pattern fully enforced
Code Quality Improvements:
- Removed Legacy Code: Eliminated
is_hydrusflag (11 occurrences) - Enhanced Debugging: Added 15+ debug statements for full execution visibility
- Fixed Critical Bug: Corrected argument parsing mismatch
- Better Error Messages: All error paths now have debug context
Documentation
Debug Output Legend:
[add-file] PIPEOBJECT created:- Shows PipeObject state after coercion[add-file] INPUT result type=- Shows type of piped input[add-file] PARSED args:- Shows all parsed command-line arguments[add-file] RESOLVED source:- Shows resolved file path and hash[add-file] DECISION POINT:- Shows routing decision variables[add-file] ROUTE:- Shows which execution path is taken[add-file] ERROR:- Shows why operation failed
Execution Paths:
- Provider Upload (
provider_nameset) →_handle_provider_upload() - Local Import (
location == 'local') →_handle_local_import() - Local Export (location is path) →
_handle_local_export() - Storage Backend (location is backend name) →
_handle_storage_backend()✓ - Error (no location/provider) → Error message
Verification Checklist
is_hydruscompletely removed (0 occurrences)- All return tuples updated to exclude
is_hydrus - Comprehensive PipeObject debugging added
- Argument parsing bug fixed (
storage→store) - Helper method debugging enhanced
- Full execution path visibility achieved
- Tested with real command:
add-file -path "..." -store test✓
Related Refactorings
- PIPELINE_REFACTOR_SUMMARY.md: Removed backwards compatibility from pipeline.py
- MODELS_REFACTOR_SUMMARY.md: Refactored PipeObject to hash+store pattern
This refactor completes the trilogy of modernization efforts, ensuring add-file.py fully embraces the hash+store canonical pattern with zero legacy code.