11import argparse
2+ import os
3+ import sys
24from pathlib import Path
5+ from typing import Optional
6+
7+ from colorama import init
8+ from pyfiglet import Figlet
9+ import inquirer
310
411from utils .scraper .chrome_scraper import ChromePageScraper
512
13+ project_root = os .path .dirname (os .path .dirname (os .path .abspath (__file__ )))
614
7- def main ():
8- parser = argparse .ArgumentParser (prog = "psaf" , description = "PSAF CLI Tool" )
15+ sys .path .insert (0 , project_root )
916
10- # Subcommand for 'get' operations
11- subparsers = parser .add_subparsers (dest = "command" )
1217
13- # Subcommand for 'get chromedriver'
14- get_parser = subparsers .add_parser ("get" , help = "Get a specific resource" )
15- get_subparsers = get_parser .add_subparsers (dest = "resource" )
18+ __version__ = "1.1.0"
1619
17- # Subcommand for 'chromedriver' under 'get'
18- chromedriver_parser = get_subparsers .add_parser (
19- "chromedriver" , help = "Download the ChromeDriver"
20- )
20+ TASKS = {
21+ "chromedriver" : ["get_driver_by_milestone" , "exit" ],
22+ "firefox" : ["download_geckodriver" , "exit" ],
23+ }
24+
25+
26+ def parse_args () -> argparse .Namespace :
27+ """Parse command line arguments."""
28+ parser = argparse .ArgumentParser (description = "Driver Management Tool" )
29+
30+ # Adding subparsers for different drivers like chromedriver and geckodriver
31+ subparsers = parser .add_subparsers (dest = 'driver' , help = 'Choose a driver to manage' )
32+
33+ # ChromeDriver specific subparser
34+ chromedriver_parser = subparsers .add_parser ('chromedriver' , help = 'Manage ChromeDriver' )
2135 chromedriver_parser .add_argument (
22- "--platform" ,
23- type = str ,
24- help = "Specify the platform (e.g., 'win32', 'linux64')." ,
36+ "-v" , "--version" , action = "store_true" , help = "Show version and exit."
2537 )
2638 chromedriver_parser .add_argument (
27- "--version" ,
28- type = str ,
29- help = "Specify the version of ChromeDriver." ,
39+ "-d" , "--docs" , action = "store_true" , help = "Show documentation and exit."
3040 )
3141 chromedriver_parser .add_argument (
42+ "-milestone" ,
3243 "--milestone" ,
3344 type = str ,
34- help = "Specify the milestone of ChromeDriver." ,
35- )
36- chromedriver_parser .add_argument (
37- "--output-dir" ,
38- type = str ,
39- help = "Directory to save the downloaded ChromeDriver." ,
40- )
41- chromedriver_parser .add_argument (
42- "--extract" ,
43- action = "store_true" ,
44- help = "Extract the downloaded ChromeDriver." ,
45+ required = True , # Make milestone required
46+ help = "Specify the milestone version (e.g., '131')." ,
4547 )
4648
47- args = parser .parse_args ()
49+ return parser .parse_args ()
50+
51+
52+ def execute_task (task : str , milestone : str , version : Optional [str ]) -> None :
53+ """Execute the selected task."""
54+ try :
55+ match task :
56+ case "get_driver_by_milestone" :
57+ print (f"Downloading ChromeDriver for version { milestone } ..." )
58+ ChromePageScraper .get_chromedriver (milestone = milestone , version = version )
59+ case "TODO_download_geckodriver_TODO" :
60+ print (f" Downloading GeckoDriver for version { milestone } ..." )
61+ case "exit" :
62+ exit (0 )
63+ case _:
64+ print (f"Task '{ task } ' is not supported." )
65+ except Exception as e :
66+ print (f"Error executing task '{ task } ': { e } " )
67+
68+
69+ def main () -> None :
70+ """Entry point for the Driver Management CLI."""
71+ init ()
72+ f = Figlet (font = "Slant" )
73+ print (f .renderText ("Driver Tool" ))
74+
75+ args = parse_args ()
76+
77+ # Show version or documentation if requested
78+ if args .version :
79+ print (f"Driver Tool version: { __version__ } " )
80+ return
81+ if args .docs :
82+ print ("Documentation: This is a CLI tool to manage drivers like ChromeDriver and GeckoDriver." )
83+ return
84+
85+ # Get available tasks based on the selected driver and milestone
86+ if args .driver == 'chromedriver' and args .milestone :
87+ available_tasks = TASKS .get ("chromedriver" , [])
88+ if not available_tasks :
89+ print (f"No tasks available for the selected milestone: { args .milestone } " )
90+ return
4891
49- if args .command == "get" and args .resource == "chromedriver" :
50- output_dir = Path (args .output_dir ) if args .output_dir else None
51- ChromePageScraper .get_chromedriver (
52- platform = args .platform ,
53- version = args .version ,
54- milestone = args .milestone ,
55- d_dir = output_dir ,
56- is_extracted = args .extract ,
57- )
92+ try :
93+ while True :
94+ answers = inquirer .prompt (
95+ [
96+ inquirer .List (
97+ "task" ,
98+ message = f"What task do you want to perform for ChromeDriver { args .milestone } ?" ,
99+ choices = available_tasks ,
100+ )
101+ ]
102+ )
103+ task = answers ["task" ]
104+ execute_task (task , milestone = args .milestone , version = None )
105+ except KeyboardInterrupt :
106+ print ("\n Exiting..." )
107+ except Exception as e :
108+ print (f"Unexpected error: { e } " )
58109
59110
60111if __name__ == "__main__" :
61- main ()
112+ main ()
0 commit comments