)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6987,"name":"Khai Do","email":"zaro0508@gmail.com","username":"zaro0508"},"change_message_id":"360342e7c14780d7a14123ad1e49bcd9550323b3","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-12-23 16:09:14 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Extend support for views in folder(s)"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I9a438e7d776e16cc01894cb4606398294ea2e86b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da4df55a_8be0d897","line":8,"updated":"2016-12-28 07:19:19.000000000","message":"could you please add a description explaining what this change is for?","commit_id":"e3dfc44b7a4e5b497a309ca29bc58556c22ab112"},{"author":{"_account_id":16099,"name":"Dawid Malinowski","email":"dawidmalina@gmail.com","username":"dawidmalina"},"change_message_id":"b2ecabad5f7e5a1b57a3dccc3e38c12c708949a4","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-12-23 16:09:14 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Extend support for views in folder(s)"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I9a438e7d776e16cc01894cb4606398294ea2e86b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da4df55a_3f2f1789","line":8,"in_reply_to":"da4df55a_8be0d897","updated":"2016-12-28 21:57:12.000000000","message":"Done","commit_id":"e3dfc44b7a4e5b497a309ca29bc58556c22ab112"}],"doc/source/examples.rst":[{"author":{"_account_id":6987,"name":"Khai Do","email":"zaro0508@gmail.com","username":"zaro0508"},"change_message_id":"d46e5088073da7acec4e141d1f1654aaf85c8503","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    server.delete_view(\u0027EMPTY\u0027)"},{"line_number":108,"context_line":"    print views"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    # create view inside specific folder"},{"line_number":111,"context_line":"    server.create_job(\u0027folder\u0027, jenkins.EMPTY_FOLDER_XML)"},{"line_number":112,"context_line":"    server.create_view(\u0027folder/empty_view\u0027, jenkins.EMPTY_VIEW_CONFIG_XML)"},{"line_number":113,"context_line":"    server.delete_view(\u0027folder/empty_view\u0027)"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a3c09a3_0dc51b5a","line":110,"updated":"2017-01-16 16:36:14.000000000","message":"Doesn\u0027t this example require the folders plugin?  Would it make sense to move down to the folders example?","commit_id":"5b42d85d12d5e91cc76fa7da4b91c613b857347d"}],"jenkins/__init__.py":[{"author":{"_account_id":6987,"name":"Khai Do","email":"zaro0508@gmail.com","username":"zaro0508"},"change_message_id":"360342e7c14780d7a14123ad1e49bcd9550323b3","unresolved":false,"context_lines":[{"line_number":91,"context_line":"CRUMB_URL \u003d \u0027crumbIssuer/api/json\u0027"},{"line_number":92,"context_line":"WHOAMI_URL \u003d \u0027me/api/json\u0027"},{"line_number":93,"context_line":"JOBS_QUERY \u003d \u0027?tree\u003djobs[url,color,name,jobs]\u0027"},{"line_number":94,"context_line":"VIEWS_QUERY \u003d \u0027?tree\u003dviews[url,name,views]\u0027"},{"line_number":95,"context_line":"JOB_INFO \u003d \u0027%(folder_url)sjob/%(short_name)s/api/json?depth\u003d%(depth)s\u0027"},{"line_number":96,"context_line":"JOB_NAME \u003d \u0027%(folder_url)sjob/%(short_name)s/api/json?tree\u003dname\u0027"},{"line_number":97,"context_line":"ALL_BUILDS \u003d \u0027%(folder_url)sjob/%(short_name)s/api/json?tree\u003dallBuilds[number,url]\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"da4df55a_4b1fd007","line":94,"updated":"2016-12-28 07:19:19.000000000","message":"how about group this with the other view endpoints?","commit_id":"e3dfc44b7a4e5b497a309ca29bc58556c22ab112"},{"author":{"_account_id":16099,"name":"Dawid Malinowski","email":"dawidmalina@gmail.com","username":"dawidmalina"},"change_message_id":"b2ecabad5f7e5a1b57a3dccc3e38c12c708949a4","unresolved":false,"context_lines":[{"line_number":91,"context_line":"CRUMB_URL \u003d \u0027crumbIssuer/api/json\u0027"},{"line_number":92,"context_line":"WHOAMI_URL \u003d \u0027me/api/json\u0027"},{"line_number":93,"context_line":"JOBS_QUERY \u003d \u0027?tree\u003djobs[url,color,name,jobs]\u0027"},{"line_number":94,"context_line":"VIEWS_QUERY \u003d \u0027?tree\u003dviews[url,name,views]\u0027"},{"line_number":95,"context_line":"JOB_INFO \u003d \u0027%(folder_url)sjob/%(short_name)s/api/json?depth\u003d%(depth)s\u0027"},{"line_number":96,"context_line":"JOB_NAME \u003d \u0027%(folder_url)sjob/%(short_name)s/api/json?tree\u003dname\u0027"},{"line_number":97,"context_line":"ALL_BUILDS \u003d \u0027%(folder_url)sjob/%(short_name)s/api/json?tree\u003dallBuilds[number,url]\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"da4df55a_bf7067a5","line":94,"in_reply_to":"da4df55a_4b1fd007","updated":"2016-12-28 21:57:12.000000000","message":"I didn\u0027t get the point. I\u0027ve used this new query to limit the result to only views.","commit_id":"e3dfc44b7a4e5b497a309ca29bc58556c22ab112"},{"author":{"_account_id":6987,"name":"Khai Do","email":"zaro0508@gmail.com","username":"zaro0508"},"change_message_id":"ce3616e9ae974a6b294098472880252de72a799f","unresolved":false,"context_lines":[{"line_number":91,"context_line":"CRUMB_URL \u003d \u0027crumbIssuer/api/json\u0027"},{"line_number":92,"context_line":"WHOAMI_URL \u003d \u0027me/api/json\u0027"},{"line_number":93,"context_line":"JOBS_QUERY \u003d \u0027?tree\u003djobs[url,color,name,jobs]\u0027"},{"line_number":94,"context_line":"VIEWS_QUERY \u003d \u0027?tree\u003dviews[url,name,views]\u0027"},{"line_number":95,"context_line":"JOB_INFO \u003d \u0027%(folder_url)sjob/%(short_name)s/api/json?depth\u003d%(depth)s\u0027"},{"line_number":96,"context_line":"JOB_NAME \u003d \u0027%(folder_url)sjob/%(short_name)s/api/json?tree\u003dname\u0027"},{"line_number":97,"context_line":"ALL_BUILDS \u003d \u0027%(folder_url)sjob/%(short_name)s/api/json?tree\u003dallBuilds[number,url]\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_0d551b1c","line":94,"in_reply_to":"da4df55a_bf7067a5","updated":"2017-01-16 16:32:54.000000000","message":"There\u0027s nothing wrong with this.  I was just wondering whether it would make sense to move this line down to where VIEW_NAME is so that all VIEW endpoints are in one place.","commit_id":"e3dfc44b7a4e5b497a309ca29bc58556c22ab112"},{"author":{"_account_id":6987,"name":"Khai Do","email":"zaro0508@gmail.com","username":"zaro0508"},"change_message_id":"360342e7c14780d7a14123ad1e49bcd9550323b3","unresolved":false,"context_lines":[{"line_number":1450,"context_line":""},{"line_number":1451,"context_line":"        :returns: list of views, ``[ { str: str} ]``"},{"line_number":1452,"context_line":"        \"\"\""},{"line_number":1453,"context_line":"        return self.get_info(query\u003dVIEWS_QUERY)[\u0027views\u0027]"},{"line_number":1454,"context_line":""},{"line_number":1455,"context_line":"    def delete_view(self, name):"},{"line_number":1456,"context_line":"        \u0027\u0027\u0027Delete Jenkins view permanently."}],"source_content_type":"text/x-python","patch_set":4,"id":"da4df55a_8b49b8b9","line":1453,"updated":"2016-12-28 07:19:19.000000000","message":"Wouldn\u0027t this only return views on the main folder?  Now that views can be in sub folders wouldn\u0027t we want this method to return all views (in all subfolders)?\n\n\nAlso what if we want a list of views under a specific folder?","commit_id":"e3dfc44b7a4e5b497a309ca29bc58556c22ab112"},{"author":{"_account_id":16099,"name":"Dawid Malinowski","email":"dawidmalina@gmail.com","username":"dawidmalina"},"change_message_id":"b2ecabad5f7e5a1b57a3dccc3e38c12c708949a4","unresolved":false,"context_lines":[{"line_number":1450,"context_line":""},{"line_number":1451,"context_line":"        :returns: list of views, ``[ { str: str} ]``"},{"line_number":1452,"context_line":"        \"\"\""},{"line_number":1453,"context_line":"        return self.get_info(query\u003dVIEWS_QUERY)[\u0027views\u0027]"},{"line_number":1454,"context_line":""},{"line_number":1455,"context_line":"    def delete_view(self, name):"},{"line_number":1456,"context_line":"        \u0027\u0027\u0027Delete Jenkins view permanently."}],"source_content_type":"text/x-python","patch_set":4,"id":"da4df55a_ff94af8b","line":1453,"in_reply_to":"da4df55a_8b49b8b9","updated":"2016-12-28 21:57:12.000000000","message":"That\u0027s true. I\u0027ve fixed this with the latest patch. I\u0027ve proposed new method: get_all_views with ability to retrieved all existing views.\n\nThere is no method to list all views inside specific folder as it is IMHO out of scope of this change. We also don\u0027t have ability to list all jobs in specific folder. So this should be a new dedicated methods like list_jobs_in_folder and list_views_in_folder.","commit_id":"e3dfc44b7a4e5b497a309ca29bc58556c22ab112"},{"author":{"_account_id":16099,"name":"Dawid Malinowski","email":"dawidmalina@gmail.com","username":"dawidmalina"},"change_message_id":"734dad2f017556a2d158499c015e2c5f1d0172a4","unresolved":false,"context_lines":[{"line_number":217,"context_line":"\u0027\u0027\u0027"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"# for testing only"},{"line_number":220,"context_line":"EMPTY_FOLDER_XML \u003d \u0027\u0027\u0027\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":221,"context_line":"\u003ccom.cloudbees.hudson.plugins.folder.Folder\u003e"},{"line_number":222,"context_line":"  \u003cproperties/\u003e"},{"line_number":223,"context_line":"  \u003cviews\u003e"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_7fa7dfbc","line":220,"updated":"2016-12-28 22:28:18.000000000","message":"I\u0027ve added this missing static as we have references in the example.","commit_id":"5b42d85d12d5e91cc76fa7da4b91c613b857347d"},{"author":{"_account_id":6987,"name":"Khai Do","email":"zaro0508@gmail.com","username":"zaro0508"},"change_message_id":"d46e5088073da7acec4e141d1f1654aaf85c8503","unresolved":false,"context_lines":[{"line_number":217,"context_line":"\u0027\u0027\u0027"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"# for testing only"},{"line_number":220,"context_line":"EMPTY_FOLDER_XML \u003d \u0027\u0027\u0027\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":221,"context_line":"\u003ccom.cloudbees.hudson.plugins.folder.Folder\u003e"},{"line_number":222,"context_line":"  \u003cproperties/\u003e"},{"line_number":223,"context_line":"  \u003cviews\u003e"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_0cf9a14d","line":220,"in_reply_to":"da4df55a_7fa7dfbc","updated":"2017-01-16 16:36:14.000000000","message":"thanks.","commit_id":"5b42d85d12d5e91cc76fa7da4b91c613b857347d"}],"tests/test_view.py":[{"author":{"_account_id":1054,"name":"Darragh Bailey","email":"daragh.bailey@gmail.com","username":"dbailey-k"},"change_message_id":"08be89449f83e0ffdd7699d14834476917bd4ec4","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                u\u0027url\u0027: u\u0027http://your_url_here/job/my_job/\u0027,"},{"line_number":89,"context_line":"                u\u0027color\u0027: u\u0027blue\u0027,"},{"line_number":90,"context_line":"                u\u0027name\u0027: u\u0027my_job\u0027,"},{"line_number":91,"context_line":"            },"},{"line_number":92,"context_line":"            u\u0027views\u0027: {"},{"line_number":93,"context_line":"                u\u0027url\u0027: u\u0027http://your_url_here/view/my_view/\u0027,"},{"line_number":94,"context_line":"                u\u0027name\u0027: u\u0027my_view\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_0c0a068a","line":91,"updated":"2017-01-24 13:16:08.000000000","message":"If I queried the jenkins api with the view query endpoint, would I every actually see something like this returned?","commit_id":"c02b3a8e73d6252afdf8b02b057762988cc31d7b"},{"author":{"_account_id":6987,"name":"Khai Do","email":"zaro0508@gmail.com","username":"zaro0508"},"change_message_id":"e72d9683ca6cb7d3f6a496eb4a2e442d5d0a9210","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                u\u0027url\u0027: u\u0027http://your_url_here/job/my_job/\u0027,"},{"line_number":89,"context_line":"                u\u0027color\u0027: u\u0027blue\u0027,"},{"line_number":90,"context_line":"                u\u0027name\u0027: u\u0027my_job\u0027,"},{"line_number":91,"context_line":"            },"},{"line_number":92,"context_line":"            u\u0027views\u0027: {"},{"line_number":93,"context_line":"                u\u0027url\u0027: u\u0027http://your_url_here/view/my_view/\u0027,"},{"line_number":94,"context_line":"                u\u0027name\u0027: u\u0027my_view\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_84dc2547","line":91,"in_reply_to":"5a3905b3_0c0a068a","updated":"2017-02-08 19:00:21.000000000","message":"This is what i see using `http://localhost:8080/api/json?depth\u003d1`\n\n\n\n{\n   \"assignedLabels\":[\n      {\n         \"actions\":[\n\n         ],\n         \"busyExecutors\":0,\n         \"clouds\":[\n\n         ],\n         \"description\":null,\n         \"idleExecutors\":2,\n         \"loadStatistics\":{\n\n         },\n         \"name\":\"master\",\n         \"nodes\":[\n            {\n               \"nodeName\":\"\"\n            }\n         ],\n         \"offline\":false,\n         \"tiedJobs\":[\n\n         ],\n         \"totalExecutors\":2,\n         \"propertiesList\":[\n\n         ]\n      }\n   ],\n   \"mode\":\"NORMAL\",\n   \"nodeDescription\":\"the master Jenkins node\",\n   \"nodeName\":\"\",\n   \"numExecutors\":2,\n   \"description\":null,\n   \"jobs\":[\n      {\n         \"actions\":[\n            {\n\n            },\n            {\n\n            }\n         ],\n         \"description\":\"\",\n         \"displayName\":\"folderA\",\n         \"displayNameOrNull\":null,\n         \"name\":\"folderA\",\n         \"url\":\"http://localhost:8080/job/folderA/\",\n         \"healthReport\":[\n\n         ],\n         \"jobs\":[\n            {\n               \"name\":\"jobA\",\n               \"url\":\"http://localhost:8080/job/folderA/job/jobA/\",\n               \"color\":\"notbuilt\"\n            },\n            {\n               \"name\":\"jobB\",\n               \"url\":\"http://localhost:8080/job/folderA/job/jobB/\",\n               \"color\":\"notbuilt\"\n            }\n         ],\n         \"primaryView\":{\n            \"name\":\"All\",\n            \"url\":\"http://localhost:8080/job/folderA/\"\n         },\n         \"views\":[\n            {\n               \"name\":\"All\",\n               \"url\":\"http://localhost:8080/job/folderA/\"\n            },\n            {\n               \"name\":\"viewA\",\n               \"url\":\"http://localhost:8080/job/folderA/view/viewA/\"\n            },\n            {\n               \"name\":\"viewB\",\n               \"url\":\"http://localhost:8080/job/folderA/view/viewB/\"\n            },\n            {\n               \"name\":\"viewC\",\n               \"url\":\"http://localhost:8080/job/folderA/view/viewC/\"\n            }\n         ]\n      }\n   ],\n   \"overallLoad\":{\n      \"availableExecutors\":{\n\n      },\n      \"busyExecutors\":{\n\n      },\n      \"connectingExecutors\":{\n\n      },\n      \"definedExecutors\":{\n\n      },\n      \"idleExecutors\":{\n\n      },\n      \"onlineExecutors\":{\n\n      },\n      \"queueLength\":{\n\n      },\n      \"totalExecutors\":{\n\n      },\n      \"totalQueueLength\":{\n\n      }\n   },\n   \"primaryView\":{\n      \"description\":null,\n      \"jobs\":[\n         {\n            \"name\":\"folderA\",\n            \"url\":\"http://localhost:8080/job/folderA/\"\n         }\n      ],\n      \"name\":\"All\",\n      \"property\":[\n\n      ],\n      \"url\":\"http://localhost:8080/\"\n   },\n   \"quietingDown\":false,\n   \"slaveAgentPort\":50000,\n   \"unlabeledLoad\":{\n      \"availableExecutors\":{\n\n      },\n      \"busyExecutors\":{\n\n      },\n      \"connectingExecutors\":{\n\n      },\n      \"definedExecutors\":{\n\n      },\n      \"idleExecutors\":{\n\n      },\n      \"onlineExecutors\":{\n\n      },\n      \"queueLength\":{\n\n      },\n      \"totalExecutors\":{\n\n      }\n   },\n   \"useCrumbs\":false,\n   \"useSecurity\":false,\n   \"views\":[\n      {\n         \"description\":null,\n         \"jobs\":[\n            {\n               \"name\":\"folderA\",\n               \"url\":\"http://localhost:8080/job/folderA/\"\n            }\n         ],\n         \"name\":\"All\",\n         \"property\":[\n\n         ],\n         \"url\":\"http://localhost:8080/\"\n      }\n   ]\n}","commit_id":"c02b3a8e73d6252afdf8b02b057762988cc31d7b"},{"author":{"_account_id":1054,"name":"Darragh Bailey","email":"daragh.bailey@gmail.com","username":"dbailey-k"},"change_message_id":"08be89449f83e0ffdd7699d14834476917bd4ec4","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        }"},{"line_number":97,"context_line":"        jenkins_mock.return_value \u003d json.dumps(info_to_return)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        view_info \u003d self.j.get_info()[\u0027views\u0027]"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        self.assertEqual(view_info, info_to_return[\u0027views\u0027])"},{"line_number":102,"context_line":"        self.assertEqual("}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_0c31265a","line":99,"updated":"2017-01-24 13:16:08.000000000","message":"Better leave this as it original was calling `.get_views()` instead of changing to test `get_info()` directly.\n\nShould create a separate test to call `get_all_views()` with a json object containing the nested views otherwise it\u0027s not testing the rather complex loop logic inside that function.","commit_id":"c02b3a8e73d6252afdf8b02b057762988cc31d7b"},{"author":{"_account_id":6987,"name":"Khai Do","email":"zaro0508@gmail.com","username":"zaro0508"},"change_message_id":"e72d9683ca6cb7d3f6a496eb4a2e442d5d0a9210","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        }"},{"line_number":97,"context_line":"        jenkins_mock.return_value \u003d json.dumps(info_to_return)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        view_info \u003d self.j.get_info()[\u0027views\u0027]"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        self.assertEqual(view_info, info_to_return[\u0027views\u0027])"},{"line_number":102,"context_line":"        self.assertEqual("}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_24c37158","line":99,"in_reply_to":"5a3905b3_0c31265a","updated":"2017-02-08 19:00:21.000000000","message":"added a test for this but it doesn\u0027t exercise all the logic. hoping someone else can finish it up.","commit_id":"c02b3a8e73d6252afdf8b02b057762988cc31d7b"}]}
