11import argparse
22import sys
3+ from typing import Optional
34
45import flet .version
56import flet_cli .commands .build
1415
1516# Source https://stackoverflow.com/a/26379693
1617def set_default_subparser (
17- parser : argparse .ArgumentParser , name : str , args : list = None , index : int = 0
18- ):
18+ parser : argparse .ArgumentParser ,
19+ name : str ,
20+ args : Optional [list [str ]] = None ,
21+ index : int = 0 ,
22+ ) -> list [str ]:
1923 """
2024 Set a default subparser when no subparser is provided.
2125 This should be called after setting up the argument parser but before
@@ -28,9 +32,12 @@ def set_default_subparser(
2832 inserted.
2933 """
3034
35+ mutate_sys_argv = args is None
36+ current_args = list (sys .argv [1 :] if mutate_sys_argv else args )
37+
3138 # exit if help or version flags are present
32- if any (flag in sys . argv [ 1 :] for flag in {"-h" , "--help" , "-V" , "--version" }):
33- return
39+ if any (flag in current_args for flag in {"-h" , "--help" , "-V" , "--version" }):
40+ return current_args
3441
3542 # all subparser actions
3643 subparser_actions = [
@@ -45,22 +52,27 @@ def set_default_subparser(
4552 ]
4653
4754 # if an existing subparser is provided, skip setting a default
48- if any (arg in subparser_names for arg in sys . argv [ 1 :] ):
49- return
55+ if any (arg in subparser_names for arg in current_args ):
56+ return current_args
5057
5158 # if the default subparser doesn't exist, register it in the first subparser action
5259 if (name not in subparser_names ) and subparser_actions :
5360 subparser_actions [0 ].add_parser (name )
5461
5562 # insert the default subparser into the appropriate argument list
56- if args is None :
57- if len (sys .argv ) > 1 :
58- sys .argv .insert (index , name )
59- else :
60- args .insert (index , name )
63+ current_args .insert (index , name )
64+
65+ if mutate_sys_argv :
66+ sys .argv = [sys .argv [0 ], * current_args ]
67+
68+ return current_args
6169
6270
6371def main ():
72+ sys .exit (run ())
73+
74+
75+ def _create_parser () -> argparse .ArgumentParser :
6476 parser = argparse .ArgumentParser ()
6577 parser .add_argument (
6678 "--version" ,
@@ -81,19 +93,29 @@ def main():
8193 sp , "doctor"
8294 ) # Register the doctor command
8395
96+ return parser
97+
98+
99+ def run (args : Optional [list [str ]] = None ) -> int :
100+ parser = _create_parser ()
101+
102+ argv = list (args ) if args is not None else list (sys .argv [1 :])
103+
84104 # set "run" as the default subparser
85- set_default_subparser (parser , name = "run" , index = 1 )
105+ argv = set_default_subparser (parser , name = "run" , args = argv , index = 0 )
86106
87107 # print usage/help if called without arguments
88- if len ( sys . argv ) == 1 :
108+ if not argv :
89109 parser .print_help (sys .stdout )
90- sys . exit ( 1 )
110+ return 1
91111
92112 # parse arguments
93- args = parser .parse_args ()
113+ namespace = parser .parse_args (argv )
94114
95115 # execute command
96- args .handler (args )
116+ namespace .handler (namespace )
117+
118+ return 0
97119
98120
99121if __name__ == "__main__" :
0 commit comments