Example #1
0
    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
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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
Example #5
0
    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
Example #6
0
    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
Example #7
0
    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)
Example #8
0
    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)