)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"9439b420994d326f68edcca32849886094566edd","unresolved":false,"context_lines":[{"line_number":18,"context_line":"In addition this change includes base unit tests to ensure the"},{"line_number":19,"context_line":"existing trove proper extension points are loaded and that some basic"},{"line_number":20,"context_line":"checks are in place W/R/T validating trove extension points."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Id3e712b536aef3bc9c9d1603367cdc0d4816b970"},{"line_number":23,"context_line":"Implements: blueprint dynamic-extension-loading"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"baada198_dc838404","line":21,"updated":"2014-08-06 16:25:41.000000000","message":"This definitely needs the DocImpact tag","commit_id":"046c5ff61f2dda8a4508c7a51b49c0f6ee111036"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"fdef6d63d41cc7a5776d7aac61e1baf0bccc2f56","unresolved":false,"context_lines":[{"line_number":10,"context_line":"single file path which is exposed as a conf property. This results in a"},{"line_number":11,"context_line":"less than optimal approach from a consumer extension POV. This change"},{"line_number":12,"context_line":"replaces the single extension path approach with dyanmic loading  using"},{"line_number":13,"context_line":"stevedore. Consumers can now bind into the API extensions using the"},{"line_number":14,"context_line":"\u0027trove.api.extensions\u0027 entry point; a standard means to define extension"},{"line_number":15,"context_line":"points. Moreover this change refactors to the"},{"line_number":16,"context_line":"trove.openstack.common.extensions logic into trove.common.extensions."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"baada198_2a1fe472","line":13,"updated":"2014-08-13 13:47:52.000000000","message":"So this would imply that there\u0027s a DIB impact as well. I don\u0027t see a corresponding change for that.","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"43bd36e17d34163f46a936f5848ef16f18aa699b","unresolved":false,"context_lines":[{"line_number":10,"context_line":"single file path which is exposed as a conf property. This results in a"},{"line_number":11,"context_line":"less than optimal approach from a consumer extension POV. This change"},{"line_number":12,"context_line":"replaces the single extension path approach with dyanmic loading  using"},{"line_number":13,"context_line":"stevedore. Consumers can now bind into the API extensions using the"},{"line_number":14,"context_line":"\u0027trove.api.extensions\u0027 entry point; a standard means to define extension"},{"line_number":15,"context_line":"points. Moreover this change refactors to the"},{"line_number":16,"context_line":"trove.openstack.common.extensions logic into trove.common.extensions."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"baada198_4536c950","line":13,"in_reply_to":"baada198_2a1fe472","updated":"2014-08-13 14:02:39.000000000","message":"Can you elaborate please? Why there\u0027s a DIB impact?","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"76ff8049d757fb14ce50fcc65c07da42bc8bbb8c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"single file path which is exposed as a conf property. This results in a"},{"line_number":11,"context_line":"less than optimal approach from a consumer extension POV. This change"},{"line_number":12,"context_line":"replaces the single extension path approach with dyanmic loading  using"},{"line_number":13,"context_line":"stevedore. Consumers can now bind into the API extensions using the"},{"line_number":14,"context_line":"\u0027trove.api.extensions\u0027 entry point; a standard means to define extension"},{"line_number":15,"context_line":"points. Moreover this change refactors to the"},{"line_number":16,"context_line":"trove.openstack.common.extensions logic into trove.common.extensions."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"baada198_a5824500","line":13,"in_reply_to":"baada198_2a1fe472","updated":"2014-08-13 14:10:04.000000000","message":"I assume DIB \u003d \"Disk Image Builder\"? Assuming that\u0027s true then it was my understanding that DIB was only used to build the trove guest image(s) and not the controller. From a guest image perspective I\u0027m not seeing how REST API extensions impact the guest image given the guest does not have a REST API; only an AMQP API.\n\nCould you please clarify?","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"}],"etc/trove/trove-guestagent.conf.sample":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"c7438a91f3d041ca3749a7a1b1a0b87e3cbf0954","unresolved":false,"context_lines":[{"line_number":38,"context_line":"#rabbit_notification_topic \u003d [\u0027notifications\u0027]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"# Path to the extensions"},{"line_number":41,"context_line":"api_extensions_path \u003d trove/extensions/routes"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# Configuration options for talking to nova via the novaclient."},{"line_number":44,"context_line":"# These options are for an admin user in your keystone config."}],"source_content_type":"application/octet-stream","patch_set":6,"id":"9ab29df4_5d9fab03","side":"PARENT","line":41,"updated":"2014-08-13 19:44:43.000000000","message":"I now understand why you are making this change. Makes sense.","commit_id":"1fd4c4508dd53ae5bea22ce2380d917921aa09cd"}],"requirements.txt":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"fdef6d63d41cc7a5776d7aac61e1baf0bccc2f56","unresolved":false,"context_lines":[{"line_number":27,"context_line":"MySQL-python"},{"line_number":28,"context_line":"Babel\u003e\u003d1.3"},{"line_number":29,"context_line":"six\u003e\u003d1.7.0"},{"line_number":30,"context_line":"stevedore\u003e\u003d0.14"}],"source_content_type":"text/plain","patch_set":5,"id":"baada198_e5035d0a","line":30,"updated":"2014-08-13 13:47:52.000000000","message":"this is my reason for asking whether there shouldn\u0027t be a DIB impact and a corresponding change in, maybe redstack/devstack; i.e. trove integration.","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"76ff8049d757fb14ce50fcc65c07da42bc8bbb8c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"MySQL-python"},{"line_number":28,"context_line":"Babel\u003e\u003d1.3"},{"line_number":29,"context_line":"six\u003e\u003d1.7.0"},{"line_number":30,"context_line":"stevedore\u003e\u003d0.14"}],"source_content_type":"text/plain","patch_set":5,"id":"baada198_858aa1ba","line":30,"in_reply_to":"baada198_e5035d0a","updated":"2014-08-13 14:10:04.000000000","message":"I responded to your DIB question in the commit message comment you made.\n\nW/R/T devstack / redstack I\u0027m not aware of how req changes would impact as devstack should install the requirements. I tested this code using devstack to stand up an env and didn\u0027t encounter any issues.\n\nIs there something in particular you are referring to here?","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"43bd36e17d34163f46a936f5848ef16f18aa699b","unresolved":false,"context_lines":[{"line_number":27,"context_line":"MySQL-python"},{"line_number":28,"context_line":"Babel\u003e\u003d1.3"},{"line_number":29,"context_line":"six\u003e\u003d1.7.0"},{"line_number":30,"context_line":"stevedore\u003e\u003d0.14"}],"source_content_type":"text/plain","patch_set":5,"id":"baada198_65f66d60","line":30,"in_reply_to":"baada198_e5035d0a","updated":"2014-08-13 14:02:39.000000000","message":"There\u0027s no need to add patches for trove integration and devstack. Since this packages are being installed once stack.sh called. Guest doesn\u0027t use stevedore.","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"}],"setup.cfg":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"3608116b9702a1be0cd163183ee5d6ed0a202db5","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    trove"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"[entry_points]"},{"line_number":26,"context_line":"console_scripts \u003d "},{"line_number":27,"context_line":"    trove-api \u003d trove.cmd.api:main"},{"line_number":28,"context_line":"    trove-taskmanager \u003d trove.cmd.taskmanager:main"},{"line_number":29,"context_line":"    trove-mgmt-taskmanager \u003d trove.cmd.taskmanager:mgmt_main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"baada198_62cb154a","line":26,"updated":"2014-08-04 13:10:09.000000000","message":"please remove space","commit_id":"6718aad781038419b6478e64a3fa5e4fc0a85d08"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"4fbabca8974f4e2ae9cb0f0de787339979316981","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    trove"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"[entry_points]"},{"line_number":26,"context_line":"console_scripts \u003d "},{"line_number":27,"context_line":"    trove-api \u003d trove.cmd.api:main"},{"line_number":28,"context_line":"    trove-taskmanager \u003d trove.cmd.taskmanager:main"},{"line_number":29,"context_line":"    trove-mgmt-taskmanager \u003d trove.cmd.taskmanager:mgmt_main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"baada198_8e95b23e","line":26,"in_reply_to":"baada198_62cb154a","updated":"2014-08-04 14:32:54.000000000","message":"Done","commit_id":"6718aad781038419b6478e64a3fa5e4fc0a85d08"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"9439b420994d326f68edcca32849886094566edd","unresolved":false,"context_lines":[{"line_number":36,"context_line":"\taccount \u003d trove.extensions.routes.account:Account"},{"line_number":37,"context_line":"\tmgmt \u003d trove.extensions.routes.mgmt:Mgmt"},{"line_number":38,"context_line":"\tmysql \u003d trove.extensions.routes.mysql:Mysql"},{"line_number":39,"context_line":"\tsecurity_group \u003d trove.extensions.routes.security_group:Security_group"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"[global]"},{"line_number":42,"context_line":"setup-hooks \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":3,"id":"baada198_bcbc10b7","line":39,"updated":"2014-08-06 16:25:41.000000000","message":"These should be spaces instead of tabs","commit_id":"046c5ff61f2dda8a4508c7a51b49c0f6ee111036"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"170b4e87a15d9ac1d88e2cb7afc0b80c1cb88d8f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"\taccount \u003d trove.extensions.routes.account:Account"},{"line_number":37,"context_line":"\tmgmt \u003d trove.extensions.routes.mgmt:Mgmt"},{"line_number":38,"context_line":"\tmysql \u003d trove.extensions.routes.mysql:Mysql"},{"line_number":39,"context_line":"\tsecurity_group \u003d trove.extensions.routes.security_group:Security_group"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"[global]"},{"line_number":42,"context_line":"setup-hooks \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":3,"id":"baada198_ccef3df9","line":39,"in_reply_to":"baada198_bcbc10b7","updated":"2014-08-07 08:35:06.000000000","message":"Done","commit_id":"046c5ff61f2dda8a4508c7a51b49c0f6ee111036"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"fc4d8e86fe9fd087953e529edb0a8a5b82123808","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    trove"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"[entry_points]"},{"line_number":26,"context_line":"console_scripts \u003d"},{"line_number":27,"context_line":"    trove-api \u003d trove.cmd.api:main"},{"line_number":28,"context_line":"    trove-taskmanager \u003d trove.cmd.taskmanager:main"},{"line_number":29,"context_line":"    trove-mgmt-taskmanager \u003d trove.cmd.taskmanager:mgmt_main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"baada198_453889cb","line":26,"updated":"2014-08-13 13:57:50.000000000","message":"that was an all-important space, this changes everything ;)","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"c7438a91f3d041ca3749a7a1b1a0b87e3cbf0954","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    trove"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"[entry_points]"},{"line_number":26,"context_line":"console_scripts \u003d "},{"line_number":27,"context_line":"    trove-api \u003d trove.cmd.api:main"},{"line_number":28,"context_line":"    trove-taskmanager \u003d trove.cmd.taskmanager:main"},{"line_number":29,"context_line":"    trove-mgmt-taskmanager \u003d trove.cmd.taskmanager:mgmt_main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"9ab29df4_3dc117e5","side":"PARENT","line":26,"updated":"2014-08-13 19:44:43.000000000","message":"I still think this whitespace is crucial ;)","commit_id":"1fd4c4508dd53ae5bea22ce2380d917921aa09cd"}],"test-requirements.txt":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"fc4d8e86fe9fd087953e529edb0a8a5b82123808","unresolved":false,"context_lines":[{"line_number":17,"context_line":"testtools\u003e\u003d0.9.34"},{"line_number":18,"context_line":"discover"},{"line_number":19,"context_line":"testrepository\u003e\u003d0.0.18"},{"line_number":20,"context_line":"six\u003e\u003d1.7.0"},{"line_number":21,"context_line":""}],"source_content_type":"text/plain","patch_set":5,"id":"baada198_05a5b102","side":"PARENT","line":20,"updated":"2014-08-13 13:57:50.000000000","message":"very interesting that we got away with this for so long!","commit_id":"1fd4c4508dd53ae5bea22ce2380d917921aa09cd"}],"trove/common/extensions.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"fc4d8e86fe9fd087953e529edb0a8a5b82123808","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        e.g. \u00272011-01-22T13:25:27-06:00\u0027"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        \"\"\""},{"line_number":89,"context_line":"        # NOTE(justinsb): Not sure of the purpose of this is, vs the XML NS"},{"line_number":90,"context_line":"        pass"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def get_resources(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_4569698c","line":89,"updated":"2014-08-13 13:57:50.000000000","message":"these comments may have made sense in neutron but maybe we can drop them?","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"0b6da7a24b32f909d56612abd1d1faf7c08bf2dc","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        e.g. \u00272011-01-22T13:25:27-06:00\u0027"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        \"\"\""},{"line_number":89,"context_line":"        # NOTE(justinsb): Not sure of the purpose of this is, vs the XML NS"},{"line_number":90,"context_line":"        pass"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def get_resources(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_a9177fee","line":89,"in_reply_to":"baada198_4569698c","updated":"2014-08-13 14:48:04.000000000","message":"Done","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"fc4d8e86fe9fd087953e529edb0a8a5b82123808","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        ext_data[\u0027description\u0027] \u003d ext.get_description()"},{"line_number":188,"context_line":"        ext_data[\u0027namespace\u0027] \u003d ext.get_namespace()"},{"line_number":189,"context_line":"        ext_data[\u0027updated\u0027] \u003d ext.get_updated()"},{"line_number":190,"context_line":"        ext_data[\u0027links\u0027] \u003d []  # TODO(dprince): implement extension links"},{"line_number":191,"context_line":"        return ext_data"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def index(self, req):"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_c50499c7","line":190,"updated":"2014-08-13 13:57:50.000000000","message":"yeah, he may not be the one doing this ;)","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"0b6da7a24b32f909d56612abd1d1faf7c08bf2dc","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        ext_data[\u0027description\u0027] \u003d ext.get_description()"},{"line_number":188,"context_line":"        ext_data[\u0027namespace\u0027] \u003d ext.get_namespace()"},{"line_number":189,"context_line":"        ext_data[\u0027updated\u0027] \u003d ext.get_updated()"},{"line_number":190,"context_line":"        ext_data[\u0027links\u0027] \u003d []  # TODO(dprince): implement extension links"},{"line_number":191,"context_line":"        return ext_data"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def index(self, req):"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_69b487f1","line":190,"in_reply_to":"baada198_c50499c7","updated":"2014-08-13 14:48:04.000000000","message":"Done","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"fc4d8e86fe9fd087953e529edb0a8a5b82123808","unresolved":false,"context_lines":[{"line_number":355,"context_line":"    EXT_NAMESPACE \u003d \u0027trove.api.extensions\u0027"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    def __init__(self):"},{"line_number":358,"context_line":"        LOG.debug(_(\u0027Initializing extension manager.\u0027))"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        self.extensions \u003d {}"},{"line_number":361,"context_line":"        self._load_all_extensions()"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_85faa1b8","line":358,"updated":"2014-08-13 13:57:50.000000000","message":"don\u0027t wrap debug ...","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"0b6da7a24b32f909d56612abd1d1faf7c08bf2dc","unresolved":false,"context_lines":[{"line_number":355,"context_line":"    EXT_NAMESPACE \u003d \u0027trove.api.extensions\u0027"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    def __init__(self):"},{"line_number":358,"context_line":"        LOG.debug(_(\u0027Initializing extension manager.\u0027))"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        self.extensions \u003d {}"},{"line_number":361,"context_line":"        self._load_all_extensions()"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_e9a417a5","line":358,"in_reply_to":"baada198_85faa1b8","updated":"2014-08-13 14:48:04.000000000","message":"Done","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"fc4d8e86fe9fd087953e529edb0a8a5b82123808","unresolved":false,"context_lines":[{"line_number":384,"context_line":"            try:"},{"line_number":385,"context_line":"                actions.extend(ext.get_actions())"},{"line_number":386,"context_line":"            except AttributeError:"},{"line_number":387,"context_line":"                # NOTE(dprince): Extension aren\u0027t required to have action"},{"line_number":388,"context_line":"                # extensions"},{"line_number":389,"context_line":"                pass"},{"line_number":390,"context_line":"        return actions"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_25e1d5fd","line":387,"updated":"2014-08-13 13:57:50.000000000","message":"fix comments ... I guess there are several so I\u0027ll stop saying this ;)","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"0b6da7a24b32f909d56612abd1d1faf7c08bf2dc","unresolved":false,"context_lines":[{"line_number":384,"context_line":"            try:"},{"line_number":385,"context_line":"                actions.extend(ext.get_actions())"},{"line_number":386,"context_line":"            except AttributeError:"},{"line_number":387,"context_line":"                # NOTE(dprince): Extension aren\u0027t required to have action"},{"line_number":388,"context_line":"                # extensions"},{"line_number":389,"context_line":"                pass"},{"line_number":390,"context_line":"        return actions"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_a9c85f4e","line":387,"in_reply_to":"baada198_25e1d5fd","updated":"2014-08-13 14:48:04.000000000","message":"Done","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"fc4d8e86fe9fd087953e529edb0a8a5b82123808","unresolved":false,"context_lines":[{"line_number":404,"context_line":"    def _check_extension(self, extension):"},{"line_number":405,"context_line":"        \"\"\"Checks for required methods in extension objects.\"\"\""},{"line_number":406,"context_line":"        try:"},{"line_number":407,"context_line":"            LOG.debug(_(\u0027Ext name: %s\u0027), extension.get_name())"},{"line_number":408,"context_line":"            LOG.debug(_(\u0027Ext alias: %s\u0027), extension.get_alias())"},{"line_number":409,"context_line":"            LOG.debug(_(\u0027Ext description: %s\u0027), extension.get_description())"},{"line_number":410,"context_line":"            LOG.debug(_(\u0027Ext namespace: %s\u0027), extension.get_namespace())"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_25c8f575","line":407,"updated":"2014-08-13 13:57:50.000000000","message":"no wrap ... also generic comment for this file and potentially the whole review.\n\nWhy so many calls to LOG.debug? why not one?","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"0b6da7a24b32f909d56612abd1d1faf7c08bf2dc","unresolved":false,"context_lines":[{"line_number":404,"context_line":"    def _check_extension(self, extension):"},{"line_number":405,"context_line":"        \"\"\"Checks for required methods in extension objects.\"\"\""},{"line_number":406,"context_line":"        try:"},{"line_number":407,"context_line":"            LOG.debug(_(\u0027Ext name: %s\u0027), extension.get_name())"},{"line_number":408,"context_line":"            LOG.debug(_(\u0027Ext alias: %s\u0027), extension.get_alias())"},{"line_number":409,"context_line":"            LOG.debug(_(\u0027Ext description: %s\u0027), extension.get_description())"},{"line_number":410,"context_line":"            LOG.debug(_(\u0027Ext namespace: %s\u0027), extension.get_namespace())"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_29c7ef12","line":407,"in_reply_to":"baada198_25c8f575","updated":"2014-08-13 14:48:04.000000000","message":"As you know a bulk of this file is a direct copy / paste from openstack.common.extensions.py, but I agree best to clean up where risk is minimal.\n\nW/R/T this series of debug calls; my preference was to refactor the openstack.common.extensions.py into here with minimal change to reduce risk and moreover I\u0027m not sure a single debug line which includes all this info is much cleaner.\n\nIf you feel this series of calls should be collapsed into a single call I can do that.","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"b6b71ae9d2fbc8f03a56854cf548c5dae2c69248","unresolved":false,"context_lines":[{"line_number":404,"context_line":"    def _check_extension(self, extension):"},{"line_number":405,"context_line":"        \"\"\"Checks for required methods in extension objects.\"\"\""},{"line_number":406,"context_line":"        try:"},{"line_number":407,"context_line":"            LOG.debug(_(\u0027Ext name: %s\u0027), extension.get_name())"},{"line_number":408,"context_line":"            LOG.debug(_(\u0027Ext alias: %s\u0027), extension.get_alias())"},{"line_number":409,"context_line":"            LOG.debug(_(\u0027Ext description: %s\u0027), extension.get_description())"},{"line_number":410,"context_line":"            LOG.debug(_(\u0027Ext namespace: %s\u0027), extension.get_namespace())"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_5a205f9a","line":407,"in_reply_to":"baada198_29c7ef12","updated":"2014-08-13 15:32:00.000000000","message":"I think the main concern is that debug messages shouldn\u0027t be internationalized.  Having multiple debug message calls on something that isn\u0027t run much probably isn\u0027t an issue.","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"fc4d8e86fe9fd087953e529edb0a8a5b82123808","unresolved":false,"context_lines":[{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        In addition, extensions are loaded from the \u0027contrib\u0027 directory."},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        See nova/tests/api/openstack/extensions/foxinsocks.py for an example"},{"line_number":432,"context_line":"        extension implementation."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_c5873910","line":431,"updated":"2014-08-13 13:57:50.000000000","message":"should we do one in Trove?","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"0b6da7a24b32f909d56612abd1d1faf7c08bf2dc","unresolved":false,"context_lines":[{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        In addition, extensions are loaded from the \u0027contrib\u0027 directory."},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        See nova/tests/api/openstack/extensions/foxinsocks.py for an example"},{"line_number":432,"context_line":"        extension implementation."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_699f2703","line":431,"in_reply_to":"baada198_251f1573","updated":"2014-08-13 14:48:04.000000000","message":"Done","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"0b6da7a24b32f909d56612abd1d1faf7c08bf2dc","unresolved":false,"context_lines":[{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        In addition, extensions are loaded from the \u0027contrib\u0027 directory."},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        See nova/tests/api/openstack/extensions/foxinsocks.py for an example"},{"line_number":432,"context_line":"        extension implementation."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_29952fe3","line":431,"in_reply_to":"baada198_c5873910","updated":"2014-08-13 14:48:04.000000000","message":"Done","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"43bd36e17d34163f46a936f5848ef16f18aa699b","unresolved":false,"context_lines":[{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        In addition, extensions are loaded from the \u0027contrib\u0027 directory."},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        See nova/tests/api/openstack/extensions/foxinsocks.py for an example"},{"line_number":432,"context_line":"        extension implementation."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_251f1573","line":431,"in_reply_to":"baada198_c5873910","updated":"2014-08-13 14:02:39.000000000","message":"all this code was moved from openstack/common so it may be cleaned up.","commit_id":"9038338341f4a080ab9689d7d10b1e99a15d8b25"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"c7438a91f3d041ca3749a7a1b1a0b87e3cbf0954","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from trove.openstack.common import exception"},{"line_number":28,"context_line":"from trove.common import cfg"},{"line_number":29,"context_line":"from trove.common import wsgi"},{"line_number":30,"context_line":"from trove.openstack.common.gettextutils import _  # noqa"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ab29df4_5d6deb03","line":30,"updated":"2014-08-13 19:44:43.000000000","message":"You shouldn\u0027t need the noqa here","commit_id":"c9fd5a6a0bd28ac785e0a19770fbeb6d57280009"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"c7438a91f3d041ca3749a7a1b1a0b87e3cbf0954","unresolved":false,"context_lines":[{"line_number":391,"context_line":"    def _check_extension(self, extension):"},{"line_number":392,"context_line":"        \"\"\"Checks for required methods in extension objects.\"\"\""},{"line_number":393,"context_line":"        try:"},{"line_number":394,"context_line":"            LOG.debug(\u0027Ext name: %s\u0027, extension.get_name())"},{"line_number":395,"context_line":"            LOG.debug(\u0027Ext alias: %s\u0027, extension.get_alias())"},{"line_number":396,"context_line":"            LOG.debug(\u0027Ext description: %s\u0027, extension.get_description())"},{"line_number":397,"context_line":"            LOG.debug(\u0027Ext namespace: %s\u0027, extension.get_namespace())"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ab29df4_bd5a874e","line":394,"updated":"2014-08-13 19:44:43.000000000","message":"this is fine for now, per your earlier comments.","commit_id":"c9fd5a6a0bd28ac785e0a19770fbeb6d57280009"},{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"566e2a61f645f1b9ebb36cde36187d30134b611f","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        self.serializer \u003d serializer"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"class ExtensionsXMLSerializer(os_wsgi.XMLDictSerializer):"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    def __init__(self):"},{"line_number":468,"context_line":"        self.nsmap \u003d {None: DEFAULT_XMLNS, \u0027atom\u0027: XMLNS_ATOM}"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_66ec60bc","line":465,"updated":"2014-08-27 17:40:27.000000000","message":"Trove does not support xml for the api. So this is not needed.","commit_id":"c9fd5a6a0bd28ac785e0a19770fbeb6d57280009"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"635d9597fa8260e22c7baa0071c15cf7bee59cf6","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        self.serializer \u003d serializer"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"class ExtensionsXMLSerializer(os_wsgi.XMLDictSerializer):"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    def __init__(self):"},{"line_number":468,"context_line":"        self.nsmap \u003d {None: DEFAULT_XMLNS, \u0027atom\u0027: XMLNS_ATOM}"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_7766c8bc","line":465,"in_reply_to":"1abeadc6_66ec60bc","updated":"2014-08-27 18:59:32.000000000","message":"agreed, this adds a unnecessary dependency on lxml, which was recently removed.","commit_id":"c9fd5a6a0bd28ac785e0a19770fbeb6d57280009"}],"trove/openstack/common/extensions.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"3608116b9702a1be0cd163183ee5d6ed0a202db5","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":17,"context_line":"#    under the License."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import abc"},{"line_number":20,"context_line":"import imp"},{"line_number":21,"context_line":"import os"},{"line_number":22,"context_line":"import routes"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_c22a21e6","line":19,"updated":"2014-08-04 13:10:09.000000000","message":"There\u0027s an issue with this file, it was deleted from official oslo repository.\nSo, as i can see, we have only one way, we need to move this file from here to trove/common package to allow any modifications with it.","commit_id":"6718aad781038419b6478e64a3fa5e4fc0a85d08"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"4fbabca8974f4e2ae9cb0f0de787339979316981","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":17,"context_line":"#    under the License."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import abc"},{"line_number":20,"context_line":"import imp"},{"line_number":21,"context_line":"import os"},{"line_number":22,"context_line":"import routes"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_cea32aaf","line":19,"in_reply_to":"baada198_c22a21e6","updated":"2014-08-04 14:32:54.000000000","message":"Denis -- could you please provide additional clarity / details on this one? As I understand abc is provided by the base python runtime / lib since 2.6, see here: https://docs.python.org/2/library/abc.html\n\nThat said I\u0027m not quite sure what problem you are referring to here.","commit_id":"6718aad781038419b6478e64a3fa5e4fc0a85d08"}]}
