[PATCH] xmlrpc: Add a check_create function
Finucane, Stephen
stephen.finucane at intel.com
Thu Feb 25 07:56:27 AEDT 2016
On 18 Feb 14:47, Andy Doan wrote:
> This changes adds the ability to create Check objects via the XMLRPC
> interface. It includes a corresponding helper to the pwclient script.
> The command can be used like:
>
> pwclient check_create -c context1 -s success -u http://f.com \
> -d "desc of check" PATCH_ID
>
> Signed-off-by: Andy Doan <andy.doan at linaro.org>
Looks great. One minor nit below, but I'm otherwise happy to merge.
Stephen
> ---
> patchwork/bin/pwclient | 28 ++++++++++++++++++++++++++--
> patchwork/views/xmlrpc.py | 31 +++++++++++++++++++++++++++++++
> 2 files changed, 57 insertions(+), 2 deletions(-)
>
> diff --git a/patchwork/bin/pwclient b/patchwork/bin/pwclient
> index a271132..be18933 100755
> --- a/patchwork/bin/pwclient
> +++ b/patchwork/bin/pwclient
> @@ -242,6 +242,13 @@ def action_checks(rpc):
> print("%d (for '%s')" % (check['id'], check['patch']))
>
>
> +def action_check_create(rpc, patch_id, context, state, url, description):
> + try:
> + rpc.check_create(patch_id, context, state, url, description)
> + except xmlrpclib.Fault as f:
> + sys.stderr.write("Error creating check: %s\n" % f.faultString)
> +
> +
> def action_states(rpc):
> states = rpc.state_list("", 0)
> print("%-5s %s" % ("ID", "Name"))
> @@ -366,7 +373,7 @@ def patch_id_from_hash(rpc, project, hash):
> sys.exit(1)
> return patch_id
>
> -auth_actions = ['update']
> +auth_actions = ['check_create', 'update']
>
>
> def main():
> @@ -473,6 +480,18 @@ def main():
> help='''Show list of patch checks'''
> )
> checks_parser.set_defaults(subcmd='checks')
> + check_create_parser = subparsers.add_parser(
> + 'check_create', parents=[hash_parser], conflict_handler='resolve',
> + help='Add a check to a patch')
Could you rename this as 'check-create'. This seems a little more natural,
IMO, and would set us up nicely to rename 'checks' to 'check-list' and
perhaps add a 'check-show' function.
> + check_create_parser.set_defaults(subcmd='check_create')
> + check_create_parser.add_argument(
> + '-c', metavar='CONTEXT')
> + check_create_parser.add_argument(
> + '-s', choices=('pending', 'success', 'warning', 'fail'))
> + check_create_parser.add_argument(
> + '-u', metavar='TARGET_URL', default="")
> + check_create_parser.add_argument(
> + '-d', metavar='DESCRIPTION', default="")
> states_parser = subparsers.add_parser(
> 'states',
> help='''Show list of potential patch states'''
> @@ -689,7 +708,7 @@ def main():
> elif action.startswith('project'):
> action_projects(rpc)
>
> - elif action.startswith('check'):
> + elif action.startswith('checks'):
> action_checks(rpc)
>
> elif action.startswith('state'):
> @@ -747,6 +766,11 @@ def main():
> archived=archived_str, commit=commit_str
> )
>
> + elif action == 'check_create':
> + for patch_id in non_empty(h, patch_ids):
> + action_check_create(
> + rpc, patch_id, args['c'], args['s'], args['u'], args['d'])
> +
> else:
> sys.stderr.write("Unknown action '%s'\n" % action)
> action_parser.print_help()
> diff --git a/patchwork/views/xmlrpc.py b/patchwork/views/xmlrpc.py
> index 2881afb..7ad34d8 100644
> --- a/patchwork/views/xmlrpc.py
> +++ b/patchwork/views/xmlrpc.py
> @@ -959,6 +959,37 @@ def check_get(check_id):
> return {}
>
>
> + at xmlrpc_method(login_required=True)
> +def check_create(user, patch_id, context, state, target_url="",
> + description=""):
> + """Add a Check to a patch.
> +
> + **NOTE:** Authentication is required for this method.
> +
> + Args:
> + patch_id (id): The ID of the patch to create the check against.
> + context: Type of test or system that generated this check.
> + state: "pending", "success", "warning", or "fail"
> + target_url: Link to artifact(s) relating to this check.
> + description: A brief description of the check.
> +
> + Returns:
> + True, if successful else raise exception.
> + """
> + patch = Patch.objects.get(id=patch_id)
> + if not patch.is_editable(user):
> + raise Exception('No permissions to edit this patch')
> + for state_val, state_str in Check.STATE_CHOICES:
> + if state == state_str:
> + state = state_val
> + break
> + else:
> + raise Exception("Invalid check state: %s" % state)
> + Check.objects.create(patch=patch, context=context, state=state, user=user,
> + target_url=target_url, description=description)
> + return True
> +
> +
> @xmlrpc_method()
> def patch_check_get(patch_id):
> """Get a patch's combined checks by its ID.
> --
> 2.5.0
>
> _______________________________________________
> Patchwork mailing list
> Patchwork at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/patchwork
More information about the Patchwork
mailing list