Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 09:04:14 +08:00
commit 70c36b5eff
248 changed files with 47482 additions and 0 deletions

View File

@@ -0,0 +1,219 @@
#!/usr/bin/env python3
"""
Nested subcommands pattern (like git config get/set, kubectl config view).
Usage:
python nested-subparser.py config get database_url
python nested-subparser.py config set api_key abc123
python nested-subparser.py config list
python nested-subparser.py deploy start production --replicas 3
python nested-subparser.py deploy stop production
"""
import argparse
import sys
# Config command handlers
def config_get(args):
"""Get configuration value."""
print(f"Getting config: {args.key}")
# Simulate getting config
print(f"{args.key} = example_value")
def config_set(args):
"""Set configuration value."""
print(f"Setting config: {args.key} = {args.value}")
if args.force:
print("(Overwriting existing value)")
def config_list(args):
"""List all configuration values."""
print(f"Listing all configuration (format: {args.format})")
def config_delete(args):
"""Delete configuration value."""
if not args.force:
response = input(f"Delete {args.key}? (y/n): ")
if response.lower() != 'y':
print("Cancelled")
return 1
print(f"Deleted: {args.key}")
# Deploy command handlers
def deploy_start(args):
"""Start deployment."""
print(f"Starting deployment to {args.environment}")
print(f"Replicas: {args.replicas}")
print(f"Wait: {args.wait}")
def deploy_stop(args):
"""Stop deployment."""
print(f"Stopping deployment in {args.environment}")
def deploy_restart(args):
"""Restart deployment."""
print(f"Restarting deployment in {args.environment}")
if args.hard:
print("(Hard restart)")
def main():
# Main parser
parser = argparse.ArgumentParser(
description='Multi-level CLI tool with nested subcommands',
formatter_class=argparse.RawDescriptionHelpFormatter
)
parser.add_argument('--version', action='version', version='1.0.0')
# Top-level subparsers
subparsers = parser.add_subparsers(
dest='command',
help='Top-level commands',
required=True
)
# ===== Config command group =====
config_parser = subparsers.add_parser(
'config',
help='Manage configuration',
description='Configuration management commands'
)
# Config subcommands
config_subparsers = config_parser.add_subparsers(
dest='config_command',
help='Config operations',
required=True
)
# config get
config_get_parser = config_subparsers.add_parser(
'get',
help='Get configuration value'
)
config_get_parser.add_argument('key', help='Configuration key')
config_get_parser.set_defaults(func=config_get)
# config set
config_set_parser = config_subparsers.add_parser(
'set',
help='Set configuration value'
)
config_set_parser.add_argument('key', help='Configuration key')
config_set_parser.add_argument('value', help='Configuration value')
config_set_parser.add_argument(
'--force', '-f',
action='store_true',
help='Overwrite existing value'
)
config_set_parser.set_defaults(func=config_set)
# config list
config_list_parser = config_subparsers.add_parser(
'list',
help='List all configuration values'
)
config_list_parser.add_argument(
'--format',
choices=['text', 'json', 'yaml'],
default='text',
help='Output format (default: %(default)s)'
)
config_list_parser.set_defaults(func=config_list)
# config delete
config_delete_parser = config_subparsers.add_parser(
'delete',
help='Delete configuration value'
)
config_delete_parser.add_argument('key', help='Configuration key')
config_delete_parser.add_argument(
'--force', '-f',
action='store_true',
help='Delete without confirmation'
)
config_delete_parser.set_defaults(func=config_delete)
# ===== Deploy command group =====
deploy_parser = subparsers.add_parser(
'deploy',
help='Manage deployments',
description='Deployment management commands'
)
# Deploy subcommands
deploy_subparsers = deploy_parser.add_subparsers(
dest='deploy_command',
help='Deploy operations',
required=True
)
# deploy start
deploy_start_parser = deploy_subparsers.add_parser(
'start',
help='Start deployment'
)
deploy_start_parser.add_argument(
'environment',
choices=['development', 'staging', 'production'],
help='Target environment'
)
deploy_start_parser.add_argument(
'--replicas', '-r',
type=int,
default=1,
help='Number of replicas (default: %(default)s)'
)
deploy_start_parser.add_argument(
'--wait',
action='store_true',
help='Wait for deployment to complete'
)
deploy_start_parser.set_defaults(func=deploy_start)
# deploy stop
deploy_stop_parser = deploy_subparsers.add_parser(
'stop',
help='Stop deployment'
)
deploy_stop_parser.add_argument(
'environment',
choices=['development', 'staging', 'production'],
help='Target environment'
)
deploy_stop_parser.set_defaults(func=deploy_stop)
# deploy restart
deploy_restart_parser = deploy_subparsers.add_parser(
'restart',
help='Restart deployment'
)
deploy_restart_parser.add_argument(
'environment',
choices=['development', 'staging', 'production'],
help='Target environment'
)
deploy_restart_parser.add_argument(
'--hard',
action='store_true',
help='Perform hard restart'
)
deploy_restart_parser.set_defaults(func=deploy_restart)
# Parse arguments
args = parser.parse_args()
# Call the appropriate command function
return args.func(args)
if __name__ == '__main__':
sys.exit(main() or 0)