You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/www-client/pybugz/files/pybugz-9999-bugzilla-4.4.1....

77 lines
2.0 KiB

bugz/cli.py | 31 +++++++++++++++++++++++++++----
1 file changed, 27 insertions(+), 4 deletions(-)
diff --git a/bugz/cli.py b/bugz/cli.py
index 5c8261b..ae57a10 100644
--- a/bugz/cli.py
+++ b/bugz/cli.py
@@ -29,6 +29,7 @@ BUGZ: ---------------------------------------------------
"""
DEFAULT_COOKIE_FILE = '.bugz_cookie'
+DEFAULT_TOKEN_FILE = '.bugz_token'
DEFAULT_NUM_COLS = 80
#
@@ -135,6 +136,12 @@ class PrettyBugz:
except IOError:
pass
+ self.token_file = os.path.join(os.environ['HOME'], DEFAULT_TOKEN_FILE)
+ try:
+ self.token = open(self.token_file).read().strip()
+ except IOError:
+ self.token = None
+
if getattr(args, 'encoding'):
self.enc = args.encoding
else:
@@ -151,16 +158,21 @@ class PrettyBugz:
def get_input(self, prompt):
return raw_input(prompt)
+ def set_token(self, *args):
+ if args and self.token:
+ args[0]['Bugzilla_token'] = self.token
+ return args
+
def bzcall(self, method, *args):
"""Attempt to call method with args. Log in if authentication is required.
"""
try:
- return method(*args)
+ return method(*self.set_token(*args))
except xmlrpclib.Fault, fault:
# Fault code 410 means login required
if fault.faultCode == 410 and not self.skip_auth:
self.login()
- return method(*args)
+ return method(*self.set_token(*args))
raise
def login(self, args=None):
@@ -192,10 +204,21 @@ class PrettyBugz:
self.bz.User.login(params)
except xmlrpclib.Fault as fault:
raise BugzError("Can't login: " + fault.faultString)
+ log_info('Logging in')
+ result = self.bz.User.login(params)
+ if 'token' in result:
+ self.token = result['token']
if args is not None:
- self.cookiejar.save()
- os.chmod(self.cookiejar.filename, 0600)
+ if self.token:
+ fd = open(self.token_file, 'w')
+ fd.write(self.token)
+ fd.write('\n')
+ fd.close()
+ os.chmod(self.token_file, 0600)
+ else:
+ self.cookiejar.save()
+ os.chmod(self.cookiejar.filename, 0600)
def logout(self, args):
log_info('logging out')