From d07fb8ffb3515e3e26d76c63a09ef696a47ca572 Mon Sep 17 00:00:00 2001 From: alister Date: Tue, 1 Dec 2015 19:14:44 +0000 Subject: [PATCH] adding the ability to display jobs from many views and also fixing an issue where jobs with spaces in the name are missed out --- terminator/arguments.py | 5 +++++ terminator/jenkins.py | 12 +++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/terminator/arguments.py b/terminator/arguments.py index f3880b3..ea492fc 100644 --- a/terminator/arguments.py +++ b/terminator/arguments.py @@ -22,6 +22,7 @@ def parse_arguments(): parser.add_argument('-i', metavar='SECONDS', dest='interval', help='polling interval in seconds', type=int) parser.add_argument('-u', metavar='USERNAME', dest='username', help='username if Jenkins needs authentication') parser.add_argument('-v', metavar='VIEW', dest='view', help='which view you want termintor to display the jobs for') + parser.add_argument('-vs', metavar='VIEWS', dest ='views', help= 'which views you want terminator to display the jobs for') parser.add_argument('-p', dest='password', action='store_true', help='prompt for password') parser.add_argument('-f', metavar='FONT', dest='font', help='font used for rendering the job name') parser.add_argument('-w', metavar='WIDTH', dest='terminal_width', help='terminal width override', type=int) @@ -42,6 +43,10 @@ def _init(args): global view view = args.view + if args.views: + global views + views = args.views.split() + if args.jobs: global jobs jobs = args.jobs.split() diff --git a/terminator/jenkins.py b/terminator/jenkins.py index 9209181..9ef9a41 100644 --- a/terminator/jenkins.py +++ b/terminator/jenkins.py @@ -1,11 +1,10 @@ import base64 import json -from urllib.request import Request, urlopen +from urllib.request import Request, urlopen, quote import terminator.arguments as arguments import terminator.job as job - def refresh_jobs(current_jobs): jobs = [] @@ -37,6 +36,8 @@ def get_job_names(): return arguments.jobs elif arguments.view: return _get_job_names_from_view(arguments.view) + elif arguments.views: + return _get_job_names_from_views(arguments.views) else: return _get_job_names_from_default_view() except Exception: @@ -45,7 +46,7 @@ def get_job_names(): def _get_job(job_name): - request = Request(_job_url(job_name)) + request = Request(_job_url(quote(job_name))) json_object = _get_json(request) return job.Job(job_name, json_object) @@ -55,6 +56,11 @@ def _get_job_names_from_view(view_name): json_object = _get_json(request) return [_job['name'] for _job in json_object['jobs']] +def _get_job_names_from_views(views): + jobs = [] + for view_name in views: + jobs +=_get_job_names_from_view(view_name) + return jobs def _get_job_names_from_default_view(): request = Request(_default_view_url())