Esempio n. 1
0
    def _get_package(self, namespace):
        package = self.push.get_package_objs(
            "NamespacePrefix = '{}'".format(namespace), limit=1)

        if not package:
            raise PushApiObjectNotFound(
                'The package with namespace {} was not found'.format(
                    namespace))

        return package[0]
Esempio n. 2
0
    def _get_push_request_query(self, request_id):
        default_where = {"PackagePushRequest": "Id = '{}'".format(request_id)}

        # Create a new PushAPI instance with different settings than self.push
        self.push_report = SalesforcePushApi(
            self.sf,
            self.logger,
            lazy=["subscribers", "jobs"],
            default_where=default_where,
        )

        # Get the push request
        self.push_request = self.push_report.get_push_request_objs(
            "Id = '{}'".format(request_id), limit=1
        )
        if not self.push_request:
            raise PushApiObjectNotFound(
                "Push Request {} was not found".format(self.push_request)
            )

        self.push_request = self.push_request[0]
Esempio n. 3
0
    def _get_version(self, package, version):

        version_info = self._parse_version(version)

        version_where = (
            "ReleaseState = '{}'".format(version_info["state"]) +
            " AND MajorVersion = {}".format(version_info["major"]) +
            " AND MinorVersion = {}".format(version_info["minor"]))
        if version_info.get("patch"):
            version_where += " AND PatchVersion = {}".format(
                version_info["patch"])
        if version_info["state"] == "Beta" and version_info.get("build"):
            version_where += " AND BuildNumber = {}".format(
                version_info["build"])

        version = package.get_package_version_objs(version_where, limit=1)
        if not version:
            raise PushApiObjectNotFound(
                "PackageVersion not found." +
                " Namespace = {}, Version Info = {}".format(
                    package.namespace, version_info))
        return version[0]
Esempio n. 4
0
    def _get_version(self, package, version):

        version_info = self._parse_version(version)

        version_where = (
            "ReleaseState = '{}'".format(version_info['state']) +
            " AND MajorVersion = {}".format(version_info['major']) +
            " AND MinorVersion = {}".format(version_info['minor']))
        if version_info.get('patch'):
            version_where += " AND PatchVersion = {}".format(
                version_info['patch'])
        if version_info['state'] == 'Beta' and version_info.get('build'):
            version_where += " AND BuildNumber = {}".format(
                version_info['build'])

        version = package.get_package_version_objs(version_where, limit=1)
        if not version:
            raise PushApiObjectNotFound(
                'PackageVersion not found.' +
                ' Namespace = {}, Version Info = {}'.format(
                    package.namespace,
                    version_info,
                ))
        return version[0]
Esempio n. 5
0
    def _report_push_status(self, request_id):
        default_where = {'PackagePushRequest': "Id = '{}'".format(request_id)}

        # Create a new PushAPI instance with different settings than self.push
        self.push_report = SalesforcePushApi(
            self.sf,
            self.logger,
            lazy=['subscribers', 'jobs'],
            default_where=default_where,
        )

        # Get the push request
        push_request = self.push_report.get_push_request_objs(
            "Id = '{}'".format(request_id),
            limit=1,
        )
        if not push_request:
            raise PushApiObjectNotFound(
                'Push Request {} was not found'.format(push_request))
        push_request = push_request[0]

        # Check if the request is complete
        interval = 10
        if push_request.status not in self.completed_statuses:
            self.logger.info(
                'Push request is not yet complete.' +
                ' Polling for status every {} seconds until completion'.format(
                    interval))

        # Loop waiting for request completion
        i = 0
        while push_request.status not in self.completed_statuses:
            if i == 10:
                self.logger.info(
                    'This is taking a while! Polling every 60 seconds')
                interval = 60
            time.sleep(interval)

            # Clear the method level cache on get_push_requests and
            # get_push_request_objs
            self.push_report.get_push_requests.cache.clear()
            self.push_report.get_push_request_objs.cache.clear()

            # Get the push_request again
            push_request = self.push_report.get_push_request_objs(
                "Id = '{}'".format(request_id),
                limit=1,
            )[0]

            self.logger.info(push_request.status)

            i += 1

        failed_jobs = []
        success_jobs = []
        canceled_jobs = []

        jobs = push_request.get_push_job_objs()
        for job in jobs:
            if job.status == 'Failed':
                failed_jobs.append(job)
            elif job.status == 'Succeeded':
                success_jobs.append(job)
            elif job.status == 'Canceled':
                canceled_jobs.append(job)

        self.logger.info(
            "Push complete: {} succeeded, {} failed, {} canceled".format(
                len(success_jobs),
                len(failed_jobs),
                len(canceled_jobs),
            ))

        failed_by_error = {}
        for job in failed_jobs:
            errors = job.get_push_error_objs()
            for error in errors:
                error_key = (
                    error.error_type,
                    error.title,
                    error.message,
                    error.details,
                )
                if error_key not in failed_by_error:
                    failed_by_error[error_key] = []
                failed_by_error[error_key].append(error)

        if failed_jobs:
            self.logger.info("-----------------------------------")
            self.logger.info("Failures by error type")
            self.logger.info("-----------------------------------")
            for key, errors in failed_by_error.items():
                self.logger.info("    ")
                self.logger.info("{} failed with...".format(len(errors)))
                self.logger.info("    Error Type = {}".format(key[0]))
                self.logger.info("    Title = {}".format(key[1]))
                self.logger.info("    Message = {}".format(key[2]))
                self.logger.info("    Details = {}".format(key[3]))