Update the reference implementation

This commit is contained in:
codeking 2024-09-21 00:03:41 +02:00
parent 5ab9ba8c21
commit d73004270d
2 changed files with 124 additions and 7 deletions

View file

@ -37,10 +37,10 @@ python3 main.py get connection
```bash
# Example 1
python3 main.py set connection system
python3 main.py set connection 'system'
# Example 2
python3 main.py set connection tor
python3 main.py set connection 'tor'
```
### Sync
@ -111,6 +111,40 @@ python3 main.py profile disable -i 4
python3 main.py profile disable -i 4 -f
```
### Applications
#### List Applications
```bash
# Example 1
python3 main.py application list
# Example 2
python3 main.py application list -c 'firefox'
```
#### Show Application
```bash
python3 main.py application show -a 'chromium:122.0.6261.94-1'
```
#### Install Application
```bash
# Install (halt in case the application is already installed).
python3 main.py application install -a 'firefox:123.0'
# Install (reinstall the application if it already exists).
python3 main.py application install -a 'firefox:123.0' -r
```
#### Uninstall Application
```bash
python3 main.py application uninstall -a 'brave:1.63.165'
```
### Version Information
```bash

93
main.py
View file

@ -9,6 +9,7 @@ from core.controllers.LocationController import LocationController
from core.controllers.ProfileController import ProfileController
from core.controllers.SubscriptionController import SubscriptionController
from core.controllers.SubscriptionPlanController import SubscriptionPlanController
from core.models.session.Application import Application
from core.models.session.SessionConnection import SessionConnection
from core.models.session.SessionProfile import SessionProfile
from core.models.system.SystemConnection import SystemConnection
@ -19,8 +20,10 @@ from core.observers.ConnectionObserver import ConnectionObserver
from core.observers.InvoiceObserver import InvoiceObserver
from core.observers.ProfileObserver import ProfileObserver
from pathlib import Path
from typing import Optional
import argparse
import pprint
import re
if __name__ == '__main__':
@ -46,6 +49,18 @@ if __name__ == '__main__':
profile_observer.subscribe('disabled', lambda event: pprint.pp((event.subject, 'Disabled')) if event.meta.get('explicitly') else None)
profile_observer.subscribe('enabled', lambda event: pprint.pp((event.subject, 'Enabled')))
def __parse_application_string(application_string: Optional[str] = None):
if application_string is None:
return dict(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()
pristine_parser = argparse.ArgumentParser(add_help=False)
pristine_parser.add_argument('--pristine', '-p', action='store_true')
@ -89,6 +104,22 @@ if __name__ == '__main__':
profile_subparsers.add_parser('enable', parents=[profile_base_parser, pristine_parser, safe_parser])
profile_subparsers.add_parser('disable', parents=[profile_base_parser, safe_parser])
application_parser = main_subparsers.add_parser('application')
application_subparsers = application_parser.add_subparsers(title='subcommands', dest='subcommand')
application_base_parser = argparse.ArgumentParser(add_help=False)
application_base_parser.add_argument('--application', '-a', required=True)
application_list_parser = application_subparsers.add_parser('list')
application_list_parser.add_argument('--code', '-c')
application_show_parser = application_subparsers.add_parser('show', parents=[application_base_parser])
application_install_parser = application_subparsers.add_parser('install', parents=[application_base_parser])
application_install_parser.add_argument('--reinstall', '-r', action='store_true')
application_uninstall_parser = application_subparsers.add_parser('uninstall', parents=[application_base_parser])
get_parser = main_subparsers.add_parser('get')
get_subparsers = get_parser.add_subparsers(title='subcommands', dest='subcommand')
@ -127,11 +158,8 @@ if __name__ == '__main__':
if arguments.profile_type == 'session':
if not arguments.application:
arguments.application = ':'
application_details = arguments.application.split(':', 1)
application_version = ApplicationVersionController.get(application_details[0], application_details[1])
application_details = __parse_application_string(arguments.application)
application_version = ApplicationVersionController.get(application_details.get('application_code'), application_details.get('version_number'))
if application_version is None:
main_parser.error('the following argument should be a valid reference: --application/-a')
@ -248,15 +276,70 @@ if __name__ == '__main__':
else:
main_parser.error('the following argument should be a valid reference: --id/-i')
elif arguments.command == 'application':
if arguments.subcommand is None:
application_parser.print_help()
if arguments.subcommand == 'list':
if arguments.code:
application = Application.find(arguments.code)
if application is not None:
pprint.pp(ApplicationVersionController.get_all(application))
else:
main_parser.error('the following argument should be a valid reference: --code/-c')
else:
pprint.pp(ApplicationVersionController.get_all())
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'))
if application_version is not None:
pprint.pp(application_version)
else:
main_parser.error('the following argument should be a valid reference: --application/-a')
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'))
if application_version is not None:
ApplicationVersionController.install(application_version, arguments.reinstall, application_version_observer=application_version_observer, connection_observer=connection_observer)
else:
main_parser.error('the following argument should be a valid reference: --application/-a')
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'))
if application_version is not None:
ApplicationVersionController.uninstall(application_version)
else:
main_parser.error('the following argument should be a valid reference: --application/-a')
elif arguments.command == 'sync':
ClientController.sync(client_observer=client_observer, connection_observer=connection_observer)
elif arguments.command == 'get':
if arguments.subcommand is None:
get_parser.print_help()
if arguments.subcommand == 'connection':
print(ConfigurationController.get_connection())
elif arguments.command == 'set':
if arguments.subcommand is None:
set_parser.print_help()
if arguments.subcommand == 'connection':
ConfigurationController.set_connection(arguments.connection_type)