#!/usr/bin/python3 import gi gi.require_version('PackageKitGlib', '1.0') from gi.repository import GLib, PackageKitGlib import sys from debug import * # progress callback # http://www.packagekit.org/gtk-doc/PkProgress.html def progress(progress, type, user_data): if (type.value_name == "PK_PROGRESS_TYPE_PERCENTAGE" and progress.props.package is not None): sys.stdout.write ("P%d\n" % progress.props.percentage) sys.stdout.flush () else: sys.stdout.write ("P%d\n" % -10) sys.stdout.flush () set_debugging (True) try: package = sys.argv[1] except: debugprint("Missing package name to install.") sys.exit(1) try: repo = sys.argv[2] except: debugprint("Missing name of repo.") sys.exit(1) try: repo_gpg_id = sys.argv[3] except: repo_gpg_id = None # get PackageKit client pk = PackageKitGlib.Client() refresh_cache_needed = False # install repository key if repo_gpg_id: debugprint("Signature key supplied") debugprint("pk.install_signature") try: res = pk.install_signature(PackageKitGlib.SigTypeEnum.GPG, repo_gpg_id, '', None, progress, None) refresh_cache_needed = True debugprint("pk.install_signature succeeded") except GLib.GError: debugprint("pk.install_signature failed") sys.exit(1) if res.get_exit_code() != PackageKitGlib.ExitEnum.SUCCESS: debugprint("pk.install_signature errored") sys.exit(1) # check if we already have the package installed or available debugprint("pk.resolve") try: res = pk.resolve(PackageKitGlib.FilterEnum.NONE, [package], None, progress, None) repo_enable_needed = False debugprint("pk.resolve succeeded") except GLib.GError: repo_enable_needed = True debugprint("pk.resolve failed") package_ids = res.get_package_array() if len(package_ids) <= 0: debugprint("res.get_package_array() failed") repo_enable_needed = True if repo_enable_needed: # Cannot resolve, so we need to install the repo # add repository; see # http://www.packagekit.org/gtk-doc/PackageKit-pk-client-sync.html#pk-client-repo-enable debugprint("pk.repo_enable") try: res = pk.repo_enable(repo, True, None, progress, None) refresh_cache_needed = True debugprint("pk.repo_enable succeeded") except GLib.GError: debugprint("pk.repo_enable failed") sys.exit(1) if res.get_exit_code() != PackageKitGlib.ExitEnum.SUCCESS: debugprint("pk.repo_enable errored") sys.exit(1) if refresh_cache_needed: # download/update the indexes debugprint("pk.refresh_cache") try: res = pk.refresh_cache(False, None, progress, None) debugprint("pk.refresh_cache succeeded") except GLib.GError: debugprint("pk.refresh_cache failed") if res.get_exit_code() != PackageKitGlib.ExitEnum.SUCCESS: debugprint("pk.refresh_cache errored") # map package name to PackageKit ID; do not print progress here, it's fast debugprint("pk.resolve") try: res = pk.resolve(PackageKitGlib.FilterEnum.NONE, [package], None, progress, None) debugprint("pk.resolve succeeded") except GLib.GError: debugprint("pk.resolve failed") sys.exit(1) if res.get_exit_code() != PackageKitGlib.ExitEnum.SUCCESS: debugprint("pk.resolve errored") sys.exit(1) package_ids = res.get_package_array() if len(package_ids) <= 0: debugprint("res.get_package_array() failed") sys.exit(1) package_id = package_ids[0].get_id() debugprint("package_id: %s" % package_id) # install the first match, unless already installed if package_ids[0].get_info() & PackageKitGlib.InfoEnum.INSTALLED == 0: debugprint("package not installed") debugprint("pk.install_packages") # install package if repo_gpg_id: debugprint("Signature key supplied") repo_gpg_id_supplied = True else: debugprint("Signature key not supplied") repo_gpg_id_supplied = False try: res = pk.install_packages(repo_gpg_id_supplied, [package_id], None, progress, None) debugprint("pk.install_packages succeeded") except GLib.GError: debugprint("pk.install_packages failed, retrying with modified package ID") # See aptdaemon Ubuntu bug #1397750. try: # Remove last element of the package ID, after the last ";" package_id_mod = package_id[:package_id.rfind(";")+1] res = pk.install_packages(repo_gpg_id_supplied, [package_id_mod], None, progress, None) debugprint("pk.install_packages succeeded") except GLib.GError: debugprint("pk.install_packages failed") sys.exit(1) if res.get_exit_code() != PackageKitGlib.ExitEnum.SUCCESS: debugprint("pk.install_packages errored") sys.exit(1) debugprint("Package successfully installed") # If we reach this point, the requested package is on the system, either # because we have installed it now or because it was already there # Return the list of files contained in the package try: res = pk.get_files([package_id], None, progress, None) except GLib.GError: pass files = res.get_files_array() if files: for f in files[0].get_property('files'): print(f) # Tell the caller that we are done print("done")
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
icons | Folder | 0755 |
|
|
troubleshoot | Folder | 0755 |
|
|
ui | Folder | 0755 |
|
|
xml | Folder | 0755 |
|
|
HIG.py | File | 57 B | 0644 |
|
OpenPrintingRequest.py | File | 6.81 KB | 0644 |
|
PhysicalDevice.py | File | 16.19 KB | 0644 |
|
SearchCriterion.py | File | 1.32 KB | 0644 |
|
ToolbarSearchEntry.py | File | 6.96 KB | 0644 |
|
applet.py | File | 16.39 KB | 0755 |
|
asyncconn.py | File | 9.6 KB | 0644 |
|
asyncipp.py | File | 26.13 KB | 0644 |
|
asyncpk1.py | File | 25.85 KB | 0644 |
|
authconn.py | File | 18.85 KB | 0644 |
|
check-device-ids.py | File | 11.16 KB | 0755 |
|
config.py | File | 1.19 KB | 0644 |
|
cupspk.py | File | 27.48 KB | 0644 |
|
debug.py | File | 1.62 KB | 0644 |
|
dnssdresolve.py | File | 4.66 KB | 0644 |
|
errordialogs.py | File | 3.12 KB | 0644 |
|
firewallsettings.py | File | 9.38 KB | 0644 |
|
gtkinklevel.py | File | 4.71 KB | 0644 |
|
gui.py | File | 2.13 KB | 0644 |
|
install-printerdriver.py | File | 5.34 KB | 0755 |
|
installpackage.py | File | 2.2 KB | 0644 |
|
jobviewer.py | File | 97.36 KB | 0644 |
|
killtimer.py | File | 2.08 KB | 0644 |
|
monitor.py | File | 32.36 KB | 0644 |
|
newprinter.py | File | 178.53 KB | 0644 |
|
options.py | File | 18.97 KB | 0644 |
|
optionwidgets.py | File | 8.89 KB | 0644 |
|
ppdcache.py | File | 7.57 KB | 0644 |
|
ppdippstr.py | File | 16.19 KB | 0644 |
|
ppdsloader.py | File | 10.98 KB | 0644 |
|
printerproperties.py | File | 78.11 KB | 0644 |
|
probe_printer.py | File | 15.82 KB | 0644 |
|
pysmb.py | File | 6.81 KB | 0755 |
|
scp-dbus-service.py | File | 22.22 KB | 0755 |
|
serversettings.py | File | 21.83 KB | 0644 |
|
smburi.py | File | 3.22 KB | 0644 |
|
statereason.py | File | 6.83 KB | 0644 |
|
system-config-printer.py | File | 86.21 KB | 0755 |
|
timedops.py | File | 8.21 KB | 0644 |
|
userdefault.py | File | 6.2 KB | 0644 |
|