Merge lp:~dpigott/lava-scheduler-tool/fix842524-add-token-file into lp:lava-scheduler-tool

Proposed by Zygmunt Krynicki
Status: Work in progress
Proposed branch: lp:~dpigott/lava-scheduler-tool/fix842524-add-token-file
Merge into: lp:lava-scheduler-tool
Diff against target: 150 lines (+112/-3) (has conflicts)
1 file modified
lava_scheduler_tool/commands.py (+112/-3)
Text conflict in lava_scheduler_tool/commands.py
To merge this branch: bzr merge lp:~dpigott/lava-scheduler-tool/fix842524-add-token-file
Reviewer Review Type Date Requested Status
Zygmunt Krynicki (community) Needs Fixing
Review via email: mp+79961@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Zygmunt Krynicki (zyga) wrote :

Could you look at resolving the merge conflict?

review: Needs Fixing

Unmerged revisions

10. By Dave Pigott

Added authentiaction token file support to cancel-job

9. By Dave Pigott

Added authentiction token file support to submit-job

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lava_scheduler_tool/commands.py'
--- lava_scheduler_tool/commands.py 2011-10-19 03:11:36 +0000
+++ lava_scheduler_tool/commands.py 2011-10-20 13:34:26 +0000
@@ -16,12 +16,36 @@
16# You should have received a copy of the GNU Lesser General Public License16# You should have received a copy of the GNU Lesser General Public License
17# along with lava-scheduler-tool. If not, see <http://www.gnu.org/licenses/>.17# along with lava-scheduler-tool. If not, see <http://www.gnu.org/licenses/>.
1818
19import xmlrpclib19<<<<<<< TREE
20import xmlrpclib
21=======
22import getpass
23import urlparse
24import xmlrpclib
25>>>>>>> MERGE-SOURCE
2026
27<<<<<<< TREE
21from lava_tool.authtoken import AuthenticatingServerProxy, KeyringAuthBackend28from lava_tool.authtoken import AuthenticatingServerProxy, KeyringAuthBackend
22from lava_tool.interface import Command, LavaCommandError29from lava_tool.interface import Command, LavaCommandError
30=======
31from lava_tool.authtoken import (
32 AuthenticatingServerProxy,
33 KeyringAuthBackend,
34 MemoryAuthBackend,
35 )
36from lava_tool.interface import Command, LavaCommandError
37>>>>>>> MERGE-SOURCE
23from lava_tool.commands import ExperimentalCommandMixIn38from lava_tool.commands import ExperimentalCommandMixIn
2439
40def normalize_xmlrpc_url(uri):
41 if '://' not in uri:
42 uri = 'http://' + uri
43 if not uri.endswith('/'):
44 uri += '/'
45 if not uri.endswith('/RPC2/'):
46 uri += 'RPC2/'
47 return uri
48
2549
26class submit_job(ExperimentalCommandMixIn, Command):50class submit_job(ExperimentalCommandMixIn, Command):
27 """51 """
@@ -33,11 +57,53 @@
33 super(submit_job, cls).register_arguments(parser)57 super(submit_job, cls).register_arguments(parser)
34 parser.add_argument("SERVER")58 parser.add_argument("SERVER")
35 parser.add_argument("JSON_FILE")59 parser.add_argument("JSON_FILE")
60 parser.add_argument(
61 "--token-file", default=None,
62 help="Read the password from a file rather than prompting for it.")
3663
37 def invoke(self):64 def invoke(self):
38 self.print_experimental_notice()65 self.print_experimental_notice()
66
67 uri = normalize_xmlrpc_url(self.args.SERVER)
68 parsed_host = urlparse.urlparse(uri)
69
70 if parsed_host.username:
71 username = parsed_host.username
72 else:
73 username = getpass.getuser()
74
75 host = parsed_host.hostname
76 if parsed_host.port:
77 host += ':' + str(parsed_host.port)
78
79 uri = '%s://%s@%s%s' % (
80 parsed_host.scheme, username, host, parsed_host.path)
81
82 if self.args.token_file:
83 if parsed_host.password:
84 raise LavaCommandError(
85 "Token specified in url but --token-file also passed.");
86 else:
87 try:
88 token_file = open(self.args.token_file)
89 except IOError as ex:
90 raise LavaCommandError(
91 "opening %r failed: %s" % (self.args.token_file, ex))
92 token = token_file.read().strip()
93 else:
94 if parsed_host.password:
95 token = parsed_host.password
96 else:
97 token = getpass.getpass("Paste token for %s: " % uri)
98
99 userless_uri = '%s://%s%s' % (
100 parsed_host.scheme, host, parsed_host.path)
101
102
39 server = AuthenticatingServerProxy(103 server = AuthenticatingServerProxy(
40 self.args.SERVER, auth_backend=KeyringAuthBackend())104 uri, auth_backend = MemoryAuthBackend(
105 [(username, userless_uri, token)]))
106
41 with open(self.args.JSON_FILE, 'rb') as stream:107 with open(self.args.JSON_FILE, 'rb') as stream:
42 command_text = stream.read()108 command_text = stream.read()
43 try:109 try:
@@ -54,9 +120,52 @@
54 def register_arguments(self, parser):120 def register_arguments(self, parser):
55 parser.add_argument("SERVER")121 parser.add_argument("SERVER")
56 parser.add_argument("JOB_ID", type=int)122 parser.add_argument("JOB_ID", type=int)
123 parser.add_argument(
124 "--token-file", default=None,
125 help="Read the password from a file rather than prompting for it.")
57126
58 def invoke(self):127 def invoke(self):
59 self.print_experimental_notice()128 self.print_experimental_notice()
129
130 uri = normalize_xmlrpc_url(self.args.SERVER)
131 parsed_host = urlparse.urlparse(uri)
132
133 if parsed_host.username:
134 username = parsed_host.username
135 else:
136 username = getpass.getuser()
137
138 host = parsed_host.hostname
139 if parsed_host.port:
140 host += ':' + str(parsed_host.port)
141
142 uri = '%s://%s@%s%s' % (
143 parsed_host.scheme, username, host, parsed_host.path)
144
145 if self.args.token_file:
146 if parsed_host.password:
147 raise LavaCommandError(
148 "Token specified in url but --token-file also passed.");
149 else:
150 try:
151 token_file = open(self.args.token_file)
152 except IOError as ex:
153 raise LavaCommandError(
154 "opening %r failed: %s" % (self.args.token_file, ex))
155 token = token_file.read().strip()
156 else:
157 if parsed_host.password:
158 token = parsed_host.password
159 else:
160 token = getpass.getpass("Paste token for %s: " % uri)
161
162 userless_uri = '%s://%s%s' % (
163 parsed_host.scheme, host, parsed_host.path)
164
165 self.print_experimental_notice()
166
60 server = AuthenticatingServerProxy(167 server = AuthenticatingServerProxy(
61 self.args.SERVER, auth_backend=KeyringAuthBackend())168 uri, auth_backend = MemoryAuthBackend(
169 [(username, userless_uri, token)]))
170
62 server.scheduler.cancel_job(self.args.JOB_ID)171 server.scheduler.cancel_job(self.args.JOB_ID)

Subscribers

People subscribed via source and target branches