Example #1
0
def __handle_request_package(actionid, action):
    ''' Handle the new package requests. '''
    bugid = action['info']['pkg_review_url'].rsplit('/', 1)[1]
    if '=' in bugid:
        bugid = bugid.split('=', 1)[1]

    msgs = utils.check_package_creation(
        action['info'], bugid, PKGDBCLIENT)

    decision = _ask_what_to_do(msgs)
    if decision in ('a', 'approve'):
        data = PKGDBCLIENT.create_package(
            pkgname=action['info']['pkg_name'],
            summary=action['info']['pkg_summary'],
            description=action['info']['pkg_description'],
            review_url=action['info']['pkg_review_url'],
            status=action['info']['pkg_status'],
            shouldopen=True,
            branches=action['info']['pkg_collection'],
            poc=action['info']['pkg_poc'],
            upstream_url=action['info']['pkg_upstream_url'],
            critpath=action['info']['pkg_critpath'],
        )

        PKGDBCLIENT.handle_api_call(
            '/admin/action/status',
            data={
                'id': actionid,
                'status': 'Approved'
            }
        )

    elif decision in ('deny', 'd'):
        message = raw_input(
            'Could you explain why you declined this request? (this message '
            'will be sent to the user)\n=>')
        data = PKGDBCLIENT.handle_api_call(
            '/admin/action/status',
            data={
                'id': actionid,
                'status': 'Denied',
                'message': message,
            }
        )

    else:
        data = {
            'messages': ['Action {0} un-touched'.format(actionid)]
        }


    return data
Example #2
0
def __handle_request_unretire(actionid, action):
    ''' Handle unretirement requests. Do the same checks as done for new
    package requests and ask the admin to do the necessary steps by hand. '''

    bugid = action['info']['pkg_review_url'].rsplit('/', 1)[-1]
    if '=' in bugid:
        bugid = bugid.split('=', 1)[1]

    # Add valuees to info that pkgdb adds to new package actions
    action['info']['pkg_name'] = action['package']['name']
    action['info']['pkg_summary'] = action['package']['summary']
    action['info']['pkg_collection'] = action['collection'][
        'branchname']
    action['info']['pkg_poc'] = action['user']
    # FIXME : Does not need to use .get() once
    # https://github.com/fedora-infra/pkgdb2/pull/333
    # is deployed.
    action['info']['pkg_namespace'] = action['package'].get(
        'namespace', 'rpms')

    if bugid:
        msgs = utils.check_package_creation(
            action['info'], bugid, PKGDBCLIENT, action['user'])
    else:
        msgs = {
            "bad": ['No review specified, retirement recent enough?'],
            'good': []
        }

    bugid = utils.get_bug_id_from_url(action['info']['pkg_review_url'])
    decision = _ask_what_to_do(msgs)

    if decision in ('a', 'approve'):
        cmd = ("pkgdb-cli", "unorphan", "--poc", action['info']['pkg_poc'],
               action['info']['pkg_name'], action['info']['pkg_collection'])
        input("Please run the following command (confirm with any key): " +
              " ".join(cmd))
        input("Please make sure the package is properly unblocked in koji. "
              "(Confirm with any key)")

        data = approve_action(actionid)

    elif decision in ('deny', 'd'):
        data, _ = deny_action(actionid)
    else:
        data = {
            'messages': ['Action {0} un-touched'.format(actionid)]
        }
    return data
Example #3
0
def __handle_request_unretire(actionid, action):
    ''' Handle unretirement requests. Do the same checks as done for new
    package requests and ask the admin to do the necessary steps by hand. '''

    bugid = action['info']['pkg_review_url'].rsplit('/', 1)[-1]
    if '=' in bugid:
        bugid = bugid.split('=', 1)[1]

    # Add valuees to info that pkgdb adds to new package actions
    action['info']['pkg_name'] = action['package']['name']
    action['info']['pkg_summary'] = action['package']['summary']
    action['info']['pkg_collection'] = action['collection']['branchname']
    action['info']['pkg_poc'] = action['user']
    # FIXME : Does not need to use .get() once
    # https://github.com/fedora-infra/pkgdb2/pull/333
    # is deployed.
    action['info']['pkg_namespace'] = action['package'].get(
        'namespace', 'rpms')

    if bugid:
        msgs = utils.check_package_creation(action['info'], bugid, PKGDBCLIENT,
                                            action['user'])
    else:
        msgs = {
            "bad": ['No review specified, retirement recent enough?'],
            'good': []
        }

    bugid = utils.get_bug_id_from_url(action['info']['pkg_review_url'])
    decision = _ask_what_to_do(msgs)

    if decision in ('a', 'approve'):
        cmd = ("pkgdb-cli", "unorphan", "--poc", action['info']['pkg_poc'],
               action['info']['pkg_name'], action['info']['pkg_collection'])
        input("Please run the following command (confirm with any key): " +
              " ".join(cmd))
        input("Please make sure the package is properly unblocked in koji. "
              "(Confirm with any key)")

        data = approve_action(actionid)

    elif decision in ('deny', 'd'):
        data, _ = deny_action(actionid)
    else:
        data = {'messages': ['Action {0} un-touched'.format(actionid)]}
    return data
Example #4
0
def __handle_request_package(actionid, action):
    """ Handle the new package requests. """
    bugid = action["info"]["pkg_review_url"].rsplit("/", 1)[1]
    if "=" in bugid:
        bugid = bugid.split("=", 1)[1]

    msgs = utils.check_package_creation(action["info"], bugid, PKGDBCLIENT)

    decision = _ask_what_to_do(msgs)
    if decision in ("a", "approve"):
        data = PKGDBCLIENT.create_package(
            pkgname=action["info"]["pkg_name"],
            summary=action["info"]["pkg_summary"],
            description=action["info"]["pkg_description"],
            review_url=action["info"]["pkg_review_url"],
            status=action["info"]["pkg_status"],
            shouldopen=True,
            branches=action["info"]["pkg_collection"],
            poc=action["info"]["pkg_poc"],
            upstream_url=action["info"]["pkg_upstream_url"],
            critpath=action["info"]["pkg_critpath"],
        )

        PKGDBCLIENT.handle_api_call("/admin/action/status", data={"id": actionid, "status": "Approved"})

    elif decision in ("deny", "d"):
        message = raw_input(
            "Could you explain why you declined this request? (this message " "will be sent to the user)\n=>"
        )
        data = PKGDBCLIENT.handle_api_call(
            "/admin/action/status", data={"id": actionid, "status": "Denied", "message": message}
        )

    else:
        data = {"messages": ["Action {0} un-touched".format(actionid)]}

    return data
Example #5
0
def __handle_request_unretire(actionid, action):
    ''' Handle unretirement requests. Do the same checks as done for new
    package requests and ask the admin to do the necessary steps by hand. '''

    # Add valuees to info that pkgdb adds to new package actions
    action['info']['pkg_name'] = action['package']['name']
    action['info']['pkg_summary'] = action['package']['summary']
    action['info']['pkg_collection'] = action['collection'][
        'branchname']
    action['info']['pkg_poc'] = action['user']
    # FIXME : Does not need to use .get() once
    # https://github.com/fedora-infra/pkgdb2/pull/333
    # is deployed.
    action['info']['pkg_namespace'] = action['package'].get(
        'namespace', 'rpms')

    if action['info']['pkg_review_url']:
        bugid = utils.get_bug_id_from_url(action['info']['pkg_review_url'])
        msgs = utils.check_package_creation(
            action['info'], bugid, PKGDBCLIENT, action['user'])
    else:
        msgs = utils.check_branch_creation(
            PKGDBCLIENT, action['package']['name'],
            action['collection']['branchname'], action['user'], new_pkg=True,
            namespace=action['info']['pkg_namespace'])

        package = PKGDBCLIENT.get_package(
            action['package']['name'],
            branches=[action['info']['pkg_collection']],
            namespace=action['info']['pkg_namespace'],
        )["packages"][0]
        rawhide_package = PKGDBCLIENT.get_package(
            action['package']['name'], branches=["master"],
            namespace=action['info']['pkg_namespace'],
        )["packages"][0]

        last_pkg_change = datetime.datetime.fromtimestamp(
            package["status_change"])
        request_date = datetime.datetime.fromtimestamp(
            action['date_created'])
        delta = request_date - last_pkg_change
        if delta.days < 14:
            msgs["good"].append("Package was retired less than 14 days ago")
        elif rawhide_package.status != "Retired":
            msgs["good"].append("Package is not retired in Rawhide")
        else:
            msgs["bad"].append(
                "Package is retired in Rawhide and was retired more than "
                "14 days ago")
    if action['info'].get('pkg_review_url'):
        print('Review url {}'.format(action['info'].get('pkg_review_url')))
    else:
        print('No review url was provided with this request')

    decision = _ask_what_to_do(msgs)

    if decision in ('a', 'approve'):
        cmd = ("pkgdb-cli", "unorphan", "--poc", action['info']['pkg_poc'],
               action['info']['pkg_name'], action['info']['pkg_collection'])
        input("Please run the following command (confirm with any key): " +
              " ".join(cmd))
        input("Please make sure the package is properly unblocked in koji. "
              "(Confirm with any key)")

        data = approve_action(actionid)

    elif decision in ('deny', 'd'):
        data, _ = deny_action(actionid)
    else:
        data = {
            'messages': ['Action {0} un-touched'.format(actionid)]
        }
    return data
Example #6
0
def __handle_request_package(actionid, action):
    ''' Handle the new package requests. '''
    bugid = utils.get_bug_id_from_url(action['info']['pkg_review_url'])
    msgs = utils.check_package_creation(
        action['info'], bugid, PKGDBCLIENT, action['user'])

    decision = _ask_what_to_do(msgs)
    if decision in ('a', 'approve'):
        desc = action['info'].get('pkg_description', None)
        if desc:
            desc = desc.encode('utf-8')
        upstream = action['info'].get('pkg_upstream_url', None)
        if upstream:
            upstream = upstream.encode('utf-8')

        monitoring_status = action['info'].get('monitoring_status', True)
        # If we get an invalid monitoring status, use the default
        if str(monitoring_status) not in ['True', 'False', 'nobuild']:
            monitoring_status = True

        data = PKGDBCLIENT.create_package(
            pkgname=action['info']['pkg_name'].encode('utf-8'),
            summary=action['info']['pkg_summary'].encode('utf-8'),
            description=desc,
            review_url=action['info']['pkg_review_url'].encode('utf-8'),
            status=action['info']['pkg_status'].encode('utf-8'),
            shouldopen=True,
            branches=action['info']['pkg_collection'].encode('utf-8'),
            poc=action['info']['pkg_poc'].encode('utf-8'),
            upstream_url=upstream,
            critpath=action['info']['pkg_critpath'],
            namespace=action['info']['pkg_namespace'],
            monitoring_status=monitoring_status,
            koschei=action['info'].get('koschei', False),
        )

        comaintainers = action['info'].get('co-maintainers')
        if comaintainers:
            for user in comaintainers.split(','):
                PKGDBCLIENT.update_acl(
                    action['info']['pkg_name'],
                    branches=action['info']['pkg_collection'],
                    acls=['commit', 'watchbugzilla', 'watchcommits'],
                    status='Approved',
                    user=user.strip(),
                    namespace=action['info']['pkg_namespace'],
                )

        approve_action(actionid)

        url = "{0}/package/{1}/{2}".format(
            PKGDBCLIENT.base_url,
            action['info'].get('pkg_namespace', 'rpms'),
            action['info']['pkg_name'])

        utils.comment_on_bug(
            bugid,
            'Package request has been approved: %s' % url
        )

    elif decision in ('deny', 'd'):
        data, message = deny_action(actionid)

        utils.comment_on_bug(
            bugid,
            'Package request has been denied with the reason: %s' % message
        )

    else:
        data = {
            'messages': ['Action {0} un-touched'.format(actionid)]
        }

    return data
Example #7
0
def __handle_request_package(actionid, action):
    ''' Handle the new package requests. '''
    bugid = action['info']['pkg_review_url'].rsplit('/', 1)[1]
    if '=' in bugid:
        bugid = bugid.split('=', 1)[1]

    msgs = utils.check_package_creation(
        action['info'], bugid, PKGDBCLIENT, action['user'])

    bugid = utils.get_bug_id_from_url(action['info']['pkg_review_url'])

    decision = _ask_what_to_do(msgs)
    if decision in ('a', 'approve'):
        desc = action['info'].get('pkg_description', None)
        if desc:
            desc = desc.encode('utf-8')
        upstream = action['info'].get('pkg_upstream_url', None)
        if upstream:
            upstream = upstream.encode('utf-8')

        monitoring_status = action['info'].get('monitoring_status', True)
        # If we get an invalid monitoring status, use the default
        if str(monitoring_status) not in ['True', 'False', 'nobuild']:
            monitoring_status = True

        data = PKGDBCLIENT.create_package(
            pkgname=action['info']['pkg_name'].encode('utf-8'),
            summary=action['info']['pkg_summary'].encode('utf-8'),
            description=desc,
            review_url=action['info']['pkg_review_url'].encode('utf-8'),
            status=action['info']['pkg_status'].encode('utf-8'),
            shouldopen=True,
            branches=action['info']['pkg_collection'].encode('utf-8'),
            poc=action['info']['pkg_poc'].encode('utf-8'),
            upstream_url=upstream,
            critpath=action['info']['pkg_critpath'],
            namespace=action['info']['pkg_namespace'],
            monitoring_status=monitoring_status,
            koschei=action['info'].get('koschei', False),
        )

        comaintainers = action['info'].get('co-maintainers')
        if comaintainers:
            for user in comaintainers.split(','):
                PKGDBCLIENT.update_acl(
                    action['info']['pkg_name'],
                    branches=action['info']['pkg_collection'],
                    acls=['commit', 'watchbugzilla', 'watchcommits'],
                    status='Approved',
                    user=user.strip(),
                    namespace=action['info']['pkg_namespace'],
                )

        approve_action(actionid)

        url = "{0}/package/{1}/{2}".format(
            PKGDBCLIENT.base_url,
            action['info'].get('pkg_namespace', 'rpms'),
            action['info']['pkg_name'])

        utils.comment_on_bug(
            bugid,
            'Package request has been approved: %s' % url
        )

    elif decision in ('deny', 'd'):
        data, message = deny_action(actionid)

        utils.comment_on_bug(
            bugid,
            'Package request has been denied with the reason: %s' % message
        )

    else:
        data = {
            'messages': ['Action {0} un-touched'.format(actionid)]
        }

    return data