-
Notifications
You must be signed in to change notification settings - Fork 19
Installation simulation mode fix #103 #264
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
32a52bc
91d4b9b
0ffa3d8
a8fec36
a7f018b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -24,6 +24,7 @@ | |
| print_all_preferences, | ||
| format_preference_value | ||
| ) | ||
| from cortex.preflight_checker import PreflightChecker, format_report, export_report | ||
| from cortex.branding import ( | ||
| console, | ||
| cx_print, | ||
|
|
@@ -111,7 +112,12 @@ | |
| def _clear_line(self): | ||
| sys.stdout.write('\r\033[K') | ||
| sys.stdout.flush() | ||
|
|
||
|
|
||
| def install(self, software: str, execute: bool = False, dry_run: bool = False, simulate: bool = False): | ||
|
Check warning on line 116 in cortex/cli.py
|
||
| # Handle simulation mode first - no API key needed | ||
| if simulate: | ||
| return self._run_simulation(software) | ||
|
|
||
|
Comment on lines
+116
to
+120
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Duplicate There are two
Because Python uses the last definition, the stub at 116–120 is completely shadowed. The active signature is return cli.install(args.software, execute=args.execute, dry_run=args.dry_run, simulate=args.simulate)This will raise You should consolidate to a single @@
- def _clear_line(self):
- sys.stdout.write('\r\033[K')
- sys.stdout.flush()
-
- def install(self, software: str, execute: bool = False, dry_run: bool = False, simulate: bool = False):
- # Handle simulation mode first - no API key needed
- if simulate:
- return self._run_simulation(software)
-
+ def _clear_line(self):
+ sys.stdout.write('\r\033[K')
+ sys.stdout.flush()
@@
- def install(self, software: str, execute: bool = False, dry_run: bool = False):
- # Validate input first
+ def install(
+ self,
+ software: str,
+ execute: bool = False,
+ dry_run: bool = False,
+ simulate: bool = False,
+ ) -> int:
+ # Handle simulation mode first - no API key needed
+ if simulate:
+ return self._run_simulation(software)
+
+ # Validate input first
is_valid, error = validate_install_request(software)
@@
- try:
- if args.command == 'install':
- return cli.install(args.software, execute=args.execute, dry_run=args.dry_run, simulate=args.simulate)
+ try:
+ if args.command == 'install':
+ return cli.install(
+ args.software,
+ execute=args.execute,
+ dry_run=args.dry_run,
+ simulate=args.simulate,
+ )
@@
- elif args.command == 'status':
- return cli.status()
- elif args.command == 'install':
- return cli.install(args.software, execute=args.execute, dry_run=args.dry_run)
+ elif args.command == 'status':
+ return cli.status()This preserves all existing behavior, fixes the Also applies to: 185-303, 660-669 🧰 Tools🪛 GitHub Check: SonarCloud Code Analysis[warning] 116-116: Remove the unused function parameter "dry_run". [warning] 116-116: Remove the unused function parameter "execute". 🤖 Prompt for AI Agents |
||
| # --- New Notification Method --- | ||
| def notify(self, args): | ||
| """Handle notification commands""" | ||
|
|
@@ -310,6 +316,30 @@ | |
| history.update_installation(install_id, InstallationStatus.FAILED, str(e)) | ||
| self._print_error(f"Unexpected error: {str(e)}") | ||
| return 1 | ||
|
|
||
| def _run_simulation(self, software: str) -> int: | ||
| """Run preflight simulation check for installation""" | ||
| try: | ||
| # Get API key for LLM-powered package info (optional). | ||
| api_key = os.environ.get('OPENAI_API_KEY') or os.environ.get('ANTHROPIC_API_KEY') | ||
Sahilbhatane marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| provider = self._get_provider() if api_key else 'openai' | ||
|
|
||
| # Create checker with optional API key for enhanced accuracy | ||
| checker = PreflightChecker(api_key=api_key, provider=provider) | ||
| report = checker.run_all_checks(software) | ||
|
|
||
| # Print formatted report | ||
| output = format_report(report, software) | ||
| print(output) | ||
|
|
||
| # Return error code if blocking issues found | ||
| if report.errors: | ||
| return 1 | ||
| return 0 | ||
|
|
||
| except Exception as e: | ||
| self._print_error(f"Simulation failed: {str(e)}") | ||
| return 1 | ||
|
|
||
| def history(self, limit: int = 20, status: Optional[str] = None, show_id: Optional[str] = None): | ||
| """Show installation history""" | ||
|
|
@@ -577,6 +607,7 @@ | |
| install_parser.add_argument('software', type=str, help='Software to install') | ||
| install_parser.add_argument('--execute', action='store_true', help='Execute commands') | ||
| install_parser.add_argument('--dry-run', action='store_true', help='Show commands only') | ||
| install_parser.add_argument('--simulate', action='store_true', help='Simulate installation without making changes') | ||
|
|
||
| # History command | ||
| history_parser = subparsers.add_parser('history', help='View history') | ||
|
|
@@ -626,6 +657,8 @@ | |
| cli = CortexCLI(verbose=args.verbose) | ||
|
|
||
| try: | ||
| if args.command == 'install': | ||
| return cli.install(args.software, execute=args.execute, dry_run=args.dry_run, simulate=args.simulate) | ||
| if args.command == 'demo': | ||
| return cli.demo() | ||
| elif args.command == 'wizard': | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.