CommonClient: abstract url handling so it's importable (#4068)
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> Co-authored-by: Jouramie <16137441+Jouramie@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									eb3c3d6bf2
								
							
						
					
					
						commit
						992841a951
					
				|  | @ -31,6 +31,7 @@ import ssl | |||
| 
 | ||||
| if typing.TYPE_CHECKING: | ||||
|     import kvui | ||||
|     import argparse | ||||
| 
 | ||||
| logger = logging.getLogger("Client") | ||||
| 
 | ||||
|  | @ -1048,6 +1049,32 @@ def get_base_parser(description: typing.Optional[str] = None): | |||
|     return parser | ||||
| 
 | ||||
| 
 | ||||
| def handle_url_arg(args: "argparse.Namespace", | ||||
|                    parser: "typing.Optional[argparse.ArgumentParser]" = None) -> "argparse.Namespace": | ||||
|     """ | ||||
|     Parse the url arg "archipelago://name:pass@host:port" from launcher into correct launch args for CommonClient | ||||
|     If alternate data is required the urlparse response is saved back to args.url if valid | ||||
|     """ | ||||
|     if not args.url: | ||||
|         return args | ||||
|          | ||||
|     url = urllib.parse.urlparse(args.url) | ||||
|     if url.scheme != "archipelago": | ||||
|         if not parser: | ||||
|             parser = get_base_parser() | ||||
|         parser.error(f"bad url, found {args.url}, expected url in form of archipelago://archipelago.gg:38281") | ||||
|         return args | ||||
| 
 | ||||
|     args.url = url | ||||
|     args.connect = url.netloc | ||||
|     if url.username: | ||||
|         args.name = urllib.parse.unquote(url.username) | ||||
|     if url.password: | ||||
|         args.password = urllib.parse.unquote(url.password) | ||||
| 
 | ||||
|     return args | ||||
| 
 | ||||
| 
 | ||||
| def run_as_textclient(*args): | ||||
|     class TextContext(CommonContext): | ||||
|         # Text Mode to use !hint and such with games that have no text entry | ||||
|  | @ -1089,17 +1116,7 @@ def run_as_textclient(*args): | |||
|     parser.add_argument("url", nargs="?", help="Archipelago connection url") | ||||
|     args = parser.parse_args(args) | ||||
| 
 | ||||
|     # handle if text client is launched using the "archipelago://name:pass@host:port" url from webhost | ||||
|     if args.url: | ||||
|         url = urllib.parse.urlparse(args.url) | ||||
|         if url.scheme == "archipelago": | ||||
|             args.connect = url.netloc | ||||
|             if url.username: | ||||
|                 args.name = urllib.parse.unquote(url.username) | ||||
|             if url.password: | ||||
|                 args.password = urllib.parse.unquote(url.password) | ||||
|         else: | ||||
|             parser.error(f"bad url, found {args.url}, expected url in form of archipelago://archipelago.gg:38281") | ||||
|     args = handle_url_arg(args, parser=parser) | ||||
| 
 | ||||
|     # use colorama to display colored text highlighting on windows | ||||
|     colorama.init() | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue