lib: Fix silent assertitons
There are a couple of assert statements in the codebase which can make jw-pkg fail without any detail whatsoever if --backtrace is not specified, fix that.
Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
120a6e4d34
commit
3ac3aff997
7 changed files with 19 additions and 12 deletions
|
|
@ -59,7 +59,7 @@ class CmdListRepos(Cmd): # export
|
|||
'-H', 'X-GitHub-Api-Version: 2022-11-28',
|
||||
]
|
||||
if password is not None:
|
||||
assert username is not None
|
||||
assert username is not None, f'Assertion failed: username is empty but password isn\'t for "{args.base_url}"'
|
||||
cmd_input = (f'-u {username}:{password}').encode('utf-8')
|
||||
curl_args.extend(['-K-'])
|
||||
curl_args.append(f'https://api.github.com/users/{args.from_owner}/repos')
|
||||
|
|
|
|||
|
|
@ -145,7 +145,9 @@ class App: # export
|
|||
except Exception as e:
|
||||
log(ERR, 'Failed: {}'.format(repr(e) if self.__back_trace else str(e)))
|
||||
exit_status = 1
|
||||
if self.__back_trace:
|
||||
# AssertionErrors are programming errors, hence a programmer should
|
||||
# get a chance to figure it out
|
||||
if self.__back_trace or isinstance(e, AssertionError):
|
||||
raise
|
||||
finally:
|
||||
if pr is not None:
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ class Cmd(abc.ABC): # export
|
|||
if isinstance(parent, App):
|
||||
self.__app = parent
|
||||
break
|
||||
assert parent != parent.__parent
|
||||
assert parent != parent.__parent, f'Assertion failed: Parent mismatch'
|
||||
parent = parent.__parent
|
||||
return self.__app
|
||||
|
||||
|
|
|
|||
|
|
@ -26,8 +26,10 @@ class Distro(abc.ABC):
|
|||
os_release_str: str|None=None,
|
||||
default_pkg_filter: PackageFilter|None=None,
|
||||
) -> None:
|
||||
assert ec is not None
|
||||
assert id is not None
|
||||
if id is None:
|
||||
raise ValueError(f'Tried to instaniate Distro without id')
|
||||
if ec is None:
|
||||
raise ValueError(f'Tried to instaniate Distro "{id}" without execution context')
|
||||
self.__exec_context = ec
|
||||
self.__id: str|None = None
|
||||
self.__os_release_str: str|None = os_release_str
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ class ExecContext(Base):
|
|||
if interactive is None:
|
||||
interactive = sys.stdin.isatty()
|
||||
self.__cmd_input = None
|
||||
assert interactive in [ True, False ]
|
||||
assert interactive in [ True, False ], f'Invalid: interactive = {invalid}'
|
||||
self.__interactive = interactive
|
||||
|
||||
self.__cmd_input = cmd_input if not isinstance(cmd_input, InputMode) else None
|
||||
|
|
@ -285,7 +285,7 @@ class ExecContext(Base):
|
|||
|
||||
# Note that in the calls to the wrapped method, cmd_input == None can
|
||||
# be returned by CallContext and is very much allowed
|
||||
assert cmd_input is not None
|
||||
assert cmd_input is not None, 'Invalid: cmd_input is None'
|
||||
|
||||
ret = Result(None, None, 1)
|
||||
with self.CallContext(self, title=title, cmd=cmd, cmd_input=cmd_input, mod_env=mod_env, wd=wd,
|
||||
|
|
@ -379,7 +379,7 @@ class ExecContext(Base):
|
|||
|
||||
# Note that in the calls to the wrapped method, cmd_input == None can
|
||||
# be returned by CallContext and is very much allowed
|
||||
assert cmd_input is not None
|
||||
assert cmd_input is not None, 'Invalid: cmd_input is None'
|
||||
|
||||
ret = Result(None, None, 1)
|
||||
with self.CallContext(self, title=title, cmd=cmd, cmd_input=cmd_input,
|
||||
|
|
@ -578,7 +578,8 @@ class ExecContext(Base):
|
|||
_raise_stat_error(path, result.stderr, result.status)
|
||||
|
||||
async def _chown(self, path: str, owner: str|None, group: str|None) -> None:
|
||||
assert owner is not None or group is not None
|
||||
if owner is None and group is None:
|
||||
raise ValueError(f'Tried to chown("{path}") without owner and group')
|
||||
if group is None:
|
||||
ownership = owner
|
||||
elif owner is None:
|
||||
|
|
|
|||
|
|
@ -38,7 +38,8 @@ class FileContext(abc.ABC):
|
|||
self.__in_pipe = in_pipe
|
||||
self.__out_pipe = out_pipe
|
||||
self.__open_count = 0
|
||||
assert verbose_default is not None
|
||||
if not verbose_default in [True, False]:
|
||||
raise ValueError(f'Tried to instantiate FileContext with verbose_default = "{verbose_default}"')
|
||||
|
||||
async def __aenter__(self):
|
||||
await self.open()
|
||||
|
|
@ -87,7 +88,7 @@ class FileContext(abc.ABC):
|
|||
if self.__open_count == 1:
|
||||
await self._close()
|
||||
self.__open_count -= 1
|
||||
assert self.__open_count >= 0
|
||||
assert self.__open_count >= 0, f'Closed file context "{self.__uri}" more often than opened'
|
||||
|
||||
@classmethod
|
||||
def schema_from_uri(cls, uri: str) -> str:
|
||||
|
|
|
|||
|
|
@ -70,7 +70,8 @@ async def run_curl(args: list[str], parse_json: bool=False, wd=None, throw=None,
|
|||
return ret, stderr, status
|
||||
|
||||
async def run_askpass(askpass_env: list[str], key: AskpassKey, host: str|None=None, ec: ExecContext|None=None):
|
||||
assert host is None # Currently unsupported
|
||||
if host is not None: # Currently unsupported
|
||||
raise NotImplementedError(f'Tried to run askpass with host "{host}"')
|
||||
for var in askpass_env:
|
||||
exe = os.getenv(var)
|
||||
if exe is None:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue