)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"f58ce5a29875fc13e619ebc5e81d6924b283ec22","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Describe API versions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding json representation of the v2 REST API at the API root"},{"line_number":10,"context_line":"endpoint. Endpoint still requires authentication."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I069644917f9a29e7ddfe7010695ad3a5aa5ca8c2"},{"line_number":13,"context_line":"Partial-Bug: #1350076"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"fa98f980_22abcf75","line":10,"updated":"2014-09-15 19:00:31.000000000","message":"I think the Version request should not have to go through authentication. Could you add this as a filter in the wsgi pipeline and add it before the keystone authentication step?","commit_id":"c9a80c10d946e1e0e7a45e18493cecb8c7b2c57f"}],"ceilometer/api/controllers/root.py":[{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"2b765c185fc061852590c409c1f3ed8c43291593","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    @pecan.expose(\u0027json\u0027)"},{"line_number":31,"context_line":"    def index(self):"},{"line_number":32,"context_line":"        base_url \u003d pecan.request.host_url"},{"line_number":33,"context_line":"        v \u003d {\u0027tag\u0027: \u0027v2\u0027, \u0027date\u0027: \u00272013-02-13T00:00:00Z\u0027, }"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        collected \u003d [version_descriptor(base_url, v[\u0027tag\u0027], v[\u0027date\u0027])]"},{"line_number":36,"context_line":"        versions \u003d {\u0027versions\u0027: {\u0027values\u0027: collected}}"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_dc583933","line":33,"updated":"2014-09-15 11:46:51.000000000","message":"Wouldn\u0027t this be better suited as a list of dicts? For when v3 hits?","commit_id":"c9a80c10d946e1e0e7a45e18493cecb8c7b2c57f"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"bb5530afe029c4638eca1f4f08bef689ef7230cf","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    @pecan.expose(\u0027json\u0027)"},{"line_number":31,"context_line":"    def index(self):"},{"line_number":32,"context_line":"        base_url \u003d pecan.request.host_url"},{"line_number":33,"context_line":"        v \u003d {\u0027tag\u0027: \u0027v2\u0027, \u0027date\u0027: \u00272013-02-13T00:00:00Z\u0027, }"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        collected \u003d [version_descriptor(base_url, v[\u0027tag\u0027], v[\u0027date\u0027])]"},{"line_number":36,"context_line":"        versions \u003d {\u0027versions\u0027: {\u0027values\u0027: collected}}"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_da1ae06d","line":33,"in_reply_to":"fa98f980_d6964d4b","updated":"2014-09-16 07:22:21.000000000","message":"Exactly, and this would minimize the code-change needed when v3 hits. \"Just add an item to a list\" vs \"refactor code to support multiple versions\".","commit_id":"c9a80c10d946e1e0e7a45e18493cecb8c7b2c57f"},{"author":{"_account_id":12807,"name":"Steve Lewis (stevelle)","email":"stevelle@gmail.com","username":"stevelle"},"change_message_id":"9c621c5d4c0c11f782ddc6245282baa7d608da0c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    @pecan.expose(\u0027json\u0027)"},{"line_number":31,"context_line":"    def index(self):"},{"line_number":32,"context_line":"        base_url \u003d pecan.request.host_url"},{"line_number":33,"context_line":"        v \u003d {\u0027tag\u0027: \u0027v2\u0027, \u0027date\u0027: \u00272013-02-13T00:00:00Z\u0027, }"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        collected \u003d [version_descriptor(base_url, v[\u0027tag\u0027], v[\u0027date\u0027])]"},{"line_number":36,"context_line":"        versions \u003d {\u0027versions\u0027: {\u0027values\u0027: collected}}"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_d6964d4b","line":33,"in_reply_to":"fa98f980_dc583933","updated":"2014-09-15 17:16:25.000000000","message":"The code is prepared for the addition of v3 by this change without adding any unnecessary complexity until v3 is implemented. \n\nIf this was a list of dicts now we would have to add either a comprehension or loop over a list of one.","commit_id":"c9a80c10d946e1e0e7a45e18493cecb8c7b2c57f"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"f3bb557ade9f2bf6ff67e4beab9e91067a57cea0","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            return version_descriptor(base_url, v[\u0027tag\u0027], v[\u0027date\u0027])"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        available \u003d [{\u0027tag\u0027: \u0027v2\u0027, \u0027date\u0027: \u00272013-02-13T00:00:00Z\u0027, }]"},{"line_number":38,"context_line":"        collected \u003d map(describe, available)"},{"line_number":39,"context_line":"        versions \u003d {\u0027versions\u0027: {\u0027values\u0027: collected}}"},{"line_number":40,"context_line":"        return versions"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da9df570_5d206c49","line":38,"updated":"2014-09-23 08:16:47.000000000","message":"The more pythonic and preferred style is list comprehension. Could you do it like\n\n [version_descriptor(base_url, v[\u0027tag\u0027], v[\u0027date\u0027]) for v in available]\n\n, similar to what you had before?","commit_id":"cd74edbfa3ada5977777a72916fd25899e7211aa"}],"ceilometer/tests/api/test_versions.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"a778b4a56dc4cc56fe1ae259c86380a465d79909","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def test_versions(self):"},{"line_number":64,"context_line":"        data \u003d self.get_json(\u0027/\u0027)"},{"line_number":65,"context_line":"        self.assertEqual(data, VERSIONS_RESPONSE)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9df570_a5259bc3","line":65,"updated":"2014-09-24 09:32:24.000000000","message":"it better to be self.assertEqual(VERSIONS_RESPONSE, data), but I\u0027m ok to it, and there already get two +2,","commit_id":"6a40b821ddca65c4e982221c580188e244feb38e"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"ba5e899081f2868656dc4f1a945650a74f19cdb6","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def test_versions(self):"},{"line_number":64,"context_line":"        data \u003d self.get_json(\u0027/\u0027)"},{"line_number":65,"context_line":"        self.assertEqual(data, VERSIONS_RESPONSE)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9df570_6b96214e","line":65,"in_reply_to":"da9df570_a5259bc3","updated":"2014-09-24 11:07:02.000000000","message":"Yes, asserts should follow the assert(expected, actual) form. Good catch, don\u0027t be afraid to do a -1 even if a patch is already +2d.","commit_id":"6a40b821ddca65c4e982221c580188e244feb38e"}]}
