Exemple #1
0
    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])
Exemple #2
0
    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)
Exemple #3
0
    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])
Exemple #4
0
    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)