Browse Source

reworked the parser module. added factory for Parser with modes

Dimitri Korsch 4 years ago
parent
commit
0db182ac57

+ 4 - 2
cvargparse/__init__.py

@@ -6,8 +6,9 @@ Arg = Argument
 
 from cvargparse.factory import ArgFactory
 from cvargparse.factory import BaseFactory
-from cvargparse.parser import BaseParser
-from cvargparse.parser import GPUParser
+from cvargparse.parser.base import BaseParser
+from cvargparse.parser.gpu_parser import GPUParser
+from cvargparse.parser.mode_parser import ModeParserFactory
 
 __all__ = [
 	"Arg",
@@ -16,5 +17,6 @@ __all__ = [
 	"ArgFactory",
 	"BaseFactory",
 	"BaseParser",
+	"ModeParserFactory",
 	"GPUParser",
 ]

+ 0 - 0
cvargparse/parser/__init__.py


+ 0 - 7
cvargparse/parser.py → cvargparse/parser/base.py

@@ -92,10 +92,3 @@ class BaseParser(argparse.ArgumentParser):
 	def init_logger(self, simple=False):
 		warnings.warn("This method does nothing since v0.3.0!")
 
-
-class GPUParser(BaseParser):
-	def __init__(self, *args, **kw):
-		super(GPUParser, self).__init__(*args, **kw)
-		self.add_argument(
-			"--gpu", "-g", type=int, nargs="+", default=[-1],
-			help="which GPU to use. select -1 for CPU only")

+ 8 - 0
cvargparse/parser/gpu_parser.py

@@ -0,0 +1,8 @@
+from cvargparse.parser.base import BaseParser
+
+class GPUParser(BaseParser):
+	def __init__(self, *args, **kw):
+		super(GPUParser, self).__init__(*args, **kw)
+		self.add_argument(
+			"--gpu", "-g", type=int, nargs="+", default=[-1],
+			help="which GPU to use. select -1 for CPU only")

+ 34 - 0
cvargparse/parser/mode_parser.py

@@ -0,0 +1,34 @@
+from typing import List
+
+from cvargparse.parser.base import BaseParser
+from cvargparse.parser.gpu_parser import GPUParser
+
+class ModeParserFactory(object):
+
+	def __init__(self, *args,
+		parser_cls=BaseParser,
+		subp_parent_cls=BaseParser,
+		**kwargs) -> None:
+
+		self._parser = parser_cls(*args, **kwargs)
+
+		self._subparsers = self._parser.add_subparsers(dest="mode",
+			help="get the help messages for the sub commands with <mode> -h")
+
+		self._subparser_parent = None
+		if subp_parent_cls is not None:
+			self._subparser_parent = subp_parent_cls(add_help=False, nologging=True)
+
+	def parse_args(self, *args, **kwargs):
+		return self._parser.parse_args(*args, **kwargs)
+
+	@property
+	def subp_parent(self):
+		return self._subparser_parent
+
+
+	def add_mode(self, mode: str, *, parents: List = []) -> BaseParser:
+		if self._subparser_parent is not None:
+			parents = parents + [self._subparser_parent]
+		parser = self._subparsers.add_parser(mode, parents=parents)
+		return parser