Compare commits
	
		
			3 Commits
		
	
	
		
			b139f4bb8c
			...
			867cd1c022
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 867cd1c022 | |||
| 2bc9b2e94f | |||
| c776632195 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -159,6 +159,7 @@ cython_debug/ | |||||||
| #  and can be added to the global gitignore or merged into this file.  For a more nuclear | #  and can be added to the global gitignore or merged into this file.  For a more nuclear | ||||||
| #  option (not recommended) you can uncomment the following to ignore the entire idea folder. | #  option (not recommended) you can uncomment the following to ignore the entire idea folder. | ||||||
| .idea/ | .idea/ | ||||||
|  | .vscode/ | ||||||
| 
 | 
 | ||||||
| # Project specific | # Project specific | ||||||
| config.json | config.json | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								isp_maintenance/apps/dci6/access/commands.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								isp_maintenance/apps/dci6/access/commands.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | import click | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @click.group(help='access command for lazy example') | ||||||
|  | @click.option('--debug/--no-debug', default=False) | ||||||
|  | def cli(debug): | ||||||
|  |     click.echo(f"Debug mode is {'on' if debug else 'off'}") | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @cli.command() | ||||||
|  | def enable(): | ||||||
|  |     click.echo('Access granted') | ||||||
							
								
								
									
										13
									
								
								isp_maintenance/apps/dci6/commands.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								isp_maintenance/apps/dci6/commands.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | import click | ||||||
|  | 
 | ||||||
|  | from core.cli.lazy_group import LazyGroup | ||||||
|  | from settings.general import INSTALLED_APPS | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @click.group( | ||||||
|  |     cls=LazyGroup, | ||||||
|  |     lazy_subcommands=INSTALLED_APPS['dci6'], | ||||||
|  |     help='dci6 command for lazy example', | ||||||
|  | ) | ||||||
|  | def cli(): | ||||||
|  |     pass | ||||||
							
								
								
									
										12
									
								
								isp_maintenance/apps/vm6/access/commands.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								isp_maintenance/apps/vm6/access/commands.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | import click | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @click.group(help='access command for lazy example') | ||||||
|  | @click.option('--debug/--no-debug', default=False) | ||||||
|  | def cli(debug): | ||||||
|  |     click.echo(f"Debug mode is {'on' if debug else 'off'}") | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @cli.command() | ||||||
|  | def enable(): | ||||||
|  |     click.echo('Access granted') | ||||||
							
								
								
									
										12
									
								
								isp_maintenance/apps/vm6/commands.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								isp_maintenance/apps/vm6/commands.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | import click | ||||||
|  | from core.cli.lazy_group import LazyGroup | ||||||
|  | from settings.general import INSTALLED_APPS | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @click.group( | ||||||
|  |     cls=LazyGroup, | ||||||
|  |     lazy_subcommands=INSTALLED_APPS['vm6'], | ||||||
|  |     help='vm6 command for lazy example', | ||||||
|  | ) | ||||||
|  | def cli(): | ||||||
|  |     pass | ||||||
							
								
								
									
										13
									
								
								isp_maintenance/apps/vm6/nodes/commands.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								isp_maintenance/apps/vm6/nodes/commands.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | import click | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @click.group(help='nodes command for lazy example') | ||||||
|  | def cli(): | ||||||
|  |     pass | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @cli.command(name='list') | ||||||
|  | def nodes_list(): | ||||||
|  |     click.echo('NODES LIST: etc...') | ||||||
|  |     for num in range(1, 10): | ||||||
|  |         click.echo(num) | ||||||
							
								
								
									
										0
									
								
								isp_maintenance/core/cli/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								isp_maintenance/core/cli/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										39
									
								
								isp_maintenance/core/cli/lazy_group.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								isp_maintenance/core/cli/lazy_group.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,39 @@ | |||||||
|  | import importlib | ||||||
|  | import click | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class LazyGroup(click.Group): | ||||||
|  |     def __init__(self, *args, lazy_subcommands=None, **kwargs): | ||||||
|  |         super().__init__(*args, **kwargs) | ||||||
|  |         # lazy_subcommands is a map of the form: | ||||||
|  |         # | ||||||
|  |         #   {command-name} -> {module-name}.{command-object-name} | ||||||
|  |         # | ||||||
|  |         self.lazy_subcommands = lazy_subcommands or {} | ||||||
|  | 
 | ||||||
|  |     def list_commands(self, ctx): | ||||||
|  |         base = super().list_commands(ctx) | ||||||
|  |         lazy = sorted(self.lazy_subcommands.keys()) | ||||||
|  |         return base + lazy | ||||||
|  | 
 | ||||||
|  |     def get_command(self, ctx, cmd_name): | ||||||
|  |         if cmd_name in self.lazy_subcommands: | ||||||
|  |             return self._lazy_load(cmd_name) | ||||||
|  |         return super().get_command(ctx, cmd_name) | ||||||
|  | 
 | ||||||
|  |     def _lazy_load(self, cmd_name): | ||||||
|  |         # lazily loading a command, | ||||||
|  |         # first get the module name and attribute name | ||||||
|  |         import_path = self.lazy_subcommands[cmd_name] | ||||||
|  |         modname, cmd_object_name = import_path.rsplit(".", 1) | ||||||
|  |         # do the import | ||||||
|  |         mod = importlib.import_module(modname) | ||||||
|  |         # get the Command object from that module | ||||||
|  |         cmd_object = getattr(mod, cmd_object_name) | ||||||
|  |         # check the result to make debugging easier | ||||||
|  |         if not isinstance(cmd_object, click.BaseCommand): | ||||||
|  |             raise ValueError( | ||||||
|  |                 f"Lazy loading of {import_path} failed by returning " | ||||||
|  |                 "a non-command object" | ||||||
|  |             ) | ||||||
|  |         return cmd_object | ||||||
| @ -1,9 +1,21 @@ | |||||||
| #!/usr/bin/env python3 | #!/usr/bin/env python3 | ||||||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||||
| from settings.environment import env | import click | ||||||
|  | 
 | ||||||
|  | from core.cli.lazy_group import LazyGroup | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| # TODO: delete this demo | @click.group( | ||||||
| # Just show you which env get application or default values |     cls=LazyGroup, | ||||||
| for key, value in env.dump().items(): |     lazy_subcommands={ | ||||||
|     print(key, '|', value) |         'vm6': 'apps.vm6.commands.cli', | ||||||
|  |         'dci6': 'apps.dci6.commands.cli', | ||||||
|  |     }, | ||||||
|  |     help='main CLI command for lazy example', | ||||||
|  | ) | ||||||
|  | def cli(): | ||||||
|  |     pass | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     cli() | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| from settings.environment import BASE_DIR | from settings.general import BASE_DIR | ||||||
| 
 | 
 | ||||||
| from settings.platform import ( | from settings.platform import ( | ||||||
|     PLATFORM_TYPE, |     PLATFORM_TYPE, | ||||||
|  | |||||||
| @ -2,18 +2,21 @@ from settings.environment import env | |||||||
| from settings.platform import PLATFORM_CONFIG | from settings.platform import PLATFORM_CONFIG | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #! Required because some instance use psql db: | # ! Required because some instance use psql db: | ||||||
| DB_ENGINE = env.str( | DB_ENGINE = env.str( | ||||||
|     'DB_ENGINE', |     'DB_ENGINE', | ||||||
|     PLATFORM_CONFIG.get('DatabaseType', 'mysql') |     PLATFORM_CONFIG.get('DatabaseType', 'mysql') | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| # Connection parameters: | # Connection parameters: | ||||||
| DB_HOST = env.str('DB_HOST', 'mysql') | DB_HOST = env.str( | ||||||
|  |     'DB_HOST', | ||||||
|  |     PLATFORM_CONFIG.get('DatabaseType', 'mysql') | ||||||
|  | ) | ||||||
| DB_PORT = env.int('DB_PORT', 3306) | DB_PORT = env.int('DB_PORT', 3306) | ||||||
| DB_USER = env.str('DB_USER', 'root') | DB_USER = env.str('DB_USER', 'root') | ||||||
| 
 | 
 | ||||||
| #! Do not pass password on production. Use value from config.json | # ! Do not pass password on production. Use value from config.json | ||||||
| DB_PASSWORD = env.str( | DB_PASSWORD = env.str( | ||||||
|     'DB_PASSWORD', |     'DB_PASSWORD', | ||||||
|     PLATFORM_CONFIG.get('MysqlRootPassword', '') |     PLATFORM_CONFIG.get('MysqlRootPassword', '') | ||||||
|  | |||||||
| @ -1,11 +1,6 @@ | |||||||
| import pathlib |  | ||||||
| from environs import Env | from environs import Env | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| # Build paths inside the project like this: BASE_DIR / 'subdir'. |  | ||||||
| BASE_DIR = pathlib.Path(__file__).resolve().parent.parent |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| # Init environment: | # Init environment: | ||||||
| env = Env() | env = Env() | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										15
									
								
								isp_maintenance/settings/general.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								isp_maintenance/settings/general.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | import pathlib | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Build paths inside the project like this: BASE_DIR / 'subdir'. | ||||||
|  | BASE_DIR = pathlib.Path(__file__).resolve().parent.parent | ||||||
|  | 
 | ||||||
|  | INSTALLED_APPS = { | ||||||
|  |     'vm6': { | ||||||
|  |         'access': 'apps.vm6.access.commands.cli', | ||||||
|  |         'nodes': 'apps.vm6.nodes.commands.cli', | ||||||
|  |     }, | ||||||
|  |     'dci6': { | ||||||
|  |         'access': 'apps.dci6.access.commands.cli', | ||||||
|  |     }, | ||||||
|  | } | ||||||
| @ -1,4 +1,5 @@ | |||||||
| from settings.environment import env, BASE_DIR | from settings.environment import env | ||||||
|  | from settings.general import BASE_DIR | ||||||
| from utils.helpers import parse_json_file | from utils.helpers import parse_json_file | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user