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