From patchwork Thu Jul 21 16:50:42 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zygmunt Krynicki X-Patchwork-Id: 3028 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id 0303923DE6 for ; Thu, 21 Jul 2011 16:50:46 +0000 (UTC) Received: from mail-qw0-f52.google.com (mail-qw0-f52.google.com [209.85.216.52]) by fiordland.canonical.com (Postfix) with ESMTP id A3FBCA181D1 for ; Thu, 21 Jul 2011 16:50:45 +0000 (UTC) Received: by qwb8 with SMTP id 8so1037670qwb.11 for ; Thu, 21 Jul 2011 09:50:45 -0700 (PDT) Received: by 10.229.25.212 with SMTP id a20mr438711qcc.148.1311267045045; Thu, 21 Jul 2011 09:50:45 -0700 (PDT) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.229.217.78 with SMTP id hl14cs145577qcb; Thu, 21 Jul 2011 09:50:43 -0700 (PDT) Received: by 10.227.165.202 with SMTP id j10mr437050wby.18.1311267042998; Thu, 21 Jul 2011 09:50:42 -0700 (PDT) Received: from adelie.canonical.com (adelie.canonical.com [91.189.90.139]) by mx.google.com with ESMTP id d1si2836719wbh.132.2011.07.21.09.50.42; Thu, 21 Jul 2011 09:50:42 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of bounces@canonical.com designates 91.189.90.139 as permitted sender) client-ip=91.189.90.139; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of bounces@canonical.com designates 91.189.90.139 as permitted sender) smtp.mail=bounces@canonical.com Received: from loganberry.canonical.com ([91.189.90.37]) by adelie.canonical.com with esmtp (Exim 4.71 #1 (Debian)) id 1QjwSQ-0002pe-5d for ; Thu, 21 Jul 2011 16:50:42 +0000 Received: from loganberry.canonical.com (localhost [127.0.0.1]) by loganberry.canonical.com (Postfix) with ESMTP id 2206B2E8014 for ; Thu, 21 Jul 2011 16:50:42 +0000 (UTC) MIME-Version: 1.0 X-Launchpad-Project: lava-dashboard-tool X-Launchpad-Branch: ~linaro-validation/lava-dashboard-tool/trunk X-Launchpad-Message-Rationale: Subscriber X-Launchpad-Branch-Revision-Number: 154 X-Launchpad-Notification-Type: branch-revision To: Linaro Patch Tracker From: noreply@launchpad.net Subject: [Branch ~linaro-validation/lava-dashboard-tool/trunk] Rev 154: Merge 0.6 release Message-Id: <20110721165042.7697.48563.launchpad@loganberry.canonical.com> Date: Thu, 21 Jul 2011 16:50:42 -0000 Reply-To: noreply@launchpad.net Sender: bounces@canonical.com Errors-To: bounces@canonical.com Precedence: bulk X-Generated-By: Launchpad (canonical.com); Revision="13475"; Instance="initZopeless config overlay" X-Launchpad-Hash: f9b015273d06ddb7730338f9f9c2498be6d04950 Merge authors: Zygmunt Krynicki (zkrynicki) Related merge proposals: https://code.launchpad.net/~linaro-validation/lava-dashboard-tool/nonlegacy-rpc-and-auth-support/+merge/68143 proposed by: Zygmunt Krynicki (zkrynicki) ------------------------------------------------------------ revno: 154 [merge] committer: Zygmunt Krynicki branch nick: lava-dashboard-tool timestamp: Thu 2011-07-21 18:48:06 +0200 message: Merge 0.6 release - Use non-legacy API (/RPC2/ vs /dashboard/xml-rpc/) by default - Add support for authenticated API requests modified: lava_dashboard_tool/__init__.py lava_dashboard_tool/commands.py --- lp:lava-dashboard-tool https://code.launchpad.net/~linaro-validation/lava-dashboard-tool/trunk You are subscribed to branch lp:lava-dashboard-tool. To unsubscribe from this branch go to https://code.launchpad.net/~linaro-validation/lava-dashboard-tool/trunk/+edit-subscription === modified file 'lava_dashboard_tool/__init__.py' --- lava_dashboard_tool/__init__.py 2011-07-12 13:18:50 +0000 +++ lava_dashboard_tool/__init__.py 2011-07-21 16:46:02 +0000 @@ -20,4 +20,4 @@ Launch Control Tool package """ -__version__ = (0, 5, 3, "final", 0) +__version__ = (0, 6, 0, "final", 0) === modified file 'lava_dashboard_tool/commands.py' --- lava_dashboard_tool/commands.py 2011-07-09 10:26:59 +0000 +++ lava_dashboard_tool/commands.py 2011-07-21 16:44:24 +0000 @@ -36,8 +36,9 @@ import simplejson from linaro_json.extensions import datetime_extension +from lava_tool.authtoken import AuthenticatingServerProxy, KeyringAuthBackend +from lava_tool.commands import ExperimentalCommandMixIn from lava_tool.interface import Command -from lava_tool.commands import ExperimentalCommandMixIn class InsufficientServerVersion(Exception): @@ -312,8 +313,12 @@ Construct URL to the XML-RPC service out of the given URL """ parts = urlparse.urlsplit(url) + if not parts.path.endswith("/RPC2/"): + path = parts.path.rstrip("/") + "/xml-rpc/" + else: + path = parts.path return urlparse.urlunsplit( - (parts.scheme, parts.netloc, parts.path.rstrip("/") + "/xml-rpc/", "", "")) + (parts.scheme, parts.netloc, path, "", "")) @staticmethod def _strict_server_version(version): @@ -365,8 +370,18 @@ def __init__(self, parser, args): super(XMLRPCCommand, self).__init__(parser, args) xml_rpc_url = self._construct_xml_rpc_url(self.args.dashboard_url) - self.server = xmlrpclib.ServerProxy(xml_rpc_url, use_datetime=True, - allow_none=True, verbose=args.verbose_xml_rpc) + self.server = AuthenticatingServerProxy( + xml_rpc_url, + verbose=args.verbose_xml_rpc, + allow_none=True, + use_datetime=True, + auth_backend=KeyringAuthBackend()) + + def use_non_legacy_api_if_possible(self, name='server'): + # Legacy APIs are registered in top-level object, non-legacy APIs are + # prefixed with extension name. + if "dashboard.version" in getattr(self, name).system.listMethods(): + setattr(self, name, getattr(self, name).dashboard) @classmethod def register_arguments(cls, parser): @@ -416,6 +431,7 @@ def invoke(self): with self.safety_net(): + self.use_non_legacy_api_if_possible() return self.invoke_remote() def handle_xmlrpc_fault(self, faultCode, faultString): @@ -740,8 +756,13 @@ def __init__(self, parser, args): super(pull, self).__init__(parser, args) remote_xml_rpc_url = self._construct_xml_rpc_url(self.args.FROM) - self.remote_server = xmlrpclib.ServerProxy(remote_xml_rpc_url, use_datetime=True, - allow_none=True, verbose=args.verbose_xml_rpc) + self.remote_server = AuthenticatingServerProxy( + remote_xml_rpc_url, + verbose=args.verbose_xml_rpc, + use_datetime=True, + allow_none=True, + auth_backend=KeyringAuthBackend()) + self.use_non_legacy_api_if_possible('remote_server') @classmethod def register_arguments(cls, parser): @@ -781,6 +802,7 @@ def invoke_remote(self): self._check_server_version(self.server, "0.3") + print "Checking local and remote streams" remote = self.remote_server.streams() if self.args.STREAM: @@ -870,6 +892,7 @@ Probe the server for information about data views """ with self.safety_net(): + self.use_non_legacy_api_if_possible() self._check_server_version(self.server, "0.4") return self.server.data_views() @@ -907,6 +930,12 @@ default=argument["default"]) self.args = self.parser.parse_args(raw_args) + def invoke(self): + # Override and _not_ call 'use_non_legacy_api_if_possible' as we + # already did this reparse_arguments + with self.safety_net(): + return self.invoke_remote() + def invoke_remote(self): if self.data_views is None: return -1