mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-04-24 23:37:18 +00:00
replace several store_true keys to booleanoptionalaction alternative (#74)
This commit is contained in:
parent
e58ccdc8ad
commit
0eadef597a
@ -73,7 +73,8 @@ def _parser() -> argparse.ArgumentParser:
|
|||||||
parser.add_argument("--force", help="force run, remove file lock", action="store_true")
|
parser.add_argument("--force", help="force run, remove file lock", action="store_true")
|
||||||
parser.add_argument("-l", "--lock", help="lock file", type=Path,
|
parser.add_argument("-l", "--lock", help="lock file", type=Path,
|
||||||
default=Path(tempfile.gettempdir()) / "ahriman.lock")
|
default=Path(tempfile.gettempdir()) / "ahriman.lock")
|
||||||
parser.add_argument("--no-report", help="force disable reporting to web service", action="store_true")
|
parser.add_argument("--report", help="force enable or disable reporting to web service",
|
||||||
|
action=argparse.BooleanOptionalAction, default=True)
|
||||||
parser.add_argument("-q", "--quiet", help="force disable any logging", action="store_true")
|
parser.add_argument("-q", "--quiet", help="force disable any logging", action="store_true")
|
||||||
parser.add_argument("--unsafe", help="allow to run ahriman as non-ahriman user. Some actions might be unavailable",
|
parser.add_argument("--unsafe", help="allow to run ahriman as non-ahriman user. Some actions might be unavailable",
|
||||||
action="store_true")
|
action="store_true")
|
||||||
@ -134,11 +135,12 @@ def _set_aur_search_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
parser.add_argument("search", help="search terms, can be specified multiple times, result will match all terms",
|
parser.add_argument("search", help="search terms, can be specified multiple times, result will match all terms",
|
||||||
nargs="+")
|
nargs="+")
|
||||||
parser.add_argument("-e", "--exit-code", help="return non-zero exit status if result is empty", action="store_true")
|
parser.add_argument("-e", "--exit-code", help="return non-zero exit status if result is empty", action="store_true")
|
||||||
parser.add_argument("-i", "--info", help="show additional package information", action="store_true")
|
parser.add_argument("--info", help="show additional package information",
|
||||||
|
action=argparse.BooleanOptionalAction, default=False)
|
||||||
parser.add_argument("--sort-by", help="sort field by this field. In case if two packages have the same value of "
|
parser.add_argument("--sort-by", help="sort field by this field. In case if two packages have the same value of "
|
||||||
"the specified field, they will be always sorted by name",
|
"the specified field, they will be always sorted by name",
|
||||||
default="name", choices=sorted(handlers.Search.SORT_FIELDS))
|
default="name", choices=sorted(handlers.Search.SORT_FIELDS))
|
||||||
parser.set_defaults(handler=handlers.Search, architecture=[""], lock=None, no_report=True, quiet=True, unsafe=True)
|
parser.set_defaults(handler=handlers.Search, architecture=[""], lock=None, report=False, quiet=True, unsafe=True)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
@ -156,10 +158,14 @@ def _set_daemon_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
description="start process which periodically will run update process",
|
description="start process which periodically will run update process",
|
||||||
formatter_class=_formatter)
|
formatter_class=_formatter)
|
||||||
parser.add_argument("-i", "--interval", help="interval between runs in seconds", type=int, default=60 * 60 * 12)
|
parser.add_argument("-i", "--interval", help="interval between runs in seconds", type=int, default=60 * 60 * 12)
|
||||||
parser.add_argument("--no-aur", help="do not check for AUR updates. Implies --no-vcs", action="store_true")
|
parser.add_argument("--aur", help="enable or disable checking for AUR updates. Implies --no-vcs",
|
||||||
parser.add_argument("--no-local", help="do not check local packages for updates", action="store_true")
|
action=argparse.BooleanOptionalAction, default=True)
|
||||||
parser.add_argument("--no-manual", help="do not include manual updates", action="store_true")
|
parser.add_argument("--local", help="enable or disable checking of local packages for updates",
|
||||||
parser.add_argument("--no-vcs", help="do not check VCS packages", action="store_true")
|
action=argparse.BooleanOptionalAction, default=True)
|
||||||
|
parser.add_argument("--manual", help="include or exclude manual updates",
|
||||||
|
action=argparse.BooleanOptionalAction, default=True)
|
||||||
|
parser.add_argument("--vcs", help="enable or disable checking of VCS packages",
|
||||||
|
action=argparse.BooleanOptionalAction, default=True)
|
||||||
parser.add_argument("-y", "--refresh", help="download fresh package databases from the mirror before actions, "
|
parser.add_argument("-y", "--refresh", help="download fresh package databases from the mirror before actions, "
|
||||||
"-yy to force refresh even if up to date",
|
"-yy to force refresh even if up to date",
|
||||||
action="count", default=0)
|
action="count", default=0)
|
||||||
@ -181,7 +187,7 @@ def _set_help_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
description="show help message for application or command and exit",
|
description="show help message for application or command and exit",
|
||||||
formatter_class=_formatter)
|
formatter_class=_formatter)
|
||||||
parser.add_argument("command", help="show help message for specific command", nargs="?")
|
parser.add_argument("command", help="show help message for specific command", nargs="?")
|
||||||
parser.set_defaults(handler=handlers.Help, architecture=[""], lock=None, no_report=True, quiet=True,
|
parser.set_defaults(handler=handlers.Help, architecture=[""], lock=None, report=False, quiet=True,
|
||||||
unsafe=True, parser=_parser)
|
unsafe=True, parser=_parser)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@ -200,7 +206,7 @@ def _set_help_commands_unsafe_parser(root: SubParserAction) -> argparse.Argument
|
|||||||
description="list unsafe commands as defined in default args", formatter_class=_formatter)
|
description="list unsafe commands as defined in default args", formatter_class=_formatter)
|
||||||
parser.add_argument("--command", help="instead of showing commands, just test command line for unsafe subcommand "
|
parser.add_argument("--command", help="instead of showing commands, just test command line for unsafe subcommand "
|
||||||
"and return 0 in case if command is safe and 1 otherwise")
|
"and return 0 in case if command is safe and 1 otherwise")
|
||||||
parser.set_defaults(handler=handlers.UnsafeCommands, architecture=[""], lock=None, no_report=True, quiet=True,
|
parser.set_defaults(handler=handlers.UnsafeCommands, architecture=[""], lock=None, report=False, quiet=True,
|
||||||
unsafe=True, parser=_parser)
|
unsafe=True, parser=_parser)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@ -224,7 +230,7 @@ def _set_key_import_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
formatter_class=_formatter)
|
formatter_class=_formatter)
|
||||||
parser.add_argument("--key-server", help="key server for key import", default="pgp.mit.edu")
|
parser.add_argument("--key-server", help="key server for key import", default="pgp.mit.edu")
|
||||||
parser.add_argument("key", help="PGP key to import from public server")
|
parser.add_argument("key", help="PGP key to import from public server")
|
||||||
parser.set_defaults(handler=handlers.KeyImport, architecture=[""], lock=None, no_report=True)
|
parser.set_defaults(handler=handlers.KeyImport, architecture=[""], lock=None, report=False)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
@ -301,7 +307,7 @@ def _set_package_status_parser(root: SubParserAction) -> argparse.ArgumentParser
|
|||||||
parser.add_argument("-i", "--info", help="show additional package information", action="store_true")
|
parser.add_argument("-i", "--info", help="show additional package information", action="store_true")
|
||||||
parser.add_argument("-s", "--status", help="filter packages by status",
|
parser.add_argument("-s", "--status", help="filter packages by status",
|
||||||
type=BuildStatusEnum, choices=enum_values(BuildStatusEnum))
|
type=BuildStatusEnum, choices=enum_values(BuildStatusEnum))
|
||||||
parser.set_defaults(handler=handlers.Status, lock=None, no_report=True, quiet=True, unsafe=True)
|
parser.set_defaults(handler=handlers.Status, lock=None, report=False, quiet=True, unsafe=True)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
@ -321,7 +327,7 @@ def _set_package_status_remove_parser(root: SubParserAction) -> argparse.Argumen
|
|||||||
"clears the status page.",
|
"clears the status page.",
|
||||||
formatter_class=_formatter)
|
formatter_class=_formatter)
|
||||||
parser.add_argument("package", help="remove specified packages", nargs="+")
|
parser.add_argument("package", help="remove specified packages", nargs="+")
|
||||||
parser.set_defaults(handler=handlers.StatusUpdate, action=Action.Remove, lock=None, no_report=True, quiet=True,
|
parser.set_defaults(handler=handlers.StatusUpdate, action=Action.Remove, lock=None, report=False, quiet=True,
|
||||||
unsafe=True)
|
unsafe=True)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@ -343,7 +349,7 @@ def _set_package_status_update_parser(root: SubParserAction) -> argparse.Argumen
|
|||||||
nargs="*")
|
nargs="*")
|
||||||
parser.add_argument("-s", "--status", help="new status",
|
parser.add_argument("-s", "--status", help="new status",
|
||||||
type=BuildStatusEnum, choices=enum_values(BuildStatusEnum), default=BuildStatusEnum.Success)
|
type=BuildStatusEnum, choices=enum_values(BuildStatusEnum), default=BuildStatusEnum.Success)
|
||||||
parser.set_defaults(handler=handlers.StatusUpdate, action=Action.Update, lock=None, no_report=True, quiet=True,
|
parser.set_defaults(handler=handlers.StatusUpdate, action=Action.Update, lock=None, report=False, quiet=True,
|
||||||
unsafe=True)
|
unsafe=True)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@ -370,7 +376,7 @@ def _set_patch_add_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
"it must end with ()")
|
"it must end with ()")
|
||||||
parser.add_argument("patch", help="path to file which contains function or variable value. If not set, "
|
parser.add_argument("patch", help="path to file which contains function or variable value. If not set, "
|
||||||
"the value will be read from stdin", type=Path, nargs="?")
|
"the value will be read from stdin", type=Path, nargs="?")
|
||||||
parser.set_defaults(handler=handlers.Patch, action=Action.Update, architecture=[""], lock=None, no_report=True)
|
parser.set_defaults(handler=handlers.Patch, action=Action.Update, architecture=[""], lock=None, report=False)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
@ -390,7 +396,7 @@ def _set_patch_list_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
parser.add_argument("-e", "--exit-code", help="return non-zero exit status if result is empty", action="store_true")
|
parser.add_argument("-e", "--exit-code", help="return non-zero exit status if result is empty", action="store_true")
|
||||||
parser.add_argument("-v", "--variable", help="if set, show only patches for specified PKGBUILD variables",
|
parser.add_argument("-v", "--variable", help="if set, show only patches for specified PKGBUILD variables",
|
||||||
action="append")
|
action="append")
|
||||||
parser.set_defaults(handler=handlers.Patch, action=Action.List, architecture=[""], lock=None, no_report=True)
|
parser.set_defaults(handler=handlers.Patch, action=Action.List, architecture=[""], lock=None, report=False)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
@ -411,7 +417,7 @@ def _set_patch_remove_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
"to remove only specified PKGBUILD variables. In case if not set, "
|
"to remove only specified PKGBUILD variables. In case if not set, "
|
||||||
"it will remove all patches related to the package",
|
"it will remove all patches related to the package",
|
||||||
action="append")
|
action="append")
|
||||||
parser.set_defaults(handler=handlers.Patch, action=Action.Remove, architecture=[""], lock=None, no_report=True)
|
parser.set_defaults(handler=handlers.Patch, action=Action.Remove, architecture=[""], lock=None, report=False)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
@ -435,7 +441,7 @@ def _set_patch_set_add_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
parser.add_argument("package", help="path to directory with changed files for patch addition/update", type=Path)
|
parser.add_argument("package", help="path to directory with changed files for patch addition/update", type=Path)
|
||||||
parser.add_argument("-t", "--track", help="files which has to be tracked", action="append",
|
parser.add_argument("-t", "--track", help="files which has to be tracked", action="append",
|
||||||
default=["*.diff", "*.patch"])
|
default=["*.diff", "*.patch"])
|
||||||
parser.set_defaults(handler=handlers.Patch, action=Action.Update, architecture=[""], lock=None, no_report=True,
|
parser.set_defaults(handler=handlers.Patch, action=Action.Update, architecture=[""], lock=None, report=False,
|
||||||
variable=None)
|
variable=None)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@ -453,7 +459,7 @@ def _set_repo_backup_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
parser = root.add_parser("repo-backup", help="backup repository data",
|
parser = root.add_parser("repo-backup", help="backup repository data",
|
||||||
description="backup settings and database", formatter_class=_formatter)
|
description="backup settings and database", formatter_class=_formatter)
|
||||||
parser.add_argument("path", help="path of the output archive", type=Path)
|
parser.add_argument("path", help="path of the output archive", type=Path)
|
||||||
parser.set_defaults(handler=handlers.Backup, architecture=[""], lock=None, no_report=True, unsafe=True)
|
parser.set_defaults(handler=handlers.Backup, architecture=[""], lock=None, report=False, unsafe=True)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
@ -472,11 +478,12 @@ def _set_repo_check_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
formatter_class=_formatter)
|
formatter_class=_formatter)
|
||||||
parser.add_argument("package", help="filter check by package base", nargs="*")
|
parser.add_argument("package", help="filter check by package base", nargs="*")
|
||||||
parser.add_argument("-e", "--exit-code", help="return non-zero exit status if result is empty", action="store_true")
|
parser.add_argument("-e", "--exit-code", help="return non-zero exit status if result is empty", action="store_true")
|
||||||
parser.add_argument("--no-vcs", help="do not check VCS packages", action="store_true")
|
parser.add_argument("--vcs", help="enable or disable checking of VCS packages",
|
||||||
|
action=argparse.BooleanOptionalAction, default=True)
|
||||||
parser.add_argument("-y", "--refresh", help="download fresh package databases from the mirror before actions, "
|
parser.add_argument("-y", "--refresh", help="download fresh package databases from the mirror before actions, "
|
||||||
"-yy to force refresh even if up to date",
|
"-yy to force refresh even if up to date",
|
||||||
action="count", default=0)
|
action="count", default=0)
|
||||||
parser.set_defaults(handler=handlers.Update, dry_run=True, no_aur=False, no_local=False, no_manual=True)
|
parser.set_defaults(handler=handlers.Update, dry_run=True, aur=True, local=True, manual=False)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
@ -496,10 +503,15 @@ def _set_repo_clean_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
"you should not run this command manually. Also in case if you are going to clear "
|
"you should not run this command manually. Also in case if you are going to clear "
|
||||||
"the chroot directories you will need root privileges.",
|
"the chroot directories you will need root privileges.",
|
||||||
formatter_class=_formatter)
|
formatter_class=_formatter)
|
||||||
parser.add_argument("--cache", help="clear directory with package caches", action="store_true")
|
parser.add_argument("--cache", help="clear directory with package caches",
|
||||||
parser.add_argument("--chroot", help="clear build chroot", action="store_true")
|
action=argparse.BooleanOptionalAction, default=False)
|
||||||
parser.add_argument("--manual", help="clear manually added packages queue", action="store_true")
|
parser.add_argument("--chroot", help="clear build chroot", action=argparse.BooleanOptionalAction, default=False)
|
||||||
parser.add_argument("--packages", help="clear directory with built packages", action="store_true")
|
parser.add_argument("--manual", help="clear manually added packages queue",
|
||||||
|
action=argparse.BooleanOptionalAction, default=False)
|
||||||
|
parser.add_argument("--packages", help="clear directory with built packages",
|
||||||
|
action=argparse.BooleanOptionalAction, default=False)
|
||||||
|
parser.add_argument("--pacman", help="clear directory with pacman local database cache",
|
||||||
|
action=argparse.BooleanOptionalAction, default=False)
|
||||||
parser.set_defaults(handler=handlers.Clean, quiet=True, unsafe=True)
|
parser.set_defaults(handler=handlers.Clean, quiet=True, unsafe=True)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@ -517,7 +529,7 @@ def _set_repo_config_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
parser = root.add_parser("repo-config", aliases=["config"], help="dump configuration",
|
parser = root.add_parser("repo-config", aliases=["config"], help="dump configuration",
|
||||||
description="dump configuration for the specified architecture",
|
description="dump configuration for the specified architecture",
|
||||||
formatter_class=_formatter)
|
formatter_class=_formatter)
|
||||||
parser.set_defaults(handler=handlers.Dump, lock=None, no_report=True, quiet=True, unsafe=True)
|
parser.set_defaults(handler=handlers.Dump, lock=None, report=False, quiet=True, unsafe=True)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
@ -561,7 +573,6 @@ def _set_repo_remove_unknown_parser(root: SubParserAction) -> argparse.ArgumentP
|
|||||||
description="remove packages which are missing in AUR and do not have local PKGBUILDs",
|
description="remove packages which are missing in AUR and do not have local PKGBUILDs",
|
||||||
formatter_class=_formatter)
|
formatter_class=_formatter)
|
||||||
parser.add_argument("--dry-run", help="just perform check for packages without removal", action="store_true")
|
parser.add_argument("--dry-run", help="just perform check for packages without removal", action="store_true")
|
||||||
parser.add_argument("-i", "--info", help="show additional package information", action="store_true")
|
|
||||||
parser.set_defaults(handler=handlers.RemoveUnknown)
|
parser.set_defaults(handler=handlers.RemoveUnknown)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@ -598,7 +609,7 @@ def _set_repo_restore_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
description="restore settings and database", formatter_class=_formatter)
|
description="restore settings and database", formatter_class=_formatter)
|
||||||
parser.add_argument("path", help="path of the input archive", type=Path)
|
parser.add_argument("path", help="path of the input archive", type=Path)
|
||||||
parser.add_argument("-o", "--output", help="root path of the extracted files", type=Path, default=Path("/"))
|
parser.add_argument("-o", "--output", help="root path of the extracted files", type=Path, default=Path("/"))
|
||||||
parser.set_defaults(handler=handlers.Restore, architecture=[""], lock=None, no_report=True, unsafe=True)
|
parser.set_defaults(handler=handlers.Restore, architecture=[""], lock=None, report=False, unsafe=True)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
@ -620,14 +631,15 @@ def _set_repo_setup_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
parser.add_argument("--build-command", help="build command prefix", default="ahriman")
|
parser.add_argument("--build-command", help="build command prefix", default="ahriman")
|
||||||
parser.add_argument("--from-configuration", help="path to default devtools pacman configuration",
|
parser.add_argument("--from-configuration", help="path to default devtools pacman configuration",
|
||||||
type=Path, default=Path("/usr/share/devtools/pacman-extra.conf"))
|
type=Path, default=Path("/usr/share/devtools/pacman-extra.conf"))
|
||||||
parser.add_argument("--no-multilib", help="do not add multilib repository", action="store_true")
|
parser.add_argument("--multilib", help="add or do not multilib repository",
|
||||||
|
action=argparse.BooleanOptionalAction, default=True)
|
||||||
parser.add_argument("--packager", help="packager name and email", required=True)
|
parser.add_argument("--packager", help="packager name and email", required=True)
|
||||||
parser.add_argument("--repository", help="repository name", required=True)
|
parser.add_argument("--repository", help="repository name", required=True)
|
||||||
parser.add_argument("--sign-key", help="sign key id")
|
parser.add_argument("--sign-key", help="sign key id")
|
||||||
parser.add_argument("--sign-target", help="sign options", action="append",
|
parser.add_argument("--sign-target", help="sign options", action="append",
|
||||||
type=SignSettings.from_option, choices=enum_values(SignSettings))
|
type=SignSettings.from_option, choices=enum_values(SignSettings))
|
||||||
parser.add_argument("--web-port", help="port of the web service", type=int)
|
parser.add_argument("--web-port", help="port of the web service", type=int)
|
||||||
parser.set_defaults(handler=handlers.Setup, lock=None, no_report=True, quiet=True, unsafe=True)
|
parser.set_defaults(handler=handlers.Setup, lock=None, report=False, quiet=True, unsafe=True)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
@ -664,7 +676,7 @@ def _set_repo_status_update_parser(root: SubParserAction) -> argparse.ArgumentPa
|
|||||||
description="update repository status on the status page", formatter_class=_formatter)
|
description="update repository status on the status page", formatter_class=_formatter)
|
||||||
parser.add_argument("-s", "--status", help="new status",
|
parser.add_argument("-s", "--status", help="new status",
|
||||||
type=BuildStatusEnum, choices=enum_values(BuildStatusEnum), default=BuildStatusEnum.Success)
|
type=BuildStatusEnum, choices=enum_values(BuildStatusEnum), default=BuildStatusEnum.Success)
|
||||||
parser.set_defaults(handler=handlers.StatusUpdate, action=Action.Update, lock=None, no_report=True, package=[],
|
parser.set_defaults(handler=handlers.StatusUpdate, action=Action.Update, lock=None, report=False, package=[],
|
||||||
quiet=True, unsafe=True)
|
quiet=True, unsafe=True)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@ -722,10 +734,14 @@ def _set_repo_update_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
parser.add_argument("package", help="filter check by package base", nargs="*")
|
parser.add_argument("package", help="filter check by package base", nargs="*")
|
||||||
parser.add_argument("--dry-run", help="just perform check for updates, same as check command", action="store_true")
|
parser.add_argument("--dry-run", help="just perform check for updates, same as check command", action="store_true")
|
||||||
parser.add_argument("-e", "--exit-code", help="return non-zero exit status if result is empty", action="store_true")
|
parser.add_argument("-e", "--exit-code", help="return non-zero exit status if result is empty", action="store_true")
|
||||||
parser.add_argument("--no-aur", help="do not check for AUR updates. Implies --no-vcs", action="store_true")
|
parser.add_argument("--aur", help="enable or disable checking for AUR updates. Implies --no-vcs",
|
||||||
parser.add_argument("--no-local", help="do not check local packages for updates", action="store_true")
|
action=argparse.BooleanOptionalAction, default=True)
|
||||||
parser.add_argument("--no-manual", help="do not include manual updates", action="store_true")
|
parser.add_argument("--local", help="enable or disable checking of local packages for updates",
|
||||||
parser.add_argument("--no-vcs", help="do not check VCS packages", action="store_true")
|
action=argparse.BooleanOptionalAction, default=True)
|
||||||
|
parser.add_argument("--manual", help="include or exclude manual updates",
|
||||||
|
action=argparse.BooleanOptionalAction, default=True)
|
||||||
|
parser.add_argument("--vcs", help="enable or disable checking of VCS packages",
|
||||||
|
action=argparse.BooleanOptionalAction, default=True)
|
||||||
parser.add_argument("-y", "--refresh", help="download fresh package databases from the mirror before actions, "
|
parser.add_argument("-y", "--refresh", help="download fresh package databases from the mirror before actions, "
|
||||||
"-yy to force refresh even if up to date",
|
"-yy to force refresh even if up to date",
|
||||||
action="count", default=0)
|
action="count", default=0)
|
||||||
@ -747,7 +763,7 @@ def _set_shell_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
description="drop into python shell while having created application",
|
description="drop into python shell while having created application",
|
||||||
formatter_class=_formatter)
|
formatter_class=_formatter)
|
||||||
parser.add_argument("-v", "--verbose", help=argparse.SUPPRESS, action="store_true")
|
parser.add_argument("-v", "--verbose", help=argparse.SUPPRESS, action="store_true")
|
||||||
parser.set_defaults(handler=handlers.Shell, lock=None, no_report=True)
|
parser.set_defaults(handler=handlers.Shell, lock=None, report=False)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
@ -772,7 +788,7 @@ def _set_user_add_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
parser.add_argument("-r", "--role", help="user access level",
|
parser.add_argument("-r", "--role", help="user access level",
|
||||||
type=UserAccess, choices=enum_values(UserAccess), default=UserAccess.Read)
|
type=UserAccess, choices=enum_values(UserAccess), default=UserAccess.Read)
|
||||||
parser.add_argument("-s", "--secure", help="set file permissions to user-only", action="store_true")
|
parser.add_argument("-s", "--secure", help="set file permissions to user-only", action="store_true")
|
||||||
parser.set_defaults(handler=handlers.Users, action=Action.Update, architecture=[""], lock=None, no_report=True,
|
parser.set_defaults(handler=handlers.Users, action=Action.Update, architecture=[""], lock=None, report=False,
|
||||||
quiet=True, unsafe=True)
|
quiet=True, unsafe=True)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@ -793,7 +809,7 @@ def _set_user_list_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
parser.add_argument("username", help="filter users by username", nargs="?")
|
parser.add_argument("username", help="filter users by username", nargs="?")
|
||||||
parser.add_argument("-e", "--exit-code", help="return non-zero exit status if result is empty", action="store_true")
|
parser.add_argument("-e", "--exit-code", help="return non-zero exit status if result is empty", action="store_true")
|
||||||
parser.add_argument("-r", "--role", help="filter users by role", type=UserAccess, choices=enum_values(UserAccess))
|
parser.add_argument("-r", "--role", help="filter users by role", type=UserAccess, choices=enum_values(UserAccess))
|
||||||
parser.set_defaults(handler=handlers.Users, action=Action.List, architecture=[""], lock=None, no_report=True, # nosec
|
parser.set_defaults(handler=handlers.Users, action=Action.List, architecture=[""], lock=None, report=False, # nosec
|
||||||
password="", quiet=True, unsafe=True)
|
password="", quiet=True, unsafe=True)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@ -813,7 +829,7 @@ def _set_user_remove_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
formatter_class=_formatter)
|
formatter_class=_formatter)
|
||||||
parser.add_argument("username", help="username for web service")
|
parser.add_argument("username", help="username for web service")
|
||||||
parser.add_argument("-s", "--secure", help="set file permissions to user-only", action="store_true")
|
parser.add_argument("-s", "--secure", help="set file permissions to user-only", action="store_true")
|
||||||
parser.set_defaults(handler=handlers.Users, action=Action.Remove, architecture=[""], lock=None, no_report=True, # nosec
|
parser.set_defaults(handler=handlers.Users, action=Action.Remove, architecture=[""], lock=None, report=False, # nosec
|
||||||
password="", quiet=True, unsafe=True)
|
password="", quiet=True, unsafe=True)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@ -830,7 +846,7 @@ def _set_version_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
"""
|
"""
|
||||||
parser = root.add_parser("version", help="application version",
|
parser = root.add_parser("version", help="application version",
|
||||||
description="print application and its dependencies versions", formatter_class=_formatter)
|
description="print application and its dependencies versions", formatter_class=_formatter)
|
||||||
parser.set_defaults(handler=handlers.Versions, architecture=[""], lock=None, no_report=True, quiet=True,
|
parser.set_defaults(handler=handlers.Versions, architecture=[""], lock=None, report=False, quiet=True,
|
||||||
unsafe=True)
|
unsafe=True)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@ -846,7 +862,7 @@ def _set_web_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
argparse.ArgumentParser: created argument parser
|
argparse.ArgumentParser: created argument parser
|
||||||
"""
|
"""
|
||||||
parser = root.add_parser("web", help="web server", description="start web server", formatter_class=_formatter)
|
parser = root.add_parser("web", help="web server", description="start web server", formatter_class=_formatter)
|
||||||
parser.set_defaults(handler=handlers.Web, lock=None, no_report=True, parser=_parser)
|
parser.set_defaults(handler=handlers.Web, lock=None, report=False, parser=_parser)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,12 +36,12 @@ class Application(ApplicationPackages, ApplicationRepository):
|
|||||||
>>> from ahriman.models.package_source import PackageSource
|
>>> from ahriman.models.package_source import PackageSource
|
||||||
>>>
|
>>>
|
||||||
>>> configuration = Configuration()
|
>>> configuration = Configuration()
|
||||||
>>> application = Application("x86_64", configuration, no_report=False, unsafe=False)
|
>>> application = Application("x86_64", configuration, report=True, unsafe=False)
|
||||||
>>> # add packages to build queue
|
>>> # add packages to build queue
|
||||||
>>> application.add(["ahriman"], PackageSource.AUR, without_dependencies=False)
|
>>> application.add(["ahriman"], PackageSource.AUR, without_dependencies=False)
|
||||||
>>>
|
>>>
|
||||||
>>> # check for updates
|
>>> # check for updates
|
||||||
>>> updates = application.updates([], no_aur=False, no_local=False, no_manual=False, no_vcs=False, log_fn=print)
|
>>> updates = application.updates([], aur=True, local=True, manual=True, vcs=True, log_fn=print)
|
||||||
>>> # updates for specified packages
|
>>> # updates for specified packages
|
||||||
>>> application.update(updates)
|
>>> application.update(updates)
|
||||||
|
|
||||||
|
@ -34,15 +34,15 @@ class ApplicationProperties(LazyLogging):
|
|||||||
repository(Repository): repository instance
|
repository(Repository): repository instance
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, architecture: str, configuration: Configuration,
|
def __init__(self, architecture: str, configuration: Configuration, *,
|
||||||
no_report: bool, unsafe: bool, refresh_pacman_database: int = 0) -> None:
|
report: bool, unsafe: bool, refresh_pacman_database: int = 0) -> None:
|
||||||
"""
|
"""
|
||||||
default constructor
|
default constructor
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
refresh_pacman_database(int): pacman database syncronization level, ``0`` is disabled
|
refresh_pacman_database(int): pacman database syncronization level, ``0`` is disabled
|
||||||
"""
|
"""
|
||||||
@ -50,4 +50,4 @@ class ApplicationProperties(LazyLogging):
|
|||||||
self.architecture = architecture
|
self.architecture = architecture
|
||||||
self.database = SQLite.load(configuration)
|
self.database = SQLite.load(configuration)
|
||||||
self.repository = Repository(architecture, configuration, self.database,
|
self.repository = Repository(architecture, configuration, self.database,
|
||||||
no_report, unsafe, refresh_pacman_database)
|
report=report, unsafe=unsafe, refresh_pacman_database=refresh_pacman_database)
|
||||||
|
@ -47,7 +47,7 @@ class ApplicationRepository(ApplicationProperties):
|
|||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def clean(self, cache: bool, chroot: bool, manual: bool, packages: bool) -> None:
|
def clean(self, *, cache: bool, chroot: bool, manual: bool, packages: bool, pacman: bool) -> None:
|
||||||
"""
|
"""
|
||||||
run all clean methods. Warning: some functions might not be available under non-root
|
run all clean methods. Warning: some functions might not be available under non-root
|
||||||
|
|
||||||
@ -56,6 +56,7 @@ class ApplicationRepository(ApplicationProperties):
|
|||||||
chroot(bool): clear build chroot
|
chroot(bool): clear build chroot
|
||||||
manual(bool): clear directory with manually added packages
|
manual(bool): clear directory with manually added packages
|
||||||
packages(bool): clear directory with built packages
|
packages(bool): clear directory with built packages
|
||||||
|
pacman(bool): clear directory with pacman databases
|
||||||
"""
|
"""
|
||||||
if cache:
|
if cache:
|
||||||
self.repository.clear_cache()
|
self.repository.clear_cache()
|
||||||
@ -65,6 +66,8 @@ class ApplicationRepository(ApplicationProperties):
|
|||||||
self.repository.clear_queue()
|
self.repository.clear_queue()
|
||||||
if packages:
|
if packages:
|
||||||
self.repository.clear_packages()
|
self.repository.clear_packages()
|
||||||
|
if pacman:
|
||||||
|
self.repository.clear_pacman()
|
||||||
|
|
||||||
def sign(self, packages: Iterable[str]) -> None:
|
def sign(self, packages: Iterable[str]) -> None:
|
||||||
"""
|
"""
|
||||||
@ -156,17 +159,17 @@ class ApplicationRepository(ApplicationProperties):
|
|||||||
|
|
||||||
return build_result
|
return build_result
|
||||||
|
|
||||||
def updates(self, filter_packages: Iterable[str], no_aur: bool, no_local: bool, no_manual: bool, no_vcs: bool,
|
def updates(self, filter_packages: Iterable[str], *,
|
||||||
log_fn: Callable[[str], None]) -> List[Package]:
|
aur: bool, local: bool, manual: bool, vcs: bool, log_fn: Callable[[str], None]) -> List[Package]:
|
||||||
"""
|
"""
|
||||||
get list of packages to run update process
|
get list of packages to run update process
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
filter_packages(Iterable[str]): do not check every package just specified in the list
|
filter_packages(Iterable[str]): do not check every package just specified in the list
|
||||||
no_aur(bool): do not check for aur updates
|
aur(bool): enable or disable checking for AUR updates
|
||||||
no_local(bool): do not check local packages for updates
|
local(bool): enable or disable checking of local packages for updates
|
||||||
no_manual(bool): do not check for manual updates
|
manual(bool): include or exclude manual updates
|
||||||
no_vcs(bool): do not check VCS packages
|
vcs(bool): enable or disable checking of VCS packages
|
||||||
log_fn(Callable[[str], None]): logger function to log updates
|
log_fn(Callable[[str], None]): logger function to log updates
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
@ -174,11 +177,11 @@ class ApplicationRepository(ApplicationProperties):
|
|||||||
"""
|
"""
|
||||||
updates = {}
|
updates = {}
|
||||||
|
|
||||||
if not no_aur:
|
if aur:
|
||||||
updates.update({package.base: package for package in self.repository.updates_aur(filter_packages, no_vcs)})
|
updates.update({package.base: package for package in self.repository.updates_aur(filter_packages, vcs=vcs)})
|
||||||
if not no_local:
|
if local:
|
||||||
updates.update({package.base: package for package in self.repository.updates_local()})
|
updates.update({package.base: package for package in self.repository.updates_local()})
|
||||||
if not no_manual:
|
if manual:
|
||||||
updates.update({package.base: package for package in self.repository.updates_manual()})
|
updates.update({package.base: package for package in self.repository.updates_manual()})
|
||||||
|
|
||||||
local_versions = {package.base: package.version for package in self.repository.packages()}
|
local_versions = {package.base: package.version for package in self.repository.packages()}
|
||||||
|
@ -32,8 +32,8 @@ class Add(Handler):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -41,15 +41,17 @@ class Add(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
application = Application(architecture, configuration, no_report, unsafe, args.refresh)
|
application = Application(architecture, configuration,
|
||||||
|
report=report, unsafe=unsafe, refresh_pacman_database=args.refresh)
|
||||||
application.on_start()
|
application.on_start()
|
||||||
application.add(args.package, args.source, args.without_dependencies)
|
application.add(args.package, args.source, args.without_dependencies)
|
||||||
if not args.now:
|
if not args.now:
|
||||||
return
|
return
|
||||||
|
|
||||||
packages = application.updates(args.package, True, True, False, True, application.logger.info)
|
packages = application.updates(args.package, aur=False, local=False, manual=True, vcs=False,
|
||||||
|
log_fn=application.logger.info)
|
||||||
result = application.update(packages)
|
result = application.update(packages)
|
||||||
Add.check_if_empty(args.exit_code, result.is_empty)
|
Add.check_if_empty(args.exit_code, result.is_empty)
|
||||||
|
@ -37,8 +37,8 @@ class Backup(Handler):
|
|||||||
ALLOW_AUTO_ARCHITECTURE_RUN = False # it should be called only as "no-architecture"
|
ALLOW_AUTO_ARCHITECTURE_RUN = False # it should be called only as "no-architecture"
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ class Backup(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
backup_paths = Backup.get_paths(configuration)
|
backup_paths = Backup.get_paths(configuration)
|
||||||
|
@ -32,8 +32,8 @@ class Clean(Handler):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -41,9 +41,10 @@ class Clean(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
application = Application(architecture, configuration, no_report, unsafe)
|
application = Application(architecture, configuration, report=report, unsafe=unsafe)
|
||||||
application.on_start()
|
application.on_start()
|
||||||
application.clean(args.cache, args.chroot, args.manual, args.packages)
|
application.clean(cache=args.cache, chroot=args.chroot, manual=args.manual, packages=args.packages,
|
||||||
|
pacman=args.pacman)
|
||||||
|
@ -32,8 +32,8 @@ class Daemon(Handler):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -41,11 +41,12 @@ class Daemon(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
from ahriman.application.handlers import Update
|
from ahriman.application.handlers import Update
|
||||||
Update.run(args, architecture, configuration, no_report, unsafe)
|
Update.run(args, architecture, configuration, report=report, unsafe=unsafe)
|
||||||
timer = threading.Timer(args.interval, Daemon.run, (args, architecture, configuration, no_report, unsafe))
|
timer = threading.Timer(args.interval, Daemon.run, args=[args, architecture, configuration],
|
||||||
|
kwargs={"report": report, "unsafe": unsafe})
|
||||||
timer.start()
|
timer.start()
|
||||||
timer.join()
|
timer.join()
|
||||||
|
@ -34,8 +34,8 @@ class Dump(Handler):
|
|||||||
ALLOW_AUTO_ARCHITECTURE_RUN = False
|
ALLOW_AUTO_ARCHITECTURE_RUN = False
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ class Dump(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
dump = configuration.dump()
|
dump = configuration.dump()
|
||||||
|
@ -27,7 +27,7 @@ from typing import List, Type
|
|||||||
|
|
||||||
from ahriman.application.lock import Lock
|
from ahriman.application.lock import Lock
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.exceptions import ExitCode, MissingArchitecture, MultipleArchitectures
|
from ahriman.core.exceptions import ExitCode, MissingArchitectureError, MultipleArchitecturesError
|
||||||
from ahriman.models.repository_paths import RepositoryPaths
|
from ahriman.models.repository_paths import RepositoryPaths
|
||||||
|
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ class Handler:
|
|||||||
if not cls.ALLOW_AUTO_ARCHITECTURE_RUN and args.architecture is None:
|
if not cls.ALLOW_AUTO_ARCHITECTURE_RUN and args.architecture is None:
|
||||||
# for some parsers (e.g. config) we need to run with specific architecture
|
# for some parsers (e.g. config) we need to run with specific architecture
|
||||||
# for those cases architecture must be set explicitly
|
# for those cases architecture must be set explicitly
|
||||||
raise MissingArchitecture(args.command)
|
raise MissingArchitectureError(args.command)
|
||||||
if args.architecture: # architecture is specified explicitly
|
if args.architecture: # architecture is specified explicitly
|
||||||
return sorted(set(args.architecture))
|
return sorted(set(args.architecture))
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ class Handler:
|
|||||||
architectures = RepositoryPaths.known_architectures(root)
|
architectures = RepositoryPaths.known_architectures(root)
|
||||||
|
|
||||||
if not architectures: # well we did not find anything
|
if not architectures: # well we did not find anything
|
||||||
raise MissingArchitecture(args.command)
|
raise MissingArchitectureError(args.command)
|
||||||
return sorted(architectures)
|
return sorted(architectures)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -96,7 +96,7 @@ class Handler:
|
|||||||
try:
|
try:
|
||||||
configuration = Configuration.from_path(args.configuration, architecture, args.quiet)
|
configuration = Configuration.from_path(args.configuration, architecture, args.quiet)
|
||||||
with Lock(args, architecture, configuration):
|
with Lock(args, architecture, configuration):
|
||||||
cls.run(args, architecture, configuration, args.no_report, args.unsafe)
|
cls.run(args, architecture, configuration, report=args.report, unsafe=args.unsafe)
|
||||||
return True
|
return True
|
||||||
except ExitCode:
|
except ExitCode:
|
||||||
return False
|
return False
|
||||||
@ -124,7 +124,7 @@ class Handler:
|
|||||||
# actually we do not have to spawn another process if it is single-process application, do we?
|
# actually we do not have to spawn another process if it is single-process application, do we?
|
||||||
if len(architectures) > 1:
|
if len(architectures) > 1:
|
||||||
if not cls.ALLOW_MULTI_ARCHITECTURE_RUN:
|
if not cls.ALLOW_MULTI_ARCHITECTURE_RUN:
|
||||||
raise MultipleArchitectures(args.command)
|
raise MultipleArchitecturesError(args.command)
|
||||||
|
|
||||||
with Pool(len(architectures)) as pool:
|
with Pool(len(architectures)) as pool:
|
||||||
result = pool.starmap(
|
result = pool.starmap(
|
||||||
@ -135,8 +135,8 @@ class Handler:
|
|||||||
return 0 if all(result) else 1
|
return 0 if all(result) else 1
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -144,7 +144,7 @@ class Handler:
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
|
@ -33,8 +33,8 @@ class Help(Handler):
|
|||||||
ALLOW_AUTO_ARCHITECTURE_RUN = False # it should be called only as "no-architecture"
|
ALLOW_AUTO_ARCHITECTURE_RUN = False # it should be called only as "no-architecture"
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ class Help(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
parser: argparse.ArgumentParser = args.parser()
|
parser: argparse.ArgumentParser = args.parser()
|
||||||
|
@ -34,8 +34,8 @@ class KeyImport(Handler):
|
|||||||
ALLOW_AUTO_ARCHITECTURE_RUN = False # it should be called only as "no-architecture"
|
ALLOW_AUTO_ARCHITECTURE_RUN = False # it should be called only as "no-architecture"
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -43,8 +43,8 @@ class KeyImport(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
application = Application(architecture, configuration, no_report, unsafe)
|
application = Application(architecture, configuration, report=report, unsafe=unsafe)
|
||||||
application.repository.sign.key_import(args.key_server, args.key)
|
application.repository.sign.key_import(args.key_server, args.key)
|
||||||
|
@ -39,8 +39,8 @@ class Patch(Handler):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -48,10 +48,10 @@ class Patch(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
application = Application(architecture, configuration, no_report, unsafe)
|
application = Application(architecture, configuration, report=report, unsafe=unsafe)
|
||||||
application.on_start()
|
application.on_start()
|
||||||
|
|
||||||
if args.action == Action.Update and args.variable is not None:
|
if args.action == Action.Update and args.variable is not None:
|
||||||
|
@ -34,8 +34,8 @@ class Rebuild(Handler):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -43,12 +43,12 @@ class Rebuild(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
depends_on = set(args.depends_on) if args.depends_on else None
|
depends_on = set(args.depends_on) if args.depends_on else None
|
||||||
|
|
||||||
application = Application(architecture, configuration, no_report, unsafe)
|
application = Application(architecture, configuration, report=report, unsafe=unsafe)
|
||||||
application.on_start()
|
application.on_start()
|
||||||
|
|
||||||
if args.from_database:
|
if args.from_database:
|
||||||
|
@ -32,8 +32,8 @@ class Remove(Handler):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -41,9 +41,9 @@ class Remove(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
application = Application(architecture, configuration, no_report, unsafe)
|
application = Application(architecture, configuration, report=report, unsafe=unsafe)
|
||||||
application.on_start()
|
application.on_start()
|
||||||
application.remove(args.package)
|
application.remove(args.package)
|
||||||
|
@ -33,8 +33,8 @@ class RemoveUnknown(Handler):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -42,16 +42,16 @@ class RemoveUnknown(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
application = Application(architecture, configuration, no_report, unsafe)
|
application = Application(architecture, configuration, report=report, unsafe=unsafe)
|
||||||
application.on_start()
|
application.on_start()
|
||||||
unknown_packages = application.unknown()
|
unknown_packages = application.unknown()
|
||||||
|
|
||||||
if args.dry_run:
|
if args.dry_run:
|
||||||
for package in sorted(unknown_packages):
|
for package in sorted(unknown_packages):
|
||||||
StringPrinter(package).print(args.info)
|
StringPrinter(package).print(False)
|
||||||
return
|
return
|
||||||
|
|
||||||
application.remove(unknown_packages)
|
application.remove(unknown_packages)
|
||||||
|
@ -34,8 +34,8 @@ class Restore(Handler):
|
|||||||
ALLOW_AUTO_ARCHITECTURE_RUN = False # it should be called only as "no-architecture"
|
ALLOW_AUTO_ARCHITECTURE_RUN = False # it should be called only as "no-architecture"
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ class Restore(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
with TarFile(args.path) as archive:
|
with TarFile(args.path) as archive:
|
||||||
|
@ -26,7 +26,7 @@ from ahriman.application.application import Application
|
|||||||
from ahriman.application.handlers import Handler
|
from ahriman.application.handlers import Handler
|
||||||
from ahriman.core.alpm.remote import AUR, Official
|
from ahriman.core.alpm.remote import AUR, Official
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.exceptions import InvalidOption
|
from ahriman.core.exceptions import OptionError
|
||||||
from ahriman.core.formatters import AurPrinter
|
from ahriman.core.formatters import AurPrinter
|
||||||
from ahriman.models.aur_package import AURPackage
|
from ahriman.models.aur_package import AURPackage
|
||||||
|
|
||||||
@ -43,8 +43,8 @@ class Search(Handler):
|
|||||||
SORT_FIELDS = {field.name for field in fields(AURPackage) if field.default_factory is not list}
|
SORT_FIELDS = {field.name for field in fields(AURPackage) if field.default_factory is not list}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -52,10 +52,10 @@ class Search(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
application = Application(architecture, configuration, no_report, unsafe)
|
application = Application(architecture, configuration, report=report, unsafe=unsafe)
|
||||||
|
|
||||||
official_packages_list = Official.multisearch(*args.search, pacman=application.repository.pacman)
|
official_packages_list = Official.multisearch(*args.search, pacman=application.repository.pacman)
|
||||||
aur_packages_list = AUR.multisearch(*args.search, pacman=application.repository.pacman)
|
aur_packages_list = AUR.multisearch(*args.search, pacman=application.repository.pacman)
|
||||||
@ -82,7 +82,7 @@ class Search(Handler):
|
|||||||
InvalidOption: if search fields is not in list of allowed ones
|
InvalidOption: if search fields is not in list of allowed ones
|
||||||
"""
|
"""
|
||||||
if sort_by not in Search.SORT_FIELDS:
|
if sort_by not in Search.SORT_FIELDS:
|
||||||
raise InvalidOption(sort_by)
|
raise OptionError(sort_by)
|
||||||
# always sort by package name at the last
|
# always sort by package name at the last
|
||||||
# well technically it is not a string, but we can deal with it
|
# well technically it is not a string, but we can deal with it
|
||||||
comparator: Callable[[AURPackage], Tuple[str, str]] =\
|
comparator: Callable[[AURPackage], Tuple[str, str]] =\
|
||||||
|
@ -46,8 +46,8 @@ class Setup(Handler):
|
|||||||
SUDOERS_DIR_PATH = Path("/etc/sudoers.d")
|
SUDOERS_DIR_PATH = Path("/etc/sudoers.d")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -55,19 +55,19 @@ class Setup(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
Setup.configuration_create_ahriman(args, architecture, args.repository, configuration.include,
|
Setup.configuration_create_ahriman(args, architecture, args.repository, configuration.include,
|
||||||
configuration.repository_paths)
|
configuration.repository_paths)
|
||||||
configuration.reload()
|
configuration.reload()
|
||||||
|
|
||||||
application = Application(architecture, configuration, no_report, unsafe)
|
application = Application(architecture, configuration, report=report, unsafe=unsafe)
|
||||||
|
|
||||||
Setup.configuration_create_makepkg(args.packager, application.repository.paths)
|
Setup.configuration_create_makepkg(args.packager, application.repository.paths)
|
||||||
Setup.executable_create(application.repository.paths, args.build_command, architecture)
|
Setup.executable_create(application.repository.paths, args.build_command, architecture)
|
||||||
Setup.configuration_create_devtools(args.build_command, architecture, args.from_configuration,
|
Setup.configuration_create_devtools(args.build_command, architecture, args.from_configuration,
|
||||||
args.no_multilib, args.repository, application.repository.paths)
|
args.multilib, args.repository, application.repository.paths)
|
||||||
Setup.configuration_create_sudo(application.repository.paths, args.build_command, architecture)
|
Setup.configuration_create_sudo(application.repository.paths, args.build_command, architecture)
|
||||||
|
|
||||||
application.repository.repo.init()
|
application.repository.repo.init()
|
||||||
@ -124,7 +124,7 @@ class Setup(Handler):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def configuration_create_devtools(prefix: str, architecture: str, source: Path,
|
def configuration_create_devtools(prefix: str, architecture: str, source: Path,
|
||||||
no_multilib: bool, repository: str, paths: RepositoryPaths) -> None:
|
multilib: bool, repository: str, paths: RepositoryPaths) -> None:
|
||||||
"""
|
"""
|
||||||
create configuration for devtools based on ``source`` configuration
|
create configuration for devtools based on ``source`` configuration
|
||||||
|
|
||||||
@ -135,7 +135,7 @@ class Setup(Handler):
|
|||||||
prefix(str): command prefix in {prefix}-{architecture}-build
|
prefix(str): command prefix in {prefix}-{architecture}-build
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
source(Path): path to source configuration file
|
source(Path): path to source configuration file
|
||||||
no_multilib(bool): do not add multilib repository
|
multilib(bool): add or do not multilib repository
|
||||||
repository(str): repository name
|
repository(str): repository name
|
||||||
paths(RepositoryPaths): repository paths instance
|
paths(RepositoryPaths): repository paths instance
|
||||||
"""
|
"""
|
||||||
@ -154,7 +154,7 @@ class Setup(Handler):
|
|||||||
configuration.set_option("options", "Architecture", architecture)
|
configuration.set_option("options", "Architecture", architecture)
|
||||||
|
|
||||||
# add multilib
|
# add multilib
|
||||||
if not no_multilib:
|
if multilib:
|
||||||
configuration.set_option("multilib", "Include", str(Setup.MIRRORLIST_PATH))
|
configuration.set_option("multilib", "Include", str(Setup.MIRRORLIST_PATH))
|
||||||
|
|
||||||
# add repository itself
|
# add repository itself
|
||||||
|
@ -38,8 +38,8 @@ class Shell(Handler):
|
|||||||
ALLOW_MULTI_ARCHITECTURE_RUN = False
|
ALLOW_MULTI_ARCHITECTURE_RUN = False
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -47,11 +47,11 @@ class Shell(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
# pylint: disable=possibly-unused-variable
|
# pylint: disable=possibly-unused-variable
|
||||||
application = Application(architecture, configuration, no_report, unsafe)
|
application = Application(architecture, configuration, report=report, unsafe=unsafe)
|
||||||
if args.verbose:
|
if args.verbose:
|
||||||
# licensed by https://creativecommons.org/licenses/by-sa/3.0
|
# licensed by https://creativecommons.org/licenses/by-sa/3.0
|
||||||
path = Path(sys.prefix) / "share" / "ahriman" / "templates" / "shell"
|
path = Path(sys.prefix) / "share" / "ahriman" / "templates" / "shell"
|
||||||
|
@ -32,8 +32,8 @@ class Sign(Handler):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ class Sign(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
Application(architecture, configuration, no_report, unsafe).sign(args.package)
|
Application(architecture, configuration, report=report, unsafe=unsafe).sign(args.package)
|
||||||
|
@ -37,8 +37,8 @@ class Status(Handler):
|
|||||||
ALLOW_AUTO_ARCHITECTURE_RUN = False
|
ALLOW_AUTO_ARCHITECTURE_RUN = False
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -46,11 +46,11 @@ class Status(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
# we are using reporter here
|
# we are using reporter here
|
||||||
client = Application(architecture, configuration, no_report=False, unsafe=unsafe).repository.reporter
|
client = Application(architecture, configuration, report=True, unsafe=unsafe).repository.reporter
|
||||||
if args.ahriman:
|
if args.ahriman:
|
||||||
service_status = client.get_internal()
|
service_status = client.get_internal()
|
||||||
StatusPrinter(service_status.status).print(args.info)
|
StatusPrinter(service_status.status).print(args.info)
|
||||||
|
@ -35,8 +35,8 @@ class StatusUpdate(Handler):
|
|||||||
ALLOW_AUTO_ARCHITECTURE_RUN = False
|
ALLOW_AUTO_ARCHITECTURE_RUN = False
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -44,11 +44,11 @@ class StatusUpdate(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
# we are using reporter here
|
# we are using reporter here
|
||||||
client = Application(architecture, configuration, no_report=False, unsafe=unsafe).repository.reporter
|
client = Application(architecture, configuration, report=True, unsafe=unsafe).repository.reporter
|
||||||
|
|
||||||
if args.action == Action.Update and args.package:
|
if args.action == Action.Update and args.package:
|
||||||
# update packages statuses
|
# update packages statuses
|
||||||
|
@ -33,8 +33,8 @@ class Triggers(Handler):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -42,10 +42,10 @@ class Triggers(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
application = Application(architecture, configuration, no_report, unsafe)
|
application = Application(architecture, configuration, report=report, unsafe=unsafe)
|
||||||
if args.trigger:
|
if args.trigger:
|
||||||
loader = application.repository.triggers
|
loader = application.repository.triggers
|
||||||
loader.triggers = [loader.load_trigger(trigger) for trigger in args.trigger]
|
loader.triggers = [loader.load_trigger(trigger) for trigger in args.trigger]
|
||||||
|
@ -35,8 +35,8 @@ class UnsafeCommands(Handler):
|
|||||||
ALLOW_AUTO_ARCHITECTURE_RUN = False # it should be called only as "no-architecture"
|
ALLOW_AUTO_ARCHITECTURE_RUN = False # it should be called only as "no-architecture"
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ class UnsafeCommands(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
parser = args.parser()
|
parser = args.parser()
|
||||||
@ -79,6 +79,7 @@ class UnsafeCommands(Handler):
|
|||||||
Returns:
|
Returns:
|
||||||
List[str]: list of commands with default unsafe flag
|
List[str]: list of commands with default unsafe flag
|
||||||
"""
|
"""
|
||||||
|
# should never fail
|
||||||
# pylint: disable=protected-access
|
# pylint: disable=protected-access
|
||||||
subparser = next(action for action in parser._actions if isinstance(action, argparse._SubParsersAction))
|
subparser = next(action for action in parser._actions if isinstance(action, argparse._SubParsersAction))
|
||||||
return [action_name for action_name, action in subparser.choices.items() if action.get_default("unsafe")]
|
return [action_name for action_name, action in subparser.choices.items() if action.get_default("unsafe")]
|
||||||
|
@ -32,8 +32,8 @@ class Update(Handler):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -41,13 +41,14 @@ class Update(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
application = Application(architecture, configuration, no_report, unsafe, args.refresh)
|
application = Application(architecture, configuration, report=report, unsafe=unsafe,
|
||||||
|
refresh_pacman_database=args.refresh)
|
||||||
application.on_start()
|
application.on_start()
|
||||||
packages = application.updates(args.package, args.no_aur, args.no_local, args.no_manual, args.no_vcs,
|
packages = application.updates(args.package, aur=args.aur, local=args.local, manual=args.manual, vcs=args.vcs,
|
||||||
Update.log_fn(application, args.dry_run))
|
log_fn=Update.log_fn(application, args.dry_run))
|
||||||
Update.check_if_empty(args.exit_code, not packages)
|
Update.check_if_empty(args.exit_code, not packages)
|
||||||
if args.dry_run:
|
if args.dry_run:
|
||||||
return
|
return
|
||||||
|
@ -39,8 +39,8 @@ class Users(Handler):
|
|||||||
ALLOW_AUTO_ARCHITECTURE_RUN = False # it should be called only as "no-architecture"
|
ALLOW_AUTO_ARCHITECTURE_RUN = False # it should be called only as "no-architecture"
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ class Users(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
database = SQLite.load(configuration)
|
database = SQLite.load(configuration)
|
||||||
|
@ -37,8 +37,8 @@ class Versions(Handler):
|
|||||||
ALLOW_AUTO_ARCHITECTURE_RUN = False # it should be called only as "no-architecture"
|
ALLOW_AUTO_ARCHITECTURE_RUN = False # it should be called only as "no-architecture"
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ class Versions(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
VersionPrinter(f"Module version {version.__version__}",
|
VersionPrinter(f"Module version {version.__version__}",
|
||||||
|
@ -35,8 +35,8 @@ class Web(Handler):
|
|||||||
ALLOW_MULTI_ARCHITECTURE_RUN = False # required to be able to spawn external processes
|
ALLOW_MULTI_ARCHITECTURE_RUN = False # required to be able to spawn external processes
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str,
|
def run(cls: Type[Handler], args: argparse.Namespace, architecture: str, configuration: Configuration, *,
|
||||||
configuration: Configuration, no_report: bool, unsafe: bool) -> None:
|
report: bool, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
callback for command line
|
callback for command line
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ class Web(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
# we are using local import for optional dependencies
|
# we are using local import for optional dependencies
|
||||||
|
@ -27,7 +27,7 @@ from typing import Literal, Optional, Type
|
|||||||
|
|
||||||
from ahriman import version
|
from ahriman import version
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.exceptions import DuplicateRun
|
from ahriman.core.exceptions import DuplicateRunError
|
||||||
from ahriman.core.lazy_logging import LazyLogging
|
from ahriman.core.lazy_logging import LazyLogging
|
||||||
from ahriman.core.status.client import Client
|
from ahriman.core.status.client import Client
|
||||||
from ahriman.core.util import check_user
|
from ahriman.core.util import check_user
|
||||||
@ -73,7 +73,7 @@ class Lock(LazyLogging):
|
|||||||
self.unsafe = args.unsafe
|
self.unsafe = args.unsafe
|
||||||
|
|
||||||
self.paths = configuration.repository_paths
|
self.paths = configuration.repository_paths
|
||||||
self.reporter = Client() if args.no_report else Client.load(configuration)
|
self.reporter = Client.load(configuration) if args.report else Client()
|
||||||
|
|
||||||
def __enter__(self) -> Lock:
|
def __enter__(self) -> Lock:
|
||||||
"""
|
"""
|
||||||
@ -122,7 +122,7 @@ class Lock(LazyLogging):
|
|||||||
"""
|
"""
|
||||||
check if current user is actually owner of ahriman root
|
check if current user is actually owner of ahriman root
|
||||||
"""
|
"""
|
||||||
check_user(self.paths, self.unsafe)
|
check_user(self.paths, unsafe=self.unsafe)
|
||||||
|
|
||||||
def clear(self) -> None:
|
def clear(self) -> None:
|
||||||
"""
|
"""
|
||||||
@ -144,4 +144,4 @@ class Lock(LazyLogging):
|
|||||||
try:
|
try:
|
||||||
self.path.touch(exist_ok=self.force)
|
self.path.touch(exist_ok=self.force)
|
||||||
except FileExistsError:
|
except FileExistsError:
|
||||||
raise DuplicateRun()
|
raise DuplicateRunError()
|
||||||
|
@ -23,7 +23,7 @@ from typing import Any, Dict, List, Type
|
|||||||
|
|
||||||
from ahriman.core.alpm.pacman import Pacman
|
from ahriman.core.alpm.pacman import Pacman
|
||||||
from ahriman.core.alpm.remote import Remote
|
from ahriman.core.alpm.remote import Remote
|
||||||
from ahriman.core.exceptions import InvalidPackageInfo
|
from ahriman.core.exceptions import PackageInfoError, UnknownPackageError
|
||||||
from ahriman.core.util import exception_response_text
|
from ahriman.core.util import exception_response_text
|
||||||
from ahriman.models.aur_package import AURPackage
|
from ahriman.models.aur_package import AURPackage
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ class AUR(Remote):
|
|||||||
response_type = response["type"]
|
response_type = response["type"]
|
||||||
if response_type == "error":
|
if response_type == "error":
|
||||||
error_details = response.get("error", "Unknown API error")
|
error_details = response.get("error", "Unknown API error")
|
||||||
raise InvalidPackageInfo(error_details)
|
raise PackageInfoError(error_details)
|
||||||
return [AURPackage.from_json(package) for package in response["results"]]
|
return [AURPackage.from_json(package) for package in response["results"]]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -140,7 +140,10 @@ class AUR(Remote):
|
|||||||
AURPackage: package which match the package name
|
AURPackage: package which match the package name
|
||||||
"""
|
"""
|
||||||
packages = self.make_request("info", package_name)
|
packages = self.make_request("info", package_name)
|
||||||
return next(package for package in packages if package.name == package_name)
|
try:
|
||||||
|
return next(package for package in packages if package.name == package_name)
|
||||||
|
except StopIteration:
|
||||||
|
raise UnknownPackageError(package_name)
|
||||||
|
|
||||||
def package_search(self, *keywords: str, pacman: Pacman) -> List[AURPackage]:
|
def package_search(self, *keywords: str, pacman: Pacman) -> List[AURPackage]:
|
||||||
"""
|
"""
|
||||||
|
@ -23,7 +23,7 @@ from typing import Any, Dict, List, Type
|
|||||||
|
|
||||||
from ahriman.core.alpm.pacman import Pacman
|
from ahriman.core.alpm.pacman import Pacman
|
||||||
from ahriman.core.alpm.remote import Remote
|
from ahriman.core.alpm.remote import Remote
|
||||||
from ahriman.core.exceptions import InvalidPackageInfo
|
from ahriman.core.exceptions import PackageInfoError, UnknownPackageError
|
||||||
from ahriman.core.util import exception_response_text
|
from ahriman.core.util import exception_response_text
|
||||||
from ahriman.models.aur_package import AURPackage
|
from ahriman.models.aur_package import AURPackage
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ class Official(Remote):
|
|||||||
InvalidPackageInfo: for error API response
|
InvalidPackageInfo: for error API response
|
||||||
"""
|
"""
|
||||||
if not response["valid"]:
|
if not response["valid"]:
|
||||||
raise InvalidPackageInfo("API validation error")
|
raise PackageInfoError("API validation error")
|
||||||
return [AURPackage.from_repo(package) for package in response["results"]]
|
return [AURPackage.from_repo(package) for package in response["results"]]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -128,7 +128,10 @@ class Official(Remote):
|
|||||||
AURPackage: package which match the package name
|
AURPackage: package which match the package name
|
||||||
"""
|
"""
|
||||||
packages = self.make_request(package_name, by="name")
|
packages = self.make_request(package_name, by="name")
|
||||||
return next(package for package in packages if package.name == package_name)
|
try:
|
||||||
|
return next(package for package in packages if package.name == package_name)
|
||||||
|
except StopIteration:
|
||||||
|
raise UnknownPackageError(package_name)
|
||||||
|
|
||||||
def package_search(self, *keywords: str, pacman: Pacman) -> List[AURPackage]:
|
def package_search(self, *keywords: str, pacman: Pacman) -> List[AURPackage]:
|
||||||
"""
|
"""
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#
|
#
|
||||||
from ahriman.core.alpm.pacman import Pacman
|
from ahriman.core.alpm.pacman import Pacman
|
||||||
from ahriman.core.alpm.remote import Official
|
from ahriman.core.alpm.remote import Official
|
||||||
|
from ahriman.core.exceptions import UnknownPackageError
|
||||||
from ahriman.models.aur_package import AURPackage
|
from ahriman.models.aur_package import AURPackage
|
||||||
|
|
||||||
|
|
||||||
@ -48,4 +49,7 @@ class OfficialSyncdb(Official):
|
|||||||
Returns:
|
Returns:
|
||||||
AURPackage: package which match the package name
|
AURPackage: package which match the package name
|
||||||
"""
|
"""
|
||||||
return next(AURPackage.from_pacman(package) for package in pacman.package_get(package_name))
|
try:
|
||||||
|
return next(AURPackage.from_pacman(package) for package in pacman.package_get(package_name))
|
||||||
|
except StopIteration:
|
||||||
|
raise UnknownPackageError(package_name)
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from ahriman.core.exceptions import BuildFailed
|
from ahriman.core.exceptions import BuildError
|
||||||
from ahriman.core.lazy_logging import LazyLogging
|
from ahriman.core.lazy_logging import LazyLogging
|
||||||
from ahriman.core.util import check_output
|
from ahriman.core.util import check_output
|
||||||
from ahriman.models.repository_paths import RepositoryPaths
|
from ahriman.models.repository_paths import RepositoryPaths
|
||||||
@ -72,7 +72,7 @@ class Repo(LazyLogging):
|
|||||||
"""
|
"""
|
||||||
Repo._check_output(
|
Repo._check_output(
|
||||||
"repo-add", *self.sign_args, "-R", str(self.repo_path), str(path),
|
"repo-add", *self.sign_args, "-R", str(self.repo_path), str(path),
|
||||||
exception=BuildFailed(path.name),
|
exception=BuildError(path.name),
|
||||||
cwd=self.paths.repository,
|
cwd=self.paths.repository,
|
||||||
logger=self.logger,
|
logger=self.logger,
|
||||||
user=self.uid)
|
user=self.uid)
|
||||||
@ -103,7 +103,7 @@ class Repo(LazyLogging):
|
|||||||
# remove package from registry
|
# remove package from registry
|
||||||
Repo._check_output(
|
Repo._check_output(
|
||||||
"repo-remove", *self.sign_args, str(self.repo_path), package,
|
"repo-remove", *self.sign_args, str(self.repo_path), package,
|
||||||
exception=BuildFailed(package),
|
exception=BuildError(package),
|
||||||
cwd=self.paths.repository,
|
cwd=self.paths.repository,
|
||||||
logger=self.logger,
|
logger=self.logger,
|
||||||
user=self.uid)
|
user=self.uid)
|
||||||
|
@ -24,7 +24,7 @@ from typing import Optional, Type
|
|||||||
from ahriman.core.auth import Mapping
|
from ahriman.core.auth import Mapping
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.database import SQLite
|
from ahriman.core.database import SQLite
|
||||||
from ahriman.core.exceptions import InvalidOption
|
from ahriman.core.exceptions import OptionError
|
||||||
from ahriman.models.auth_settings import AuthSettings
|
from ahriman.models.auth_settings import AuthSettings
|
||||||
|
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ class OAuth(Mapping):
|
|||||||
except TypeError: # what if it is random string?
|
except TypeError: # what if it is random string?
|
||||||
is_oauth2_client = False
|
is_oauth2_client = False
|
||||||
if not is_oauth2_client:
|
if not is_oauth2_client:
|
||||||
raise InvalidOption(name)
|
raise OptionError(name)
|
||||||
return provider
|
return provider
|
||||||
|
|
||||||
def get_client(self) -> aioauth_client.OAuth2Client:
|
def get_client(self) -> aioauth_client.OAuth2Client:
|
||||||
|
@ -23,7 +23,7 @@ from typing import List
|
|||||||
from ahriman.core.build_tools.sources import Sources
|
from ahriman.core.build_tools.sources import Sources
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.database import SQLite
|
from ahriman.core.database import SQLite
|
||||||
from ahriman.core.exceptions import BuildFailed
|
from ahriman.core.exceptions import BuildError
|
||||||
from ahriman.core.lazy_logging import LazyLogging
|
from ahriman.core.lazy_logging import LazyLogging
|
||||||
from ahriman.core.util import check_output
|
from ahriman.core.util import check_output
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
@ -78,14 +78,14 @@ class Task(LazyLogging):
|
|||||||
|
|
||||||
Task._check_output(
|
Task._check_output(
|
||||||
*command,
|
*command,
|
||||||
exception=BuildFailed(self.package.base),
|
exception=BuildError(self.package.base),
|
||||||
cwd=sources_dir,
|
cwd=sources_dir,
|
||||||
logger=self.logger,
|
logger=self.logger,
|
||||||
user=self.uid)
|
user=self.uid)
|
||||||
|
|
||||||
# well it is not actually correct, but we can deal with it
|
# well it is not actually correct, but we can deal with it
|
||||||
packages = Task._check_output("makepkg", "--packagelist",
|
packages = Task._check_output("makepkg", "--packagelist",
|
||||||
exception=BuildFailed(self.package.base),
|
exception=BuildError(self.package.base),
|
||||||
cwd=sources_dir,
|
cwd=sources_dir,
|
||||||
logger=self.logger).splitlines()
|
logger=self.logger).splitlines()
|
||||||
return [Path(package) for package in packages]
|
return [Path(package) for package in packages]
|
||||||
|
@ -27,7 +27,7 @@ from logging.config import fileConfig
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, Generator, List, Optional, Tuple, Type
|
from typing import Any, Dict, Generator, List, Optional, Tuple, Type
|
||||||
|
|
||||||
from ahriman.core.exceptions import InitializeException
|
from ahriman.core.exceptions import InitializeError
|
||||||
from ahriman.models.repository_paths import RepositoryPaths
|
from ahriman.models.repository_paths import RepositoryPaths
|
||||||
|
|
||||||
|
|
||||||
@ -208,7 +208,7 @@ class Configuration(configparser.RawConfigParser):
|
|||||||
InitializeException: in case if architecture and/or path are not set
|
InitializeException: in case if architecture and/or path are not set
|
||||||
"""
|
"""
|
||||||
if self.path is None or self.architecture is None:
|
if self.path is None or self.architecture is None:
|
||||||
raise InitializeException("Configuration path and/or architecture are not set")
|
raise InitializeError("Configuration path and/or architecture are not set")
|
||||||
return self.path, self.architecture
|
return self.path, self.architecture
|
||||||
|
|
||||||
def dump(self) -> Dict[str, Dict[str, str]]:
|
def dump(self) -> Dict[str, Dict[str, str]]:
|
||||||
|
@ -61,7 +61,7 @@ class Operations(LazyLogging):
|
|||||||
result[column[0]] = row[index]
|
result[column[0]] = row[index]
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def with_connection(self, query: Callable[[sqlite3.Connection], T], commit: bool = False) -> T:
|
def with_connection(self, query: Callable[[sqlite3.Connection], T], *, commit: bool = False) -> T:
|
||||||
"""
|
"""
|
||||||
perform operation in connection
|
perform operation in connection
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ from pathlib import Path
|
|||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
class BuildFailed(RuntimeError):
|
class BuildError(RuntimeError):
|
||||||
"""
|
"""
|
||||||
base exception for failed builds
|
base exception for failed builds
|
||||||
"""
|
"""
|
||||||
@ -36,7 +36,7 @@ class BuildFailed(RuntimeError):
|
|||||||
RuntimeError.__init__(self, f"Package {package_base} build failed, check logs for details")
|
RuntimeError.__init__(self, f"Package {package_base} build failed, check logs for details")
|
||||||
|
|
||||||
|
|
||||||
class DuplicateRun(RuntimeError):
|
class DuplicateRunError(RuntimeError):
|
||||||
"""
|
"""
|
||||||
exception which will be raised if there is another application instance
|
exception which will be raised if there is another application instance
|
||||||
"""
|
"""
|
||||||
@ -55,7 +55,13 @@ class ExitCode(RuntimeError):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class GitRemoteFailed(RuntimeError):
|
class ExtensionError(RuntimeError):
|
||||||
|
"""
|
||||||
|
exception being raised by trigger load in case of errors
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class GitRemoteError(RuntimeError):
|
||||||
"""
|
"""
|
||||||
git remote exception
|
git remote exception
|
||||||
"""
|
"""
|
||||||
@ -67,7 +73,7 @@ class GitRemoteFailed(RuntimeError):
|
|||||||
RuntimeError.__init__(self, "Git remote failed")
|
RuntimeError.__init__(self, "Git remote failed")
|
||||||
|
|
||||||
|
|
||||||
class InitializeException(RuntimeError):
|
class InitializeError(RuntimeError):
|
||||||
"""
|
"""
|
||||||
base service initialization exception
|
base service initialization exception
|
||||||
"""
|
"""
|
||||||
@ -82,58 +88,6 @@ class InitializeException(RuntimeError):
|
|||||||
RuntimeError.__init__(self, f"Could not load service: {details}")
|
RuntimeError.__init__(self, f"Could not load service: {details}")
|
||||||
|
|
||||||
|
|
||||||
class InvalidExtension(RuntimeError):
|
|
||||||
"""
|
|
||||||
exception being raised by trigger load in case of errors
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class InvalidOption(ValueError):
|
|
||||||
"""
|
|
||||||
exception which will be raised on configuration errors
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, value: Any) -> None:
|
|
||||||
"""
|
|
||||||
default constructor
|
|
||||||
|
|
||||||
Args:
|
|
||||||
value(Any): option value
|
|
||||||
"""
|
|
||||||
ValueError.__init__(self, f"Invalid or unknown option value `{value}`")
|
|
||||||
|
|
||||||
|
|
||||||
class InvalidPath(ValueError):
|
|
||||||
"""
|
|
||||||
exception which will be raised on path which is not belong to root directory
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, path: Path, root: Path) -> None:
|
|
||||||
"""
|
|
||||||
default constructor
|
|
||||||
|
|
||||||
Args:
|
|
||||||
path(Path): path which raised an exception
|
|
||||||
root(Path): repository root (i.e. ahriman home)
|
|
||||||
"""
|
|
||||||
ValueError.__init__(self, f"Path `{path}` does not belong to repository root `{root}`")
|
|
||||||
|
|
||||||
|
|
||||||
class InvalidPackageInfo(RuntimeError):
|
|
||||||
"""
|
|
||||||
exception which will be raised on package load errors
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, details: Any) -> None:
|
|
||||||
"""
|
|
||||||
default constructor
|
|
||||||
|
|
||||||
Args:
|
|
||||||
details(Any): error details
|
|
||||||
"""
|
|
||||||
RuntimeError.__init__(self, f"There are errors during reading package information: `{details}`")
|
|
||||||
|
|
||||||
|
|
||||||
class MigrationError(RuntimeError):
|
class MigrationError(RuntimeError):
|
||||||
"""
|
"""
|
||||||
exception which will be raised on migration error
|
exception which will be raised on migration error
|
||||||
@ -149,7 +103,7 @@ class MigrationError(RuntimeError):
|
|||||||
RuntimeError.__init__(self, details)
|
RuntimeError.__init__(self, details)
|
||||||
|
|
||||||
|
|
||||||
class MissingArchitecture(ValueError):
|
class MissingArchitectureError(ValueError):
|
||||||
"""
|
"""
|
||||||
exception which will be raised if architecture is required, but missing
|
exception which will be raised if architecture is required, but missing
|
||||||
"""
|
"""
|
||||||
@ -164,7 +118,7 @@ class MissingArchitecture(ValueError):
|
|||||||
ValueError.__init__(self, f"Architecture required for subcommand {command}, but missing")
|
ValueError.__init__(self, f"Architecture required for subcommand {command}, but missing")
|
||||||
|
|
||||||
|
|
||||||
class MultipleArchitectures(ValueError):
|
class MultipleArchitecturesError(ValueError):
|
||||||
"""
|
"""
|
||||||
exception which will be raised if multiple architectures are not supported by the handler
|
exception which will be raised if multiple architectures are not supported by the handler
|
||||||
"""
|
"""
|
||||||
@ -179,7 +133,53 @@ class MultipleArchitectures(ValueError):
|
|||||||
ValueError.__init__(self, f"Multiple architectures are not supported by subcommand {command}")
|
ValueError.__init__(self, f"Multiple architectures are not supported by subcommand {command}")
|
||||||
|
|
||||||
|
|
||||||
class ReportFailed(RuntimeError):
|
class OptionError(ValueError):
|
||||||
|
"""
|
||||||
|
exception which will be raised on configuration errors
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, value: Any) -> None:
|
||||||
|
"""
|
||||||
|
default constructor
|
||||||
|
|
||||||
|
Args:
|
||||||
|
value(Any): option value
|
||||||
|
"""
|
||||||
|
ValueError.__init__(self, f"Invalid or unknown option value `{value}`")
|
||||||
|
|
||||||
|
|
||||||
|
class PackageInfoError(RuntimeError):
|
||||||
|
"""
|
||||||
|
exception which will be raised on package load errors
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, details: Any) -> None:
|
||||||
|
"""
|
||||||
|
default constructor
|
||||||
|
|
||||||
|
Args:
|
||||||
|
details(Any): error details
|
||||||
|
"""
|
||||||
|
RuntimeError.__init__(self, f"There are errors during reading package information: `{details}`")
|
||||||
|
|
||||||
|
|
||||||
|
class PathError(ValueError):
|
||||||
|
"""
|
||||||
|
exception which will be raised on path which is not belong to root directory
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, path: Path, root: Path) -> None:
|
||||||
|
"""
|
||||||
|
default constructor
|
||||||
|
|
||||||
|
Args:
|
||||||
|
path(Path): path which raised an exception
|
||||||
|
root(Path): repository root (i.e. ahriman home)
|
||||||
|
"""
|
||||||
|
ValueError.__init__(self, f"Path `{path}` does not belong to repository root `{root}`")
|
||||||
|
|
||||||
|
|
||||||
|
class ReportError(RuntimeError):
|
||||||
"""
|
"""
|
||||||
report generation exception
|
report generation exception
|
||||||
"""
|
"""
|
||||||
@ -191,22 +191,7 @@ class ReportFailed(RuntimeError):
|
|||||||
RuntimeError.__init__(self, "Report failed")
|
RuntimeError.__init__(self, "Report failed")
|
||||||
|
|
||||||
|
|
||||||
class SuccessFailed(ValueError):
|
class SynchronizationError(RuntimeError):
|
||||||
"""
|
|
||||||
exception for merging invalid statues
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, package_base: str) -> None:
|
|
||||||
"""
|
|
||||||
default constructor
|
|
||||||
|
|
||||||
Args:
|
|
||||||
package_base(str): package base name
|
|
||||||
"""
|
|
||||||
ValueError.__init__(self, f"Package base {package_base} had status failed, but new status is success")
|
|
||||||
|
|
||||||
|
|
||||||
class SyncFailed(RuntimeError):
|
|
||||||
"""
|
"""
|
||||||
remote synchronization exception
|
remote synchronization exception
|
||||||
"""
|
"""
|
||||||
@ -218,7 +203,7 @@ class SyncFailed(RuntimeError):
|
|||||||
RuntimeError.__init__(self, "Sync failed")
|
RuntimeError.__init__(self, "Sync failed")
|
||||||
|
|
||||||
|
|
||||||
class UnknownPackage(ValueError):
|
class UnknownPackageError(ValueError):
|
||||||
"""
|
"""
|
||||||
exception for status watcher which will be thrown on unknown package
|
exception for status watcher which will be thrown on unknown package
|
||||||
"""
|
"""
|
||||||
@ -233,7 +218,22 @@ class UnknownPackage(ValueError):
|
|||||||
ValueError.__init__(self, f"Package base {package_base} is unknown")
|
ValueError.__init__(self, f"Package base {package_base} is unknown")
|
||||||
|
|
||||||
|
|
||||||
class UnsafeRun(RuntimeError):
|
class UnprocessedPackageStatusError(ValueError):
|
||||||
|
"""
|
||||||
|
exception for merging invalid statues
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, package_base: str) -> None:
|
||||||
|
"""
|
||||||
|
default constructor
|
||||||
|
|
||||||
|
Args:
|
||||||
|
package_base(str): package base name
|
||||||
|
"""
|
||||||
|
ValueError.__init__(self, f"Package base {package_base} had status failed, but new status is success")
|
||||||
|
|
||||||
|
|
||||||
|
class UnsafeRunError(RuntimeError):
|
||||||
"""
|
"""
|
||||||
exception which will be raised in case if user is not owner of repository
|
exception which will be raised in case if user is not owner of repository
|
||||||
"""
|
"""
|
||||||
|
@ -24,7 +24,7 @@ from tempfile import TemporaryDirectory
|
|||||||
|
|
||||||
from ahriman.core.build_tools.sources import Sources
|
from ahriman.core.build_tools.sources import Sources
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.exceptions import GitRemoteFailed
|
from ahriman.core.exceptions import GitRemoteError
|
||||||
from ahriman.core.lazy_logging import LazyLogging
|
from ahriman.core.lazy_logging import LazyLogging
|
||||||
from ahriman.core.util import walk
|
from ahriman.core.util import walk
|
||||||
from ahriman.models.package_source import PackageSource
|
from ahriman.models.package_source import PackageSource
|
||||||
@ -87,4 +87,4 @@ class RemotePull(LazyLogging):
|
|||||||
self.repo_clone()
|
self.repo_clone()
|
||||||
except Exception:
|
except Exception:
|
||||||
self.logger.exception("git pull failed")
|
self.logger.exception("git pull failed")
|
||||||
raise GitRemoteFailed()
|
raise GitRemoteError()
|
||||||
|
@ -25,7 +25,7 @@ from typing import Generator
|
|||||||
|
|
||||||
from ahriman.core.build_tools.sources import Sources
|
from ahriman.core.build_tools.sources import Sources
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.exceptions import GitRemoteFailed
|
from ahriman.core.exceptions import GitRemoteError
|
||||||
from ahriman.core.lazy_logging import LazyLogging
|
from ahriman.core.lazy_logging import LazyLogging
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
from ahriman.models.package_source import PackageSource
|
from ahriman.models.package_source import PackageSource
|
||||||
@ -110,4 +110,4 @@ class RemotePush(LazyLogging):
|
|||||||
Sources.push(clone_dir, self.remote_source, *RemotePush.packages_update(result, clone_dir))
|
Sources.push(clone_dir, self.remote_source, *RemotePush.packages_update(result, clone_dir))
|
||||||
except Exception:
|
except Exception:
|
||||||
self.logger.exception("git push failed")
|
self.logger.exception("git push failed")
|
||||||
raise GitRemoteFailed()
|
raise GitRemoteError()
|
||||||
|
@ -22,7 +22,7 @@ from __future__ import annotations
|
|||||||
from typing import Iterable, Type
|
from typing import Iterable, Type
|
||||||
|
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.exceptions import ReportFailed
|
from ahriman.core.exceptions import ReportError
|
||||||
from ahriman.core.lazy_logging import LazyLogging
|
from ahriman.core.lazy_logging import LazyLogging
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
from ahriman.models.report_settings import ReportSettings
|
from ahriman.models.report_settings import ReportSettings
|
||||||
@ -121,4 +121,4 @@ class Report(LazyLogging):
|
|||||||
self.generate(packages, result)
|
self.generate(packages, result)
|
||||||
except Exception:
|
except Exception:
|
||||||
self.logger.exception("report generation failed")
|
self.logger.exception("report generation failed")
|
||||||
raise ReportFailed()
|
raise ReportError()
|
||||||
|
@ -66,6 +66,14 @@ class Cleaner(RepositoryProperties):
|
|||||||
for package in self.packages_built():
|
for package in self.packages_built():
|
||||||
package.unlink()
|
package.unlink()
|
||||||
|
|
||||||
|
def clear_pacman(self) -> None:
|
||||||
|
"""
|
||||||
|
clear directory with pacman databases
|
||||||
|
"""
|
||||||
|
self.logger.info("clear pacman database directory")
|
||||||
|
for pacman in self.paths.pacman.iterdir():
|
||||||
|
shutil.rmtree(pacman)
|
||||||
|
|
||||||
def clear_queue(self) -> None:
|
def clear_queue(self) -> None:
|
||||||
"""
|
"""
|
||||||
clear packages which were queued for the update
|
clear packages which were queued for the update
|
||||||
|
@ -21,7 +21,7 @@ import shutil
|
|||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from tempfile import TemporaryDirectory
|
from tempfile import TemporaryDirectory
|
||||||
from typing import Iterable, List, Optional, Set
|
from typing import Iterable, List, Optional
|
||||||
|
|
||||||
from ahriman.core.build_tools.task import Task
|
from ahriman.core.build_tools.task import Task
|
||||||
from ahriman.core.repository.cleaner import Cleaner
|
from ahriman.core.repository.cleaner import Cleaner
|
||||||
@ -187,8 +187,12 @@ class Executor(Cleaner):
|
|||||||
self.reporter.set_success(local)
|
self.reporter.set_success(local)
|
||||||
result.add_success(local)
|
result.add_success(local)
|
||||||
|
|
||||||
current_package_archives: Set[str] = next(
|
current_package_archives = {
|
||||||
(set(current.packages) for current in current_packages if current.base == local.base), set())
|
package
|
||||||
|
for current in current_packages
|
||||||
|
if current.base == local.base
|
||||||
|
for package in current.packages
|
||||||
|
}
|
||||||
removed_packages.extend(current_package_archives.difference(local.packages))
|
removed_packages.extend(current_package_archives.difference(local.packages))
|
||||||
except Exception:
|
except Exception:
|
||||||
self.reporter.set_failed(local.base)
|
self.reporter.set_failed(local.base)
|
||||||
|
@ -39,7 +39,7 @@ class Repository(Executor, UpdateHandler):
|
|||||||
>>>
|
>>>
|
||||||
>>> configuration = Configuration()
|
>>> configuration = Configuration()
|
||||||
>>> database = SQLite.load(configuration)
|
>>> database = SQLite.load(configuration)
|
||||||
>>> repository = Repository("x86_64", configuration, database, no_report=False, unsafe=False)
|
>>> repository = Repository("x86_64", configuration, database, report=True, unsafe=False)
|
||||||
>>> known_packages = repository.packages()
|
>>> known_packages = repository.packages()
|
||||||
>>>
|
>>>
|
||||||
>>> build_result = repository.process_build(known_packages)
|
>>> build_result = repository.process_build(known_packages)
|
||||||
|
@ -21,7 +21,7 @@ from ahriman.core.alpm.pacman import Pacman
|
|||||||
from ahriman.core.alpm.repo import Repo
|
from ahriman.core.alpm.repo import Repo
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.database import SQLite
|
from ahriman.core.database import SQLite
|
||||||
from ahriman.core.exceptions import UnsafeRun
|
from ahriman.core.exceptions import UnsafeRunError
|
||||||
from ahriman.core.lazy_logging import LazyLogging
|
from ahriman.core.lazy_logging import LazyLogging
|
||||||
from ahriman.core.sign.gpg import GPG
|
from ahriman.core.sign.gpg import GPG
|
||||||
from ahriman.core.status.client import Client
|
from ahriman.core.status.client import Client
|
||||||
@ -47,8 +47,8 @@ class RepositoryProperties(LazyLogging):
|
|||||||
triggers(TriggerLoader): triggers holder
|
triggers(TriggerLoader): triggers holder
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, architecture: str, configuration: Configuration, database: SQLite,
|
def __init__(self, architecture: str, configuration: Configuration, database: SQLite, *,
|
||||||
no_report: bool, unsafe: bool, refresh_pacman_database: int = 0) -> None:
|
report: bool, unsafe: bool, refresh_pacman_database: int = 0) -> None:
|
||||||
"""
|
"""
|
||||||
default constructor
|
default constructor
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ class RepositoryProperties(LazyLogging):
|
|||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
database(SQLite): database instance
|
database(SQLite): database instance
|
||||||
no_report(bool): force disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
refresh_pacman_database(int): pacman database syncronization level, ``0`` is disabled
|
refresh_pacman_database(int): pacman database syncronization level, ``0`` is disabled
|
||||||
"""
|
"""
|
||||||
@ -68,14 +68,14 @@ class RepositoryProperties(LazyLogging):
|
|||||||
|
|
||||||
self.paths = configuration.repository_paths
|
self.paths = configuration.repository_paths
|
||||||
try:
|
try:
|
||||||
check_user(self.paths, unsafe)
|
check_user(self.paths, unsafe=unsafe)
|
||||||
self.paths.tree_create()
|
self.paths.tree_create()
|
||||||
except UnsafeRun:
|
except UnsafeRunError:
|
||||||
self.logger.warning("root owner differs from the current user, skipping tree creation")
|
self.logger.warning("root owner differs from the current user, skipping tree creation")
|
||||||
|
|
||||||
self.ignore_list = configuration.getlist("build", "ignore_packages", fallback=[])
|
self.ignore_list = configuration.getlist("build", "ignore_packages", fallback=[])
|
||||||
self.pacman = Pacman(architecture, configuration, refresh_database=refresh_pacman_database)
|
self.pacman = Pacman(architecture, configuration, refresh_database=refresh_pacman_database)
|
||||||
self.sign = GPG(architecture, configuration)
|
self.sign = GPG(architecture, configuration)
|
||||||
self.repo = Repo(self.name, self.paths, self.sign.repository_sign_args)
|
self.repo = Repo(self.name, self.paths, self.sign.repository_sign_args)
|
||||||
self.reporter = Client() if no_report else Client.load(configuration)
|
self.reporter = Client.load(configuration) if report else Client()
|
||||||
self.triggers = TriggerLoader(architecture, configuration)
|
self.triggers = TriggerLoader(architecture, configuration)
|
||||||
|
@ -42,13 +42,13 @@ class UpdateHandler(Cleaner):
|
|||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def updates_aur(self, filter_packages: Iterable[str], no_vcs: bool) -> List[Package]:
|
def updates_aur(self, filter_packages: Iterable[str], *, vcs: bool) -> List[Package]:
|
||||||
"""
|
"""
|
||||||
check AUR for updates
|
check AUR for updates
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
filter_packages(Iterable[str]): do not check every package just specified in the list
|
filter_packages(Iterable[str]): do not check every package just specified in the list
|
||||||
no_vcs(bool): do not check VCS packages
|
vcs(bool): enable or disable checking of VCS packages
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
List[Package]: list of packages which are out-of-dated
|
List[Package]: list of packages which are out-of-dated
|
||||||
@ -58,7 +58,7 @@ class UpdateHandler(Cleaner):
|
|||||||
for local in self.packages():
|
for local in self.packages():
|
||||||
if local.base in self.ignore_list:
|
if local.base in self.ignore_list:
|
||||||
continue
|
continue
|
||||||
if local.is_vcs and no_vcs:
|
if local.is_vcs and not vcs:
|
||||||
continue
|
continue
|
||||||
if filter_packages and local.base not in filter_packages:
|
if filter_packages and local.base not in filter_packages:
|
||||||
continue
|
continue
|
||||||
|
@ -23,7 +23,7 @@ from pathlib import Path
|
|||||||
from typing import List, Optional, Set, Tuple
|
from typing import List, Optional, Set, Tuple
|
||||||
|
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.exceptions import BuildFailed
|
from ahriman.core.exceptions import BuildError
|
||||||
from ahriman.core.lazy_logging import LazyLogging
|
from ahriman.core.lazy_logging import LazyLogging
|
||||||
from ahriman.core.util import check_output, exception_response_text
|
from ahriman.core.util import check_output, exception_response_text
|
||||||
from ahriman.models.sign_settings import SignSettings
|
from ahriman.models.sign_settings import SignSettings
|
||||||
@ -153,7 +153,7 @@ class GPG(LazyLogging):
|
|||||||
"""
|
"""
|
||||||
GPG._check_output(
|
GPG._check_output(
|
||||||
*GPG.sign_command(path, key),
|
*GPG.sign_command(path, key),
|
||||||
exception=BuildFailed(path.name),
|
exception=BuildError(path.name),
|
||||||
logger=self.logger)
|
logger=self.logger)
|
||||||
return [path, path.parent / f"{path.name}.sig"]
|
return [path, path.parent / f"{path.name}.sig"]
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ class Spawn(Thread, LazyLogging):
|
|||||||
result = callback(args, architecture)
|
result = callback(args, architecture)
|
||||||
queue.put((process_id, result))
|
queue.put((process_id, result))
|
||||||
|
|
||||||
def packages_add(self, packages: Iterable[str], now: bool) -> None:
|
def packages_add(self, packages: Iterable[str], *, now: bool) -> None:
|
||||||
"""
|
"""
|
||||||
add packages
|
add packages
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ from typing import Dict, List, Optional, Tuple
|
|||||||
|
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.database import SQLite
|
from ahriman.core.database import SQLite
|
||||||
from ahriman.core.exceptions import UnknownPackage
|
from ahriman.core.exceptions import UnknownPackageError
|
||||||
from ahriman.core.lazy_logging import LazyLogging
|
from ahriman.core.lazy_logging import LazyLogging
|
||||||
from ahriman.core.repository import Repository
|
from ahriman.core.repository import Repository
|
||||||
from ahriman.models.build_status import BuildStatus, BuildStatusEnum
|
from ahriman.models.build_status import BuildStatus, BuildStatusEnum
|
||||||
@ -52,7 +52,7 @@ class Watcher(LazyLogging):
|
|||||||
"""
|
"""
|
||||||
self.architecture = architecture
|
self.architecture = architecture
|
||||||
self.database = database
|
self.database = database
|
||||||
self.repository = Repository(architecture, configuration, database, no_report=True, unsafe=False)
|
self.repository = Repository(architecture, configuration, database, report=False, unsafe=False)
|
||||||
|
|
||||||
self.known: Dict[str, Tuple[Package, BuildStatus]] = {}
|
self.known: Dict[str, Tuple[Package, BuildStatus]] = {}
|
||||||
self.status = BuildStatus()
|
self.status = BuildStatus()
|
||||||
@ -83,7 +83,7 @@ class Watcher(LazyLogging):
|
|||||||
try:
|
try:
|
||||||
return self.known[base]
|
return self.known[base]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise UnknownPackage(base)
|
raise UnknownPackageError(base)
|
||||||
|
|
||||||
def load(self) -> None:
|
def load(self) -> None:
|
||||||
"""
|
"""
|
||||||
@ -127,7 +127,7 @@ class Watcher(LazyLogging):
|
|||||||
try:
|
try:
|
||||||
package, _ = self.known[package_base]
|
package, _ = self.known[package_base]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise UnknownPackage(package_base)
|
raise UnknownPackageError(package_base)
|
||||||
full_status = BuildStatus(status)
|
full_status = BuildStatus(status)
|
||||||
self.known[package_base] = (package, full_status)
|
self.known[package_base] = (package, full_status)
|
||||||
self.database.package_update(package, full_status)
|
self.database.package_update(package, full_status)
|
||||||
|
@ -110,7 +110,7 @@ class Tree:
|
|||||||
>>>
|
>>>
|
||||||
>>> configuration = Configuration()
|
>>> configuration = Configuration()
|
||||||
>>> database = SQLite.load(configuration)
|
>>> database = SQLite.load(configuration)
|
||||||
>>> repository = Repository("x86_64", configuration, database, no_report=False, unsafe=False)
|
>>> repository = Repository("x86_64", configuration, database, report=True, unsafe=False)
|
||||||
>>> packages = repository.packages()
|
>>> packages = repository.packages()
|
||||||
>>>
|
>>>
|
||||||
>>> tree = Tree.load(packages, configuration.repository_paths, database)
|
>>> tree = Tree.load(packages, configuration.repository_paths, database)
|
||||||
|
@ -26,7 +26,7 @@ from types import ModuleType
|
|||||||
from typing import Generator, Iterable
|
from typing import Generator, Iterable
|
||||||
|
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.exceptions import InvalidExtension
|
from ahriman.core.exceptions import ExtensionError
|
||||||
from ahriman.core.lazy_logging import LazyLogging
|
from ahriman.core.lazy_logging import LazyLogging
|
||||||
from ahriman.core.triggers import Trigger
|
from ahriman.core.triggers import Trigger
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
@ -136,7 +136,7 @@ class TriggerLoader(LazyLogging):
|
|||||||
try:
|
try:
|
||||||
return importlib.import_module(package)
|
return importlib.import_module(package)
|
||||||
except ModuleNotFoundError:
|
except ModuleNotFoundError:
|
||||||
raise InvalidExtension(f"Module {package} not found")
|
raise ExtensionError(f"Module {package} not found")
|
||||||
|
|
||||||
def load_trigger(self, module_path: str) -> Trigger:
|
def load_trigger(self, module_path: str) -> Trigger:
|
||||||
"""
|
"""
|
||||||
@ -163,15 +163,15 @@ class TriggerLoader(LazyLogging):
|
|||||||
|
|
||||||
trigger_type = getattr(module, class_name, None)
|
trigger_type = getattr(module, class_name, None)
|
||||||
if not isinstance(trigger_type, type):
|
if not isinstance(trigger_type, type):
|
||||||
raise InvalidExtension(f"{class_name} of {package_or_path} is not a type")
|
raise ExtensionError(f"{class_name} of {package_or_path} is not a type")
|
||||||
self.logger.info("loaded type %s of package %s", class_name, package_or_path)
|
self.logger.info("loaded type %s of package %s", class_name, package_or_path)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
trigger = trigger_type(self.architecture, self.configuration)
|
trigger = trigger_type(self.architecture, self.configuration)
|
||||||
except Exception:
|
except Exception:
|
||||||
raise InvalidExtension(f"Could not load instance of trigger from {class_name} of {package_or_path}")
|
raise ExtensionError(f"Could not load instance of trigger from {class_name} of {package_or_path}")
|
||||||
if not isinstance(trigger, Trigger):
|
if not isinstance(trigger, Trigger):
|
||||||
raise InvalidExtension(f"Class {class_name} of {package_or_path} is not a Trigger")
|
raise ExtensionError(f"Class {class_name} of {package_or_path} is not a Trigger")
|
||||||
|
|
||||||
return trigger
|
return trigger
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ from pathlib import Path
|
|||||||
from typing import Iterable, Type
|
from typing import Iterable, Type
|
||||||
|
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.exceptions import SyncFailed
|
from ahriman.core.exceptions import SynchronizationError
|
||||||
from ahriman.core.lazy_logging import LazyLogging
|
from ahriman.core.lazy_logging import LazyLogging
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
from ahriman.models.upload_settings import UploadSettings
|
from ahriman.models.upload_settings import UploadSettings
|
||||||
@ -108,7 +108,7 @@ class Upload(LazyLogging):
|
|||||||
self.sync(path, built_packages)
|
self.sync(path, built_packages)
|
||||||
except Exception:
|
except Exception:
|
||||||
self.logger.exception("remote sync failed")
|
self.logger.exception("remote sync failed")
|
||||||
raise SyncFailed()
|
raise SynchronizationError()
|
||||||
|
|
||||||
def sync(self, path: Path, built_packages: Iterable[Package]) -> None:
|
def sync(self, path: Path, built_packages: Iterable[Package]) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -29,7 +29,7 @@ from logging import Logger
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, Generator, IO, Iterable, List, Optional, Type, Union
|
from typing import Any, Dict, Generator, IO, Iterable, List, Optional, Type, Union
|
||||||
|
|
||||||
from ahriman.core.exceptions import InvalidOption, UnsafeRun
|
from ahriman.core.exceptions import OptionError, UnsafeRunError
|
||||||
from ahriman.models.repository_paths import RepositoryPaths
|
from ahriman.models.repository_paths import RepositoryPaths
|
||||||
|
|
||||||
|
|
||||||
@ -114,7 +114,7 @@ def check_output(*args: str, exception: Optional[Exception], cwd: Optional[Path]
|
|||||||
return "\n".join(result)
|
return "\n".join(result)
|
||||||
|
|
||||||
|
|
||||||
def check_user(paths: RepositoryPaths, unsafe: bool) -> None:
|
def check_user(paths: RepositoryPaths, *, unsafe: bool) -> None:
|
||||||
"""
|
"""
|
||||||
check if current user is the owner of the root
|
check if current user is the owner of the root
|
||||||
|
|
||||||
@ -137,7 +137,7 @@ def check_user(paths: RepositoryPaths, unsafe: bool) -> None:
|
|||||||
current_uid = os.getuid()
|
current_uid = os.getuid()
|
||||||
root_uid, _ = paths.root_owner
|
root_uid, _ = paths.root_owner
|
||||||
if current_uid != root_uid:
|
if current_uid != root_uid:
|
||||||
raise UnsafeRun(current_uid, root_uid)
|
raise UnsafeRunError(current_uid, root_uid)
|
||||||
|
|
||||||
|
|
||||||
def enum_values(enum: Type[Enum]) -> List[str]:
|
def enum_values(enum: Type[Enum]) -> List[str]:
|
||||||
@ -261,7 +261,7 @@ def pretty_size(size: Optional[float], level: int = 0) -> str:
|
|||||||
return "MiB"
|
return "MiB"
|
||||||
if level == 3:
|
if level == 3:
|
||||||
return "GiB"
|
return "GiB"
|
||||||
raise InvalidOption(level) # must never happen actually
|
raise OptionError(level) # must never happen actually
|
||||||
|
|
||||||
if size is None:
|
if size is None:
|
||||||
return ""
|
return ""
|
||||||
|
@ -29,7 +29,7 @@ from typing import Any, Dict, Iterable, List, Optional, Set, Type
|
|||||||
|
|
||||||
from ahriman.core.alpm.pacman import Pacman
|
from ahriman.core.alpm.pacman import Pacman
|
||||||
from ahriman.core.alpm.remote import AUR, Official, OfficialSyncdb
|
from ahriman.core.alpm.remote import AUR, Official, OfficialSyncdb
|
||||||
from ahriman.core.exceptions import InvalidPackageInfo
|
from ahriman.core.exceptions import PackageInfoError
|
||||||
from ahriman.core.lazy_logging import LazyLogging
|
from ahriman.core.lazy_logging import LazyLogging
|
||||||
from ahriman.core.util import check_output, full_version
|
from ahriman.core.util import check_output, full_version
|
||||||
from ahriman.models.package_description import PackageDescription
|
from ahriman.models.package_description import PackageDescription
|
||||||
@ -186,7 +186,7 @@ class Package(LazyLogging):
|
|||||||
srcinfo_source = Package._check_output("makepkg", "--printsrcinfo", exception=None, cwd=path)
|
srcinfo_source = Package._check_output("makepkg", "--printsrcinfo", exception=None, cwd=path)
|
||||||
srcinfo, errors = parse_srcinfo(srcinfo_source)
|
srcinfo, errors = parse_srcinfo(srcinfo_source)
|
||||||
if errors:
|
if errors:
|
||||||
raise InvalidPackageInfo(errors)
|
raise PackageInfoError(errors)
|
||||||
packages = {key: PackageDescription() for key in srcinfo["packages"]}
|
packages = {key: PackageDescription() for key in srcinfo["packages"]}
|
||||||
version = full_version(srcinfo.get("epoch"), srcinfo["pkgver"], srcinfo["pkgrel"])
|
version = full_version(srcinfo.get("epoch"), srcinfo["pkgver"], srcinfo["pkgrel"])
|
||||||
|
|
||||||
@ -211,7 +211,7 @@ class Package(LazyLogging):
|
|||||||
return cls(base=dump["base"], version=dump["version"], remote=RemoteSource.from_json(remote), packages=packages)
|
return cls(base=dump["base"], version=dump["version"], remote=RemoteSource.from_json(remote), packages=packages)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_official(cls: Type[Package], name: str, pacman: Pacman, use_syncdb: bool = True) -> Package:
|
def from_official(cls: Type[Package], name: str, pacman: Pacman, *, use_syncdb: bool = True) -> Package:
|
||||||
"""
|
"""
|
||||||
construct package properties from official repository page
|
construct package properties from official repository page
|
||||||
|
|
||||||
@ -257,7 +257,7 @@ class Package(LazyLogging):
|
|||||||
srcinfo_source = Package._check_output("makepkg", "--printsrcinfo", exception=None, cwd=path)
|
srcinfo_source = Package._check_output("makepkg", "--printsrcinfo", exception=None, cwd=path)
|
||||||
srcinfo, errors = parse_srcinfo(srcinfo_source)
|
srcinfo, errors = parse_srcinfo(srcinfo_source)
|
||||||
if errors:
|
if errors:
|
||||||
raise InvalidPackageInfo(errors)
|
raise PackageInfoError(errors)
|
||||||
makedepends = extract_packages(srcinfo.get("makedepends", []))
|
makedepends = extract_packages(srcinfo.get("makedepends", []))
|
||||||
# sum over each package
|
# sum over each package
|
||||||
depends = extract_packages(srcinfo.get("depends", []))
|
depends = extract_packages(srcinfo.get("depends", []))
|
||||||
@ -284,7 +284,7 @@ class Package(LazyLogging):
|
|||||||
srcinfo_source = Package._check_output("makepkg", "--printsrcinfo", exception=None, cwd=path)
|
srcinfo_source = Package._check_output("makepkg", "--printsrcinfo", exception=None, cwd=path)
|
||||||
srcinfo, errors = parse_srcinfo(srcinfo_source)
|
srcinfo, errors = parse_srcinfo(srcinfo_source)
|
||||||
if errors:
|
if errors:
|
||||||
raise InvalidPackageInfo(errors)
|
raise PackageInfoError(errors)
|
||||||
return set(srcinfo.get("arch", []))
|
return set(srcinfo.get("arch", []))
|
||||||
|
|
||||||
def actual_version(self, paths: RepositoryPaths) -> str:
|
def actual_version(self, paths: RepositoryPaths) -> str:
|
||||||
@ -316,7 +316,7 @@ class Package(LazyLogging):
|
|||||||
exception=None, cwd=paths.cache_for(self.base), logger=self.logger)
|
exception=None, cwd=paths.cache_for(self.base), logger=self.logger)
|
||||||
srcinfo, errors = parse_srcinfo(srcinfo_source)
|
srcinfo, errors = parse_srcinfo(srcinfo_source)
|
||||||
if errors:
|
if errors:
|
||||||
raise InvalidPackageInfo(errors)
|
raise PackageInfoError(errors)
|
||||||
|
|
||||||
return full_version(srcinfo.get("epoch"), srcinfo["pkgver"], srcinfo["pkgrel"])
|
return full_version(srcinfo.get("epoch"), srcinfo["pkgver"], srcinfo["pkgrel"])
|
||||||
except Exception:
|
except Exception:
|
||||||
@ -358,7 +358,7 @@ class Package(LazyLogging):
|
|||||||
|
|
||||||
return sorted(result)
|
return sorted(result)
|
||||||
|
|
||||||
def is_outdated(self, remote: Package, paths: RepositoryPaths, calculate_version: bool = True) -> bool:
|
def is_outdated(self, remote: Package, paths: RepositoryPaths, *, calculate_version: bool = True) -> bool:
|
||||||
"""
|
"""
|
||||||
check if package is out-of-dated
|
check if package is out-of-dated
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ from dataclasses import dataclass
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Set, Tuple, Type
|
from typing import Set, Tuple, Type
|
||||||
|
|
||||||
from ahriman.core.exceptions import InvalidPath
|
from ahriman.core.exceptions import PathError
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
@ -178,7 +178,7 @@ class RepositoryPaths:
|
|||||||
os.chown(current, root_uid, root_gid, follow_symlinks=False)
|
os.chown(current, root_uid, root_gid, follow_symlinks=False)
|
||||||
|
|
||||||
if self.root not in path.parents:
|
if self.root not in path.parents:
|
||||||
raise InvalidPath(path, self.root)
|
raise PathError(path, self.root)
|
||||||
root_uid, root_gid = self.root_owner
|
root_uid, root_gid = self.root_owner
|
||||||
while path != self.root:
|
while path != self.root:
|
||||||
set_owner(path)
|
set_owner(path)
|
||||||
|
@ -21,7 +21,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from typing import Any, List, Optional, Iterable
|
from typing import Any, List, Optional, Iterable
|
||||||
|
|
||||||
from ahriman.core.exceptions import SuccessFailed
|
from ahriman.core.exceptions import UnprocessedPackageStatusError
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
|
|
||||||
|
|
||||||
@ -111,7 +111,7 @@ class Result:
|
|||||||
self.add_failed(package)
|
self.add_failed(package)
|
||||||
for base, package in other._success.items():
|
for base, package in other._success.items():
|
||||||
if base in self._failed:
|
if base in self._failed:
|
||||||
raise SuccessFailed(base)
|
raise UnprocessedPackageStatusError(base)
|
||||||
self.add_success(package)
|
self.add_success(package)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#
|
#
|
||||||
from aiohttp.web import HTTPBadRequest, HTTPNoContent, HTTPNotFound, Response, json_response
|
from aiohttp.web import HTTPBadRequest, HTTPNoContent, HTTPNotFound, Response, json_response
|
||||||
|
|
||||||
from ahriman.core.exceptions import UnknownPackage
|
from ahriman.core.exceptions import UnknownPackageError
|
||||||
from ahriman.models.build_status import BuildStatusEnum
|
from ahriman.models.build_status import BuildStatusEnum
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
from ahriman.models.user_access import UserAccess
|
from ahriman.models.user_access import UserAccess
|
||||||
@ -54,7 +54,7 @@ class PackageView(BaseView):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
package, status = self.service.get(base)
|
package, status = self.service.get(base)
|
||||||
except UnknownPackage:
|
except UnknownPackageError:
|
||||||
raise HTTPNotFound()
|
raise HTTPNotFound()
|
||||||
|
|
||||||
response = [
|
response = [
|
||||||
@ -104,7 +104,7 @@ class PackageView(BaseView):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
self.service.update(base, status, package)
|
self.service.update(base, status, package)
|
||||||
except UnknownPackage:
|
except UnknownPackageError:
|
||||||
raise HTTPBadRequest(reason=f"Package {base} is unknown, but no package body set")
|
raise HTTPBadRequest(reason=f"Package {base} is unknown, but no package body set")
|
||||||
|
|
||||||
raise HTTPNoContent()
|
raise HTTPNoContent()
|
||||||
|
@ -26,7 +26,7 @@ from aiohttp import web
|
|||||||
from ahriman.core.auth import Auth
|
from ahriman.core.auth import Auth
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.database import SQLite
|
from ahriman.core.database import SQLite
|
||||||
from ahriman.core.exceptions import InitializeException
|
from ahriman.core.exceptions import InitializeError
|
||||||
from ahriman.core.spawn import Spawn
|
from ahriman.core.spawn import Spawn
|
||||||
from ahriman.core.status.watcher import Watcher
|
from ahriman.core.status.watcher import Watcher
|
||||||
from ahriman.web.middlewares.exception_handler import exception_handler
|
from ahriman.web.middlewares.exception_handler import exception_handler
|
||||||
@ -62,7 +62,7 @@ async def on_startup(application: web.Application) -> None:
|
|||||||
except Exception:
|
except Exception:
|
||||||
message = "could not load packages"
|
message = "could not load packages"
|
||||||
application.logger.exception(message)
|
application.logger.exception(message)
|
||||||
raise InitializeException(message)
|
raise InitializeError(message)
|
||||||
|
|
||||||
|
|
||||||
def run_server(application: web.Application) -> None:
|
def run_server(application: web.Application) -> None:
|
||||||
|
@ -24,7 +24,7 @@ def application_packages(configuration: Configuration, database: SQLite, mocker:
|
|||||||
"""
|
"""
|
||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
mocker.patch("ahriman.core.database.SQLite.load", return_value=database)
|
mocker.patch("ahriman.core.database.SQLite.load", return_value=database)
|
||||||
return ApplicationPackages("x86_64", configuration, no_report=True, unsafe=False)
|
return ApplicationPackages("x86_64", configuration, report=False, unsafe=False)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
@ -43,7 +43,7 @@ def application_properties(configuration: Configuration, database: SQLite,
|
|||||||
"""
|
"""
|
||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
mocker.patch("ahriman.core.database.SQLite.load", return_value=database)
|
mocker.patch("ahriman.core.database.SQLite.load", return_value=database)
|
||||||
return ApplicationProperties("x86_64", configuration, no_report=True, unsafe=False)
|
return ApplicationProperties("x86_64", configuration, report=False, unsafe=False)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
@ -62,4 +62,4 @@ def application_repository(configuration: Configuration, database: SQLite,
|
|||||||
"""
|
"""
|
||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
mocker.patch("ahriman.core.database.SQLite.load", return_value=database)
|
mocker.patch("ahriman.core.database.SQLite.load", return_value=database)
|
||||||
return ApplicationRepository("x86_64", configuration, no_report=True, unsafe=False)
|
return ApplicationRepository("x86_64", configuration, report=False, unsafe=False)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
from unittest import mock
|
from unittest.mock import call as MockCall
|
||||||
|
|
||||||
from ahriman.application.application.application_repository import ApplicationRepository
|
from ahriman.application.application.application_repository import ApplicationRepository
|
||||||
from ahriman.core.tree import Leaf, Tree
|
from ahriman.core.tree import Leaf, Tree
|
||||||
@ -22,7 +22,7 @@ def test_clean_cache(application_repository: ApplicationRepository, mocker: Mock
|
|||||||
must clean cache directory
|
must clean cache directory
|
||||||
"""
|
"""
|
||||||
clear_mock = mocker.patch("ahriman.core.repository.cleaner.Cleaner.clear_cache")
|
clear_mock = mocker.patch("ahriman.core.repository.cleaner.Cleaner.clear_cache")
|
||||||
application_repository.clean(True, False, False, False)
|
application_repository.clean(cache=True, chroot=False, manual=False, packages=False, pacman=False)
|
||||||
clear_mock.assert_called_once_with()
|
clear_mock.assert_called_once_with()
|
||||||
|
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ def test_clean_chroot(application_repository: ApplicationRepository, mocker: Moc
|
|||||||
must clean chroot directory
|
must clean chroot directory
|
||||||
"""
|
"""
|
||||||
clear_mock = mocker.patch("ahriman.core.repository.cleaner.Cleaner.clear_chroot")
|
clear_mock = mocker.patch("ahriman.core.repository.cleaner.Cleaner.clear_chroot")
|
||||||
application_repository.clean(False, True, False, False)
|
application_repository.clean(cache=False, chroot=True, manual=False, packages=False, pacman=False)
|
||||||
clear_mock.assert_called_once_with()
|
clear_mock.assert_called_once_with()
|
||||||
|
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ def test_clean_manual(application_repository: ApplicationRepository, mocker: Moc
|
|||||||
must clean manual directory
|
must clean manual directory
|
||||||
"""
|
"""
|
||||||
clear_mock = mocker.patch("ahriman.core.repository.cleaner.Cleaner.clear_queue")
|
clear_mock = mocker.patch("ahriman.core.repository.cleaner.Cleaner.clear_queue")
|
||||||
application_repository.clean(False, False, True, False)
|
application_repository.clean(cache=False, chroot=False, manual=True, packages=False, pacman=False)
|
||||||
clear_mock.assert_called_once_with()
|
clear_mock.assert_called_once_with()
|
||||||
|
|
||||||
|
|
||||||
@ -49,7 +49,16 @@ def test_clean_packages(application_repository: ApplicationRepository, mocker: M
|
|||||||
must clean packages directory
|
must clean packages directory
|
||||||
"""
|
"""
|
||||||
clear_mock = mocker.patch("ahriman.core.repository.cleaner.Cleaner.clear_packages")
|
clear_mock = mocker.patch("ahriman.core.repository.cleaner.Cleaner.clear_packages")
|
||||||
application_repository.clean(False, False, False, True)
|
application_repository.clean(cache=False, chroot=False, manual=False, packages=True, pacman=False)
|
||||||
|
clear_mock.assert_called_once_with()
|
||||||
|
|
||||||
|
|
||||||
|
def test_clean_pacman(application_repository: ApplicationRepository, mocker: MockerFixture) -> None:
|
||||||
|
"""
|
||||||
|
must clean packages directory
|
||||||
|
"""
|
||||||
|
clear_mock = mocker.patch("ahriman.core.repository.cleaner.Cleaner.clear_pacman")
|
||||||
|
application_repository.clean(cache=False, chroot=False, manual=False, packages=False, pacman=True)
|
||||||
clear_mock.assert_called_once_with()
|
clear_mock.assert_called_once_with()
|
||||||
|
|
||||||
|
|
||||||
@ -68,8 +77,8 @@ def test_sign(application_repository: ApplicationRepository, package_ahriman: Pa
|
|||||||
|
|
||||||
application_repository.sign([])
|
application_repository.sign([])
|
||||||
copy_mock.assert_has_calls([
|
copy_mock.assert_has_calls([
|
||||||
mock.call(pytest.helpers.anyvar(int), pytest.helpers.anyvar(int)),
|
MockCall(pytest.helpers.anyvar(int), pytest.helpers.anyvar(int)),
|
||||||
mock.call(pytest.helpers.anyvar(int), pytest.helpers.anyvar(int))
|
MockCall(pytest.helpers.anyvar(int), pytest.helpers.anyvar(int))
|
||||||
])
|
])
|
||||||
update_mock.assert_called_once_with([])
|
update_mock.assert_called_once_with([])
|
||||||
sign_repository_mock.assert_called_once_with(application_repository.repository.repo.repo_path)
|
sign_repository_mock.assert_called_once_with(application_repository.repository.repo.repo_path)
|
||||||
@ -168,8 +177,8 @@ def test_update(application_repository: ApplicationRepository, package_ahriman:
|
|||||||
|
|
||||||
application_repository.update([package_ahriman])
|
application_repository.update([package_ahriman])
|
||||||
build_mock.assert_called_once_with([package_ahriman])
|
build_mock.assert_called_once_with([package_ahriman])
|
||||||
update_mock.assert_has_calls([mock.call(paths), mock.call(paths)])
|
update_mock.assert_has_calls([MockCall(paths), MockCall(paths)])
|
||||||
on_result_mock.assert_has_calls([mock.call(result), mock.call(result)])
|
on_result_mock.assert_has_calls([MockCall(result), MockCall(result)])
|
||||||
|
|
||||||
|
|
||||||
def test_update_empty(application_repository: ApplicationRepository, package_ahriman: Package,
|
def test_update_empty(application_repository: ApplicationRepository, package_ahriman: Package,
|
||||||
@ -199,8 +208,8 @@ def test_updates_all(application_repository: ApplicationRepository, package_ahri
|
|||||||
updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
|
updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
|
||||||
updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
|
updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
|
||||||
|
|
||||||
application_repository.updates([], no_aur=False, no_local=False, no_manual=False, no_vcs=False, log_fn=print)
|
application_repository.updates([], aur=True, local=True, manual=True, vcs=True, log_fn=print)
|
||||||
updates_aur_mock.assert_called_once_with([], False)
|
updates_aur_mock.assert_called_once_with([], vcs=True)
|
||||||
updates_local_mock.assert_called_once_with()
|
updates_local_mock.assert_called_once_with()
|
||||||
updates_manual_mock.assert_called_once_with()
|
updates_manual_mock.assert_called_once_with()
|
||||||
|
|
||||||
@ -214,7 +223,7 @@ def test_updates_disabled(application_repository: ApplicationRepository, mocker:
|
|||||||
updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
|
updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
|
||||||
updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
|
updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
|
||||||
|
|
||||||
application_repository.updates([], no_aur=True, no_local=True, no_manual=True, no_vcs=False, log_fn=print)
|
application_repository.updates([], aur=False, local=False, manual=False, vcs=True, log_fn=print)
|
||||||
updates_aur_mock.assert_not_called()
|
updates_aur_mock.assert_not_called()
|
||||||
updates_local_mock.assert_not_called()
|
updates_local_mock.assert_not_called()
|
||||||
updates_manual_mock.assert_not_called()
|
updates_manual_mock.assert_not_called()
|
||||||
@ -229,7 +238,7 @@ def test_updates_no_aur(application_repository: ApplicationRepository, mocker: M
|
|||||||
updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
|
updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
|
||||||
updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
|
updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
|
||||||
|
|
||||||
application_repository.updates([], no_aur=True, no_local=False, no_manual=False, no_vcs=False, log_fn=print)
|
application_repository.updates([], aur=False, local=True, manual=True, vcs=True, log_fn=print)
|
||||||
updates_aur_mock.assert_not_called()
|
updates_aur_mock.assert_not_called()
|
||||||
updates_local_mock.assert_called_once_with()
|
updates_local_mock.assert_called_once_with()
|
||||||
updates_manual_mock.assert_called_once_with()
|
updates_manual_mock.assert_called_once_with()
|
||||||
@ -244,8 +253,8 @@ def test_updates_no_local(application_repository: ApplicationRepository, mocker:
|
|||||||
updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
|
updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
|
||||||
updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
|
updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
|
||||||
|
|
||||||
application_repository.updates([], no_aur=False, no_local=True, no_manual=False, no_vcs=False, log_fn=print)
|
application_repository.updates([], aur=True, local=False, manual=True, vcs=True, log_fn=print)
|
||||||
updates_aur_mock.assert_called_once_with([], False)
|
updates_aur_mock.assert_called_once_with([], vcs=True)
|
||||||
updates_local_mock.assert_not_called()
|
updates_local_mock.assert_not_called()
|
||||||
updates_manual_mock.assert_called_once_with()
|
updates_manual_mock.assert_called_once_with()
|
||||||
|
|
||||||
@ -259,8 +268,8 @@ def test_updates_no_manual(application_repository: ApplicationRepository, mocker
|
|||||||
updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
|
updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
|
||||||
updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
|
updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
|
||||||
|
|
||||||
application_repository.updates([], no_aur=False, no_local=False, no_manual=True, no_vcs=False, log_fn=print)
|
application_repository.updates([], aur=True, local=True, manual=False, vcs=True, log_fn=print)
|
||||||
updates_aur_mock.assert_called_once_with([], False)
|
updates_aur_mock.assert_called_once_with([], vcs=True)
|
||||||
updates_local_mock.assert_called_once_with()
|
updates_local_mock.assert_called_once_with()
|
||||||
updates_manual_mock.assert_not_called()
|
updates_manual_mock.assert_not_called()
|
||||||
|
|
||||||
@ -274,8 +283,8 @@ def test_updates_no_vcs(application_repository: ApplicationRepository, mocker: M
|
|||||||
updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
|
updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
|
||||||
updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
|
updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
|
||||||
|
|
||||||
application_repository.updates([], no_aur=False, no_local=False, no_manual=False, no_vcs=True, log_fn=print)
|
application_repository.updates([], aur=True, local=True, manual=True, vcs=False, log_fn=print)
|
||||||
updates_aur_mock.assert_called_once_with([], True)
|
updates_aur_mock.assert_called_once_with([], vcs=False)
|
||||||
updates_local_mock.assert_called_once_with()
|
updates_local_mock.assert_called_once_with()
|
||||||
updates_manual_mock.assert_called_once_with()
|
updates_manual_mock.assert_called_once_with()
|
||||||
|
|
||||||
@ -289,8 +298,7 @@ def test_updates_with_filter(application_repository: ApplicationRepository, mock
|
|||||||
updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
|
updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
|
||||||
updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
|
updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
|
||||||
|
|
||||||
application_repository.updates(["filter"], no_aur=False, no_local=False, no_manual=False, no_vcs=False,
|
application_repository.updates(["filter"], aur=True, local=True, manual=True, vcs=True, log_fn=print)
|
||||||
log_fn=print)
|
updates_aur_mock.assert_called_once_with(["filter"], vcs=True)
|
||||||
updates_aur_mock.assert_called_once_with(["filter"], False)
|
|
||||||
updates_local_mock.assert_called_once_with()
|
updates_local_mock.assert_called_once_with()
|
||||||
updates_manual_mock.assert_called_once_with()
|
updates_manual_mock.assert_called_once_with()
|
||||||
|
@ -25,7 +25,7 @@ def application(configuration: Configuration, database: SQLite, mocker: MockerFi
|
|||||||
"""
|
"""
|
||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
mocker.patch("ahriman.core.database.SQLite.load", return_value=database)
|
mocker.patch("ahriman.core.database.SQLite.load", return_value=database)
|
||||||
return Application("x86_64", configuration, no_report=True, unsafe=False)
|
return Application("x86_64", configuration, report=False, unsafe=False)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
@ -36,7 +36,7 @@ def args() -> argparse.Namespace:
|
|||||||
Returns:
|
Returns:
|
||||||
argparse.Namespace: command line arguments test instance
|
argparse.Namespace: command line arguments test instance
|
||||||
"""
|
"""
|
||||||
return argparse.Namespace(architecture=None, lock=None, force=False, unsafe=False, no_report=True)
|
return argparse.Namespace(architecture=None, lock=None, force=False, unsafe=False, report=False)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
@ -6,7 +6,7 @@ from pytest_mock import MockerFixture
|
|||||||
|
|
||||||
from ahriman.application.handlers import Handler
|
from ahriman.application.handlers import Handler
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.exceptions import ExitCode, MissingArchitecture, MultipleArchitectures
|
from ahriman.core.exceptions import ExitCode, MissingArchitectureError, MultipleArchitecturesError
|
||||||
|
|
||||||
|
|
||||||
def test_architectures_extract(args: argparse.Namespace, configuration: Configuration, mocker: MockerFixture) -> None:
|
def test_architectures_extract(args: argparse.Namespace, configuration: Configuration, mocker: MockerFixture) -> None:
|
||||||
@ -29,7 +29,7 @@ def test_architectures_extract_empty(args: argparse.Namespace, configuration: Co
|
|||||||
args.configuration = configuration.path
|
args.configuration = configuration.path
|
||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.known_architectures", return_value=set())
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.known_architectures", return_value=set())
|
||||||
|
|
||||||
with pytest.raises(MissingArchitecture):
|
with pytest.raises(MissingArchitectureError):
|
||||||
Handler.architectures_extract(args)
|
Handler.architectures_extract(args)
|
||||||
|
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ def test_architectures_extract_exception(args: argparse.Namespace, mocker: Mocke
|
|||||||
"""
|
"""
|
||||||
args.command = "config"
|
args.command = "config"
|
||||||
mocker.patch.object(Handler, "ALLOW_AUTO_ARCHITECTURE_RUN", False)
|
mocker.patch.object(Handler, "ALLOW_AUTO_ARCHITECTURE_RUN", False)
|
||||||
with pytest.raises(MissingArchitecture):
|
with pytest.raises(MissingArchitectureError):
|
||||||
Handler.architectures_extract(args)
|
Handler.architectures_extract(args)
|
||||||
|
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ def test_execute_multiple_not_supported(args: argparse.Namespace, mocker: Mocker
|
|||||||
args.command = "web"
|
args.command = "web"
|
||||||
mocker.patch.object(Handler, "ALLOW_MULTI_ARCHITECTURE_RUN", False)
|
mocker.patch.object(Handler, "ALLOW_MULTI_ARCHITECTURE_RUN", False)
|
||||||
|
|
||||||
with pytest.raises(MultipleArchitectures):
|
with pytest.raises(MultipleArchitecturesError):
|
||||||
Handler.execute(args)
|
Handler.execute(args)
|
||||||
|
|
||||||
|
|
||||||
@ -135,7 +135,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration) -> None:
|
|||||||
must raise NotImplemented for missing method
|
must raise NotImplemented for missing method
|
||||||
"""
|
"""
|
||||||
with pytest.raises(NotImplementedError):
|
with pytest.raises(NotImplementedError):
|
||||||
Handler.run(args, "x86_64", configuration, True, True)
|
Handler.run(args, "x86_64", configuration, report=True, unsafe=True)
|
||||||
|
|
||||||
|
|
||||||
def test_check_if_empty() -> None:
|
def test_check_if_empty() -> None:
|
||||||
|
@ -38,7 +38,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
application_mock = mocker.patch("ahriman.application.application.Application.add")
|
application_mock = mocker.patch("ahriman.application.application.Application.add")
|
||||||
on_start_mock = mocker.patch("ahriman.application.application.Application.on_start")
|
on_start_mock = mocker.patch("ahriman.application.application.Application.on_start")
|
||||||
|
|
||||||
Add.run(args, "x86_64", configuration, True, False)
|
Add.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with(args.package, args.source, args.without_dependencies)
|
application_mock.assert_called_once_with(args.package, args.source, args.without_dependencies)
|
||||||
on_start_mock.assert_called_once_with()
|
on_start_mock.assert_called_once_with()
|
||||||
|
|
||||||
@ -58,8 +58,9 @@ def test_run_with_updates(args: argparse.Namespace, configuration: Configuration
|
|||||||
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
||||||
updates_mock = mocker.patch("ahriman.application.application.Application.updates", return_value=[package_ahriman])
|
updates_mock = mocker.patch("ahriman.application.application.Application.updates", return_value=[package_ahriman])
|
||||||
|
|
||||||
Add.run(args, "x86_64", configuration, True, False)
|
Add.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
updates_mock.assert_called_once_with(args.package, True, True, False, True, pytest.helpers.anyvar(int))
|
updates_mock.assert_called_once_with(args.package, aur=False, local=False, manual=True, vcs=False,
|
||||||
|
log_fn=pytest.helpers.anyvar(int))
|
||||||
application_mock.assert_called_once_with([package_ahriman])
|
application_mock.assert_called_once_with([package_ahriman])
|
||||||
check_mock.assert_called_once_with(False, False)
|
check_mock.assert_called_once_with(False, False)
|
||||||
|
|
||||||
@ -77,5 +78,5 @@ def test_run_empty_exception(args: argparse.Namespace, configuration: Configurat
|
|||||||
mocker.patch("ahriman.application.application.Application.updates")
|
mocker.patch("ahriman.application.application.Application.updates")
|
||||||
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
||||||
|
|
||||||
Add.run(args, "x86_64", configuration, True, False)
|
Add.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
check_mock.assert_called_once_with(True, True)
|
check_mock.assert_called_once_with(True, True)
|
||||||
|
@ -33,7 +33,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
add_mock = tarfile.__enter__.return_value = MagicMock()
|
add_mock = tarfile.__enter__.return_value = MagicMock()
|
||||||
mocker.patch("tarfile.TarFile.__new__", return_value=tarfile)
|
mocker.patch("tarfile.TarFile.__new__", return_value=tarfile)
|
||||||
|
|
||||||
Backup.run(args, "x86_64", configuration, True, False)
|
Backup.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
add_mock.add.assert_called_once_with(Path("path"))
|
add_mock.add.assert_called_once_with(Path("path"))
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ def _default_args(args: argparse.Namespace) -> argparse.Namespace:
|
|||||||
args.chroot = False
|
args.chroot = False
|
||||||
args.manual = False
|
args.manual = False
|
||||||
args.packages = False
|
args.packages = False
|
||||||
|
args.pacman = False
|
||||||
return args
|
return args
|
||||||
|
|
||||||
|
|
||||||
@ -32,6 +33,6 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
application_mock = mocker.patch("ahriman.application.application.Application.clean")
|
application_mock = mocker.patch("ahriman.application.application.Application.clean")
|
||||||
on_start_mock = mocker.patch("ahriman.application.application.Application.on_start")
|
on_start_mock = mocker.patch("ahriman.application.application.Application.on_start")
|
||||||
|
|
||||||
Clean.run(args, "x86_64", configuration, True, False)
|
Clean.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with(False, False, False, False)
|
application_mock.assert_called_once_with(cache=False, chroot=False, manual=False, packages=False, pacman=False)
|
||||||
on_start_mock.assert_called_once_with()
|
on_start_mock.assert_called_once_with()
|
||||||
|
@ -17,10 +17,10 @@ def _default_args(args: argparse.Namespace) -> argparse.Namespace:
|
|||||||
argparse.Namespace: generated arguments for these test cases
|
argparse.Namespace: generated arguments for these test cases
|
||||||
"""
|
"""
|
||||||
args.interval = 60 * 60 * 12
|
args.interval = 60 * 60 * 12
|
||||||
args.no_aur = False
|
args.aur = True
|
||||||
args.no_local = False
|
args.local = True
|
||||||
args.no_manual = False
|
args.manual = True
|
||||||
args.no_vcs = False
|
args.vcs = True
|
||||||
return args
|
return args
|
||||||
|
|
||||||
|
|
||||||
@ -33,8 +33,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
start_mock = mocker.patch("threading.Timer.start")
|
start_mock = mocker.patch("threading.Timer.start")
|
||||||
join_mock = mocker.patch("threading.Timer.join")
|
join_mock = mocker.patch("threading.Timer.join")
|
||||||
|
|
||||||
Daemon.run(args, "x86_64", configuration, True, False)
|
Daemon.run(args, "x86_64", configuration, report=True, unsafe=False)
|
||||||
Daemon._SHOULD_RUN = False
|
run_mock.assert_called_once_with(args, "x86_64", configuration, report=True, unsafe=False)
|
||||||
run_mock.assert_called_once_with(args, "x86_64", configuration, True, False)
|
|
||||||
start_mock.assert_called_once_with()
|
start_mock.assert_called_once_with()
|
||||||
join_mock.assert_called_once_with()
|
join_mock.assert_called_once_with()
|
||||||
|
@ -15,7 +15,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
application_mock = mocker.patch("ahriman.core.configuration.Configuration.dump",
|
application_mock = mocker.patch("ahriman.core.configuration.Configuration.dump",
|
||||||
return_value=configuration.dump())
|
return_value=configuration.dump())
|
||||||
|
|
||||||
Dump.run(args, "x86_64", configuration, True, False)
|
Dump.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with()
|
application_mock.assert_called_once_with()
|
||||||
print_mock.assert_called()
|
print_mock.assert_called()
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
args = _default_args(args)
|
args = _default_args(args)
|
||||||
parse_mock = mocker.patch("argparse.ArgumentParser.parse_args")
|
parse_mock = mocker.patch("argparse.ArgumentParser.parse_args")
|
||||||
|
|
||||||
Help.run(args, "x86_64", configuration, True, False)
|
Help.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
parse_mock.assert_called_once_with(["--help"])
|
parse_mock.assert_called_once_with(["--help"])
|
||||||
|
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ def test_run_command(args: argparse.Namespace, configuration: Configuration, moc
|
|||||||
args.command = "aur-search"
|
args.command = "aur-search"
|
||||||
parse_mock = mocker.patch("argparse.ArgumentParser.parse_args")
|
parse_mock = mocker.patch("argparse.ArgumentParser.parse_args")
|
||||||
|
|
||||||
Help.run(args, "x86_64", configuration, True, False)
|
Help.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
parse_mock.assert_called_once_with(["aur-search", "--help"])
|
parse_mock.assert_called_once_with(["aur-search", "--help"])
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
application_mock = mocker.patch("ahriman.core.sign.gpg.GPG.key_import")
|
application_mock = mocker.patch("ahriman.core.sign.gpg.GPG.key_import")
|
||||||
|
|
||||||
KeyImport.run(args, "x86_64", configuration, True, False)
|
KeyImport.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with(args.key_server, args.key)
|
application_mock.assert_called_once_with(args.key_server, args.key)
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
return_value=(args.package, PkgbuildPatch(None, "patch")))
|
return_value=(args.package, PkgbuildPatch(None, "patch")))
|
||||||
application_mock = mocker.patch("ahriman.application.handlers.Patch.patch_set_create")
|
application_mock = mocker.patch("ahriman.application.handlers.Patch.patch_set_create")
|
||||||
|
|
||||||
Patch.run(args, "x86_64", configuration, True, False)
|
Patch.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
patch_mock.assert_called_once_with(args.package, args.track)
|
patch_mock.assert_called_once_with(args.package, args.track)
|
||||||
application_mock.assert_called_once_with(pytest.helpers.anyvar(int), args.package, PkgbuildPatch(None, "patch"))
|
application_mock.assert_called_once_with(pytest.helpers.anyvar(int), args.package, PkgbuildPatch(None, "patch"))
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ def test_run_function(args: argparse.Namespace, configuration: Configuration, mo
|
|||||||
patch_mock = mocker.patch("ahriman.application.handlers.Patch.patch_create_from_function", return_value=patch)
|
patch_mock = mocker.patch("ahriman.application.handlers.Patch.patch_create_from_function", return_value=patch)
|
||||||
application_mock = mocker.patch("ahriman.application.handlers.Patch.patch_set_create")
|
application_mock = mocker.patch("ahriman.application.handlers.Patch.patch_set_create")
|
||||||
|
|
||||||
Patch.run(args, "x86_64", configuration, True, False)
|
Patch.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
patch_mock.assert_called_once_with(args.variable, args.patch)
|
patch_mock.assert_called_once_with(args.variable, args.patch)
|
||||||
application_mock.assert_called_once_with(pytest.helpers.anyvar(int), args.package, patch)
|
application_mock.assert_called_once_with(pytest.helpers.anyvar(int), args.package, patch)
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ def test_run_list(args: argparse.Namespace, configuration: Configuration, mocker
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
application_mock = mocker.patch("ahriman.application.handlers.Patch.patch_set_list")
|
application_mock = mocker.patch("ahriman.application.handlers.Patch.patch_set_list")
|
||||||
|
|
||||||
Patch.run(args, "x86_64", configuration, True, False)
|
Patch.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with(pytest.helpers.anyvar(int), args.package, ["version"], False)
|
application_mock.assert_called_once_with(pytest.helpers.anyvar(int), args.package, ["version"], False)
|
||||||
|
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ def test_run_remove(args: argparse.Namespace, configuration: Configuration, mock
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
application_mock = mocker.patch("ahriman.application.handlers.Patch.patch_set_remove")
|
application_mock = mocker.patch("ahriman.application.handlers.Patch.patch_set_remove")
|
||||||
|
|
||||||
Patch.run(args, "x86_64", configuration, True, False)
|
Patch.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with(pytest.helpers.anyvar(int), args.package, ["version"])
|
application_mock.assert_called_once_with(pytest.helpers.anyvar(int), args.package, ["version"])
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ import argparse
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
from unittest import mock
|
from unittest.mock import call as MockCall
|
||||||
|
|
||||||
from ahriman.application.application import Application
|
from ahriman.application.application import Application
|
||||||
from ahriman.application.handlers import Rebuild
|
from ahriman.application.handlers import Rebuild
|
||||||
@ -43,10 +43,10 @@ def test_run(args: argparse.Namespace, package_ahriman: Package,
|
|||||||
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
||||||
on_start_mock = mocker.patch("ahriman.application.application.Application.on_start")
|
on_start_mock = mocker.patch("ahriman.application.application.Application.on_start")
|
||||||
|
|
||||||
Rebuild.run(args, "x86_64", configuration, True, False)
|
Rebuild.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_packages_mock.assert_called_once_with(None)
|
application_packages_mock.assert_called_once_with(None)
|
||||||
application_mock.assert_called_once_with([package_ahriman])
|
application_mock.assert_called_once_with([package_ahriman])
|
||||||
check_mock.assert_has_calls([mock.call(False, False), mock.call(False, False)])
|
check_mock.assert_has_calls([MockCall(False, False), MockCall(False, False)])
|
||||||
on_start_mock.assert_called_once_with()
|
on_start_mock.assert_called_once_with()
|
||||||
|
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ def test_run_extract_packages(args: argparse.Namespace, configuration: Configura
|
|||||||
mocker.patch("ahriman.application.application.Application.add")
|
mocker.patch("ahriman.application.application.Application.add")
|
||||||
extract_mock = mocker.patch("ahriman.application.handlers.Rebuild.extract_packages", return_value=[])
|
extract_mock = mocker.patch("ahriman.application.handlers.Rebuild.extract_packages", return_value=[])
|
||||||
|
|
||||||
Rebuild.run(args, "x86_64", configuration, True, False)
|
Rebuild.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
extract_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
extract_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
||||||
|
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ def test_run_dry_run(args: argparse.Namespace, configuration: Configuration,
|
|||||||
application_mock = mocker.patch("ahriman.application.application.Application.update")
|
application_mock = mocker.patch("ahriman.application.application.Application.update")
|
||||||
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
||||||
|
|
||||||
Rebuild.run(args, "x86_64", configuration, True, False)
|
Rebuild.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_not_called()
|
application_mock.assert_not_called()
|
||||||
check_mock.assert_called_once_with(False, False)
|
check_mock.assert_called_once_with(False, False)
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ def test_run_filter(args: argparse.Namespace, configuration: Configuration, mock
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
application_packages_mock = mocker.patch("ahriman.core.repository.repository.Repository.packages_depend_on")
|
application_packages_mock = mocker.patch("ahriman.core.repository.repository.Repository.packages_depend_on")
|
||||||
|
|
||||||
Rebuild.run(args, "x86_64", configuration, True, False)
|
Rebuild.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_packages_mock.assert_called_once_with({"python-aur"})
|
application_packages_mock.assert_called_once_with({"python-aur"})
|
||||||
|
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ def test_run_without_filter(args: argparse.Namespace, configuration: Configurati
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
application_packages_mock = mocker.patch("ahriman.core.repository.repository.Repository.packages_depend_on")
|
application_packages_mock = mocker.patch("ahriman.core.repository.repository.Repository.packages_depend_on")
|
||||||
|
|
||||||
Rebuild.run(args, "x86_64", configuration, True, False)
|
Rebuild.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_packages_mock.assert_called_once_with(None)
|
application_packages_mock.assert_called_once_with(None)
|
||||||
|
|
||||||
|
|
||||||
@ -121,7 +121,7 @@ def test_run_update_empty_exception(args: argparse.Namespace, configuration: Con
|
|||||||
mocker.patch("ahriman.core.repository.repository.Repository.packages_depend_on", return_value=[])
|
mocker.patch("ahriman.core.repository.repository.Repository.packages_depend_on", return_value=[])
|
||||||
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
||||||
|
|
||||||
Rebuild.run(args, "x86_64", configuration, True, False)
|
Rebuild.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
check_mock.assert_called_once_with(True, True)
|
check_mock.assert_called_once_with(True, True)
|
||||||
|
|
||||||
|
|
||||||
@ -137,8 +137,8 @@ def test_run_build_empty_exception(args: argparse.Namespace, configuration: Conf
|
|||||||
mocker.patch("ahriman.application.application.Application.update", return_value=Result())
|
mocker.patch("ahriman.application.application.Application.update", return_value=Result())
|
||||||
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
||||||
|
|
||||||
Rebuild.run(args, "x86_64", configuration, True, False)
|
Rebuild.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
check_mock.assert_has_calls([mock.call(True, False), mock.call(True, True)])
|
check_mock.assert_has_calls([MockCall(True, False), MockCall(True, True)])
|
||||||
|
|
||||||
|
|
||||||
def test_extract_packages(application: Application, mocker: MockerFixture) -> None:
|
def test_extract_packages(application: Application, mocker: MockerFixture) -> None:
|
||||||
|
@ -29,6 +29,6 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
application_mock = mocker.patch("ahriman.application.application.Application.remove")
|
application_mock = mocker.patch("ahriman.application.application.Application.remove")
|
||||||
on_start_mock = mocker.patch("ahriman.application.application.Application.on_start")
|
on_start_mock = mocker.patch("ahriman.application.application.Application.on_start")
|
||||||
|
|
||||||
Remove.run(args, "x86_64", configuration, True, False)
|
Remove.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with([])
|
application_mock.assert_called_once_with([])
|
||||||
on_start_mock.assert_called_once_with()
|
on_start_mock.assert_called_once_with()
|
||||||
|
@ -18,7 +18,6 @@ def _default_args(args: argparse.Namespace) -> argparse.Namespace:
|
|||||||
argparse.Namespace: generated arguments for these test cases
|
argparse.Namespace: generated arguments for these test cases
|
||||||
"""
|
"""
|
||||||
args.dry_run = False
|
args.dry_run = False
|
||||||
args.info = False
|
|
||||||
return args
|
return args
|
||||||
|
|
||||||
|
|
||||||
@ -34,7 +33,7 @@ def test_run(args: argparse.Namespace, package_ahriman: Package,
|
|||||||
remove_mock = mocker.patch("ahriman.application.application.Application.remove")
|
remove_mock = mocker.patch("ahriman.application.application.Application.remove")
|
||||||
on_start_mock = mocker.patch("ahriman.application.application.Application.on_start")
|
on_start_mock = mocker.patch("ahriman.application.application.Application.on_start")
|
||||||
|
|
||||||
RemoveUnknown.run(args, "x86_64", configuration, True, False)
|
RemoveUnknown.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with()
|
application_mock.assert_called_once_with()
|
||||||
remove_mock.assert_called_once_with([package_ahriman])
|
remove_mock.assert_called_once_with([package_ahriman])
|
||||||
on_start_mock.assert_called_once_with()
|
on_start_mock.assert_called_once_with()
|
||||||
@ -53,27 +52,7 @@ def test_run_dry_run(args: argparse.Namespace, configuration: Configuration, pac
|
|||||||
remove_mock = mocker.patch("ahriman.application.application.Application.remove")
|
remove_mock = mocker.patch("ahriman.application.application.Application.remove")
|
||||||
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
||||||
|
|
||||||
RemoveUnknown.run(args, "x86_64", configuration, True, False)
|
RemoveUnknown.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with()
|
application_mock.assert_called_once_with()
|
||||||
remove_mock.assert_not_called()
|
remove_mock.assert_not_called()
|
||||||
print_mock.assert_called_once_with(False)
|
print_mock.assert_called_once_with(False)
|
||||||
|
|
||||||
|
|
||||||
def test_run_dry_run_verbose(args: argparse.Namespace, configuration: Configuration, package_ahriman: Package,
|
|
||||||
mocker: MockerFixture) -> None:
|
|
||||||
"""
|
|
||||||
must run simplified command with increased verbosity
|
|
||||||
"""
|
|
||||||
args = _default_args(args)
|
|
||||||
args.dry_run = True
|
|
||||||
args.info = True
|
|
||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
|
||||||
application_mock = mocker.patch("ahriman.application.application.Application.unknown",
|
|
||||||
return_value=[package_ahriman])
|
|
||||||
remove_mock = mocker.patch("ahriman.application.application.Application.remove")
|
|
||||||
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
|
||||||
|
|
||||||
RemoveUnknown.run(args, "x86_64", configuration, True, False)
|
|
||||||
application_mock.assert_called_once_with()
|
|
||||||
remove_mock.assert_not_called()
|
|
||||||
print_mock.assert_called_once_with(True)
|
|
||||||
|
@ -32,7 +32,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
extract_mock = tarfile.__enter__.return_value = MagicMock()
|
extract_mock = tarfile.__enter__.return_value = MagicMock()
|
||||||
mocker.patch("tarfile.TarFile.__new__", return_value=tarfile)
|
mocker.patch("tarfile.TarFile.__new__", return_value=tarfile)
|
||||||
|
|
||||||
Restore.run(args, "x86_64", configuration, True, False)
|
Restore.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
extract_mock.extractall.assert_called_once_with(path=args.output)
|
extract_mock.extractall.assert_called_once_with(path=args.output)
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,11 +3,11 @@ import dataclasses
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
from unittest import mock
|
from unittest.mock import call as MockCall
|
||||||
|
|
||||||
from ahriman.application.handlers import Search
|
from ahriman.application.handlers import Search
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.exceptions import InvalidOption
|
from ahriman.core.exceptions import OptionError
|
||||||
from ahriman.models.aur_package import AURPackage
|
from ahriman.models.aur_package import AURPackage
|
||||||
|
|
||||||
|
|
||||||
@ -41,11 +41,11 @@ def test_run(args: argparse.Namespace, configuration: Configuration, aur_package
|
|||||||
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
||||||
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
||||||
|
|
||||||
Search.run(args, "x86_64", configuration, True, False)
|
Search.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
aur_search_mock.assert_called_once_with("ahriman", pacman=pytest.helpers.anyvar(int))
|
aur_search_mock.assert_called_once_with("ahriman", pacman=pytest.helpers.anyvar(int))
|
||||||
official_search_mock.assert_called_once_with("ahriman", pacman=pytest.helpers.anyvar(int))
|
official_search_mock.assert_called_once_with("ahriman", pacman=pytest.helpers.anyvar(int))
|
||||||
check_mock.assert_called_once_with(False, False)
|
check_mock.assert_called_once_with(False, False)
|
||||||
print_mock.assert_has_calls([mock.call(False), mock.call(False)])
|
print_mock.assert_has_calls([MockCall(False), MockCall(False)])
|
||||||
|
|
||||||
|
|
||||||
def test_run_empty_exception(args: argparse.Namespace, configuration: Configuration, mocker: MockerFixture) -> None:
|
def test_run_empty_exception(args: argparse.Namespace, configuration: Configuration, mocker: MockerFixture) -> None:
|
||||||
@ -60,7 +60,7 @@ def test_run_empty_exception(args: argparse.Namespace, configuration: Configurat
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
||||||
|
|
||||||
Search.run(args, "x86_64", configuration, True, False)
|
Search.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
check_mock.assert_called_once_with(True, True)
|
check_mock.assert_called_once_with(True, True)
|
||||||
|
|
||||||
|
|
||||||
@ -75,10 +75,10 @@ def test_run_sort(args: argparse.Namespace, configuration: Configuration, aur_pa
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
sort_mock = mocker.patch("ahriman.application.handlers.Search.sort")
|
sort_mock = mocker.patch("ahriman.application.handlers.Search.sort")
|
||||||
|
|
||||||
Search.run(args, "x86_64", configuration, True, False)
|
Search.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
sort_mock.assert_has_calls([
|
sort_mock.assert_has_calls([
|
||||||
mock.call([], "name"), mock.call().__iter__(),
|
MockCall([], "name"), MockCall().__iter__(),
|
||||||
mock.call([aur_package_ahriman], "name"), mock.call().__iter__()
|
MockCall([aur_package_ahriman], "name"), MockCall().__iter__()
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
@ -94,10 +94,10 @@ def test_run_sort_by(args: argparse.Namespace, configuration: Configuration, aur
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
sort_mock = mocker.patch("ahriman.application.handlers.Search.sort")
|
sort_mock = mocker.patch("ahriman.application.handlers.Search.sort")
|
||||||
|
|
||||||
Search.run(args, "x86_64", configuration, True, False)
|
Search.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
sort_mock.assert_has_calls([
|
sort_mock.assert_has_calls([
|
||||||
mock.call([], "field"), mock.call().__iter__(),
|
MockCall([], "field"), MockCall().__iter__(),
|
||||||
mock.call([aur_package_ahriman], "field"), mock.call().__iter__()
|
MockCall([aur_package_ahriman], "field"), MockCall().__iter__()
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
@ -118,7 +118,7 @@ def test_sort_exception(aur_package_ahriman: AURPackage) -> None:
|
|||||||
"""
|
"""
|
||||||
must raise an exception on unknown sorting field
|
must raise an exception on unknown sorting field
|
||||||
"""
|
"""
|
||||||
with pytest.raises(InvalidOption):
|
with pytest.raises(OptionError):
|
||||||
Search.sort([aur_package_ahriman], "random_field")
|
Search.sort([aur_package_ahriman], "random_field")
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ import pytest
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
from typing import Any
|
from typing import Any
|
||||||
from unittest import mock
|
from unittest.mock import call as MockCall
|
||||||
|
|
||||||
from ahriman.application.handlers import Setup
|
from ahriman.application.handlers import Setup
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
@ -25,7 +25,7 @@ def _default_args(args: argparse.Namespace) -> argparse.Namespace:
|
|||||||
args.build_as_user = "ahriman"
|
args.build_as_user = "ahriman"
|
||||||
args.build_command = "ahriman"
|
args.build_command = "ahriman"
|
||||||
args.from_configuration = Path("/usr/share/devtools/pacman-extra.conf")
|
args.from_configuration = Path("/usr/share/devtools/pacman-extra.conf")
|
||||||
args.no_multilib = False
|
args.multilib = True
|
||||||
args.packager = "John Doe <john@doe.com>"
|
args.packager = "John Doe <john@doe.com>"
|
||||||
args.repository = "aur-clone"
|
args.repository = "aur-clone"
|
||||||
args.sign_key = "key"
|
args.sign_key = "key"
|
||||||
@ -48,11 +48,11 @@ def test_run(args: argparse.Namespace, configuration: Configuration, repository_
|
|||||||
executable_mock = mocker.patch("ahriman.application.handlers.Setup.executable_create")
|
executable_mock = mocker.patch("ahriman.application.handlers.Setup.executable_create")
|
||||||
init_mock = mocker.patch("ahriman.core.alpm.repo.Repo.init")
|
init_mock = mocker.patch("ahriman.core.alpm.repo.Repo.init")
|
||||||
|
|
||||||
Setup.run(args, "x86_64", configuration, True, False)
|
Setup.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
ahriman_configuration_mock.assert_called_once_with(
|
ahriman_configuration_mock.assert_called_once_with(
|
||||||
args, "x86_64", args.repository, configuration.include, repository_paths)
|
args, "x86_64", args.repository, configuration.include, repository_paths)
|
||||||
devtools_configuration_mock.assert_called_once_with(
|
devtools_configuration_mock.assert_called_once_with(
|
||||||
args.build_command, "x86_64", args.from_configuration, args.no_multilib, args.repository, repository_paths)
|
args.build_command, "x86_64", args.from_configuration, args.multilib, args.repository, repository_paths)
|
||||||
makepkg_configuration_mock.assert_called_once_with(args.packager, repository_paths)
|
makepkg_configuration_mock.assert_called_once_with(args.packager, repository_paths)
|
||||||
sudo_configuration_mock.assert_called_once_with(repository_paths, args.build_command, "x86_64")
|
sudo_configuration_mock.assert_called_once_with(repository_paths, args.build_command, "x86_64")
|
||||||
executable_mock.assert_called_once_with(repository_paths, args.build_command, "x86_64")
|
executable_mock.assert_called_once_with(repository_paths, args.build_command, "x86_64")
|
||||||
@ -84,13 +84,13 @@ def test_configuration_create_ahriman(args: argparse.Namespace, configuration: C
|
|||||||
|
|
||||||
Setup.configuration_create_ahriman(args, "x86_64", args.repository, configuration.include, repository_paths)
|
Setup.configuration_create_ahriman(args, "x86_64", args.repository, configuration.include, repository_paths)
|
||||||
set_option_mock.assert_has_calls([
|
set_option_mock.assert_has_calls([
|
||||||
mock.call(Configuration.section_name("build", "x86_64"), "build_command", str(command)),
|
MockCall(Configuration.section_name("build", "x86_64"), "build_command", str(command)),
|
||||||
mock.call("repository", "name", args.repository),
|
MockCall("repository", "name", args.repository),
|
||||||
mock.call(Configuration.section_name("build", "x86_64"), "makechrootpkg_flags", f"-U {args.build_as_user}"),
|
MockCall(Configuration.section_name("build", "x86_64"), "makechrootpkg_flags", f"-U {args.build_as_user}"),
|
||||||
mock.call(Configuration.section_name("sign", "x86_64"), "target",
|
MockCall(Configuration.section_name("sign", "x86_64"), "target",
|
||||||
" ".join([target.name.lower() for target in args.sign_target])),
|
" ".join([target.name.lower() for target in args.sign_target])),
|
||||||
mock.call(Configuration.section_name("sign", "x86_64"), "key", args.sign_key),
|
MockCall(Configuration.section_name("sign", "x86_64"), "key", args.sign_key),
|
||||||
mock.call(Configuration.section_name("web", "x86_64"), "port", str(args.web_port)),
|
MockCall(Configuration.section_name("web", "x86_64"), "port", str(args.web_port)),
|
||||||
])
|
])
|
||||||
write_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
write_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
||||||
|
|
||||||
@ -107,11 +107,8 @@ def test_configuration_create_devtools(args: argparse.Namespace, repository_path
|
|||||||
write_mock = mocker.patch("ahriman.core.configuration.Configuration.write")
|
write_mock = mocker.patch("ahriman.core.configuration.Configuration.write")
|
||||||
|
|
||||||
Setup.configuration_create_devtools(args.build_command, "x86_64", args.from_configuration,
|
Setup.configuration_create_devtools(args.build_command, "x86_64", args.from_configuration,
|
||||||
args.no_multilib, args.repository, repository_paths)
|
args.multilib, args.repository, repository_paths)
|
||||||
add_section_mock.assert_has_calls([
|
add_section_mock.assert_has_calls([MockCall("multilib"), MockCall(args.repository)])
|
||||||
mock.call("multilib"),
|
|
||||||
mock.call(args.repository)
|
|
||||||
])
|
|
||||||
write_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
write_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
||||||
|
|
||||||
|
|
||||||
@ -126,7 +123,7 @@ def test_configuration_create_devtools_no_multilib(args: argparse.Namespace, rep
|
|||||||
write_mock = mocker.patch("ahriman.core.configuration.Configuration.write")
|
write_mock = mocker.patch("ahriman.core.configuration.Configuration.write")
|
||||||
|
|
||||||
Setup.configuration_create_devtools(args.build_command, "x86_64", args.from_configuration,
|
Setup.configuration_create_devtools(args.build_command, "x86_64", args.from_configuration,
|
||||||
True, args.repository, repository_paths)
|
False, args.repository, repository_paths)
|
||||||
write_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
write_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
application_mock = mocker.patch("code.interact")
|
application_mock = mocker.patch("code.interact")
|
||||||
|
|
||||||
Shell.run(args, "x86_64", configuration, True, False)
|
Shell.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with(local=pytest.helpers.anyvar(int))
|
application_mock.assert_called_once_with(local=pytest.helpers.anyvar(int))
|
||||||
|
|
||||||
|
|
||||||
@ -43,6 +43,6 @@ def test_run_verbose(args: argparse.Namespace, configuration: Configuration, moc
|
|||||||
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
||||||
application_mock = mocker.patch("code.interact")
|
application_mock = mocker.patch("code.interact")
|
||||||
|
|
||||||
Shell.run(args, "x86_64", configuration, True, False)
|
Shell.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with(local=pytest.helpers.anyvar(int))
|
application_mock.assert_called_once_with(local=pytest.helpers.anyvar(int))
|
||||||
print_mock.assert_called_once_with(verbose=False)
|
print_mock.assert_called_once_with(verbose=False)
|
||||||
|
@ -28,5 +28,5 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
application_mock = mocker.patch("ahriman.application.application.Application.sign")
|
application_mock = mocker.patch("ahriman.application.application.Application.sign")
|
||||||
|
|
||||||
Sign.run(args, "x86_64", configuration, True, False)
|
Sign.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with([])
|
application_mock.assert_called_once_with([])
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
from unittest import mock
|
from unittest.mock import call as MockCall
|
||||||
|
|
||||||
from ahriman.application.handlers import Status
|
from ahriman.application.handlers import Status
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
@ -41,11 +41,11 @@ def test_run(args: argparse.Namespace, configuration: Configuration, package_ahr
|
|||||||
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
||||||
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
||||||
|
|
||||||
Status.run(args, "x86_64", configuration, True, False)
|
Status.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with()
|
application_mock.assert_called_once_with()
|
||||||
packages_mock.assert_called_once_with(None)
|
packages_mock.assert_called_once_with(None)
|
||||||
check_mock.assert_called_once_with(False, False)
|
check_mock.assert_called_once_with(False, False)
|
||||||
print_mock.assert_has_calls([mock.call(False) for _ in range(3)])
|
print_mock.assert_has_calls([MockCall(False) for _ in range(3)])
|
||||||
|
|
||||||
|
|
||||||
def test_run_empty_exception(args: argparse.Namespace, configuration: Configuration, mocker: MockerFixture) -> None:
|
def test_run_empty_exception(args: argparse.Namespace, configuration: Configuration, mocker: MockerFixture) -> None:
|
||||||
@ -59,7 +59,7 @@ def test_run_empty_exception(args: argparse.Namespace, configuration: Configurat
|
|||||||
mocker.patch("ahriman.core.status.client.Client.get", return_value=[])
|
mocker.patch("ahriman.core.status.client.Client.get", return_value=[])
|
||||||
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
||||||
|
|
||||||
Status.run(args, "x86_64", configuration, True, False)
|
Status.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
check_mock.assert_called_once_with(True, True)
|
check_mock.assert_called_once_with(True, True)
|
||||||
|
|
||||||
|
|
||||||
@ -75,8 +75,8 @@ def test_run_verbose(args: argparse.Namespace, configuration: Configuration, pac
|
|||||||
return_value=[(package_ahriman, BuildStatus(BuildStatusEnum.Success))])
|
return_value=[(package_ahriman, BuildStatus(BuildStatusEnum.Success))])
|
||||||
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
||||||
|
|
||||||
Status.run(args, "x86_64", configuration, True, False)
|
Status.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
print_mock.assert_has_calls([mock.call(True) for _ in range(2)])
|
print_mock.assert_has_calls([MockCall(True) for _ in range(2)])
|
||||||
|
|
||||||
|
|
||||||
def test_run_with_package_filter(args: argparse.Namespace, configuration: Configuration, package_ahriman: Package,
|
def test_run_with_package_filter(args: argparse.Namespace, configuration: Configuration, package_ahriman: Package,
|
||||||
@ -90,7 +90,7 @@ def test_run_with_package_filter(args: argparse.Namespace, configuration: Config
|
|||||||
packages_mock = mocker.patch("ahriman.core.status.client.Client.get",
|
packages_mock = mocker.patch("ahriman.core.status.client.Client.get",
|
||||||
return_value=[(package_ahriman, BuildStatus(BuildStatusEnum.Success))])
|
return_value=[(package_ahriman, BuildStatus(BuildStatusEnum.Success))])
|
||||||
|
|
||||||
Status.run(args, "x86_64", configuration, True, False)
|
Status.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
packages_mock.assert_called_once_with(package_ahriman.base)
|
packages_mock.assert_called_once_with(package_ahriman.base)
|
||||||
|
|
||||||
|
|
||||||
@ -107,8 +107,8 @@ def test_run_by_status(args: argparse.Namespace, configuration: Configuration, p
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
||||||
|
|
||||||
Status.run(args, "x86_64", configuration, True, False)
|
Status.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
print_mock.assert_has_calls([mock.call(False) for _ in range(2)])
|
print_mock.assert_has_calls([MockCall(False) for _ in range(2)])
|
||||||
|
|
||||||
|
|
||||||
def test_imply_with_report(args: argparse.Namespace, configuration: Configuration, mocker: MockerFixture) -> None:
|
def test_imply_with_report(args: argparse.Namespace, configuration: Configuration, mocker: MockerFixture) -> None:
|
||||||
@ -119,7 +119,7 @@ def test_imply_with_report(args: argparse.Namespace, configuration: Configuratio
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
load_mock = mocker.patch("ahriman.core.status.client.Client.load")
|
load_mock = mocker.patch("ahriman.core.status.client.Client.load")
|
||||||
|
|
||||||
Status.run(args, "x86_64", configuration, True, False)
|
Status.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
load_mock.assert_called_once_with(configuration)
|
load_mock.assert_called_once_with(configuration)
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
update_self_mock = mocker.patch("ahriman.core.status.client.Client.update_self")
|
update_self_mock = mocker.patch("ahriman.core.status.client.Client.update_self")
|
||||||
|
|
||||||
StatusUpdate.run(args, "x86_64", configuration, True, False)
|
StatusUpdate.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
update_self_mock.assert_called_once_with(args.status)
|
update_self_mock.assert_called_once_with(args.status)
|
||||||
|
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ def test_run_packages(args: argparse.Namespace, configuration: Configuration, pa
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
update_mock = mocker.patch("ahriman.core.status.client.Client.update")
|
update_mock = mocker.patch("ahriman.core.status.client.Client.update")
|
||||||
|
|
||||||
StatusUpdate.run(args, "x86_64", configuration, True, False)
|
StatusUpdate.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
update_mock.assert_called_once_with(package_ahriman.base, args.status)
|
update_mock.assert_called_once_with(package_ahriman.base, args.status)
|
||||||
|
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ def test_run_remove(args: argparse.Namespace, configuration: Configuration, pack
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
update_mock = mocker.patch("ahriman.core.status.client.Client.remove")
|
update_mock = mocker.patch("ahriman.core.status.client.Client.remove")
|
||||||
|
|
||||||
StatusUpdate.run(args, "x86_64", configuration, True, False)
|
StatusUpdate.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
update_mock.assert_called_once_with(package_ahriman.base)
|
update_mock.assert_called_once_with(package_ahriman.base)
|
||||||
|
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ def test_imply_with_report(args: argparse.Namespace, configuration: Configuratio
|
|||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
||||||
load_mock = mocker.patch("ahriman.core.status.client.Client.load")
|
load_mock = mocker.patch("ahriman.core.status.client.Client.load")
|
||||||
|
|
||||||
StatusUpdate.run(args, "x86_64", configuration, True, False)
|
StatusUpdate.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
load_mock.assert_called_once_with(configuration)
|
load_mock.assert_called_once_with(configuration)
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
application_mock = mocker.patch("ahriman.application.application.Application.on_result")
|
application_mock = mocker.patch("ahriman.application.application.Application.on_result")
|
||||||
on_start_mock = mocker.patch("ahriman.application.application.Application.on_start")
|
on_start_mock = mocker.patch("ahriman.application.application.Application.on_start")
|
||||||
|
|
||||||
Triggers.run(args, "x86_64", configuration, True, False)
|
Triggers.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with(Result())
|
application_mock.assert_called_once_with(Result())
|
||||||
on_start_mock.assert_called_once_with()
|
on_start_mock.assert_called_once_with()
|
||||||
|
|
||||||
@ -48,6 +48,6 @@ def test_run_trigger(args: argparse.Namespace, configuration: Configuration, pac
|
|||||||
report_mock = mocker.patch("ahriman.core.report.ReportTrigger.on_result")
|
report_mock = mocker.patch("ahriman.core.report.ReportTrigger.on_result")
|
||||||
upload_mock = mocker.patch("ahriman.core.upload.UploadTrigger.on_result")
|
upload_mock = mocker.patch("ahriman.core.upload.UploadTrigger.on_result")
|
||||||
|
|
||||||
Triggers.run(args, "x86_64", configuration, True, False)
|
Triggers.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
report_mock.assert_called_once_with(Result(), [package_ahriman])
|
report_mock.assert_called_once_with(Result(), [package_ahriman])
|
||||||
upload_mock.assert_not_called()
|
upload_mock.assert_not_called()
|
||||||
|
@ -32,7 +32,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
return_value=["command"])
|
return_value=["command"])
|
||||||
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
||||||
|
|
||||||
UnsafeCommands.run(args, "x86_64", configuration, True, False)
|
UnsafeCommands.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
commands_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
commands_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
||||||
print_mock.assert_called_once_with(verbose=True)
|
print_mock.assert_called_once_with(verbose=True)
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ def test_run_check(args: argparse.Namespace, configuration: Configuration, mocke
|
|||||||
return_value=["command"])
|
return_value=["command"])
|
||||||
check_mock = mocker.patch("ahriman.application.handlers.UnsafeCommands.check_unsafe")
|
check_mock = mocker.patch("ahriman.application.handlers.UnsafeCommands.check_unsafe")
|
||||||
|
|
||||||
UnsafeCommands.run(args, "x86_64", configuration, True, False)
|
UnsafeCommands.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
commands_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
commands_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
||||||
check_mock.assert_called_once_with("clean", ["command"], pytest.helpers.anyvar(int))
|
check_mock.assert_called_once_with("clean", ["command"], pytest.helpers.anyvar(int))
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ import argparse
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
from unittest import mock
|
from unittest.mock import call as MockCall
|
||||||
|
|
||||||
from ahriman.application.application import Application
|
from ahriman.application.application import Application
|
||||||
from ahriman.application.handlers import Update
|
from ahriman.application.handlers import Update
|
||||||
@ -24,10 +24,10 @@ def _default_args(args: argparse.Namespace) -> argparse.Namespace:
|
|||||||
args.package = []
|
args.package = []
|
||||||
args.dry_run = False
|
args.dry_run = False
|
||||||
args.exit_code = False
|
args.exit_code = False
|
||||||
args.no_aur = False
|
args.aur = True
|
||||||
args.no_local = False
|
args.local = True
|
||||||
args.no_manual = False
|
args.manual = True
|
||||||
args.no_vcs = False
|
args.vcs = True
|
||||||
args.refresh = 0
|
args.refresh = 0
|
||||||
return args
|
return args
|
||||||
|
|
||||||
@ -46,11 +46,11 @@ def test_run(args: argparse.Namespace, package_ahriman: Package,
|
|||||||
updates_mock = mocker.patch("ahriman.application.application.Application.updates", return_value=[package_ahriman])
|
updates_mock = mocker.patch("ahriman.application.application.Application.updates", return_value=[package_ahriman])
|
||||||
on_start_mock = mocker.patch("ahriman.application.application.Application.on_start")
|
on_start_mock = mocker.patch("ahriman.application.application.Application.on_start")
|
||||||
|
|
||||||
Update.run(args, "x86_64", configuration, True, False)
|
Update.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with([package_ahriman])
|
application_mock.assert_called_once_with([package_ahriman])
|
||||||
updates_mock.assert_called_once_with(args.package, args.no_aur, args.no_local, args.no_manual, args.no_vcs,
|
updates_mock.assert_called_once_with(args.package, aur=args.aur, local=args.local, manual=args.manual, vcs=args.vcs,
|
||||||
pytest.helpers.anyvar(int))
|
log_fn=pytest.helpers.anyvar(int))
|
||||||
check_mock.assert_has_calls([mock.call(False, False), mock.call(False, False)])
|
check_mock.assert_has_calls([MockCall(False, False), MockCall(False, False)])
|
||||||
on_start_mock.assert_called_once_with()
|
on_start_mock.assert_called_once_with()
|
||||||
|
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ def test_run_empty_exception(args: argparse.Namespace, configuration: Configurat
|
|||||||
mocker.patch("ahriman.application.application.Application.updates", return_value=[])
|
mocker.patch("ahriman.application.application.Application.updates", return_value=[])
|
||||||
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
||||||
|
|
||||||
Update.run(args, "x86_64", configuration, True, False)
|
Update.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
check_mock.assert_called_once_with(True, True)
|
check_mock.assert_called_once_with(True, True)
|
||||||
|
|
||||||
|
|
||||||
@ -81,8 +81,8 @@ def test_run_update_empty_exception(args: argparse.Namespace, package_ahriman: P
|
|||||||
mocker.patch("ahriman.application.application.Application.updates", return_value=[package_ahriman])
|
mocker.patch("ahriman.application.application.Application.updates", return_value=[package_ahriman])
|
||||||
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
||||||
|
|
||||||
Update.run(args, "x86_64", configuration, True, False)
|
Update.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
check_mock.assert_has_calls([mock.call(True, False), mock.call(True, True)])
|
check_mock.assert_has_calls([MockCall(True, False), MockCall(True, True)])
|
||||||
|
|
||||||
|
|
||||||
def test_run_dry_run(args: argparse.Namespace, configuration: Configuration, mocker: MockerFixture) -> None:
|
def test_run_dry_run(args: argparse.Namespace, configuration: Configuration, mocker: MockerFixture) -> None:
|
||||||
@ -96,9 +96,9 @@ def test_run_dry_run(args: argparse.Namespace, configuration: Configuration, moc
|
|||||||
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
||||||
updates_mock = mocker.patch("ahriman.application.application.Application.updates")
|
updates_mock = mocker.patch("ahriman.application.application.Application.updates")
|
||||||
|
|
||||||
Update.run(args, "x86_64", configuration, True, False)
|
Update.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
updates_mock.assert_called_once_with(args.package, args.no_aur, args.no_local, args.no_manual, args.no_vcs,
|
updates_mock.assert_called_once_with(args.package, aur=args.aur, local=args.local, manual=args.manual, vcs=args.vcs,
|
||||||
pytest.helpers.anyvar(int))
|
log_fn=pytest.helpers.anyvar(int))
|
||||||
application_mock.assert_not_called()
|
application_mock.assert_not_called()
|
||||||
check_mock.assert_called_once_with(False, pytest.helpers.anyvar(int))
|
check_mock.assert_called_once_with(False, pytest.helpers.anyvar(int))
|
||||||
|
|
||||||
@ -109,4 +109,4 @@ def test_log_fn(application: Application, mocker: MockerFixture) -> None:
|
|||||||
"""
|
"""
|
||||||
logger_mock = mocker.patch("logging.Logger.info")
|
logger_mock = mocker.patch("logging.Logger.info")
|
||||||
Update.log_fn(application, False)("hello")
|
Update.log_fn(application, False)("hello")
|
||||||
logger_mock.assert_has_calls([mock.call("hello")])
|
logger_mock.assert_has_calls([MockCall("hello")])
|
||||||
|
@ -7,7 +7,7 @@ from pytest_mock import MockerFixture
|
|||||||
from ahriman.application.handlers import Users
|
from ahriman.application.handlers import Users
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.database import SQLite
|
from ahriman.core.database import SQLite
|
||||||
from ahriman.core.exceptions import InitializeException
|
from ahriman.core.exceptions import InitializeError
|
||||||
from ahriman.models.action import Action
|
from ahriman.models.action import Action
|
||||||
from ahriman.models.user import User
|
from ahriman.models.user import User
|
||||||
from ahriman.models.user_access import UserAccess
|
from ahriman.models.user_access import UserAccess
|
||||||
@ -47,7 +47,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, database: S
|
|||||||
get_salt_mock = mocker.patch("ahriman.application.handlers.Users.get_salt", return_value="salt")
|
get_salt_mock = mocker.patch("ahriman.application.handlers.Users.get_salt", return_value="salt")
|
||||||
update_mock = mocker.patch("ahriman.core.database.SQLite.user_update")
|
update_mock = mocker.patch("ahriman.core.database.SQLite.user_update")
|
||||||
|
|
||||||
Users.run(args, "x86_64", configuration, True, False)
|
Users.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
get_auth_configuration_mock.assert_called_once_with(configuration.include)
|
get_auth_configuration_mock.assert_called_once_with(configuration.include)
|
||||||
create_configuration_mock.assert_called_once_with(pytest.helpers.anyvar(int), pytest.helpers.anyvar(int),
|
create_configuration_mock.assert_called_once_with(pytest.helpers.anyvar(int), pytest.helpers.anyvar(int),
|
||||||
pytest.helpers.anyvar(int), args.as_service, args.secure)
|
pytest.helpers.anyvar(int), args.as_service, args.secure)
|
||||||
@ -67,7 +67,7 @@ def test_run_list(args: argparse.Namespace, configuration: Configuration, databa
|
|||||||
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
||||||
list_mock = mocker.patch("ahriman.core.database.SQLite.user_list", return_value=[user])
|
list_mock = mocker.patch("ahriman.core.database.SQLite.user_list", return_value=[user])
|
||||||
|
|
||||||
Users.run(args, "x86_64", configuration, True, False)
|
Users.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
list_mock.assert_called_once_with("user", args.role)
|
list_mock.assert_called_once_with("user", args.role)
|
||||||
check_mock.assert_called_once_with(False, False)
|
check_mock.assert_called_once_with(False, False)
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ def test_run_empty_exception(args: argparse.Namespace, configuration: Configurat
|
|||||||
mocker.patch("ahriman.core.database.SQLite.user_list", return_value=[])
|
mocker.patch("ahriman.core.database.SQLite.user_list", return_value=[])
|
||||||
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
|
||||||
|
|
||||||
Users.run(args, "x86_64", configuration, True, False)
|
Users.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
check_mock.assert_called_once_with(True, True)
|
check_mock.assert_called_once_with(True, True)
|
||||||
|
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ def test_run_remove(args: argparse.Namespace, configuration: Configuration, data
|
|||||||
mocker.patch("ahriman.core.database.SQLite.load", return_value=database)
|
mocker.patch("ahriman.core.database.SQLite.load", return_value=database)
|
||||||
remove_mock = mocker.patch("ahriman.core.database.SQLite.user_remove")
|
remove_mock = mocker.patch("ahriman.core.database.SQLite.user_remove")
|
||||||
|
|
||||||
Users.run(args, "x86_64", configuration, True, False)
|
Users.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
remove_mock.assert_called_once_with(args.username)
|
remove_mock.assert_called_once_with(args.username)
|
||||||
|
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ def test_configuration_write_not_loaded(configuration: Configuration, mocker: Mo
|
|||||||
configuration.path = None
|
configuration.path = None
|
||||||
mocker.patch("pathlib.Path.open")
|
mocker.patch("pathlib.Path.open")
|
||||||
|
|
||||||
with pytest.raises(InitializeException):
|
with pytest.raises(InitializeError):
|
||||||
Users.configuration_write(configuration, secure=True)
|
Users.configuration_write(configuration, secure=True)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
from unittest import mock
|
from unittest.mock import call as MockCall
|
||||||
|
|
||||||
from ahriman.application.handlers import Versions
|
from ahriman.application.handlers import Versions
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
@ -14,9 +14,9 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
application_mock = mocker.patch("ahriman.application.handlers.Versions.package_dependencies")
|
application_mock = mocker.patch("ahriman.application.handlers.Versions.package_dependencies")
|
||||||
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
|
||||||
|
|
||||||
Versions.run(args, "x86_64", configuration, True, False)
|
Versions.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
application_mock.assert_called_once_with("ahriman", ("pacman", "s3", "web"))
|
application_mock.assert_called_once_with("ahriman", ("pacman", "s3", "web"))
|
||||||
print_mock.assert_has_calls([mock.call(verbose=False, separator=" "), mock.call(verbose=False, separator=" ")])
|
print_mock.assert_has_calls([MockCall(verbose=False, separator=" "), MockCall(verbose=False, separator=" ")])
|
||||||
|
|
||||||
|
|
||||||
def test_package_dependencies() -> None:
|
def test_package_dependencies() -> None:
|
||||||
|
@ -31,7 +31,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
|
|||||||
setup_mock = mocker.patch("ahriman.web.web.setup_service")
|
setup_mock = mocker.patch("ahriman.web.web.setup_service")
|
||||||
run_mock = mocker.patch("ahriman.web.web.run_server")
|
run_mock = mocker.patch("ahriman.web.web.run_server")
|
||||||
|
|
||||||
Web.run(args, "x86_64", configuration, True, False)
|
Web.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
setup_mock.assert_called_once_with("x86_64", configuration, pytest.helpers.anyvar(int))
|
setup_mock.assert_called_once_with("x86_64", configuration, pytest.helpers.anyvar(int))
|
||||||
run_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
run_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
||||||
|
|
||||||
|
@ -47,12 +47,12 @@ def test_multiple_architectures(parser: argparse.ArgumentParser) -> None:
|
|||||||
|
|
||||||
def test_subparsers_aur_search(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_aur_search(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
aur-search command must imply architecture list, lock, no-report, quiet and unsafe
|
aur-search command must imply architecture list, lock, report, quiet and unsafe
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["aur-search", "ahriman"])
|
args = parser.parse_args(["aur-search", "ahriman"])
|
||||||
assert args.architecture == [""]
|
assert args.architecture == [""]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.quiet
|
assert args.quiet
|
||||||
assert args.unsafe
|
assert args.unsafe
|
||||||
|
|
||||||
@ -99,12 +99,12 @@ def test_subparsers_daemon_option_interval(parser: argparse.ArgumentParser) -> N
|
|||||||
|
|
||||||
def test_subparsers_help(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_help(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
help command must imply architecture list, lock, no-report, quiet, unsafe and parser
|
help command must imply architecture list, lock, report, quiet, unsafe and parser
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["help"])
|
args = parser.parse_args(["help"])
|
||||||
assert args.architecture == [""]
|
assert args.architecture == [""]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.quiet
|
assert args.quiet
|
||||||
assert args.unsafe
|
assert args.unsafe
|
||||||
assert args.parser is not None and args.parser()
|
assert args.parser is not None and args.parser()
|
||||||
@ -120,12 +120,12 @@ def test_subparsers_help_architecture(parser: argparse.ArgumentParser) -> None:
|
|||||||
|
|
||||||
def test_subparsers_help_commands_unsafe(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_help_commands_unsafe(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
help-commands-unsafe command must imply architecture list, lock, no-report, quiet, unsafe and parser
|
help-commands-unsafe command must imply architecture list, lock, report, quiet, unsafe and parser
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["help-commands-unsafe"])
|
args = parser.parse_args(["help-commands-unsafe"])
|
||||||
assert args.architecture == [""]
|
assert args.architecture == [""]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.quiet
|
assert args.quiet
|
||||||
assert args.unsafe
|
assert args.unsafe
|
||||||
assert args.parser is not None and args.parser()
|
assert args.parser is not None and args.parser()
|
||||||
@ -141,12 +141,12 @@ def test_subparsers_help_commands_unsafe_architecture(parser: argparse.ArgumentP
|
|||||||
|
|
||||||
def test_subparsers_key_import(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_key_import(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
key-import command must imply architecture list, lock and no-report
|
key-import command must imply architecture list, lock and report
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["key-import", "key"])
|
args = parser.parse_args(["key-import", "key"])
|
||||||
assert args.architecture == [""]
|
assert args.architecture == [""]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
|
|
||||||
|
|
||||||
def test_subparsers_key_import_architecture(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_key_import_architecture(parser: argparse.ArgumentParser) -> None:
|
||||||
@ -191,38 +191,38 @@ def test_subparsers_package_remove_architecture(parser: argparse.ArgumentParser)
|
|||||||
|
|
||||||
def test_subparsers_package_status(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_package_status(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
package-status command must imply lock, no-report, quiet and unsafe
|
package-status command must imply lock, report, quiet and unsafe
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["-a", "x86_64", "package-status"])
|
args = parser.parse_args(["-a", "x86_64", "package-status"])
|
||||||
assert args.architecture == ["x86_64"]
|
assert args.architecture == ["x86_64"]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.quiet
|
assert args.quiet
|
||||||
assert args.unsafe
|
assert args.unsafe
|
||||||
|
|
||||||
|
|
||||||
def test_subparsers_package_status_remove(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_package_status_remove(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
package-status-remove command must imply action, lock, no-report, quiet and unsafe
|
package-status-remove command must imply action, lock, report, quiet and unsafe
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["-a", "x86_64", "package-status-remove", "ahriman"])
|
args = parser.parse_args(["-a", "x86_64", "package-status-remove", "ahriman"])
|
||||||
assert args.architecture == ["x86_64"]
|
assert args.architecture == ["x86_64"]
|
||||||
assert args.action == Action.Remove
|
assert args.action == Action.Remove
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.quiet
|
assert args.quiet
|
||||||
assert args.unsafe
|
assert args.unsafe
|
||||||
|
|
||||||
|
|
||||||
def test_subparsers_package_status_update(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_package_status_update(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
package-status-update command must imply action, lock, no-report, quiet and unsafe
|
package-status-update command must imply action, lock, report, quiet and unsafe
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["-a", "x86_64", "package-status-update"])
|
args = parser.parse_args(["-a", "x86_64", "package-status-update"])
|
||||||
assert args.architecture == ["x86_64"]
|
assert args.architecture == ["x86_64"]
|
||||||
assert args.action == Action.Update
|
assert args.action == Action.Update
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.quiet
|
assert args.quiet
|
||||||
assert args.unsafe
|
assert args.unsafe
|
||||||
|
|
||||||
@ -239,13 +239,13 @@ def test_subparsers_package_status_update_option_status(parser: argparse.Argumen
|
|||||||
|
|
||||||
def test_subparsers_patch_add(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_patch_add(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
patch-add command must imply action, architecture list, lock and no-report
|
patch-add command must imply action, architecture list, lock and report
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["patch-add", "ahriman", "version"])
|
args = parser.parse_args(["patch-add", "ahriman", "version"])
|
||||||
assert args.action == Action.Update
|
assert args.action == Action.Update
|
||||||
assert args.architecture == [""]
|
assert args.architecture == [""]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
|
|
||||||
|
|
||||||
def test_subparsers_patch_add_architecture(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_patch_add_architecture(parser: argparse.ArgumentParser) -> None:
|
||||||
@ -258,13 +258,13 @@ def test_subparsers_patch_add_architecture(parser: argparse.ArgumentParser) -> N
|
|||||||
|
|
||||||
def test_subparsers_patch_list(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_patch_list(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
patch-list command must imply action, architecture list, lock and no-report
|
patch-list command must imply action, architecture list, lock and report
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["patch-list", "ahriman"])
|
args = parser.parse_args(["patch-list", "ahriman"])
|
||||||
assert args.action == Action.List
|
assert args.action == Action.List
|
||||||
assert args.architecture == [""]
|
assert args.architecture == [""]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
|
|
||||||
|
|
||||||
def test_subparsers_patch_list_architecture(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_patch_list_architecture(parser: argparse.ArgumentParser) -> None:
|
||||||
@ -277,13 +277,13 @@ def test_subparsers_patch_list_architecture(parser: argparse.ArgumentParser) ->
|
|||||||
|
|
||||||
def test_subparsers_patch_remove(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_patch_remove(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
patch-remove command must imply action, architecture list, lock and no-report
|
patch-remove command must imply action, architecture list, lock and report
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["patch-remove", "ahriman"])
|
args = parser.parse_args(["patch-remove", "ahriman"])
|
||||||
assert args.action == Action.Remove
|
assert args.action == Action.Remove
|
||||||
assert args.architecture == [""]
|
assert args.architecture == [""]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
|
|
||||||
|
|
||||||
def test_subparsers_patch_remove_architecture(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_patch_remove_architecture(parser: argparse.ArgumentParser) -> None:
|
||||||
@ -296,13 +296,13 @@ def test_subparsers_patch_remove_architecture(parser: argparse.ArgumentParser) -
|
|||||||
|
|
||||||
def test_subparsers_patch_set_add(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_patch_set_add(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
patch-set-add command must imply action, architecture list, lock, no-report and variable
|
patch-set-add command must imply action, architecture list, lock, report and variable
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["patch-set-add", "ahriman"])
|
args = parser.parse_args(["patch-set-add", "ahriman"])
|
||||||
assert args.action == Action.Update
|
assert args.action == Action.Update
|
||||||
assert args.architecture == [""]
|
assert args.architecture == [""]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.variable is None
|
assert args.variable is None
|
||||||
|
|
||||||
|
|
||||||
@ -332,12 +332,12 @@ def test_subparsers_patch_set_add_option_track(parser: argparse.ArgumentParser)
|
|||||||
|
|
||||||
def test_subparsers_repo_backup(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_repo_backup(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
repo-backup command must imply architecture list, lock, no-report and unsafe
|
repo-backup command must imply architecture list, lock, report and unsafe
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["repo-backup", "output.zip"])
|
args = parser.parse_args(["repo-backup", "output.zip"])
|
||||||
assert args.architecture == [""]
|
assert args.architecture == [""]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.unsafe
|
assert args.unsafe
|
||||||
|
|
||||||
|
|
||||||
@ -351,12 +351,12 @@ def test_subparsers_repo_backup_architecture(parser: argparse.ArgumentParser) ->
|
|||||||
|
|
||||||
def test_subparsers_repo_check(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_repo_check(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
repo-check command must imply dry-run, no-aur and no-manual
|
repo-check command must imply dry-run, aur and manual
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["repo-check"])
|
args = parser.parse_args(["repo-check"])
|
||||||
assert args.dry_run
|
assert args.dry_run
|
||||||
assert not args.no_aur
|
assert args.aur
|
||||||
assert args.no_manual
|
assert not args.manual
|
||||||
|
|
||||||
|
|
||||||
def test_subparsers_repo_check_architecture(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_repo_check_architecture(parser: argparse.ArgumentParser) -> None:
|
||||||
@ -402,12 +402,12 @@ def test_subparsers_repo_clean_architecture(parser: argparse.ArgumentParser) ->
|
|||||||
|
|
||||||
def test_subparsers_repo_config(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_repo_config(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
repo-config command must imply lock, no-report, quiet and unsafe
|
repo-config command must imply lock, report, quiet and unsafe
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["-a", "x86_64", "repo-config"])
|
args = parser.parse_args(["-a", "x86_64", "repo-config"])
|
||||||
assert args.architecture == ["x86_64"]
|
assert args.architecture == ["x86_64"]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.quiet
|
assert args.quiet
|
||||||
assert args.unsafe
|
assert args.unsafe
|
||||||
|
|
||||||
@ -452,12 +452,12 @@ def test_subparsers_repo_report_architecture(parser: argparse.ArgumentParser) ->
|
|||||||
|
|
||||||
def test_subparsers_repo_restore(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_repo_restore(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
repo-restore command must imply architecture list, lock, no-report and unsafe
|
repo-restore command must imply architecture list, lock, report and unsafe
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["repo-restore", "output.zip"])
|
args = parser.parse_args(["repo-restore", "output.zip"])
|
||||||
assert args.architecture == [""]
|
assert args.architecture == [""]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.unsafe
|
assert args.unsafe
|
||||||
|
|
||||||
|
|
||||||
@ -471,13 +471,13 @@ def test_subparsers_repo_restore_architecture(parser: argparse.ArgumentParser) -
|
|||||||
|
|
||||||
def test_subparsers_repo_setup(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_repo_setup(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
repo-setup command must imply lock, no-report, quiet and unsafe
|
repo-setup command must imply lock, report, quiet and unsafe
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["-a", "x86_64", "repo-setup", "--packager", "John Doe <john@doe.com>",
|
args = parser.parse_args(["-a", "x86_64", "repo-setup", "--packager", "John Doe <john@doe.com>",
|
||||||
"--repository", "aur-clone"])
|
"--repository", "aur-clone"])
|
||||||
assert args.architecture == ["x86_64"]
|
assert args.architecture == ["x86_64"]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.quiet
|
assert args.quiet
|
||||||
assert args.unsafe
|
assert args.unsafe
|
||||||
|
|
||||||
@ -516,13 +516,13 @@ def test_subparsers_repo_sign_architecture(parser: argparse.ArgumentParser) -> N
|
|||||||
|
|
||||||
def test_subparsers_repo_status_update(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_repo_status_update(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
re[p-status-update command must imply action, lock, no-report, package, quiet and unsafe
|
re[p-status-update command must imply action, lock, report, package, quiet and unsafe
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["-a", "x86_64", "package-status-update"])
|
args = parser.parse_args(["-a", "x86_64", "package-status-update"])
|
||||||
assert args.architecture == ["x86_64"]
|
assert args.architecture == ["x86_64"]
|
||||||
assert args.action == Action.Update
|
assert args.action == Action.Update
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert not args.package
|
assert not args.package
|
||||||
assert args.quiet
|
assert args.quiet
|
||||||
assert args.unsafe
|
assert args.unsafe
|
||||||
@ -590,22 +590,22 @@ def test_subparsers_repo_update_option_refresh(parser: argparse.ArgumentParser)
|
|||||||
|
|
||||||
def test_subparsers_shell(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_shell(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
shell command must imply lock and no-report
|
shell command must imply lock and report
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["shell"])
|
args = parser.parse_args(["shell"])
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
|
|
||||||
|
|
||||||
def test_subparsers_user_add(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_user_add(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
user-add command must imply action, architecture, lock, no-report, quiet and unsafe
|
user-add command must imply action, architecture, lock, report, quiet and unsafe
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["user-add", "username"])
|
args = parser.parse_args(["user-add", "username"])
|
||||||
assert args.action == Action.Update
|
assert args.action == Action.Update
|
||||||
assert args.architecture == [""]
|
assert args.architecture == [""]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.quiet
|
assert args.quiet
|
||||||
assert args.unsafe
|
assert args.unsafe
|
||||||
|
|
||||||
@ -630,13 +630,13 @@ def test_subparsers_user_add_option_role(parser: argparse.ArgumentParser) -> Non
|
|||||||
|
|
||||||
def test_subparsers_user_list(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_user_list(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
user-list command must imply action, architecture, lock, no-report, password, quiet and unsafe
|
user-list command must imply action, architecture, lock, report, password, quiet and unsafe
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["user-list"])
|
args = parser.parse_args(["user-list"])
|
||||||
assert args.action == Action.List
|
assert args.action == Action.List
|
||||||
assert args.architecture == [""]
|
assert args.architecture == [""]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.password is not None
|
assert args.password is not None
|
||||||
assert args.quiet
|
assert args.quiet
|
||||||
assert args.unsafe
|
assert args.unsafe
|
||||||
@ -660,13 +660,13 @@ def test_subparsers_user_list_option_role(parser: argparse.ArgumentParser) -> No
|
|||||||
|
|
||||||
def test_subparsers_user_remove(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_user_remove(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
user-remove command must imply action, architecture, lock, no-report, password, quiet, role and unsafe
|
user-remove command must imply action, architecture, lock, report, password, quiet, role and unsafe
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["user-remove", "username"])
|
args = parser.parse_args(["user-remove", "username"])
|
||||||
assert args.action == Action.Remove
|
assert args.action == Action.Remove
|
||||||
assert args.architecture == [""]
|
assert args.architecture == [""]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.password is not None
|
assert args.password is not None
|
||||||
assert args.quiet
|
assert args.quiet
|
||||||
assert args.unsafe
|
assert args.unsafe
|
||||||
@ -682,12 +682,12 @@ def test_subparsers_user_remove_architecture(parser: argparse.ArgumentParser) ->
|
|||||||
|
|
||||||
def test_subparsers_version(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_version(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
version command must imply architecture, lock, no-report, quiet and unsafe
|
version command must imply architecture, lock, report, quiet and unsafe
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["version"])
|
args = parser.parse_args(["version"])
|
||||||
assert args.architecture == [""]
|
assert args.architecture == [""]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.quiet
|
assert args.quiet
|
||||||
assert args.unsafe
|
assert args.unsafe
|
||||||
|
|
||||||
@ -702,12 +702,12 @@ def test_subparsers_version_architecture(parser: argparse.ArgumentParser) -> Non
|
|||||||
|
|
||||||
def test_subparsers_web(parser: argparse.ArgumentParser) -> None:
|
def test_subparsers_web(parser: argparse.ArgumentParser) -> None:
|
||||||
"""
|
"""
|
||||||
web command must imply lock, no_report and parser
|
web command must imply lock, report and parser
|
||||||
"""
|
"""
|
||||||
args = parser.parse_args(["-a", "x86_64", "web"])
|
args = parser.parse_args(["-a", "x86_64", "web"])
|
||||||
assert args.architecture == ["x86_64"]
|
assert args.architecture == ["x86_64"]
|
||||||
assert args.lock is None
|
assert args.lock is None
|
||||||
assert args.no_report
|
assert not args.report
|
||||||
assert args.parser is not None and args.parser()
|
assert args.parser is not None and args.parser()
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,11 +3,11 @@ import tempfile
|
|||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
from unittest import mock
|
from unittest.mock import call as MockCall
|
||||||
|
|
||||||
from ahriman import version
|
from ahriman import version
|
||||||
from ahriman.application.lock import Lock
|
from ahriman.application.lock import Lock
|
||||||
from ahriman.core.exceptions import DuplicateRun, UnsafeRun
|
from ahriman.core.exceptions import DuplicateRunError, UnsafeRunError
|
||||||
from ahriman.models.build_status import BuildStatus, BuildStatusEnum
|
from ahriman.models.build_status import BuildStatus, BuildStatusEnum
|
||||||
from ahriman.models.internal_status import InternalStatus
|
from ahriman.models.internal_status import InternalStatus
|
||||||
|
|
||||||
@ -28,10 +28,7 @@ def test_enter(lock: Lock, mocker: MockerFixture) -> None:
|
|||||||
clear_mock.assert_called_once_with()
|
clear_mock.assert_called_once_with()
|
||||||
create_mock.assert_called_once_with()
|
create_mock.assert_called_once_with()
|
||||||
check_version_mock.assert_called_once_with()
|
check_version_mock.assert_called_once_with()
|
||||||
update_status_mock.assert_has_calls([
|
update_status_mock.assert_has_calls([MockCall(BuildStatusEnum.Building), MockCall(BuildStatusEnum.Success)])
|
||||||
mock.call(BuildStatusEnum.Building),
|
|
||||||
mock.call(BuildStatusEnum.Success)
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
def test_exit_with_exception(lock: Lock, mocker: MockerFixture) -> None:
|
def test_exit_with_exception(lock: Lock, mocker: MockerFixture) -> None:
|
||||||
@ -46,10 +43,7 @@ def test_exit_with_exception(lock: Lock, mocker: MockerFixture) -> None:
|
|||||||
with pytest.raises(Exception):
|
with pytest.raises(Exception):
|
||||||
with lock:
|
with lock:
|
||||||
raise Exception()
|
raise Exception()
|
||||||
update_status_mock.assert_has_calls([
|
update_status_mock.assert_has_calls([MockCall(BuildStatusEnum.Building), MockCall(BuildStatusEnum.Failed)])
|
||||||
mock.call(BuildStatusEnum.Building),
|
|
||||||
mock.call(BuildStatusEnum.Failed)
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
def test_check_version(lock: Lock, mocker: MockerFixture) -> None:
|
def test_check_version(lock: Lock, mocker: MockerFixture) -> None:
|
||||||
@ -82,15 +76,15 @@ def test_check_user(lock: Lock, mocker: MockerFixture) -> None:
|
|||||||
"""
|
"""
|
||||||
check_user_patch = mocker.patch("ahriman.application.lock.check_user")
|
check_user_patch = mocker.patch("ahriman.application.lock.check_user")
|
||||||
lock.check_user()
|
lock.check_user()
|
||||||
check_user_patch.assert_called_once_with(lock.paths, False)
|
check_user_patch.assert_called_once_with(lock.paths, unsafe=False)
|
||||||
|
|
||||||
|
|
||||||
def test_check_user_exception(lock: Lock, mocker: MockerFixture) -> None:
|
def test_check_user_exception(lock: Lock, mocker: MockerFixture) -> None:
|
||||||
"""
|
"""
|
||||||
must raise exception if user differs
|
must raise exception if user differs
|
||||||
"""
|
"""
|
||||||
mocker.patch("ahriman.application.lock.check_user", side_effect=UnsafeRun(0, 1))
|
mocker.patch("ahriman.application.lock.check_user", side_effect=UnsafeRunError(0, 1))
|
||||||
with pytest.raises(UnsafeRun):
|
with pytest.raises(UnsafeRunError):
|
||||||
lock.check_user()
|
lock.check_user()
|
||||||
|
|
||||||
|
|
||||||
@ -148,7 +142,7 @@ def test_create_exception(lock: Lock) -> None:
|
|||||||
lock.path = Path(tempfile.mktemp()) # nosec
|
lock.path = Path(tempfile.mktemp()) # nosec
|
||||||
lock.path.touch()
|
lock.path.touch()
|
||||||
|
|
||||||
with pytest.raises(DuplicateRun):
|
with pytest.raises(DuplicateRunError):
|
||||||
lock.create()
|
lock.create()
|
||||||
lock.path.unlink()
|
lock.path.unlink()
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ from unittest.mock import MagicMock
|
|||||||
|
|
||||||
from ahriman.core.alpm.pacman import Pacman
|
from ahriman.core.alpm.pacman import Pacman
|
||||||
from ahriman.core.alpm.remote import AUR
|
from ahriman.core.alpm.remote import AUR
|
||||||
from ahriman.core.exceptions import InvalidPackageInfo
|
from ahriman.core.exceptions import PackageInfoError, UnknownPackageError
|
||||||
from ahriman.models.aur_package import AURPackage
|
from ahriman.models.aur_package import AURPackage
|
||||||
|
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ def test_parse_response_error(resource_path_root: Path) -> None:
|
|||||||
must raise exception on invalid response
|
must raise exception on invalid response
|
||||||
"""
|
"""
|
||||||
response = (resource_path_root / "models" / "aur_error").read_text()
|
response = (resource_path_root / "models" / "aur_error").read_text()
|
||||||
with pytest.raises(InvalidPackageInfo, match="Incorrect request type specified."):
|
with pytest.raises(PackageInfoError, match="Incorrect request type specified."):
|
||||||
AUR.parse_response(json.loads(response))
|
AUR.parse_response(json.loads(response))
|
||||||
|
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ def test_parse_response_unknown_error() -> None:
|
|||||||
"""
|
"""
|
||||||
must raise exception on invalid response with empty error message
|
must raise exception on invalid response with empty error message
|
||||||
"""
|
"""
|
||||||
with pytest.raises(InvalidPackageInfo, match="Unknown API error"):
|
with pytest.raises(PackageInfoError, match="Unknown API error"):
|
||||||
AUR.parse_response({"type": "error"})
|
AUR.parse_response({"type": "error"})
|
||||||
|
|
||||||
|
|
||||||
@ -142,6 +142,16 @@ def test_package_info(aur: AUR, aur_package_ahriman: AURPackage, pacman: Pacman,
|
|||||||
request_mock.assert_called_once_with("info", aur_package_ahriman.name)
|
request_mock.assert_called_once_with("info", aur_package_ahriman.name)
|
||||||
|
|
||||||
|
|
||||||
|
def test_package_info_not_found(aur: AUR, aur_package_ahriman: AURPackage, pacman: Pacman,
|
||||||
|
mocker: MockerFixture) -> None:
|
||||||
|
"""
|
||||||
|
must raise UnknownPackage exception in case if no package was found
|
||||||
|
"""
|
||||||
|
mocker.patch("ahriman.core.alpm.remote.AUR.make_request", return_value=[])
|
||||||
|
with pytest.raises(UnknownPackageError, match=aur_package_ahriman.name):
|
||||||
|
assert aur.package_info(aur_package_ahriman.name, pacman=pacman)
|
||||||
|
|
||||||
|
|
||||||
def test_package_search(aur: AUR, aur_package_ahriman: AURPackage, pacman: Pacman, mocker: MockerFixture) -> None:
|
def test_package_search(aur: AUR, aur_package_ahriman: AURPackage, pacman: Pacman, mocker: MockerFixture) -> None:
|
||||||
"""
|
"""
|
||||||
must make request for search
|
must make request for search
|
||||||
|
@ -8,7 +8,7 @@ from unittest.mock import MagicMock
|
|||||||
|
|
||||||
from ahriman.core.alpm.pacman import Pacman
|
from ahriman.core.alpm.pacman import Pacman
|
||||||
from ahriman.core.alpm.remote import Official
|
from ahriman.core.alpm.remote import Official
|
||||||
from ahriman.core.exceptions import InvalidPackageInfo
|
from ahriman.core.exceptions import PackageInfoError, UnknownPackageError
|
||||||
from ahriman.models.aur_package import AURPackage
|
from ahriman.models.aur_package import AURPackage
|
||||||
|
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ def test_parse_response_unknown_error(resource_path_root: Path) -> None:
|
|||||||
must raise exception on invalid response with empty error message
|
must raise exception on invalid response with empty error message
|
||||||
"""
|
"""
|
||||||
response = (resource_path_root / "models" / "official_error").read_text()
|
response = (resource_path_root / "models" / "official_error").read_text()
|
||||||
with pytest.raises(InvalidPackageInfo, match="API validation error"):
|
with pytest.raises(PackageInfoError, match="API validation error"):
|
||||||
Official.parse_response(json.loads(response))
|
Official.parse_response(json.loads(response))
|
||||||
|
|
||||||
|
|
||||||
@ -119,6 +119,16 @@ def test_package_info(official: Official, aur_package_akonadi: AURPackage, pacma
|
|||||||
request_mock.assert_called_once_with(aur_package_akonadi.name, by="name")
|
request_mock.assert_called_once_with(aur_package_akonadi.name, by="name")
|
||||||
|
|
||||||
|
|
||||||
|
def test_package_info_not_found(official: Official, aur_package_ahriman: AURPackage, pacman: Pacman,
|
||||||
|
mocker: MockerFixture) -> None:
|
||||||
|
"""
|
||||||
|
must raise UnknownPackage exception in case if no package was found
|
||||||
|
"""
|
||||||
|
mocker.patch("ahriman.core.alpm.remote.Official.make_request", return_value=[])
|
||||||
|
with pytest.raises(UnknownPackageError, match=aur_package_ahriman.name):
|
||||||
|
assert official.package_info(aur_package_ahriman.name, pacman=pacman)
|
||||||
|
|
||||||
|
|
||||||
def test_package_search(official: Official, aur_package_akonadi: AURPackage, pacman: Pacman,
|
def test_package_search(official: Official, aur_package_akonadi: AURPackage, pacman: Pacman,
|
||||||
mocker: MockerFixture) -> None:
|
mocker: MockerFixture) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
|
|
||||||
from ahriman.core.alpm.pacman import Pacman
|
from ahriman.core.alpm.pacman import Pacman
|
||||||
from ahriman.core.alpm.remote import OfficialSyncdb
|
from ahriman.core.alpm.remote import OfficialSyncdb
|
||||||
|
from ahriman.core.exceptions import UnknownPackageError
|
||||||
from ahriman.models.aur_package import AURPackage
|
from ahriman.models.aur_package import AURPackage
|
||||||
|
|
||||||
|
|
||||||
def test_package_info(official_syncdb: OfficialSyncdb, aur_package_akonadi: AURPackage,
|
def test_package_info(official_syncdb: OfficialSyncdb, aur_package_akonadi: AURPackage, pacman: Pacman,
|
||||||
pacman: Pacman, mocker: MockerFixture) -> None:
|
mocker: MockerFixture) -> None:
|
||||||
"""
|
"""
|
||||||
must return package info from the database
|
must return package info from the database
|
||||||
"""
|
"""
|
||||||
@ -16,3 +19,13 @@ def test_package_info(official_syncdb: OfficialSyncdb, aur_package_akonadi: AURP
|
|||||||
package = official_syncdb.package_info(aur_package_akonadi.name, pacman=pacman)
|
package = official_syncdb.package_info(aur_package_akonadi.name, pacman=pacman)
|
||||||
get_mock.assert_called_once_with(aur_package_akonadi.name)
|
get_mock.assert_called_once_with(aur_package_akonadi.name)
|
||||||
assert package == aur_package_akonadi
|
assert package == aur_package_akonadi
|
||||||
|
|
||||||
|
|
||||||
|
def test_package_info_not_found(official_syncdb: OfficialSyncdb, aur_package_akonadi: AURPackage, pacman: Pacman,
|
||||||
|
mocker: MockerFixture) -> None:
|
||||||
|
"""
|
||||||
|
must raise UnknownPackage exception in case if no package was found
|
||||||
|
"""
|
||||||
|
mocker.patch("ahriman.core.alpm.pacman.Pacman.package_get", return_value=[])
|
||||||
|
with pytest.raises(UnknownPackageError, match=aur_package_akonadi.name):
|
||||||
|
assert official_syncdb.package_info(aur_package_akonadi.name, pacman=pacman)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
from unittest import mock
|
from unittest.mock import call as MockCall
|
||||||
|
|
||||||
from ahriman.core.alpm.pacman import Pacman
|
from ahriman.core.alpm.pacman import Pacman
|
||||||
from ahriman.core.alpm.remote import Remote
|
from ahriman.core.alpm.remote import Remote
|
||||||
@ -25,7 +25,7 @@ def test_multisearch(aur_package_ahriman: AURPackage, pacman: Pacman, mocker: Mo
|
|||||||
search_mock = mocker.patch("ahriman.core.alpm.remote.Remote.search", return_value=[aur_package_ahriman])
|
search_mock = mocker.patch("ahriman.core.alpm.remote.Remote.search", return_value=[aur_package_ahriman])
|
||||||
|
|
||||||
assert Remote.multisearch(*terms, pacman=pacman) == [aur_package_ahriman]
|
assert Remote.multisearch(*terms, pacman=pacman) == [aur_package_ahriman]
|
||||||
search_mock.assert_has_calls([mock.call("ahriman", pacman=pacman), mock.call("cool", pacman=pacman)])
|
search_mock.assert_has_calls([MockCall("ahriman", pacman=pacman), MockCall("cool", pacman=pacman)])
|
||||||
|
|
||||||
|
|
||||||
def test_multisearch_empty(pacman: Pacman, mocker: MockerFixture) -> None:
|
def test_multisearch_empty(pacman: Pacman, mocker: MockerFixture) -> None:
|
||||||
|
@ -4,7 +4,7 @@ import pytest
|
|||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
|
|
||||||
from ahriman.core.auth import OAuth
|
from ahriman.core.auth import OAuth
|
||||||
from ahriman.core.exceptions import InvalidOption
|
from ahriman.core.exceptions import OptionError
|
||||||
|
|
||||||
|
|
||||||
def test_auth_control(oauth: OAuth) -> None:
|
def test_auth_control(oauth: OAuth) -> None:
|
||||||
@ -28,7 +28,7 @@ def test_get_provider_not_a_type() -> None:
|
|||||||
"""
|
"""
|
||||||
must raise an exception if attribute is not a type
|
must raise an exception if attribute is not a type
|
||||||
"""
|
"""
|
||||||
with pytest.raises(InvalidOption):
|
with pytest.raises(OptionError):
|
||||||
OAuth.get_provider("__version__")
|
OAuth.get_provider("__version__")
|
||||||
|
|
||||||
|
|
||||||
@ -36,9 +36,9 @@ def test_get_provider_invalid_type() -> None:
|
|||||||
"""
|
"""
|
||||||
must raise an exception if attribute is not an OAuth2 client
|
must raise an exception if attribute is not an OAuth2 client
|
||||||
"""
|
"""
|
||||||
with pytest.raises(InvalidOption):
|
with pytest.raises(OptionError):
|
||||||
OAuth.get_provider("User")
|
OAuth.get_provider("User")
|
||||||
with pytest.raises(InvalidOption):
|
with pytest.raises(OptionError):
|
||||||
OAuth.get_provider("OAuth1Client")
|
OAuth.get_provider("OAuth1Client")
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ import pytest
|
|||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
from unittest import mock
|
from unittest.mock import call as MockCall
|
||||||
|
|
||||||
from ahriman.core.build_tools.sources import Sources
|
from ahriman.core.build_tools.sources import Sources
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
@ -55,12 +55,12 @@ def test_fetch_existing(remote_source: RemoteSource, mocker: MockerFixture) -> N
|
|||||||
local = Path("local")
|
local = Path("local")
|
||||||
Sources.fetch(local, remote_source)
|
Sources.fetch(local, remote_source)
|
||||||
check_output_mock.assert_has_calls([
|
check_output_mock.assert_has_calls([
|
||||||
mock.call("git", "fetch", "origin", remote_source.branch,
|
MockCall("git", "fetch", "origin", remote_source.branch,
|
||||||
exception=None, cwd=local, logger=pytest.helpers.anyvar(int)),
|
exception=None, cwd=local, logger=pytest.helpers.anyvar(int)),
|
||||||
mock.call("git", "checkout", "--force", remote_source.branch,
|
MockCall("git", "checkout", "--force", remote_source.branch,
|
||||||
exception=None, cwd=local, logger=pytest.helpers.anyvar(int)),
|
exception=None, cwd=local, logger=pytest.helpers.anyvar(int)),
|
||||||
mock.call("git", "reset", "--hard", f"origin/{remote_source.branch}",
|
MockCall("git", "reset", "--hard", f"origin/{remote_source.branch}",
|
||||||
exception=None, cwd=local, logger=pytest.helpers.anyvar(int))
|
exception=None, cwd=local, logger=pytest.helpers.anyvar(int))
|
||||||
])
|
])
|
||||||
move_mock.assert_called_once_with(local.resolve(), local)
|
move_mock.assert_called_once_with(local.resolve(), local)
|
||||||
|
|
||||||
@ -76,12 +76,12 @@ def test_fetch_new(remote_source: RemoteSource, mocker: MockerFixture) -> None:
|
|||||||
local = Path("local")
|
local = Path("local")
|
||||||
Sources.fetch(local, remote_source)
|
Sources.fetch(local, remote_source)
|
||||||
check_output_mock.assert_has_calls([
|
check_output_mock.assert_has_calls([
|
||||||
mock.call("git", "clone", "--branch", remote_source.branch, "--single-branch",
|
MockCall("git", "clone", "--branch", remote_source.branch, "--single-branch",
|
||||||
remote_source.git_url, str(local), exception=None, cwd=local, logger=pytest.helpers.anyvar(int)),
|
remote_source.git_url, str(local), exception=None, cwd=local, logger=pytest.helpers.anyvar(int)),
|
||||||
mock.call("git", "checkout", "--force", remote_source.branch,
|
MockCall("git", "checkout", "--force", remote_source.branch,
|
||||||
exception=None, cwd=local, logger=pytest.helpers.anyvar(int)),
|
exception=None, cwd=local, logger=pytest.helpers.anyvar(int)),
|
||||||
mock.call("git", "reset", "--hard", f"origin/{remote_source.branch}",
|
MockCall("git", "reset", "--hard", f"origin/{remote_source.branch}",
|
||||||
exception=None, cwd=local, logger=pytest.helpers.anyvar(int))
|
exception=None, cwd=local, logger=pytest.helpers.anyvar(int))
|
||||||
])
|
])
|
||||||
move_mock.assert_called_once_with(local.resolve(), local)
|
move_mock.assert_called_once_with(local.resolve(), local)
|
||||||
|
|
||||||
@ -97,10 +97,10 @@ def test_fetch_new_without_remote(mocker: MockerFixture) -> None:
|
|||||||
local = Path("local")
|
local = Path("local")
|
||||||
Sources.fetch(local, None)
|
Sources.fetch(local, None)
|
||||||
check_output_mock.assert_has_calls([
|
check_output_mock.assert_has_calls([
|
||||||
mock.call("git", "checkout", "--force", Sources.DEFAULT_BRANCH,
|
MockCall("git", "checkout", "--force", Sources.DEFAULT_BRANCH,
|
||||||
exception=None, cwd=local, logger=pytest.helpers.anyvar(int)),
|
exception=None, cwd=local, logger=pytest.helpers.anyvar(int)),
|
||||||
mock.call("git", "reset", "--hard", f"origin/{Sources.DEFAULT_BRANCH}",
|
MockCall("git", "reset", "--hard", f"origin/{Sources.DEFAULT_BRANCH}",
|
||||||
exception=None, cwd=local, logger=pytest.helpers.anyvar(int))
|
exception=None, cwd=local, logger=pytest.helpers.anyvar(int))
|
||||||
])
|
])
|
||||||
move_mock.assert_called_once_with(local.resolve(), local)
|
move_mock.assert_called_once_with(local.resolve(), local)
|
||||||
|
|
||||||
@ -237,7 +237,7 @@ def test_add(sources: Sources, mocker: MockerFixture) -> None:
|
|||||||
|
|
||||||
local = Path("local")
|
local = Path("local")
|
||||||
sources.add(local, "pattern1", "pattern2")
|
sources.add(local, "pattern1", "pattern2")
|
||||||
glob_mock.assert_has_calls([mock.call("pattern1"), mock.call("pattern2")])
|
glob_mock.assert_has_calls([MockCall("pattern1"), MockCall("pattern2")])
|
||||||
check_output_mock.assert_called_once_with(
|
check_output_mock.assert_called_once_with(
|
||||||
"git", "add", "--intent-to-add", "1", "2", "1", "2",
|
"git", "add", "--intent-to-add", "1", "2", "1", "2",
|
||||||
exception=None, cwd=local, logger=pytest.helpers.anyvar(int))
|
exception=None, cwd=local, logger=pytest.helpers.anyvar(int))
|
||||||
|
@ -2,7 +2,7 @@ import pytest
|
|||||||
|
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
from sqlite3 import Connection
|
from sqlite3 import Connection
|
||||||
from unittest import mock
|
from unittest.mock import call as MockCall
|
||||||
|
|
||||||
from ahriman.core.database.data import migrate_package_statuses
|
from ahriman.core.database.data import migrate_package_statuses
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
@ -22,11 +22,11 @@ def test_migrate_package_statuses(connection: Connection, package_ahriman: Packa
|
|||||||
|
|
||||||
migrate_package_statuses(connection, repository_paths)
|
migrate_package_statuses(connection, repository_paths)
|
||||||
connection.execute.assert_has_calls([
|
connection.execute.assert_has_calls([
|
||||||
mock.call(pytest.helpers.anyvar(str, strict=True), pytest.helpers.anyvar(int)),
|
MockCall(pytest.helpers.anyvar(str, strict=True), pytest.helpers.anyvar(int)),
|
||||||
mock.call(pytest.helpers.anyvar(str, strict=True), pytest.helpers.anyvar(int)),
|
MockCall(pytest.helpers.anyvar(str, strict=True), pytest.helpers.anyvar(int)),
|
||||||
])
|
])
|
||||||
connection.executemany.assert_has_calls([
|
connection.executemany.assert_has_calls([
|
||||||
mock.call(pytest.helpers.anyvar(str, strict=True), pytest.helpers.anyvar(int)),
|
MockCall(pytest.helpers.anyvar(str, strict=True), pytest.helpers.anyvar(int)),
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from sqlite3 import Connection
|
from sqlite3 import Connection
|
||||||
from unittest import mock
|
from unittest.mock import call as MockCall
|
||||||
|
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.database.data import migrate_users_data
|
from ahriman.core.database.data import migrate_users_data
|
||||||
@ -16,6 +16,6 @@ def test_migrate_users_data(connection: Connection, configuration: Configuration
|
|||||||
|
|
||||||
migrate_users_data(connection, configuration)
|
migrate_users_data(connection, configuration)
|
||||||
connection.execute.assert_has_calls([
|
connection.execute.assert_has_calls([
|
||||||
mock.call(pytest.helpers.anyvar(str, strict=True), pytest.helpers.anyvar(int)),
|
MockCall(pytest.helpers.anyvar(str, strict=True), pytest.helpers.anyvar(int)),
|
||||||
mock.call(pytest.helpers.anyvar(str, strict=True), pytest.helpers.anyvar(int)),
|
MockCall(pytest.helpers.anyvar(str, strict=True), pytest.helpers.anyvar(int)),
|
||||||
])
|
])
|
||||||
|
@ -2,8 +2,7 @@ import pytest
|
|||||||
|
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
from sqlite3 import Connection
|
from sqlite3 import Connection
|
||||||
from unittest import mock
|
from unittest.mock import MagicMock, call as MockCall
|
||||||
from unittest.mock import MagicMock
|
|
||||||
|
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.database.migrations import Migrations
|
from ahriman.core.database.migrations import Migrations
|
||||||
@ -52,10 +51,10 @@ def test_run(migrations: Migrations, mocker: MockerFixture) -> None:
|
|||||||
migrations.run()
|
migrations.run()
|
||||||
validate_mock.assert_called_once_with()
|
validate_mock.assert_called_once_with()
|
||||||
cursor.execute.assert_has_calls([
|
cursor.execute.assert_has_calls([
|
||||||
mock.call("begin exclusive"),
|
MockCall("begin exclusive"),
|
||||||
mock.call("select 1"),
|
MockCall("select 1"),
|
||||||
mock.call("pragma user_version = 1"),
|
MockCall("pragma user_version = 1"),
|
||||||
mock.call("commit"),
|
MockCall("commit"),
|
||||||
])
|
])
|
||||||
cursor.close.assert_called_once_with()
|
cursor.close.assert_called_once_with()
|
||||||
migrate_data_mock.assert_called_once_with(
|
migrate_data_mock.assert_called_once_with(
|
||||||
@ -77,8 +76,8 @@ def test_run_migration_exception(migrations: Migrations, mocker: MockerFixture)
|
|||||||
with pytest.raises(Exception):
|
with pytest.raises(Exception):
|
||||||
migrations.run()
|
migrations.run()
|
||||||
cursor.execute.assert_has_calls([
|
cursor.execute.assert_has_calls([
|
||||||
mock.call("begin exclusive"),
|
MockCall("begin exclusive"),
|
||||||
mock.call("rollback"),
|
MockCall("rollback"),
|
||||||
])
|
])
|
||||||
cursor.close.assert_called_once_with()
|
cursor.close.assert_called_once_with()
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ import pytest
|
|||||||
|
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
from sqlite3 import Connection
|
from sqlite3 import Connection
|
||||||
from unittest import mock
|
from unittest.mock import call as MockCall
|
||||||
|
|
||||||
from ahriman.core.database import SQLite
|
from ahriman.core.database import SQLite
|
||||||
from ahriman.models.build_status import BuildStatus, BuildStatusEnum
|
from ahriman.models.build_status import BuildStatus, BuildStatusEnum
|
||||||
@ -17,8 +17,8 @@ def test_package_remove_package_base(database: SQLite, connection: Connection) -
|
|||||||
"""
|
"""
|
||||||
database._package_remove_package_base(connection, "package")
|
database._package_remove_package_base(connection, "package")
|
||||||
connection.execute.assert_has_calls([
|
connection.execute.assert_has_calls([
|
||||||
mock.call(pytest.helpers.anyvar(str, strict=True), {"package_base": "package"}),
|
MockCall(pytest.helpers.anyvar(str, strict=True), {"package_base": "package"}),
|
||||||
mock.call(pytest.helpers.anyvar(str, strict=True), {"package_base": "package"}),
|
MockCall(pytest.helpers.anyvar(str, strict=True), {"package_base": "package"}),
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,10 +2,10 @@ import pytest
|
|||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
from unittest import mock
|
from unittest.mock import call as MockCall
|
||||||
|
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.exceptions import GitRemoteFailed
|
from ahriman.core.exceptions import GitRemoteError
|
||||||
from ahriman.core.gitremote.remote_pull import RemotePull
|
from ahriman.core.gitremote.remote_pull import RemotePull
|
||||||
|
|
||||||
|
|
||||||
@ -39,12 +39,12 @@ def test_repo_copy(configuration: Configuration, mocker: MockerFixture) -> None:
|
|||||||
|
|
||||||
runner.repo_copy(Path("local"))
|
runner.repo_copy(Path("local"))
|
||||||
copytree_mock.assert_has_calls([
|
copytree_mock.assert_has_calls([
|
||||||
mock.call(Path("local") / "package1", configuration.repository_paths.cache_for("package1"), dirs_exist_ok=True),
|
MockCall(Path("local") / "package1", configuration.repository_paths.cache_for("package1"), dirs_exist_ok=True),
|
||||||
mock.call(Path("local") / "package3", configuration.repository_paths.cache_for("package3"), dirs_exist_ok=True),
|
MockCall(Path("local") / "package3", configuration.repository_paths.cache_for("package3"), dirs_exist_ok=True),
|
||||||
])
|
])
|
||||||
init_mock.assert_has_calls([
|
init_mock.assert_has_calls([
|
||||||
mock.call(configuration.repository_paths.cache_for("package1")),
|
MockCall(configuration.repository_paths.cache_for("package1")),
|
||||||
mock.call(configuration.repository_paths.cache_for("package3")),
|
MockCall(configuration.repository_paths.cache_for("package3")),
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
@ -66,5 +66,5 @@ def test_run_failed(configuration: Configuration, mocker: MockerFixture) -> None
|
|||||||
mocker.patch("ahriman.core.gitremote.remote_pull.RemotePull.repo_clone", side_effect=Exception())
|
mocker.patch("ahriman.core.gitremote.remote_pull.RemotePull.repo_clone", side_effect=Exception())
|
||||||
runner = RemotePull(configuration, "gitremote")
|
runner = RemotePull(configuration, "gitremote")
|
||||||
|
|
||||||
with pytest.raises(GitRemoteFailed):
|
with pytest.raises(GitRemoteError):
|
||||||
runner.run()
|
runner.run()
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user