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)
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
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()
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")
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)
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')}")
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)