feat: hook manager

This commit is contained in:
2025-10-16 14:59:06 +08:00
parent 90719b8416
commit a5299f2455
5 changed files with 198 additions and 33 deletions

View File

@ -4,8 +4,12 @@ Command-line interface for scientific-surfing package.
import argparse
import sys
from scientific_surfing.storage import StorageManager
from scientific_surfing.subscription_manager import SubscriptionManager
from scientific_surfing.corecfg_manager import CoreConfigManager
from scientific_surfing.corecfg_manager import CoreConfigManager
from scientific_surfing.core_manager import CoreManager
from scientific_surfing.hook_manager import HookManager
def create_parser() -> argparse.ArgumentParser:
"""Create the argument parser."""
@ -85,6 +89,24 @@ def create_parser() -> argparse.ArgumentParser:
update_parser.add_argument('--version', help='Specific version to download (e.g., v1.18.5). If not specified, downloads latest')
update_parser.add_argument('--force', action='store_true', help='Force update even if binary already exists')
# Hook commands
hook_parser = subparsers.add_parser('hook', help='Manage hook scripts')
hook_subparsers = hook_parser.add_subparsers(dest='hook_command', help='Hook operations')
# Init hooks command
init_parser = hook_subparsers.add_parser('init', help='Initialize hooks directory with template scripts')
# Show hooks command
list_hooks_parser = hook_subparsers.add_parser('list', help='Show hooks directory location and list scripts')
# Edit hook command
edit_hook_parser = hook_subparsers.add_parser('edit', help='Edit a hook script')
edit_hook_parser.add_argument('script', help='Name of the script to edit')
# Remove hook command
rm_hook_parser = hook_subparsers.add_parser('rm', help='Remove a hook script')
rm_hook_parser.add_argument('script', help='Name of the script to remove')
return parser
@ -97,27 +119,33 @@ def main() -> None:
parser.print_help()
return
storage = StorageManager()
subscription_manager = SubscriptionManager(storage)
core_config_manager = CoreConfigManager(subscription_manager)
core_manager = CoreManager(core_config_manager)
hook_manager = HookManager(storage)
try:
if args.command == 'subscription':
if not hasattr(args, 'subcommand') or not args.subcommand:
parser.parse_args(['subscription', '--help'])
return
manager = SubscriptionManager()
if args.subcommand == 'add':
manager.add_subscription(args.name, args.url)
subscription_manager.add_subscription(args.name, args.url)
elif args.subcommand == 'refresh':
manager.refresh_subscription(args.name)
subscription_manager.refresh_subscription(args.name)
elif args.subcommand == 'rm':
manager.delete_subscription(args.name)
subscription_manager.delete_subscription(args.name)
elif args.subcommand == 'rename':
manager.rename_subscription(args.name, args.new_name)
subscription_manager.rename_subscription(args.name, args.new_name)
elif args.subcommand == 'activate':
manager.activate_subscription(args.name)
subscription_manager.activate_subscription(args.name)
elif args.subcommand == 'list':
manager.list_subscriptions()
subscription_manager.list_subscriptions()
elif args.subcommand == 'storage':
manager.show_storage_info()
subscription_manager.show_storage_info()
else:
parser.parse_args(['subscription', '--help'])
@ -126,10 +154,6 @@ def main() -> None:
parser.parse_args(['core-config', '--help'])
return
from scientific_surfing.corecfg_manager import CoreConfigManager
from scientific_surfing.core_manager import CoreManager
core_config_manager = CoreConfigManager()
core_manager = CoreManager(core_config_manager)
if args.core_config_command == 'import':
core_config_manager.import_config(args.source)
@ -143,8 +167,6 @@ def main() -> None:
core_config_manager.show_config()
elif args.core_config_command == 'apply':
core_config_manager.apply()
elif args.core_config_command == 'upgrade':
core_manager.update(version=args.version, force=args.force)
else:
parser.parse_args(['core-config', '--help'])
@ -153,16 +175,29 @@ def main() -> None:
parser.parse_args(['core', '--help'])
return
from scientific_surfing.corecfg_manager import CoreConfigManager
from scientific_surfing.core_manager import CoreManager
core_config_manager = CoreConfigManager()
core_manager = CoreManager(core_config_manager)
if args.core_command == 'update':
core_manager.update(version=args.version, force=args.force)
else:
parser.parse_args(['core', '--help'])
elif args.command == 'hook':
if not hasattr(args, 'hook_command') or not args.hook_command:
parser.parse_args(['hook', '--help'])
return
if args.hook_command == 'init':
hook_manager.init()
elif args.hook_command == 'list':
hook_manager.list()
elif args.hook_command == 'edit':
hook_manager.edit(args.script)
elif args.hook_command == 'rm':
hook_manager.rm(args.script)
else:
parser.parse_args(['hook', '--help'])
else:
parser.print_help()
except KeyboardInterrupt:
@ -170,6 +205,7 @@ def main() -> None:
sys.exit(1)
except Exception as e:
print(f"❌ Error: {e}")
raise
sys.exit(1)