|
|
|
|
|
import sys |
|
import time |
|
|
|
import apt_pkg |
|
import apt |
|
import apt.progress.base |
|
|
|
|
|
class TextProgress(apt.progress.base.OpProgress): |
|
|
|
def __init__(self): |
|
self.last = 0.0 |
|
|
|
def update(self, percent): |
|
if (self.last + 1.0) <= percent: |
|
sys.stdout.write("\rProgress: %i.2 " % (percent)) |
|
self.last = percent |
|
if percent >= 100: |
|
self.last = 0.0 |
|
|
|
def done(self): |
|
self.last = 0.0 |
|
print("\rDone ") |
|
|
|
|
|
class TextFetchProgress(apt.progress.base.AcquireProgress): |
|
|
|
def __init__(self): |
|
pass |
|
|
|
def start(self): |
|
pass |
|
|
|
def stop(self): |
|
pass |
|
|
|
def fail(self, item): |
|
print('fail', item) |
|
|
|
def fetch(self, item): |
|
print('fetch', item) |
|
|
|
def ims_hit(self, item): |
|
print('ims_hit', item) |
|
|
|
def pulse(self, owner): |
|
print("pulse: CPS: %s/s; Bytes: %s/%s; Item: %s/%s" % ( |
|
apt_pkg.size_to_str(self.current_cps), |
|
apt_pkg.size_to_str(self.current_bytes), |
|
apt_pkg.size_to_str(self.total_bytes), |
|
self.current_items, |
|
self.total_items)) |
|
return True |
|
|
|
def media_change(self, medium, drive): |
|
print("Please insert medium %s in drive %s" % (medium, drive)) |
|
sys.stdin.readline() |
|
|
|
|
|
|
|
class TextInstallProgress(apt.progress.base.InstallProgress): |
|
|
|
def __init__(self): |
|
apt.progress.base.InstallProgress.__init__(self) |
|
pass |
|
|
|
def start_update(self): |
|
print("start_update") |
|
|
|
def finish_update(self): |
|
print("finish_update") |
|
|
|
def status_change(self, pkg, percent, status): |
|
print("[%s] %s: %s" % (percent, pkg, status)) |
|
|
|
def update_interface(self): |
|
apt.progress.base.InstallProgress.update_interface(self) |
|
|
|
time.sleep(0.1) |
|
|
|
|
|
class TextCdromProgress(apt.progress.base.CdromProgress): |
|
|
|
def __init__(self): |
|
pass |
|
|
|
|
|
|
|
def update(self, text, step): |
|
|
|
if text != "": |
|
print("Update: %s %s" % (text.strip(), step)) |
|
|
|
def ask_cdrom_name(self): |
|
sys.stdout.write("Please enter cd-name: ") |
|
cd_name = sys.stdin.readline() |
|
return (True, cd_name.strip()) |
|
|
|
def change_cdrom(self): |
|
print("Please insert cdrom and press <ENTER>") |
|
answer = sys.stdin.readline() |
|
print(answer) |
|
return True |
|
|
|
|
|
if __name__ == "__main__": |
|
c = apt.Cache() |
|
pkg = c["3dchess"] |
|
if pkg.is_installed: |
|
pkg.mark_delete() |
|
else: |
|
pkg.mark_install() |
|
|
|
res = c.commit(TextFetchProgress(), TextInstallProgress()) |
|
|
|
print(res) |
|
|