Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if host.system_info.type == "freebsd":
return FreeBSDPackage
if host.system_info.type in ("openbsd", "netbsd"):
return OpenBSDPackage
if host.exists("dpkg-query"):
return DebianPackage
if host.exists("rpm"):
return RpmPackage
if host.exists("apk"):
return AlpinePackage
if host.system_info.distribution == "arch":
return ArchPackage
raise NotImplementedError
class DebianPackage(Package):
@property
def is_installed(self):
result = self.run_test("dpkg-query -f '${Status}' -W %s", self.name)
if result.rc == 1:
return False
out = result.stdout.strip().split()
installed_status = ["ok", "installed"]
return out[0] in ["install", "hold"] and out[1:3] == installed_status
@property
def release(self):
raise NotImplementedError
@property
def version(self):
@property
def release(self):
raise NotImplementedError
@property
def version(self):
out = self.check_output("dpkg-query -f '${Status} ${Version}' -W %s",
self.name)
splitted = out.split()
assert splitted[0].lower() in ('install', 'hold'), (
"The package %s is not installed, dpkg-query output: %s" % (
self.name, out))
return splitted[3]
class FreeBSDPackage(Package):
@property
def is_installed(self):
EX_UNAVAILABLE = 69
return self.run_expect(
[0, EX_UNAVAILABLE], "pkg query %%n %s", self.name).rc == 0
@property
def release(self):
raise NotImplementedError
@property
def version(self):
return self.check_output("pkg query %%v %s", self.name)
@property
def is_installed(self):
EX_UNAVAILABLE = 69
return self.run_expect(
[0, EX_UNAVAILABLE], "pkg query %%n %s", self.name).rc == 0
@property
def release(self):
raise NotImplementedError
@property
def version(self):
return self.check_output("pkg query %%v %s", self.name)
class OpenBSDPackage(Package):
@property
def is_installed(self):
return self.run_test("pkg_info -e %s", "%s-*" % (self.name,)).rc == 0
@property
def release(self):
raise NotImplementedError
@property
def version(self):
out = self.check_output("pkg_info -e %s", "%s-*" % (self.name,))
# OpenBSD: inst:zsh-5.0.5p0
# NetBSD: zsh-5.0.7nb1
return out.split(self.name + "-", 1)[1]
def is_installed(self):
return self.run_test("pkg_info -e %s", "%s-*" % (self.name,)).rc == 0
@property
def release(self):
raise NotImplementedError
@property
def version(self):
out = self.check_output("pkg_info -e %s", "%s-*" % (self.name,))
# OpenBSD: inst:zsh-5.0.5p0
# NetBSD: zsh-5.0.7nb1
return out.split(self.name + "-", 1)[1]
class RpmPackage(Package):
@property
def is_installed(self):
return self.run_test("rpm -q %s", self.name).rc == 0
@property
def version(self):
return self.check_output('rpm -q --queryformat="%%{VERSION}" %s',
self.name)
@property
def release(self):
return self.check_output('rpm -q --queryformat="%%{RELEASE}" %s',
self.name)
@property
def is_installed(self):
return self.run_test("apk -e info %s", self.name).rc == 0
@property
def version(self):
out = self.check_output("apk -e -v info %s", self.name).split("-")
return out[-2]
@property
def release(self):
out = self.check_output("apk -e -v info %s", self.name).split("-")
return out[-1]
class ArchPackage(Package):
@property
def is_installed(self):
return self.run_test("pacman -Q %s", self.name).rc == 0
@property
def version(self):
out = self.check_output("pacman -Q %s", self.name).split(" ")
return out[1]
@property
def release(self):
raise NotImplementedError
class ChocolateyPackage(Package):
@property
def is_installed(self):
return self.run_test("pacman -Q %s", self.name).rc == 0
@property
def version(self):
out = self.check_output("pacman -Q %s", self.name).split(" ")
return out[1]
@property
def release(self):
raise NotImplementedError
class ChocolateyPackage(Package):
@property
def is_installed(self):
return self.run_test("choco info -lo %s", self.name).rc == 0
@property
def version(self):
_, version = self.check_output(
"choco info -lo %s -r", self.name).split("|", 1)
return version
@property
def release(self):
raise NotImplementedError
@property
def is_installed(self):
return self.run_test("rpm -q %s", self.name).rc == 0
@property
def version(self):
return self.check_output('rpm -q --queryformat="%%{VERSION}" %s',
self.name)
@property
def release(self):
return self.check_output('rpm -q --queryformat="%%{RELEASE}" %s',
self.name)
class AlpinePackage(Package):
@property
def is_installed(self):
return self.run_test("apk -e info %s", self.name).rc == 0
@property
def version(self):
out = self.check_output("apk -e -v info %s", self.name).split("-")
return out[-2]
@property
def release(self):
out = self.check_output("apk -e -v info %s", self.name).split("-")
return out[-1]
def __init__(self, name):
self.name = name
super(Package, self).__init__()