[PATCH v2] xmlrpc: Add a check_create function
Andy Doan
andy.doan at linaro.org
Fri Feb 26 07:49:29 AEDT 2016
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>
---
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..fdd9035 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')
+ 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.7.0
More information about the Patchwork
mailing list