|
@@ -1,3 +1,4 @@
|
|
|
|
+import argparse
|
|
import sys
|
|
import sys
|
|
|
|
|
|
from metadocker.common.errors import MetadockerError
|
|
from metadocker.common.errors import MetadockerError
|
|
@@ -8,10 +9,40 @@ class Argument:
|
|
def __init__(self, *args, **kwargs):
|
|
def __init__(self, *args, **kwargs):
|
|
self.args = args
|
|
self.args = args
|
|
self.kwargs = kwargs
|
|
self.kwargs = kwargs
|
|
|
|
+ self.parser = None
|
|
|
|
|
|
def call(self, parser):
|
|
def call(self, parser):
|
|
|
|
+ self.parser = parser
|
|
parser.add_argument(*self.args, **self.kwargs)
|
|
parser.add_argument(*self.args, **self.kwargs)
|
|
|
|
|
|
|
|
+class ArgumentSubCommands(Argument):
|
|
|
|
+ def __init__(self, name, commands, command_name, *args, **kwargs):
|
|
|
|
+ super().__init__(*args, **kwargs)
|
|
|
|
+ self.name = name
|
|
|
|
+ self.commands = commands
|
|
|
|
+ self.command_name = command_name
|
|
|
|
+ self.subparsers = None
|
|
|
|
+
|
|
|
|
+ def call(self, parser):
|
|
|
|
+ self.parser = parser
|
|
|
|
+ self.subparsers = parser.add_subparsers(prog=self.name, parser_class=argparse.ArgumentParser)
|
|
|
|
+ for k in self.commands:
|
|
|
|
+ self._add_command(classe=k)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ def _add_command(self, classe):
|
|
|
|
+ kwargs = {}
|
|
|
|
+ if classe.HELP:
|
|
|
|
+ kwargs["help"] = classe.HELP
|
|
|
|
+ if classe.ALIASES:
|
|
|
|
+ kwargs["aliases"] = classe.ALIASES
|
|
|
|
+
|
|
|
|
+ parser = self.subparsers.add_parser(classe.NAME, **kwargs)
|
|
|
|
+ for k in classe.ARGUMENTS:
|
|
|
|
+ k.call(parser)
|
|
|
|
+ parser.set_defaults(**{self.command_name:classe})
|
|
|
|
+ return parser
|
|
|
|
|
|
class Command:
|
|
class Command:
|
|
NAME = None
|
|
NAME = None
|
|
@@ -20,8 +51,9 @@ class Command:
|
|
ARGUMENTS = []
|
|
ARGUMENTS = []
|
|
CATCH_EXCEPTION = True
|
|
CATCH_EXCEPTION = True
|
|
CONFIG_SET = True
|
|
CONFIG_SET = True
|
|
- def __init__(self, data):
|
|
|
|
|
|
+ def __init__(self, parser, data):
|
|
self._data = data
|
|
self._data = data
|
|
|
|
+ self._parser = parser
|
|
data = data.__dict__
|
|
data = data.__dict__
|
|
|
|
|
|
for k, v in data.items():
|
|
for k, v in data.items():
|
|
@@ -44,10 +76,11 @@ class Command:
|
|
def start(self):
|
|
def start(self):
|
|
if self.check():
|
|
if self.check():
|
|
try:
|
|
try:
|
|
- self.run()
|
|
|
|
|
|
+ return self.run()
|
|
except MetadockerError as err:
|
|
except MetadockerError as err:
|
|
print("Erreur", file=sys.stderr)
|
|
print("Erreur", file=sys.stderr)
|
|
print(err.get_error(), file=sys.stderr)
|
|
print(err.get_error(), file=sys.stderr)
|
|
|
|
+ return -1
|
|
|
|
|
|
def run(self):
|
|
def run(self):
|
|
raise NotImplementedError()
|
|
raise NotImplementedError()
|
|
@@ -61,10 +94,11 @@ class SpecificCommand(Command):
|
|
if self.check():
|
|
if self.check():
|
|
try:
|
|
try:
|
|
env.read()
|
|
env.read()
|
|
- self.run(env)
|
|
|
|
|
|
+ return self.run(env)
|
|
except MetadockerError as err:
|
|
except MetadockerError as err:
|
|
print("Erreur", file=sys.stderr)
|
|
print("Erreur", file=sys.stderr)
|
|
print(err.get_error(), file=sys.stderr)
|
|
print(err.get_error(), file=sys.stderr)
|
|
|
|
+ return -1
|
|
|
|
|
|
|
|
|
|
|
|
|