mirror of
ssh://git.janware.com/janware/proj/jw-pkg
synced 2026-04-25 09:35:54 +02:00
lib.Cmd: Add argument "parent" to __init__()
During __init__(), commands have no idea of their parent. This is not a problem as of now, but is easy to fix, and it's architecturally desirable to be prepared just in case, so add the parent argument to the ctor before more commands are added. Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
132dce8b3f
commit
f175f9d5c9
32 changed files with 103 additions and 88 deletions
|
|
@ -4,13 +4,14 @@ from __future__ import annotations
|
||||||
|
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
|
|
||||||
|
from ..App import App
|
||||||
from ..lib.Cmd import Cmd as Base
|
from ..lib.Cmd import Cmd as Base
|
||||||
from ..lib.Types import LoadTypes
|
from ..lib.Types import LoadTypes
|
||||||
|
|
||||||
class Cmd(Base): # export
|
class Cmd(Base): # export
|
||||||
|
|
||||||
def __init__(self, name: str, help: str) -> None:
|
def __init__(self, parent: App|Base, name: str, help: str) -> None:
|
||||||
super().__init__(name, help)
|
super().__init__(parent, name, help)
|
||||||
|
|
||||||
def _add_subcommands(self) -> None:
|
def _add_subcommands(self) -> None:
|
||||||
self.add_subcommands(
|
self.add_subcommands(
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,19 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import sys, inspect, re
|
import sys
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
|
|
||||||
|
from ..App import App
|
||||||
from .Cmd import Cmd as CmdBase
|
from .Cmd import Cmd as CmdBase
|
||||||
|
|
||||||
class CmdProjects(CmdBase): # export
|
class CmdProjects(CmdBase): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: App) -> None:
|
||||||
super().__init__('projects', help='Project metadata evaluation for building packages')
|
super().__init__(parent, 'projects', help='Project metadata evaluation for building packages')
|
||||||
self._add_subcommands()
|
self._add_subcommands()
|
||||||
|
|
||||||
def add_arguments(self, p: ArgumentParser) -> None:
|
def add_arguments(self, p: ArgumentParser) -> None:
|
||||||
super().add_arguments(p)
|
super().add_arguments(p)
|
||||||
|
|
||||||
def _run(self, args):
|
def _run(self, args):
|
||||||
breakpoint()
|
|
||||||
raise Exception("Running with args", args)
|
raise Exception("Running with args", args)
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ...lib.log import *
|
from ...lib.log import *
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class BaseCmdPkgRelations(Cmd):
|
class BaseCmdPkgRelations(Cmd):
|
||||||
|
|
||||||
|
|
@ -76,8 +77,8 @@ class BaseCmdPkgRelations(Cmd):
|
||||||
def print_pkg_relations(self, rel_type, args_):
|
def print_pkg_relations(self, rel_type, args_):
|
||||||
print(self.pkg_relations(rel_type, args_))
|
print(self.pkg_relations(rel_type, args_))
|
||||||
|
|
||||||
def __init__(self, relation: str, help: str) -> None:
|
def __init__(self, parent: CmdProjects, relation: str, help: str) -> None:
|
||||||
super().__init__('pkg-' + relation, help=help)
|
super().__init__(parent, 'pkg-' + relation, help=help)
|
||||||
self.relation = relation
|
self.relation = relation
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
|
|
|
||||||
|
|
@ -6,12 +6,13 @@ from functools import lru_cache
|
||||||
|
|
||||||
from ...lib.log import *
|
from ...lib.log import *
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
|
|
||||||
class CmdBuild(Cmd): # export
|
class CmdBuild(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('build', help='janware software project build tool')
|
super().__init__(parent, 'build', help='janware software project build tool')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,13 @@
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
|
|
||||||
class CmdCflags(Cmd): # export
|
class CmdCflags(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('cflags', help='cflags')
|
super().__init__(parent, 'cflags', help='cflags')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,12 @@ from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ...lib.log import *
|
from ...lib.log import *
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdCheck(Cmd): # export
|
class CmdCheck(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('check', help='Check for circular dependencies between given modules')
|
super().__init__(parent, 'check', help='Check for circular dependencies between given modules')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,12 @@
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdCommands(Cmd): # export
|
class CmdCommands(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('commands', help='List available commands')
|
super().__init__(parent, 'commands', help='List available commands')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,12 @@ import textwrap
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdCreatePkgConfig(Cmd): # export
|
class CmdCreatePkgConfig(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('create-pkg-config', help='Generate a pkg-config file for a module')
|
super().__init__(parent, 'create-pkg-config', help='Generate a pkg-config file for a module')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,14 @@
|
||||||
|
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdExepath(Cmd): # export
|
class CmdExepath(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('exepath', help='exepath')
|
super().__init__(parent, 'exepath', help='exepath')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,12 @@ from urllib.parse import urlparse
|
||||||
from ...lib.log import *
|
from ...lib.log import *
|
||||||
from ...lib.util import run_cmd
|
from ...lib.util import run_cmd
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdGetAuthInfo(Cmd): # export
|
class CmdGetAuthInfo(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('get-auth-info', help='Try to retrieve authentication information from the source tree')
|
super().__init__(parent, 'get-auth-info', help='Try to retrieve authentication information from the source tree')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,12 @@
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdGetval(Cmd): # export
|
class CmdGetval(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('getval', help='Get value from project config')
|
super().__init__(parent, 'getval', help='Get value from project config')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,12 @@
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdHtdocsDir(Cmd): # export
|
class CmdHtdocsDir(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('htdocs-dir', help='Print source directory containing document root of a given module')
|
super().__init__(parent, 'htdocs-dir', help='Print source directory containing document root of a given module')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,14 @@
|
||||||
|
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdLdflags(Cmd): # export
|
class CmdLdflags(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('ldflags', help='ldflags')
|
super().__init__(parent, 'ldflags', help='ldflags')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,14 @@
|
||||||
|
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdLdlibpath(Cmd): # export
|
class CmdLdlibpath(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('ldlibpath', help='ldlibpath')
|
super().__init__(parent, 'ldlibpath', help='ldlibpath')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,12 @@
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdLibname(Cmd): # export
|
class CmdLibname(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('libname', help='libname')
|
super().__init__(parent, 'libname', help='libname')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,14 @@
|
||||||
import re, os
|
import re, os
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
|
||||||
from ...lib.util import get_username, get_password, run_curl
|
from ...lib.util import get_username, get_password, run_curl
|
||||||
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdListRepos(Cmd): # export
|
class CmdListRepos(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('list-repos', help='Query a remote GIT server for repositories')
|
super().__init__(parent, 'list-repos', help='Query a remote GIT server for repositories')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,12 @@ from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ...lib.log import *
|
from ...lib.log import *
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdModules(Cmd): # export
|
class CmdModules(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('modules', help='Query existing janware packages')
|
super().__init__(parent, 'modules', help='Query existing janware packages')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,12 @@
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdOsCascade(Cmd): # export
|
class CmdOsCascade(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('os-cascade', help='Print project.conf\'s OS configuration precedence of machine this script runs on')
|
super().__init__(parent, 'os-cascade', help='Print project.conf\'s OS configuration precedence of machine this script runs on')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,14 @@
|
||||||
|
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdPath(Cmd): # export
|
class CmdPath(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('path', help='path')
|
super().__init__(parent, 'path', help='path')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -6,5 +6,5 @@ from .BaseCmdPkgRelations import BaseCmdPkgRelations as Base
|
||||||
|
|
||||||
class CmdPkgConflicts(Base): # export
|
class CmdPkgConflicts(Base): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: Base) -> None:
|
||||||
super().__init__('conflicts', help='Print packages conflicting with a given package')
|
super().__init__(parent, 'conflicts', help='Print packages conflicting with a given package')
|
||||||
|
|
|
||||||
|
|
@ -6,5 +6,5 @@ from .BaseCmdPkgRelations import BaseCmdPkgRelations as Base
|
||||||
|
|
||||||
class CmdPkgProvides(Base): # export
|
class CmdPkgProvides(Base): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: Base) -> None:
|
||||||
super().__init__('provides', help='Print packages and capabilities provided by a given package')
|
super().__init__(parent, 'provides', help='Print packages and capabilities provided by a given package')
|
||||||
|
|
|
||||||
|
|
@ -6,5 +6,5 @@ from .BaseCmdPkgRelations import BaseCmdPkgRelations as Base
|
||||||
|
|
||||||
class CmdPkgRequires(Base): # export
|
class CmdPkgRequires(Base): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: Base) -> None:
|
||||||
super().__init__('requires', help='Print packages required for a given package')
|
super().__init__(parent, 'requires', help='Print packages required for a given package')
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,15 @@
|
||||||
|
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
# TODO: seems at least partly redundant to CmdPkgRequires / print_pkg_relations
|
# TODO: seems at least partly redundant to CmdPkgRequires / print_pkg_relations
|
||||||
class CmdPrereq(Cmd): # export
|
class CmdPrereq(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('prereq', help='path')
|
super().__init__(parent, 'prereq', help='path')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,12 @@ from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ...lib.log import *
|
from ...lib.log import *
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdProjDir(Cmd): # export
|
class CmdProjDir(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('proj-dir', help='Print directory of a given package')
|
super().__init__(parent, 'proj-dir', help='Print directory of a given package')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,14 @@
|
||||||
|
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdPythonpath(Cmd): # export
|
class CmdPythonpath(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('pythonpath', help='Generate PYTHONPATH for given modules')
|
super().__init__(parent, 'pythonpath', help='Generate PYTHONPATH for given modules')
|
||||||
|
|
||||||
def add_arguments(self, p: ArgumentParser) -> None:
|
def add_arguments(self, p: ArgumentParser) -> None:
|
||||||
super().add_arguments(p)
|
super().add_arguments(p)
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,14 @@
|
||||||
|
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdPythonpathOrig(Cmd): # export
|
class CmdPythonpathOrig(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('pythonpath_orig', help='pythonpath')
|
super().__init__(parent, 'pythonpath_orig', help='pythonpath')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,16 @@
|
||||||
|
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
|
from ...App import Scope
|
||||||
from ...lib.log import *
|
from ...lib.log import *
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
from ...App import Scope
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
# TODO: seems at least partly redundant to CmdPkgRequires / print_pkg_relations
|
# TODO: seems at least partly redundant to CmdPkgRequires / print_pkg_relations
|
||||||
class CmdRequiredOsPkg(Cmd): # export
|
class CmdRequiredOsPkg(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('required-os-pkg', help='List distribution packages required for a package')
|
super().__init__(parent, 'required-os-pkg', help='List distribution packages required for a package')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,12 @@
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdSummary(Cmd): # export
|
class CmdSummary(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('summary', help='Print summary description of given modules')
|
super().__init__(parent, 'summary', help='Print summary description of given modules')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,12 @@
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdTest(Cmd): # export
|
class CmdTest(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('test', help='Test')
|
super().__init__(parent, 'test', help='Test')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,12 @@
|
||||||
from argparse import Namespace, ArgumentParser
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
|
from ..CmdProjects import CmdProjects
|
||||||
|
|
||||||
class CmdTmplDir(Cmd): # export
|
class CmdTmplDir(Cmd): # export
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, parent: CmdProjects) -> None:
|
||||||
super().__init__('tmpl-dir', help='Print directory containing templates of a given module')
|
super().__init__(parent, 'tmpl-dir', help='Print directory containing templates of a given module')
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,6 @@ class App: # export
|
||||||
self.__eloop = asyncio.get_event_loop()
|
self.__eloop = asyncio.get_event_loop()
|
||||||
self.__own_eloop = True
|
self.__own_eloop = True
|
||||||
|
|
||||||
self.__cmds: list[Cmd] = []
|
|
||||||
self.__parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
self.__parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
||||||
description=description, add_help=False)
|
description=description, add_help=False)
|
||||||
self._add_arguments(self.__parser)
|
self._add_arguments(self.__parser)
|
||||||
|
|
@ -78,7 +77,7 @@ class App: # export
|
||||||
|
|
||||||
cmd_classes = LoadTypes(modules if modules else ['__main__'], type_name_filter=name_filter, type_filter=[Cmd])
|
cmd_classes = LoadTypes(modules if modules else ['__main__'], type_name_filter=name_filter, type_filter=[Cmd])
|
||||||
add_all_parsers = '-h' in sys.argv or '--help' in sys.argv
|
add_all_parsers = '-h' in sys.argv or '--help' in sys.argv
|
||||||
add_cmds_to_parser(self, self.__parser, [cmd_class() for cmd_class in cmd_classes], all=add_all_parsers)
|
add_cmds_to_parser(self, self.__parser, [cmd_class(self) for cmd_class in cmd_classes], all=add_all_parsers)
|
||||||
|
|
||||||
# -- Add help only now, wouldn't want to have parse_known_args() exit on --help with subcommands missing
|
# -- Add help only now, wouldn't want to have parse_known_args() exit on --help with subcommands missing
|
||||||
self.__parser.add_argument('-h', '--help', action='help', help='Show this help message and exit')
|
self.__parser.add_argument('-h', '--help', action='help', help='Show this help message and exit')
|
||||||
|
|
@ -131,7 +130,7 @@ class App: # export
|
||||||
|
|
||||||
# Run sub-command. Overwrite if you want to do anything before or after
|
# Run sub-command. Overwrite if you want to do anything before or after
|
||||||
async def _run(self, args: argparse.Namespace) -> None:
|
async def _run(self, args: argparse.Namespace) -> None:
|
||||||
return await self.__args.func(args)
|
return await self.args.func(args)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def args(self) -> argparse.Namespace:
|
def args(self) -> argparse.Namespace:
|
||||||
|
|
|
||||||
|
|
@ -10,15 +10,12 @@ from argparse import ArgumentParser, _SubParsersAction
|
||||||
from .log import *
|
from .log import *
|
||||||
from .Types import Types
|
from .Types import Types
|
||||||
|
|
||||||
# full blown example of one level of nested subcommands
|
|
||||||
# git -C project remote -v show -n myremote
|
|
||||||
|
|
||||||
class Cmd(abc.ABC): # export
|
class Cmd(abc.ABC): # export
|
||||||
|
|
||||||
def __init__(self, name: str, help: str) -> None:
|
def __init__(self, parent: App|Cmd, name: str, help: str) -> None:
|
||||||
from . import App
|
from . import App
|
||||||
|
self.__parent: App|Cmd|None = parent
|
||||||
self.__app: App|None = None
|
self.__app: App|None = None
|
||||||
self.__parent: App|Cmd|None = None
|
|
||||||
self.__name = name
|
self.__name = name
|
||||||
self.__help = help
|
self.__help = help
|
||||||
self.__children: list[Cmd] = []
|
self.__children: list[Cmd] = []
|
||||||
|
|
@ -37,7 +34,7 @@ class Cmd(abc.ABC): # export
|
||||||
return self.__parent
|
return self.__parent
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def app(self):
|
def app(self) -> App:
|
||||||
from .App import App
|
from .App import App
|
||||||
if self.__app is None:
|
if self.__app is None:
|
||||||
parent = self.__parent
|
parent = self.__parent
|
||||||
|
|
@ -85,8 +82,7 @@ class Cmd(abc.ABC): # export
|
||||||
if cmd_class in self.__child_classes:
|
if cmd_class in self.__child_classes:
|
||||||
continue
|
continue
|
||||||
self.__child_classes.append(cmd_class)
|
self.__child_classes.append(cmd_class)
|
||||||
cmd = cmd_class()
|
cmd = cmd_class(self)
|
||||||
cmd.set_parent(self)
|
|
||||||
self.__children.append(cmd)
|
self.__children.append(cmd)
|
||||||
assert len(self.__children) == len(self.__child_classes)
|
assert len(self.__children) == len(self.__child_classes)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
@ -99,9 +95,3 @@ class Cmd(abc.ABC): # export
|
||||||
# Will be called from App base class constructor and set up the parser hierarchy
|
# Will be called from App base class constructor and set up the parser hierarchy
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def conf_value(self, path, default=None):
|
|
||||||
ret = None if self.app is None else self.app.conf_value(path, default)
|
|
||||||
if ret is None and default is not None:
|
|
||||||
return default
|
|
||||||
return ret
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue