jw.pkg.App: Make member variables private

With the exception of top_name, which cmds.project.GetVal needs
read-access to, all member variables of jw.pkg.App can be made
private.

Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2026-01-26 11:57:24 +01:00
commit a377745e5e

View file

@ -56,7 +56,7 @@ class App(Base):
case 'unaltered': case 'unaltered':
return topdir return topdir
case None | 'absolute': case None | 'absolute':
return os.path.abspath(self.topdir) return os.path.abspath(self.__topdir)
case _: case _:
m = re.search(r'^make:(\S+)$', fmt) m = re.search(r'^make:(\S+)$', fmt)
if m is None: if m is None:
@ -65,11 +65,11 @@ class App(Base):
return '$(' + m.group(1) + ')' return '$(' + m.group(1) + ')'
def __proj_dir(self, name: str, pretty) -> str: def __proj_dir(self, name: str, pretty) -> str:
if name == self.top_name: if name == self.__top_name:
if pretty: if pretty:
return self.__pretty_topdir return self.__pretty_topdir
return self.topdir return self.__topdir
for d in [ self.projs_root, '/opt' ]: for d in [ self.__projs_root, '/opt' ]:
ret = d + '/' + name ret = d + '/' + name
if os.path.exists(ret): if os.path.exists(ret):
return ret return ret
@ -86,7 +86,7 @@ class App(Base):
return os.path.abspath(pd) return os.path.abspath(pd)
if self.__topdir_fmt == 'unaltered': if self.__topdir_fmt == 'unaltered':
return pd return pd
if name == self.top_name: if name == self.__top_name:
return self.__pretty_topdir return self.__pretty_topdir
raise NotImplementedError(f'Tried to pretty-format directory {pd}, not implemented') raise NotImplementedError(f'Tried to pretty-format directory {pd}, not implemented')
pd = self.__proj_dir(name, False) pd = self.__proj_dir(name, False)
@ -110,20 +110,17 @@ class App(Base):
def __init__(self): def __init__(self):
super().__init__("jw-pkg swiss army knife", modules=["jw.pkg.cmds"]) super().__init__("jw-pkg swiss army knife", modules=["jw.pkg.cmds"])
self.global_args = [] # -- Members without default values
self.opt_os = None self.__opt_os: str|None = None
self.top_name = None self.__top_name: str|None = None
self.glob_os_cascade = None self.__os_cascade: list[str]|None = None
self.__res_cache = ResultCache()
self.__topdir: str|None = None
self.__pretty_topdir: str|None = None
self.dep_cache = {} # -- Members with default values
self.my_dir = os.path.dirname(os.path.realpath(__file__))
self.res_cache = ResultCache()
self.__topdir_fmt = 'absolute' self.__topdir_fmt = 'absolute'
self.topdir = None self.__projs_root = pwd.getpwuid(os.getuid()).pw_dir + "/local/src/jw.dev/proj"
self.__pretty_topdir = None
# -- defaults
self.projs_root = pwd.getpwuid(os.getuid()).pw_dir + "/local/src/jw.dev/proj"
self.__pretty_projs_root = None self.__pretty_projs_root = None
def _add_arguments(self, parser): def _add_arguments(self, parser):
@ -137,26 +134,25 @@ class App(Base):
async def _run(self, args: argparse.Namespace) -> None: async def _run(self, args: argparse.Namespace) -> None:
self.opt_os = args.os self.__opt_os = args.os
self.__topdir = args.topdir
self.topdir = args.topdir self.__pretty_topdir = self.__format_topdir(self.__topdir, args.topdir_format)
self.__pretty_topdir = self.__format_topdir(self.topdir, args.topdir_format)
self.__topdir_fmt = args.topdir_format self.__topdir_fmt = args.topdir_format
if self.topdir is not None: if self.__topdir is not None:
self.top_name = self.res_cache.run(self.read_value, [self.topdir + '/make/project.conf', 'build', 'name']) self.__top_name = self.__res_cache.run(self.read_value, [self.__topdir + '/make/project.conf', 'build', 'name'])
if not self.top_name: if not self.__top_name:
self.top_name = re.sub('-[0-9.-]*$', '', os.path.basename(os.path.realpath(self.topdir))) self.__top_name = re.sub('-[0-9.-]*$', '', os.path.basename(os.path.realpath(self.__topdir)))
if args.prefix is not None: if args.prefix is not None:
self.projs_root = args.prefix self.__projs_root = args.prefix
self.__pretty_projs_root = args.prefix self.__pretty_projs_root = args.prefix
#if self.__topdir is not None:
# self.
log(DEBUG, "projs_root = ", self.projs_root)
return await super()._run(args) return await super()._run(args)
@property
def top_name(self):
return self.__top_name
def find_dir(self, name: str, search_subdirs: list[str]=[], search_absdirs: list[str]=[], pretty: bool=True): def find_dir(self, name: str, search_subdirs: list[str]=[], search_absdirs: list[str]=[], pretty: bool=True):
return self.__find_dir(name, search_subdirs, search_absdirs, pretty) return self.__find_dir(name, search_subdirs, search_absdirs, pretty)
@ -173,7 +169,7 @@ class App(Base):
def get_os(self, args = ""): def get_os(self, args = ""):
import subprocess import subprocess
for d in [ self.projs_root + '/jw-pkg/scripts', '/opt/jw-pkg/bin' ]: for d in [ self.__projs_root + '/jw-pkg/scripts', '/opt/jw-pkg/bin' ]:
script = d + '/get-os.sh' script = d + '/get-os.sh'
if os.path.isfile(script): if os.path.isfile(script):
cmd = '/bin/bash ' + script cmd = '/bin/bash ' + script
@ -199,10 +195,10 @@ class App(Base):
def os_cascade(self): def os_cascade(self):
import platform import platform
if self.glob_os_cascade is not None: if self.__os_cascade is not None:
return self.glob_os_cascade.copy() return self.__os_cascade.copy()
r = [ 'os', platform.system().lower() ] r = [ 'os', platform.system().lower() ]
os = self.opt_os if self.opt_os is not None else self.res_cache.run(self.get_os, []) os = self.__opt_os if self.__opt_os is not None else self.__res_cache.run(self.get_os, [])
name = re.sub('-.*', '', os) name = re.sub('-.*', '', os)
series = os series = os
while True: while True:
@ -217,7 +213,7 @@ class App(Base):
r.append(os) r.append(os)
# e.g. os, linux, suse, suse-tumbleweed # e.g. os, linux, suse, suse-tumbleweed
#return [ 'os', platform.system().lower(), name, os ] #return [ 'os', platform.system().lower(), name, os ]
self.glob_os_cascade = r self.__os_cascade = r
return r return r
def strip_module_from_spec(self, mod): def strip_module_from_spec(self, mod):
@ -290,16 +286,16 @@ class App(Base):
return None return None
def get_value(self, name, section, key): def get_value(self, name, section, key):
log(DEBUG, "getting value [%s].%s for project %s (%s)" %(section, key, name, self.top_name)) log(DEBUG, "getting value [%s].%s for project %s (%s)" %(section, key, name, self.__top_name))
if self.top_name and name == self.top_name: if self.__top_name and name == self.__top_name:
proj_root = self.topdir proj_root = self.__topdir
else: else:
proj_root = self.projs_root + '/' + name proj_root = self.__projs_root + '/' + name
log(DEBUG, "proj_root = " + proj_root) log(DEBUG, "proj_root = " + proj_root)
if section == 'version': if section == 'version':
proj_version_dirs = [ proj_root ] proj_version_dirs = [ proj_root ]
if proj_root != self.topdir: if proj_root != self.__topdir:
proj_version_dirs.append('/usr/share/doc/packages/' + name) proj_version_dirs.append('/usr/share/doc/packages/' + name)
for d in proj_version_dirs: for d in proj_version_dirs:
version_path = d + '/VERSION' version_path = d + '/VERSION'
@ -314,8 +310,8 @@ class App(Base):
raise Exception("No version file found for project \"" + name + "\"") raise Exception("No version file found for project \"" + name + "\"")
path = proj_root + '/make/project.conf' path = proj_root + '/make/project.conf'
#print('path = ', path, 'self.top_name = ', self.top_name, 'name = ', name) #print('path = ', path, 'self.__top_name = ', self.__top_name, 'name = ', name)
return self.res_cache.run(self.read_value, [path, section, key]) return self.__res_cache.run(self.read_value, [path, section, key])
def collect_values(self, names, section, key): def collect_values(self, names, section, key):
r = "" r = ""
@ -331,7 +327,7 @@ class App(Base):
def add_modules_from_project_txt_cached(self, buf, visited, spec, section, key, add_self, scope, def add_modules_from_project_txt_cached(self, buf, visited, spec, section, key, add_self, scope,
names_only): names_only):
return self.res_cache.run(self.add_modules_from_project_txt, [buf, visited, spec, section, key, return self.__res_cache.run(self.add_modules_from_project_txt, [buf, visited, spec, section, key,
add_self, scope, names_only]) add_self, scope, names_only])
def add_modules_from_project_txt(self, buf, visited, spec, section, key, add_self, scope, def add_modules_from_project_txt(self, buf, visited, spec, section, key, add_self, scope,