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
|
from typing import Optional, Union
|
||||||
import argparse
|
import argparse
|
||||||
import pprint
|
import pprint
|
||||||
import re
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -60,17 +59,14 @@ if __name__ == '__main__':
|
||||||
def __get_version():
|
def __get_version():
|
||||||
return metadata.version(__get_name())
|
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:
|
def __parse_application_argument(application_argument: str):
|
||||||
return dict(application_code='', version_number='')
|
return __parse_composite_argument(application_argument, 'application_code', 'version_number')
|
||||||
|
|
||||||
parsed_application_string = re.match('^(?P<application_code>.*?):(?P<version_number>.*?)$', application_string)
|
def __parse_location_argument(location_argument: str):
|
||||||
|
return __parse_composite_argument(location_argument, 'country_code', 'code')
|
||||||
if parsed_application_string is None:
|
|
||||||
return dict(application_code='', version_number='')
|
|
||||||
else:
|
|
||||||
return parsed_application_string.groupdict()
|
|
||||||
|
|
||||||
def __sanitize_profile(candidate: Optional[Union[SessionProfile, SystemProfile]]):
|
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 = 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('--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('--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('--connection', '-c', dest='connection_type', choices=['system', 'tor', 'wireguard'], default='system')
|
||||||
session_profile_create_parser.add_argument('--mask-connection', '-m', action='store_true')
|
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 = 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('--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')
|
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])
|
profile_subparsers.add_parser('destroy', parents=[profile_base_parser, safe_parser])
|
||||||
|
@ -187,15 +183,16 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
elif arguments.subcommand == 'create':
|
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:
|
if location is None:
|
||||||
main_parser.error('the following argument should be a valid reference: --location/-l')
|
main_parser.error('the following argument should be a valid reference: --location/-l')
|
||||||
|
|
||||||
if arguments.profile_type == 'session':
|
if arguments.profile_type == 'session':
|
||||||
|
|
||||||
application_details = __parse_application_string(arguments.application)
|
application_version_details = __parse_application_argument(arguments.application)
|
||||||
application_version = ApplicationVersionController.get(application_details.get('application_code'), application_details.get('version_number'))
|
application_version = ApplicationVersionController.get(application_version_details.get('application_code'), application_version_details.get('version_number'))
|
||||||
|
|
||||||
if application_version is None:
|
if application_version is None:
|
||||||
main_parser.error('the following argument should be a valid reference: --application/-a')
|
main_parser.error('the following argument should be a valid reference: --application/-a')
|
||||||
|
@ -333,8 +330,8 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
elif arguments.subcommand == 'show':
|
elif arguments.subcommand == 'show':
|
||||||
|
|
||||||
application_details = __parse_application_string(arguments.application)
|
application_version_details = __parse_application_argument(arguments.application)
|
||||||
application_version = ApplicationVersionController.get(application_details.get('application_code'), application_details.get('version_number'))
|
application_version = ApplicationVersionController.get(application_version_details.get('application_code'), application_version_details.get('version_number'))
|
||||||
|
|
||||||
if application_version is not None:
|
if application_version is not None:
|
||||||
pprint.pp(application_version)
|
pprint.pp(application_version)
|
||||||
|
@ -343,8 +340,8 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
elif arguments.subcommand == 'install':
|
elif arguments.subcommand == 'install':
|
||||||
|
|
||||||
application_details = __parse_application_string(arguments.application)
|
application_version_details = __parse_application_argument(arguments.application)
|
||||||
application_version = ApplicationVersionController.get(application_details.get('application_code'), application_details.get('version_number'))
|
application_version = ApplicationVersionController.get(application_version_details.get('application_code'), application_version_details.get('version_number'))
|
||||||
|
|
||||||
if application_version is not None:
|
if application_version is not None:
|
||||||
ApplicationVersionController.install(application_version, arguments.reinstall, application_version_observer=application_version_observer, connection_observer=connection_observer)
|
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':
|
elif arguments.subcommand == 'uninstall':
|
||||||
|
|
||||||
application_details = __parse_application_string(arguments.application)
|
application_version_details = __parse_application_argument(arguments.application)
|
||||||
application_version = ApplicationVersionController.get(application_details.get('application_code'), application_details.get('version_number'))
|
application_version = ApplicationVersionController.get(application_version_details.get('application_code'), application_version_details.get('version_number'))
|
||||||
|
|
||||||
if application_version is not None:
|
if application_version is not None:
|
||||||
ApplicationVersionController.uninstall(application_version)
|
ApplicationVersionController.uninstall(application_version)
|
||||||
|
|
Loading…
Reference in a new issue