feat: Issue #38 Phase 1 - Command Restructuring with db-data Implementation
Some checks failed
Test Suite / unit-tests (3.11) (push) Has been cancelled
Test Suite / unit-tests (3.12) (push) Has been cancelled
Test Suite / integration-tests (push) Has been cancelled
Test Suite / e2e-tests (push) Has been cancelled
Test Suite / performance-tests (push) Has been cancelled
Test Suite / code-quality (push) Has been cancelled
Test Suite / security-scan (push) Has been cancelled
Test Suite / test-summary (push) Has been cancelled
Some checks failed
Test Suite / unit-tests (3.11) (push) Has been cancelled
Test Suite / unit-tests (3.12) (push) Has been cancelled
Test Suite / integration-tests (push) Has been cancelled
Test Suite / e2e-tests (push) Has been cancelled
Test Suite / performance-tests (push) Has been cancelled
Test Suite / code-quality (push) Has been cancelled
Test Suite / security-scan (push) Has been cancelled
Test Suite / test-summary (push) Has been cancelled
## Command Restructuring Implementation - Add new db-data command as replacement for metadata command - Implement complete functionality matching original metadata command - Support all output formats (table, json, yaml, simple) - Follow established db- prefix pattern from Issue #39 ## Backward Compatibility & Migration - Maintain existing metadata command with full functionality - Add deprecation warnings using legacy compatibility system - Update help documentation with migration guidance - Provide clear examples showing new db-data usage ## CLI Enhancements - Consistent error handling across both commands - Comprehensive help documentation for smooth migration - Integration with existing legacy compatibility framework - Support for all established output format options ## Testing & Validation - Create comprehensive test suite for command restructuring - Verify backward compatibility with existing scripts - Test deprecation warning functionality - Validate format consistency between old and new commands ## GAMEPLAN Documentation - Create detailed implementation roadmap for all 5 phases - Document technical architecture for component separation - Establish testing strategy for comprehensive CLI enhancement - Plan future phases for content, frontmatter, and tailmatter commands Phase 1 Complete: ✅ Command restructuring with full backward compatibility Next: Phase 2 - Content commands (content-stats, content-get) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -766,16 +766,25 @@ def metadata(config, file_path, format):
|
||||
"""
|
||||
Display file metadata and front matter.
|
||||
|
||||
DEPRECATED: Use 'db-data' instead. This command will be removed in a future version.
|
||||
|
||||
Show detailed information about a specific file including its
|
||||
front matter, database metadata, and processing information.
|
||||
|
||||
FILE_PATH: Name of the file to display metadata for
|
||||
|
||||
Examples:
|
||||
markitect metadata README.md
|
||||
markitect metadata docs/guide.md --format json
|
||||
markitect metadata config.md --format yaml
|
||||
markitect metadata README.md (deprecated - use: markitect db-data README.md)
|
||||
markitect metadata docs/guide.md --format json (deprecated - use: markitect db-data docs/guide.md --format json)
|
||||
markitect metadata config.md --format yaml (deprecated - use: markitect db-data config.md --format yaml)
|
||||
"""
|
||||
# Show deprecation warning (unless in legacy mode)
|
||||
if not LegacyMode.should_suppress_warnings():
|
||||
emit_deprecation_warning(
|
||||
"The 'metadata' command is deprecated. Please use 'db-data' instead. "
|
||||
"This command will be removed in a future version."
|
||||
)
|
||||
|
||||
try:
|
||||
if config['verbose']:
|
||||
click.echo(f"Retrieving metadata for: {file_path}", err=True)
|
||||
@@ -2135,6 +2144,65 @@ def db_status(config, format, database):
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
@cli.command('db-data')
|
||||
@click.argument('file_path', type=str)
|
||||
@click.option('--format', '-f', type=click.Choice(['table', 'json', 'yaml', 'simple']),
|
||||
default=lambda: get_default_format(['table', 'json', 'yaml', 'simple']), help='Output format')
|
||||
@pass_config
|
||||
def db_data(config, file_path, format):
|
||||
"""
|
||||
Display complete file data including metadata, frontmatter, and content.
|
||||
|
||||
Show comprehensive information about a specific file including its
|
||||
front matter, database metadata, and processing information.
|
||||
This is the new name for what was previously called 'metadata'.
|
||||
|
||||
FILE_PATH: Name of the file to display data for
|
||||
|
||||
Examples:
|
||||
markitect db-data README.md
|
||||
markitect db-data docs/guide.md --format json
|
||||
markitect db-data config.md --format yaml
|
||||
"""
|
||||
try:
|
||||
if config['verbose']:
|
||||
click.echo(f"Retrieving complete data for: {file_path}", err=True)
|
||||
|
||||
db_manager = config['db_manager']
|
||||
|
||||
# Get file information from database
|
||||
file_info = db_manager.get_markdown_file(file_path)
|
||||
|
||||
if not file_info:
|
||||
click.echo(f"File not found in database: {file_path}", err=True)
|
||||
click.echo("Use 'markitect ingest' to process the file first.", err=True)
|
||||
sys.exit(1)
|
||||
|
||||
# Parse front matter for better display
|
||||
if file_info.get('front_matter'):
|
||||
try:
|
||||
if isinstance(file_info['front_matter'], str):
|
||||
file_info['front_matter'] = eval(file_info['front_matter'])
|
||||
except (ValueError, TypeError, SyntaxError):
|
||||
if config['verbose']:
|
||||
click.echo("Warning: Could not parse front matter", err=True)
|
||||
|
||||
# Format and display complete data
|
||||
formatted_output = format_output(file_info, format)
|
||||
click.echo(formatted_output)
|
||||
|
||||
if config['verbose']:
|
||||
content_length = len(file_info.get('content', ''))
|
||||
click.echo(f"Content length: {content_length} characters", err=True)
|
||||
|
||||
except Exception as e:
|
||||
click.echo(f"Error retrieving file data: {e}", err=True)
|
||||
if config['verbose']:
|
||||
import traceback
|
||||
click.echo(traceback.format_exc(), err=True)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def format_file_size(size_bytes):
|
||||
"""Format file size in human-readable format."""
|
||||
if size_bytes < 1024:
|
||||
|
||||
Reference in New Issue
Block a user