Add support for composite location arguments
This commit is contained in:
parent
0e3f49d731
commit
cbf19aede9
1 changed files with 18 additions and 21 deletions
|
@ -24,7 +24,6 @@ from pathlib import Path
|
|||
from typing import Optional, Union
|
||||
import argparse
|
||||
import pprint
|
||||
import re
|
||||
import sys
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@ -60,17 +59,14 @@ if __name__ == '__main__':
|
|||
def __get_version():
|
||||
return metadata.version(__get_name())
|
||||
|
||||
def __parse_application_string(application_string: Optional[str] = None):
|
||||
def __parse_composite_argument(argument: str, first_key: str, second_key: str, separator: str = ':'):
|
||||
return dict(zip([first_key, second_key], argument.split(separator) + ['']))
|
||||
|
||||
if application_string is None:
|
||||
return dict(application_code='', version_number='')
|
||||
def __parse_application_argument(application_argument: str):
|
||||
return __parse_composite_argument(application_argument, 'application_code', 'version_number')
|
||||
|
||||
parsed_application_string = re.match('^(?P<application_code>.*?):(?P<version_number>.*?)$', application_string)
|
||||
|
||||
if parsed_application_string is None:
|
||||
return dict(application_code='', version_number='')
|
||||
else:
|
||||
return parsed_application_string.groupdict()
|
||||
def __parse_location_argument(location_argument: str):
|
||||
return __parse_composite_argument(location_argument, 'country_code', 'code')
|
||||
|
||||
def __sanitize_profile(candidate: Optional[Union[SessionProfile, SystemProfile]]):
|
||||
|
||||
|
@ -117,7 +113,7 @@ if __name__ == '__main__':
|
|||
session_profile_create_parser = profile_create_subparsers.add_parser('session', parents=[profile_base_parser, safe_parser])
|
||||
|
||||
session_profile_create_parser.add_argument('--name', '-n', default='')
|
||||
session_profile_create_parser.add_argument('--location', '-l', dest='location_code', default=None)
|
||||
session_profile_create_parser.add_argument('--location', '-l', default='')
|
||||
session_profile_create_parser.add_argument('--application', '-a', required=True)
|
||||
session_profile_create_parser.add_argument('--connection', '-c', dest='connection_type', choices=['system', 'tor', 'wireguard'], default='system')
|
||||
session_profile_create_parser.add_argument('--mask-connection', '-m', action='store_true')
|
||||
|
@ -126,7 +122,7 @@ if __name__ == '__main__':
|
|||
system_profile_create_parser = profile_create_subparsers.add_parser('system', parents=[profile_base_parser, safe_parser])
|
||||
|
||||
system_profile_create_parser.add_argument('--name', '-n', default='')
|
||||
system_profile_create_parser.add_argument('--location', '-l', dest='location_code', default=None)
|
||||
system_profile_create_parser.add_argument('--location', '-l', default='')
|
||||
system_profile_create_parser.add_argument('--connection', '-c', dest='connection_type', choices=['wireguard'], default='wireguard')
|
||||
|
||||
profile_subparsers.add_parser('destroy', parents=[profile_base_parser, safe_parser])
|
||||
|
@ -187,15 +183,16 @@ if __name__ == '__main__':
|
|||
|
||||
elif arguments.subcommand == 'create':
|
||||
|
||||
location = LocationController.get(arguments.location_code)
|
||||
location_details = __parse_location_argument(arguments.location)
|
||||
location = LocationController.get(location_details.get('country_code'), location_details.get('code'))
|
||||
|
||||
if location is None:
|
||||
main_parser.error('the following argument should be a valid reference: --location/-l')
|
||||
|
||||
if arguments.profile_type == 'session':
|
||||
|
||||
application_details = __parse_application_string(arguments.application)
|
||||
application_version = ApplicationVersionController.get(application_details.get('application_code'), application_details.get('version_number'))
|
||||
application_version_details = __parse_application_argument(arguments.application)
|
||||
application_version = ApplicationVersionController.get(application_version_details.get('application_code'), application_version_details.get('version_number'))
|
||||
|
||||
if application_version is None:
|
||||
main_parser.error('the following argument should be a valid reference: --application/-a')
|
||||
|
@ -333,8 +330,8 @@ if __name__ == '__main__':
|
|||
|
||||
elif arguments.subcommand == 'show':
|
||||
|
||||
application_details = __parse_application_string(arguments.application)
|
||||
application_version = ApplicationVersionController.get(application_details.get('application_code'), application_details.get('version_number'))
|
||||
application_version_details = __parse_application_argument(arguments.application)
|
||||
application_version = ApplicationVersionController.get(application_version_details.get('application_code'), application_version_details.get('version_number'))
|
||||
|
||||
if application_version is not None:
|
||||
pprint.pp(application_version)
|
||||
|
@ -343,8 +340,8 @@ if __name__ == '__main__':
|
|||
|
||||
elif arguments.subcommand == 'install':
|
||||
|
||||
application_details = __parse_application_string(arguments.application)
|
||||
application_version = ApplicationVersionController.get(application_details.get('application_code'), application_details.get('version_number'))
|
||||
application_version_details = __parse_application_argument(arguments.application)
|
||||
application_version = ApplicationVersionController.get(application_version_details.get('application_code'), application_version_details.get('version_number'))
|
||||
|
||||
if application_version is not None:
|
||||
ApplicationVersionController.install(application_version, arguments.reinstall, application_version_observer=application_version_observer, connection_observer=connection_observer)
|
||||
|
@ -353,8 +350,8 @@ if __name__ == '__main__':
|
|||
|
||||
elif arguments.subcommand == 'uninstall':
|
||||
|
||||
application_details = __parse_application_string(arguments.application)
|
||||
application_version = ApplicationVersionController.get(application_details.get('application_code'), application_details.get('version_number'))
|
||||
application_version_details = __parse_application_argument(arguments.application)
|
||||
application_version = ApplicationVersionController.get(application_version_details.get('application_code'), application_version_details.get('version_number'))
|
||||
|
||||
if application_version is not None:
|
||||
ApplicationVersionController.uninstall(application_version)
|
||||
|
|
Loading…
Reference in a new issue