示例#1
0
    def show(self):
        version_id = self.app.pargs.version_id

        validate_creds_exists(self.app)
        db = DBWrapper(self.app.creds)
        application_client = APIClient(db.get_configure()).get_application_api_client()
        enterprise_id = db.get_enterprise_id()

        if self.app.pargs.application:
            application_id = self.app.pargs.application
        else:
            application = db.get_application()
            if not application or not application.get('id'):
                self.app.log.debug('[version-show] There is no active application.')
                self.app.render('There is no active application.\n')
                return

            application_id = application.get('id')

        try:
            response = application_client.get_app_version(version_id, application_id, enterprise_id)
        except ApiException as e:
            self.app.log.error(f"[version-show] Failed to show details of an version: {e}")
            self.app.render(f"ERROR: {parse_error_message(self.app, e)}\n")
            return

        if not self.app.pargs.json:
            renderable = self._version_basic_response(response)
            self.app.render(renderable, format=OutputFormat.TABULATED.value, headers="keys", tablefmt="plain")
        else:
            renderable = self._version_basic_response(response, OutputFormat.JSON)
            self.app.render(renderable, format=OutputFormat.JSON.value)
示例#2
0
    def delete(self):
        application_id = self.app.pargs.application_id

        validate_creds_exists(self.app)
        db = DBWrapper(self.app.creds)
        application_client = APIClient(
            db.get_configure()).get_application_api_client()
        enterprise_id = db.get_enterprise_id()

        try:
            application_client.delete_application(application_id,
                                                  enterprise_id)
            self.app.log.debug(
                f"[application-delete] Application with id : {application_id} deleted successfully"
            )
            self.app.render(
                f"Application with id {application_id} deleted successfully")

            # Unset current application if matching
            application = db.get_application()
            if application and application.get(
                    'id') and application_id == application.get('id'):
                db.unset_application()
                self.app.log.debug(
                    f'[application-delete] Unset the active application {application_id}'
                )
        except ApiException as e:
            self.app.log.debug(
                f"[application-delete] Failed to delete an application: {e}")
            self.app.render(f"ERROR: {parse_error_message(self.app, e)}")
            return
示例#3
0
    def download(self):
        version_id = self.app.pargs.version_id

        validate_creds_exists(self.app)
        db = DBWrapper(self.app.creds)
        application_client = APIClient(
            db.get_configure()).get_application_api_client()
        enterprise_id = db.get_enterprise_id()

        if self.app.pargs.application:
            application_id = self.app.pargs.application
        else:
            application = db.get_application()
            if not application or not application.get('id'):
                self.app.log.debug(
                    '[app-download] There is no active application.')
                self.app.render('There is no active application.')
                return

            application_id = application.get('id')

        if self.app.pargs.dest:
            destination = self.app.pargs.dest
        else:
            self.app.log.debug(
                '[app-download] destination file path cannot be empty.')
            self.app.render('destination file path cannot be empty.')
            return

        try:
            response = application_client.get_app_version(
                version_id, application_id, enterprise_id)
        except ApiException as e:
            self.app.log.error(
                f"[app-download] Failed to show details of an version: {e}")
            self.app.render(f"ERROR: {parse_error_message(self.app, e)}")
            return

        url = response.app_file
        file_size = int(response.size_in_mb * 1024 * 1024)
        first_byte = 0

        pbar = tqdm(total=file_size,
                    initial=first_byte,
                    unit='B',
                    unit_scale=True,
                    desc='Downloading......')
        req = requests.get(url, stream=True)

        with (open(destination, 'ab')) as f:
            for chunk in req.iter_content(chunk_size=1024):
                if chunk:
                    f.write(chunk)
                    pbar.update(1024)
                    time.sleep(0.001)
        pbar.close()
示例#4
0
    def delete(self):
        version_id = self.app.pargs.version_id

        validate_creds_exists(self.app)
        db = DBWrapper(self.app.creds)
        application_client = APIClient(db.get_configure()).get_application_api_client()
        enterprise_id = db.get_enterprise_id()

        if self.app.pargs.application:
            application_id = self.app.pargs.application
        else:
            application = db.get_application()
            if not application or not application.get('id'):
                self.app.log.debug('[version-delete] There is no active application.')
                self.app.render('There is no active application.\n')
                return

            application_id = application.get('id')

        try:
            application_client.delete_app_version(version_id, application_id, enterprise_id)
            self.app.log.debug(f"[version-delete] Version with id : {version_id} deleted successfully")
            self.app.render(f"Version with id {version_id} deleted successfully\n")
        except ApiException as e:
            self.app.log.error(f"[version-delete] Failed to delete a version: {e}")
            self.app.render(f"ERROR: {parse_error_message(self.app, e)}\n")
            return

        # Unset current application if matching
        try:
            application_client.get_application(application_id, enterprise_id)
        except ApiException as e:
            if e.status == HTTPStatus.NOT_FOUND:
                application = db.get_application()
                if application and application.get('id') and application_id == application.get('id'):
                    db.unset_application()
                    self.app.log.debug(f'[version-delete] Unset the active application {application_id}')
            else:
                self.app.log.debug(f"[version-delete] Failed to get an application when deleting a version: {e}")
                self.app.render(f"ERROR: {parse_error_message(self.app, e)}\n")
示例#5
0
    def set_active(self):
        validate_creds_exists(self.app)
        db = DBWrapper(self.app.creds)
        application_client = APIClient(
            db.get_configure()).get_application_api_client()
        enterprise_id = db.get_enterprise_id()

        if self.app.pargs.id:
            application_id = self.app.pargs.id
            try:
                response = application_client.get_application(
                    application_id, enterprise_id)
                db.set_application({'id': application_id})
            except ApiException as e:
                self.app.log.error(
                    f"[application-active] Failed to show active application: {e}"
                )
                self.app.render(f"ERROR: {parse_error_message(self.app, e)}")
                return
        else:
            application = db.get_application()
            if application is None or application.get('id') is None:
                self.app.log.debug(
                    '[application-active] There is no active application.')
                self.app.render('There is no active application.')
                return

            application_id = application.get('id')
            try:
                response = application_client.get_application(
                    application_id, enterprise_id)
                db.set_application({'id': application_id})
            except ApiException as e:
                self.app.log.error(
                    f"[application-active] Failed to show active application: {e}"
                )
                self.app.render(f"ERROR: {parse_error_message(self.app, e)}")
                return

        if not self.app.pargs.json:
            renderable = self._application_basic_response(response)
            self.app.render(renderable,
                            format=OutputFormat.TABULATED.value,
                            headers="keys",
                            tablefmt="plain")
        else:
            renderable = self._application_basic_response(
                response, OutputFormat.JSON)
            self.app.render(renderable, format=OutputFormat.JSON.value)
示例#6
0
    def unset_active(self):
        validate_creds_exists(self.app)
        db = DBWrapper(self.app.creds)

        application = db.get_application()
        if application is None or application.get('id') is None:
            self.app.log.debug(
                '[application-active] There is no active application.')
            self.app.render('There is no active application.')
            return

        db.unset_application()
        self.app.log.debug(
            f"[application-active] Unset the active application {application.get('id')}"
        )
        self.app.render(
            f"Unset the active application {application.get('id')}")
示例#7
0
    def list(self):
        """Command to list application versions"""
        validate_creds_exists(self.app)
        db = DBWrapper(self.app.creds)
        application_client = APIClient(db.get_configure()).get_application_api_client()
        enterprise_id = db.get_enterprise_id()

        if self.app.pargs.application:
            application_id = self.app.pargs.application
        else:
            application = db.get_application()
            if not application or not application.get('id'):
                self.app.log.debug('[version-list] There is no active application.')
                self.app.render('There is no active application.\n')
                return

            application_id = application.get('id')

        version_code = self.app.pargs.version_code
        build_number = self.app.pargs.build_number
        limit = self.app.pargs.limit
        offset = self.app.pargs.offset

        kwargs = {}
        if version_code:
            kwargs['version_code'] = version_code

        if build_number:
            kwargs['build_number'] = build_number

        try:
            # Find application versions in an enterprise
            response = application_client.get_app_versions(application_id, enterprise_id, limit=limit, offset=offset,
                                                           **kwargs)
        except ApiException as e:
            self.app.log.error(f"[version-list] Failed to list applications: {e}")
            self.app.render(f"ERROR: {parse_error_message(self.app, e)}\n")
            return

        self.app.render(f"Total Number of Versions: {response.count}")
        if not self.app.pargs.json:
            versions = []

            label = {
                'id': "ID",
                'version_code': "VERSION CODE",
                'build_number': "BUILD NUMBER",
                'size_in_mb': "SIZE IN MB",
                'release_track': "RELEASE TRACK",
                'installed_count': "INSTALLED COUNT",
            }

            for version in response.results:
                versions.append(
                    {
                        label['id']: version.id,
                        label['version_code']: version.version_code,
                        label['build_number']: version.build_number,
                        label['size_in_mb']: version.size_in_mb,
                        label['release_track']: version.release_track,
                        label['installed_count']: version.installed_count if version.installed_count else 0
                    }
                )
            self.app.render(versions, format=OutputFormat.TABULATED.value, headers="keys", tablefmt="plain")
        else:
            versions = []
            for version in response.results:
                versions.append(
                    {
                        'id': version.id,
                        'version_code': version.version_code,
                        'build_number': version.build_number,
                        'size_in_mb': version.size_in_mb,
                        'release_track': version.release_track,
                        'installed_count': version.installed_count if version.installed_count else 0
                    }
                )
            self.app.render(versions, format=OutputFormat.JSON.value)