Files
aitbc/cli/main_minimal.py
aitbc1 c0952c2525 refactor: flatten CLI directory structure - remove 'box in a box'
BEFORE:
/opt/aitbc/cli/
├── aitbc_cli/                    # Python package (box in a box)
│   ├── commands/
│   ├── main.py
│   └── ...
├── setup.py

AFTER:
/opt/aitbc/cli/                    # Flat structure
├── commands/                      # Direct access
├── main.py                        # Direct access
├── auth/
├── config/
├── core/
├── models/
├── utils/
├── plugins.py
└── setup.py

CHANGES MADE:
- Moved all files from aitbc_cli/ to cli/ root
- Fixed all relative imports (from . to absolute imports)
- Updated setup.py entry point: aitbc_cli.main → main
- Added CLI directory to Python path in entry script
- Simplified deployment.py to remove dependency on deleted core.deployment
- Fixed import paths in all command files
- Recreated virtual environment with new structure

BENEFITS:
- Eliminated 'box in a box' nesting
- Simpler directory structure
- Direct access to all modules
- Cleaner imports
- Easier maintenance and development
- CLI works with both 'python main.py' and 'aitbc' commands
2026-03-26 09:12:02 +01:00

109 lines
3.5 KiB
Python
Executable File

#!/usr/bin/env python3
"""
AITBC CLI - Minimal Version with Working Commands Only
"""
import click
import sys
import os
from pathlib import Path
# Add CLI directory to Python path
CLI_DIR = Path(__file__).parent
sys.path.insert(0, str(CLI_DIR))
# Import only working commands
from .commands.wallet import wallet
from .commands.config import config
from .commands.blockchain import blockchain
from .commands.compliance import compliance
@click.group()
@click.option('--url', help='Coordinator API URL (overrides config)')
@click.option('--api-key', help='API key (overrides config)')
@click.option('--output', type=click.Choice(['table', 'json', 'yaml']), default='table', help='Output format')
@click.option('-v', '--verbose', count=True, help='Increase verbosity (use -v, -vv, -vvv)')
@click.option('--debug', is_flag=True, help='Enable debug mode')
@click.option('--config-file', help='Path to config file')
@click.option('--test-mode', is_flag=True, help='Enable test mode (uses mock data and test endpoints)')
@click.option('--dry-run', is_flag=True, help='Dry run mode (show what would be done without executing)')
@click.option('--timeout', type=int, help='Request timeout in seconds (useful for testing)')
@click.option('--no-verify', is_flag=True, help='Skip SSL certificate verification (testing only)')
@click.version_option(version='0.1.0', prog_name='AITBC CLI')
@click.pass_context
def cli(ctx, url, api_key, output, verbose, debug, config_file, test_mode, dry_run, timeout, no_verify):
"""AITBC CLI - Command Line Interface for AITBC Network
Manage jobs, mining, wallets, blockchain operations, and AI services.
"""
# Ensure that ctx.obj exists and is a dict
ctx.ensure_object(dict)
# Initialize config
try:
config = get_config(config_file)
if url:
config.coordinator_url = url
if api_key:
config.api_key = api_key
if timeout:
config.timeout = timeout
except Exception as e:
# Create a minimal config if loading fails
config = type('Config', (), {
'coordinator_url': url or 'http://127.0.0.1:8000',
'api_key': api_key,
'timeout': timeout or 30,
'config_file': config_file
})()
# Store global options and config in context
ctx.obj.update({
'url': url,
'api_key': api_key,
'output': output,
'verbose': verbose,
'debug': debug,
'config_file': config_file,
'test_mode': test_mode,
'dry_run': dry_run,
'timeout': timeout,
'no_verify': no_verify,
'config': config,
'output_format': output
})
# Add working commands
cli.add_command(wallet)
cli.add_command(config)
cli.add_command(blockchain)
cli.add_command(compliance)
@cli.command()
def version():
"""Show version information"""
click.echo("AITBC CLI version 0.1.0")
@cli.command()
def config_show():
"""Show current configuration"""
click.echo("Configuration display (minimal version)")
click.echo("Use 'aitbc config --help' for configuration options")
def main():
"""Main entry point"""
try:
cli()
except KeyboardInterrupt:
click.echo("\nOperation cancelled by user", err=True)
sys.exit(1)
except Exception as e:
if 'debug' in sys.argv or '--debug' in sys.argv:
import traceback
traceback.print_exc()
else:
click.echo(f"Error: {e}", err=True)
sys.exit(1)
if __name__ == '__main__':
main()