def create(self, **kwargs): self.prompt.render_title(_("Package Category Creation")) repo_id = kwargs["repo-id"] cat_id = kwargs["category-id"] name = kwargs["name"] description = kwargs["description"] display_order = kwargs["display-order"] packagegroupids = kwargs["group"] unit_key = {"id": cat_id, "repo_id": repo_id} metadata = { "name": name, "description": description, "display_order": display_order, "packagegroupids": packagegroupids, "translated_description": {}, "translated_name": "", } # Display the list of found RPMs if kwargs["v"]: self.prompt.write(_("Package Category Details:")) combined = dict() combined.update(unit_key) combined.update(metadata) self.prompt.render_document(combined, order=["id", "repo_id"], indent=2) self.prompt.render_spacer() # Initialize all uploads upload_manager = _upload_manager(self.context) upload_id = upload_manager.initialize_upload(None, repo_id, PKG_CATEGORY_TYPE_ID, unit_key, metadata) perform_upload(self.context, upload_manager, [upload_id])
def resume(self, **kwargs): self.context.prompt.render_title(_('Upload Requests')) # Determine which (if any) uploads are eligible to resume upload_manager = configure_upload_manager(self.context) uploads = upload_manager.list_uploads() if len(uploads) is 0: d = 'No outstanding uploads found' self.context.prompt.render_paragraph(_(d)) return non_running_uploads = [u for u in uploads if not u.is_running] if len(non_running_uploads) is 0: d = 'All requests are currently in the process of being uploaded.' self.context.prompt.render_paragraph(_(d)) return # Prompt the user to select one or more uploads to resume source_filenames = [os.path.basename(u.source_filename) for u in non_running_uploads] q = _('Select one or more uploads to resume: ') selected_indexes = self.context.prompt.prompt_multiselect_menu(q, source_filenames, interruptable=True) # User either selected no items or elected to abort (or ctrl+c) if selected_indexes is self.context.prompt.ABORT or len(selected_indexes) is 0: return # Resolve the user selections for display and uploading selected_uploads = [u for i, u in enumerate(non_running_uploads) if i in selected_indexes] selected_filenames = [os.path.basename(u.source_filename) for u in selected_uploads] selected_ids = [u.upload_id for u in selected_uploads] self.context.prompt.render_paragraph(_('Resuming upload for: %(u)s') % {'u' : ', '.join(selected_filenames)}) perform_upload(self.context, upload_manager, selected_ids)
def create(self, **kwargs): self.prompt.render_title(_("Package Group Creation")) repo_id = kwargs["repo-id"] pkg_group_id = kwargs["group-id"] name = kwargs["name"] description = kwargs["description"] # # Adjust cond_names # format is key:value1,value2,... # cond_names = [] cond_names_raw = kwargs["cond-name"] if cond_names_raw: for entry in cond_names_raw: key, value = entry.split(":") cond_names.append((key, value)) mand_names = kwargs["mand-name"] opt_names = kwargs["opt-name"] default_names = kwargs["default-name"] display_order = kwargs["display-order"] default = kwargs["default"] langonly = kwargs["langonly"] user_visible = kwargs["user-visible"] unit_key = {"id": pkg_group_id, "repo_id": repo_id} metadata = { "name": name, "description": description, "mandatory_package_names": mand_names, "optional_package_names": opt_names, "default_package_names": default_names, "conditional_package_names": cond_names, "default": default, "user_visible": user_visible, "langonly": langonly, "display_order": display_order, "translated_description": {}, "translated_name": "", } # Display the list of found RPMs if kwargs["v"]: self.prompt.write(_("Package Group Details:")) combined = dict() combined.update(unit_key) combined.update(metadata) self.prompt.render_document(combined, order=["id", "repo_id"], indent=2) self.prompt.render_spacer() # Initialize all uploads upload_manager = _upload_manager(self.context) upload_id = upload_manager.initialize_upload(None, repo_id, PKG_GROUP_TYPE_ID, unit_key, metadata) perform_upload(self.context, upload_manager, [upload_id])
def create(self, **kwargs): self.prompt.render_title(_('RPM Upload')) repo_id = kwargs['repo-id'] # Resolve the total list of RPMs to upload all_rpm_filenames = kwargs['file'] or [] for d in kwargs['dir'] or []: # Sanity check if not os.path.exists(d): self.context.prompt.render_failure_message(_('Directory %(d)s does not exist') % {'d' : d}) return os.EX_IOERR # Find all RPMs dir_rpms = [f for f in os.listdir(d) if f.endswith('.rpm')] for f in dir_rpms: full_filename = os.path.join(d, f) all_rpm_filenames.append(full_filename) # Make sure at least one RPM was found if len(all_rpm_filenames) is 0: self.context.prompt.render_failure_message(_('No RPMs selected for upload')) return os.EX_DATAERR # Integrity check on the total list of RPM files for f in all_rpm_filenames: if not os.path.exists(f) or not os.access(f, os.R_OK): self.context.prompt.render_failure_message(_('File %(f)s does not exist or could not be read') % {'f' : f}) return os.EX_IOERR if not os.path.isfile(f): self.context.prompt.render_failure_message(_('%(f)s is not a file') % {'f' : f}) return os.EX_IOERR # Display the list of found RPMs if kwargs['v']: self.prompt.write(_('RPMs to be uploaded:')) for r in all_rpm_filenames: self.prompt.write(' %s' % os.path.basename(r)) self.prompt.render_spacer() # Extract the required metadata for each RPM self.prompt.write(_('Extracting necessary metdata for each RPM...')) bar = self.prompt.create_progress_bar() rpm_tuples = [] for i, f in enumerate(all_rpm_filenames): bar.render(i+1, len(all_rpm_filenames), message=_('Analyzing: %(n)s') % {'n' : os.path.basename(f)}) unit_key, metadata = _generate_rpm_data(f) rpm_tuples.append( (f, unit_key, metadata)) self.prompt.write(_('... completed')) self.prompt.render_spacer() # Initialize all uploads upload_manager = _upload_manager(self.context) self.prompt.write(_('Creating upload requests on the server...')) bar = self.prompt.create_progress_bar() upload_ids = [] for i, job in enumerate(rpm_tuples): bar.render(i+1, len(rpm_tuples), message=_('Initializing: %(n)s') % {'n' : os.path.basename(job[0])}) upload_id = upload_manager.initialize_upload(job[0], repo_id, TYPE_RPM, job[1], job[2]) upload_ids.append(upload_id) self.prompt.write(_('... completed')) self.prompt.render_spacer() # Start the upload process perform_upload(self.context, upload_manager, upload_ids)