def __init__(self, packageName, version, host): self.packageName = packageName self.version = version self.host = host # This will be filled in properly by checkDescFile() or # getDescFile(); in the meantime, set a placeholder. self.package = PackageInfo(host, packageName, version) # Set true when the package has finished downloading, # either successfully or unsuccessfully. self.done = False # Set true or false when self.done has been set. self.success = False # Set true when the packageFinished() callback has been # delivered. self.notified = False # These are used to ensure the callbacks only get # delivered once for a particular package. self.calledPackageStarted = False self.calledPackageFinished = False # This is the amount of stuff we have to process to # install this package, and the amount of stuff we have # processed so far. "Stuff" includes bytes downloaded, # bytes uncompressed, and bytes extracted; and each of # which is weighted differently into one grand total. So, # the total doesn't really represent bytes; it's a # unitless number, which means something only as a ratio # to other packages. Filled in by checkDescFile() or # getDescFile(). self.downloadEffort = 0 # Similar, but this is the theoretical effort if the # package were already downloaded. self.prevDownloadedEffort = 0
def __makePackage(self, name, platform, version, solo, perPlatform): """ Creates a new PackageInfo entry for the given name, version, and platform. If there is already a matching PackageInfo, returns it. """ if not platform: platform = None platforms = self.packages.setdefault((name, version or ""), {}) package = platforms.get("", None) if not package: package = PackageInfo(self, name, version, platform = platform, solo = solo, asMirror = self.asMirror, perPlatform = perPlatform) platforms[platform or ""] = package return package
def __makePackage(self, name, platform, version, solo): """ Creates a new PackageInfo entry for the given name, version, and platform. If there is already a matching PackageInfo, returns it. """ if not platform: # Ensure that we're on the same page with non-specified # platforms. We always use None, not empty string. platform = None platforms = self.packages.setdefault((name, version), {}) package = platforms.get(platform, None) if not package: package = PackageInfo(self, name, version, platform = platform, solo = solo, asMirror = self.asMirror) platforms[platform] = package return package
def __init__(self, packageName, version, host): self.packageName = packageName self.version = version self.host = host # This will be filled in properly by checkDescFile() or # getDescFile(); in the meantime, set a placeholder. self.package = PackageInfo(host, packageName, version) # Set true when the package has finished downloading, # either successfully or unsuccessfully. self.done = False # Set true or false when self.done has been set. self.success = False # Set true when the packageFinished() callback has been # delivered. self.notified = False # These are used to ensure the callbacks only get # delivered once for a particular package. self.calledPackageStarted = False self.calledPackageFinished = False # This is the amount of stuff we have to process to # install this package, and the amount of stuff we have # processed so far. "Stuff" includes bytes downloaded, # bytes uncompressed, and bytes extracted; and each of # which is weighted differently into one grand total. So, # the total doesn't really represent bytes; it's a # unitless number, which means something only as a ratio # to other packages. Filled in by checkDescFile() or # getDescFile(). self.downloadEffort = 0 # Similar, but this is the theoretical effort if the # package were already downloaded. self.prevDownloadedEffort = 0
class PendingPackage: """ This class describes a package added to the installer for download. """ notify = directNotify.newCategory("PendingPackage") def __init__(self, packageName, version, host): self.packageName = packageName self.version = version self.host = host # This will be filled in properly by checkDescFile() or # getDescFile(); in the meantime, set a placeholder. self.package = PackageInfo(host, packageName, version) # Set true when the package has finished downloading, # either successfully or unsuccessfully. self.done = False # Set true or false when self.done has been set. self.success = False # Set true when the packageFinished() callback has been # delivered. self.notified = False # These are used to ensure the callbacks only get # delivered once for a particular package. self.calledPackageStarted = False self.calledPackageFinished = False # This is the amount of stuff we have to process to # install this package, and the amount of stuff we have # processed so far. "Stuff" includes bytes downloaded, # bytes uncompressed, and bytes extracted; and each of # which is weighted differently into one grand total. So, # the total doesn't really represent bytes; it's a # unitless number, which means something only as a ratio # to other packages. Filled in by checkDescFile() or # getDescFile(). self.downloadEffort = 0 # Similar, but this is the theoretical effort if the # package were already downloaded. self.prevDownloadedEffort = 0 def __cmp__(self, pp): """ Python comparision function. This makes all PendingPackages withe same (packageName, version, host) combination be deemed equivalent. """ return cmp((self.packageName, self.version, self.host), (pp.packageName, pp.version, pp.host)) def getProgress(self): """ Returns the download progress of this package in the range 0..1. """ return self.package.downloadProgress def checkDescFile(self): """ Returns true if the desc file is already downloaded and good, or false if it needs to be downloaded. """ if not self.host.hasCurrentContentsFile(): # If the contents file isn't ready yet, we can't check # the desc file yet. return False # All right, get the package info now. package = self.host.getPackage(self.packageName, self.version) if not package: self.notify.warning( "Package %s %s not known on %s" % (self.packageName, self.version, self.host.hostUrl)) return False self.package = package self.package.checkStatus() if not self.package.hasDescFile: return False self.downloadEffort = self.package.getDownloadEffort() self.prevDownloadEffort = 0 if self.downloadEffort == 0: self.prevDownloadedEffort = self.package.getPrevDownloadedEffort( ) return True def getDescFile(self, http): """ Synchronously downloads the desc files required for the package. """ if not self.host.downloadContentsFile(http): return False # All right, get the package info now. package = self.host.getPackage(self.packageName, self.version) if not package: self.notify.warning( "Package %s %s not known on %s" % (self.packageName, self.version, self.host.hostUrl)) return False self.package = package if not self.package.downloadDescFile(http): return False self.package.checkStatus() self.downloadEffort = self.package.getDownloadEffort() self.prevDownloadEffort = 0 if self.downloadEffort == 0: self.prevDownloadedEffort = self.package.getPrevDownloadedEffort( ) return True
class PendingPackage: """ This class describes a package added to the installer for download. """ notify = directNotify.newCategory("PendingPackage") def __init__(self, packageName, version, host): self.packageName = packageName self.version = version self.host = host # This will be filled in properly by checkDescFile() or # getDescFile(); in the meantime, set a placeholder. self.package = PackageInfo(host, packageName, version) # Set true when the package has finished downloading, # either successfully or unsuccessfully. self.done = False # Set true or false when self.done has been set. self.success = False # Set true when the packageFinished() callback has been # delivered. self.notified = False # These are used to ensure the callbacks only get # delivered once for a particular package. self.calledPackageStarted = False self.calledPackageFinished = False # This is the amount of stuff we have to process to # install this package, and the amount of stuff we have # processed so far. "Stuff" includes bytes downloaded, # bytes uncompressed, and bytes extracted; and each of # which is weighted differently into one grand total. So, # the total doesn't really represent bytes; it's a # unitless number, which means something only as a ratio # to other packages. Filled in by checkDescFile() or # getDescFile(). self.downloadEffort = 0 # Similar, but this is the theoretical effort if the # package were already downloaded. self.prevDownloadedEffort = 0 def __cmp__(self, pp): """ Python comparision function. This makes all PendingPackages withe same (packageName, version, host) combination be deemed equivalent. """ return cmp((self.packageName, self.version, self.host), (pp.packageName, pp.version, pp.host)) def getProgress(self): """ Returns the download progress of this package in the range 0..1. """ return self.package.downloadProgress def checkDescFile(self): """ Returns true if the desc file is already downloaded and good, or false if it needs to be downloaded. """ if not self.host.hasCurrentContentsFile(): # If the contents file isn't ready yet, we can't check # the desc file yet. return False # All right, get the package info now. package = self.host.getPackage(self.packageName, self.version) if not package: self.notify.warning("Package %s %s not known on %s" % ( self.packageName, self.version, self.host.hostUrl)) return False self.package = package self.package.checkStatus() if not self.package.hasDescFile: return False self.downloadEffort = self.package.getDownloadEffort() self.prevDownloadEffort = 0 if self.downloadEffort == 0: self.prevDownloadedEffort = self.package.getPrevDownloadedEffort() return True def getDescFile(self, http): """ Synchronously downloads the desc files required for the package. """ if not self.host.downloadContentsFile(http): return False # All right, get the package info now. package = self.host.getPackage(self.packageName, self.version) if not package: self.notify.warning("Package %s %s not known on %s" % ( self.packageName, self.version, self.host.hostUrl)) return False self.package = package if not self.package.downloadDescFile(http): return False self.package.checkStatus() self.downloadEffort = self.package.getDownloadEffort() self.prevDownloadEffort = 0 if self.downloadEffort == 0: self.prevDownloadedEffort = self.package.getPrevDownloadedEffort() return True