def touch_manifest(self, fmri, intent=None): """Touch a manifest. This operation does not return the manifest's content. The FMRI is given as fmri. An optional intent string may be supplied as intent.""" failures = tx.TransportFailures() pub_prefix = fmri.get_publisher() pub = self.__img.get_publisher(pub_prefix) mfst = fmri.get_url_path() retry_count = global_settings.PKG_CLIENT_MAX_TIMEOUT header = self.__build_header(intent=intent, uuid=self.__get_uuid(pub)) for d in self.__gen_origins(pub, retry_count): # If a transport exception occurs, # save it if it's retryable, otherwise # raise the error to a higher-level handler. try: d.touch_manifest(mfst, header) return except tx.TransportException, e: if e.retryable: failures.append(e) else: raise
def get_datastream(self, fmri, fhash): """Given a fmri, and fhash, return a data stream for the remote object. Since the caller handles the streaming object, instead of having the transport manage it, the caller must catch TransportError and perform any retry logic that is desired. """ retry_count = global_settings.PKG_CLIENT_MAX_TIMEOUT failures = tx.TransportFailures() pub_prefix = fmri.get_publisher() pub = self.__img.get_publisher(pub_prefix) header = self.__build_header(uuid=self.__get_uuid(pub)) for d in self.__gen_repos(pub, retry_count): try: resp = d.get_datastream(fhash, header) return resp except tx.TransportException, e: if e.retryable: failures.append(e) else: raise
def multi_file(self, fmri, progtrack, ccancel): """Creates a MultiFile object for this transport. The caller may add actions to the multifile object and wait for the download to complete.""" if not fmri: return None publisher = self.__img.get_publisher(fmri.get_publisher()) mfile = MultiFile(publisher, self, progtrack, ccancel) return mfile
def get_manifest(self, fmri, excludes=misc.EmptyI, intent=None): """Given a fmri, and optional excludes, return a manifest object.""" retry_count = global_settings.PKG_CLIENT_MAX_TIMEOUT failures = tx.TransportFailures() pub_prefix = fmri.get_publisher() pub = self.__img.get_publisher(pub_prefix) mfst = fmri.get_url_path() mcontent = None header = self.__build_header(intent=intent, uuid=self.__get_uuid(pub)) # If captive portal test hasn't been executed, run it # prior to this operation. self.captive_portal_test() for d in self.__gen_origins(pub, retry_count): repostats = self.stats[d.get_url()] try: resp = d.get_manifest(mfst, header) mcontent = resp.read() m = manifest.CachedManifest( fmri, self.__img.pkgdir, self.__img.cfg_cache.preferred_publisher, excludes, mcontent) return m except tx.TransportException, e: if e.retryable: failures.append(e) mcontent = None else: raise except MalformedActionError, e: repostats.record_error() te = tx.TransferContentException(d.get_url(), reason=str(e)) failures.append(te)
def get_manifest(self, fmri, excludes=misc.EmptyI, intent=None): """Given a fmri, and optional excludes, return a manifest object.""" retry_count = global_settings.PKG_CLIENT_MAX_TIMEOUT failures = tx.TransportFailures() pub_prefix = fmri.get_publisher() pub = self.__img.get_publisher(pub_prefix) mfst = fmri.get_url_path() mcontent = None header = self.__build_header(intent=intent, uuid=self.__get_uuid(pub)) # If captive portal test hasn't been executed, run it # prior to this operation. self.captive_portal_test() for d in self.__gen_origins(pub, retry_count): repostats = self.stats[d.get_url()] try: resp = d.get_manifest(mfst, header) mcontent = resp.read() m = manifest.CachedManifest( fmri, self.__img.pkgdir, self.__img.cfg_cache.preferred_publisher, excludes, mcontent ) return m except tx.TransportException, e: if e.retryable: failures.append(e) mcontent = None else: raise except MalformedActionError, e: repostats.record_error() te = tx.TransferContentException(d.get_url(), reason=str(e)) failures.append(te)