)]}'
{"nova/api/openstack/__init__.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b3f2434d00609b5c8eb97ebb03cb799c4224ac81","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        # be able to exclude based on a config file"},{"line_number":214,"context_line":"        def _check_load_extension(ext):"},{"line_number":215,"context_line":"            if (self.init_only is None or ext.obj.alias in"},{"line_number":216,"context_line":"                self.init_only) and isinstance(ext.obj,"},{"line_number":217,"context_line":"                                               extensions.V3APIExtensionBase):"},{"line_number":218,"context_line":"                return self._register_extension(ext)"},{"line_number":219,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2Fh%2F8%3D","line":216,"updated":"2013-05-06 17:48:08.000000000","message":"I don\u0027t see where init_only is being setattr\u0027d to self?","commit_id":"0a94150bc8777060f490b8ed6d1f56fc4b3f401f"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e727ff7676b47a362f567a4f77bbe630345b6bf6","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        # be able to exclude based on a config file"},{"line_number":214,"context_line":"        def _check_load_extension(ext):"},{"line_number":215,"context_line":"            if (self.init_only is None or ext.obj.alias in"},{"line_number":216,"context_line":"                self.init_only) and isinstance(ext.obj,"},{"line_number":217,"context_line":"                                               extensions.V3APIExtensionBase):"},{"line_number":218,"context_line":"                return self._register_extension(ext)"},{"line_number":219,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FhGg%3D","line":216,"in_reply_to":"AAAAOn%2F%2Fh%2F8%3D","updated":"2013-05-07 05:48:07.000000000","message":"It is set on line 222","commit_id":"0a94150bc8777060f490b8ed6d1f56fc4b3f401f"},{"author":{"_account_id":1711,"name":"Yun Mao","email":"yunmao@gmail.com","username":"yunmao"},"change_message_id":"533e05ce69ff1544637ca5f05684b2f9ff2a8835","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            namespace\u003dself.API_EXTENSION_NAMESPACE,"},{"line_number":226,"context_line":"            check_func\u003d_check_load_extension,"},{"line_number":227,"context_line":"            invoke_on_load\u003dTrue,"},{"line_number":228,"context_line":"            invoke_kwds\u003d{\"extension_info\": self.loaded_extension_info})"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        mapper \u003d ProjectMapper()"},{"line_number":231,"context_line":"        self.resources \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Fcj4%3D","line":228,"updated":"2013-05-09 12:25:32.000000000","message":"loaded_extension_info doesn\u0027t exist for this base class per pylint.","commit_id":"75fe93fbd81151e2dc2c4c8cb33b1a766c5bcf2c"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"9fdd2057dbaefdc614c6bd0e1a7a58dfc9aeaaa6","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            namespace\u003dself.API_EXTENSION_NAMESPACE,"},{"line_number":226,"context_line":"            check_func\u003d_check_load_extension,"},{"line_number":227,"context_line":"            invoke_on_load\u003dTrue,"},{"line_number":228,"context_line":"            invoke_kwds\u003d{\"extension_info\": self.loaded_extension_info})"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        mapper \u003d ProjectMapper()"},{"line_number":231,"context_line":"        self.resources \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Fbfk%3D","line":228,"in_reply_to":"AAAAOn%2F%2FcU0%3D","updated":"2013-05-09 21:51:15.000000000","message":"I don\u0027t think there really is a future use case here - APIRouter has been around for a long time and it hasn\u0027t been taken advantage of so far and I just modelled APIRouterV3 on that. I might take the conservative approach and just collapse that one bit of functionality. it wouldn\u0027t be that hard to pull out again if we had to.","commit_id":"75fe93fbd81151e2dc2c4c8cb33b1a766c5bcf2c"},{"author":{"_account_id":1711,"name":"Yun Mao","email":"yunmao@gmail.com","username":"yunmao"},"change_message_id":"6cb7a747a08a412682ffd775cfa23fa88ce679f1","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            namespace\u003dself.API_EXTENSION_NAMESPACE,"},{"line_number":226,"context_line":"            check_func\u003d_check_load_extension,"},{"line_number":227,"context_line":"            invoke_on_load\u003dTrue,"},{"line_number":228,"context_line":"            invoke_kwds\u003d{\"extension_info\": self.loaded_extension_info})"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        mapper \u003d ProjectMapper()"},{"line_number":231,"context_line":"        self.resources \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FcU0%3D","line":228,"in_reply_to":"AAAAOn%2F%2Fchs%3D","updated":"2013-05-09 14:58:05.000000000","message":"Interesting. Do we have a future use case where another subclass for the APIRouterV3 would be written? If there is a chance, collapsing would not be ideal. Maybe adding an dummy method in here with NotImplementedError thrown would be enough. Anyway i\u0027m nitpicking here. :)","commit_id":"75fe93fbd81151e2dc2c4c8cb33b1a766c5bcf2c"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e04ee38c51a9e7efe1e871c22c4a908f831571cc","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            namespace\u003dself.API_EXTENSION_NAMESPACE,"},{"line_number":226,"context_line":"            check_func\u003d_check_load_extension,"},{"line_number":227,"context_line":"            invoke_on_load\u003dTrue,"},{"line_number":228,"context_line":"            invoke_kwds\u003d{\"extension_info\": self.loaded_extension_info})"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        mapper \u003d ProjectMapper()"},{"line_number":231,"context_line":"        self.resources \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Fchs%3D","line":228,"in_reply_to":"AAAAOn%2F%2Fcj4%3D","updated":"2013-05-09 12:52:22.000000000","message":"Its not, but it is in nova/api/openstack/compute/__init__.py:APIRouterV3 which is always the class which is instantiated. Its exactly the same approach that the existing APIRouter class takes for tracking extension information\n\nIf we don\u0027t want to do this we could I guess collapse the APIRouter and APIRouterV3 class hierarchy.","commit_id":"75fe93fbd81151e2dc2c4c8cb33b1a766c5bcf2c"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"ea839007f840a4a9c2f786cd86959b575773017c","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        handler \u003d ext.obj"},{"line_number":301,"context_line":"        LOG.debug(_(\"Running _register_controllers on %s\"), ext.obj)"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        for extension in handler.get_controller_extensions():"},{"line_number":304,"context_line":"            ext_name \u003d extension.extension.name"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2FteU%3D","line":301,"updated":"2013-05-27 01:17:50.000000000","message":"This is fine, but in general, try to avoid making any unnecessary changes, especially in a big patch like this.","commit_id":"c9c09d0d75cdca1c6c19ea23d786b0bccf34ba3d"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"35444dab0c65f5229db8c8665d5ef6d5d6453bd3","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        handler \u003d ext.obj"},{"line_number":301,"context_line":"        LOG.debug(_(\"Running _register_controllers on %s\"), ext.obj)"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        for extension in handler.get_controller_extensions():"},{"line_number":304,"context_line":"            ext_name \u003d extension.extension.name"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2FsDo%3D","line":301,"in_reply_to":"AAAAPH%2F%2FteU%3D","updated":"2013-05-27 01:29:06.000000000","message":"ok. Turns out I have to rebase this patch and merge some updates for servers.py anyway so I\u0027ll remove this fix up for now.","commit_id":"c9c09d0d75cdca1c6c19ea23d786b0bccf34ba3d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"82846b4e574bc136dc2a716446ffcf2923ab715e","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        def _check_load_extension(ext):"},{"line_number":230,"context_line":"            if (self.init_only is None or ext.obj.alias in"},{"line_number":231,"context_line":"                self.init_only) and isinstance(ext.obj,"},{"line_number":232,"context_line":"                                               extensions.V3APIExtensionBase):"},{"line_number":233,"context_line":"                return self._register_extension(ext)"},{"line_number":234,"context_line":"            else:"},{"line_number":235,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2Fo7M%3D","line":232,"updated":"2013-05-28 21:09:11.000000000","message":"Is it possible somebody could instantiate this class like APIRouterV3(init_only\u003dFalse) or APIRouterV3(False)?\n\nIf so:\n\nif(self.init_only or ext.obj.alias in\n   self.init_only) and isinstance(ext.obj,\n                                  extensions.V3APIExtensionBase):","commit_id":"d7da449eef09d6d86d10ffc354e614b58b08d1ce"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a0478fc044717b787020960d539eed0792a14cf4","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        def _check_load_extension(ext):"},{"line_number":230,"context_line":"            if (self.init_only is None or ext.obj.alias in"},{"line_number":231,"context_line":"                self.init_only) and isinstance(ext.obj,"},{"line_number":232,"context_line":"                                               extensions.V3APIExtensionBase):"},{"line_number":233,"context_line":"                return self._register_extension(ext)"},{"line_number":234,"context_line":"            else:"},{"line_number":235,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2FoYE%3D","line":232,"in_reply_to":"AAAAPH%2F%2Fo7M%3D","updated":"2013-05-28 22:28:12.000000000","message":"They could, but they shouldn\u0027t :-) The init_only is meant to be a list of the only extensions to load and is only used by the unittests. Perhaps a docstring would help here?","commit_id":"d7da449eef09d6d86d10ffc354e614b58b08d1ce"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"82846b4e574bc136dc2a716446ffcf2923ab715e","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    @property"},{"line_number":259,"context_line":"    def loaded_extension_info(self):"},{"line_number":260,"context_line":"        raise NotImplementedError"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def _register_extension(self, ext):"},{"line_number":263,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2Fo2I%3D","line":260,"updated":"2013-05-28 21:09:11.000000000","message":"Do we want to stay consistent with the other code like:\n\nraise NotImplementedError()\n\nAlso I learned two- and three-expression raise statements are deprecated in Python 3.x so e.g.\n\nraise NotImplementedError, \u0027a message\u0027\n\nwouldn\u0027t work: http://www.python.org/dev/peps/pep-3109/#compatibility-issues","commit_id":"d7da449eef09d6d86d10ffc354e614b58b08d1ce"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a0478fc044717b787020960d539eed0792a14cf4","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    @property"},{"line_number":259,"context_line":"    def loaded_extension_info(self):"},{"line_number":260,"context_line":"        raise NotImplementedError"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def _register_extension(self, ext):"},{"line_number":263,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2FoXs%3D","line":260,"in_reply_to":"AAAAPH%2F%2Fo2I%3D","updated":"2013-05-28 22:28:12.000000000","message":"yes, should definitely fix this.","commit_id":"d7da449eef09d6d86d10ffc354e614b58b08d1ce"}],"nova/api/openstack/compute/__init__.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b3f2434d00609b5c8eb97ebb03cb799c4224ac81","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    and method."},{"line_number":141,"context_line":"    \"\"\""},{"line_number":142,"context_line":"    def __init__(self, init_only\u003dNone):"},{"line_number":143,"context_line":"        self.loaded_extension_info \u003d plugins.LoadedExtensionInfo()"},{"line_number":144,"context_line":"        super(APIRouterV3, self).__init__(init_only)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _register_extension(self, ext):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2Fh%2Fs%3D","line":143,"updated":"2013-05-06 17:48:08.000000000","message":"I\u0027m a bit concerned about the semantics here. Plugins and extensions are two common terms, but should they be used in place of each other like the above connotes?","commit_id":"0a94150bc8777060f490b8ed6d1f56fc4b3f401f"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e727ff7676b47a362f567a4f77bbe630345b6bf6","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    and method."},{"line_number":141,"context_line":"    \"\"\""},{"line_number":142,"context_line":"    def __init__(self, init_only\u003dNone):"},{"line_number":143,"context_line":"        self.loaded_extension_info \u003d plugins.LoadedExtensionInfo()"},{"line_number":144,"context_line":"        super(APIRouterV3, self).__init__(init_only)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _register_extension(self, ext):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FhGY%3D","line":143,"in_reply_to":"AAAAOn%2F%2Fh%2Fs%3D","updated":"2013-05-07 05:48:07.000000000","message":"Yea i see your point. Its an artifact of having to chose a subdirectory name to put all the extensions into. Can\u0027t use extensions because of name clash reasons, but welcome any suggestions. Contrib is not really appropriate because core API functionality will also be implemented as plugins/extensions","commit_id":"0a94150bc8777060f490b8ed6d1f56fc4b3f401f"}],"nova/api/openstack/compute/plugins/__init__.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"53affb682df4f4e5ae175f765a25a0b1d868a345","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def _check_extension(self, extension):"},{"line_number":44,"context_line":"        \"\"\"Checks for required methods in extension objects.\"\"\""},{"line_number":45,"context_line":"        try:"},{"line_number":46,"context_line":"            LOG.debug(_(\u0027Ext name: %s\u0027), extension.name)"},{"line_number":47,"context_line":"            LOG.debug(_(\u0027Ext alias: %s\u0027), extension.alias)"},{"line_number":48,"context_line":"            LOG.debug(_(\u0027Ext description: %s\u0027),"},{"line_number":49,"context_line":"                      \u0027 \u0027.join(extension.__doc__.strip().split()))"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2Fm3E%3D","line":46,"updated":"2013-05-29 13:31:05.000000000","message":"are these still executed when we aren\u0027t at debug?","commit_id":"d7da449eef09d6d86d10ffc354e614b58b08d1ce"}],"nova/api/openstack/compute/plugins/v3/extension_info.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"6609c8286cf16149b33681b54b30dd5facd15c89","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from nova.api.openstack import xmlutil"},{"line_number":22,"context_line":"from nova.openstack.common import log as logging"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def make_ext(elem):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FhAk%3D","line":24,"updated":"2013-05-07 06:46:25.000000000","message":"The above \"LOG\" is not used.","commit_id":"0a94150bc8777060f490b8ed6d1f56fc4b3f401f"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"c582b59fa48273b69104a8677bf196ec74972a05","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from nova.api.openstack import xmlutil"},{"line_number":22,"context_line":"from nova.openstack.common import log as logging"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def make_ext(elem):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2Fgo8%3D","line":24,"in_reply_to":"AAAAOn%2F%2FhAk%3D","updated":"2013-05-07 13:04:05.000000000","message":"Done","commit_id":"0a94150bc8777060f490b8ed6d1f56fc4b3f401f"}],"nova/api/openstack/compute/plugins/v3/keypairs.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b3f2434d00609b5c8eb97ebb03cb799c4224ac81","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def get_resources(self):"},{"line_number":201,"context_line":"        resources \u003d ["},{"line_number":202,"context_line":"            extensions.ResourceExtension(\u0027os-keypairs\u0027,"},{"line_number":203,"context_line":"                                         KeypairController())]"},{"line_number":204,"context_line":"        return resources"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2Fh%2Bs%3D","line":202,"updated":"2013-05-06 17:48:08.000000000","message":"Why /os-keypairs and not /keypairs? :( Isn\u0027t this part of the core API by v3?","commit_id":"0a94150bc8777060f490b8ed6d1f56fc4b3f401f"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e727ff7676b47a362f567a4f77bbe630345b6bf6","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def get_resources(self):"},{"line_number":201,"context_line":"        resources \u003d ["},{"line_number":202,"context_line":"            extensions.ResourceExtension(\u0027os-keypairs\u0027,"},{"line_number":203,"context_line":"                                         KeypairController())]"},{"line_number":204,"context_line":"        return resources"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FhGE%3D","line":202,"in_reply_to":"AAAAOn%2F%2Fh%2Bs%3D","updated":"2013-05-07 05:48:07.000000000","message":"I believe its on the list to consider. Not sure if a final decision was made about it. Though honestly I didn\u0027t think about it at the the time of the port. keypairs was chosen as an example of a controller extension that also needs some server extension modifications as well.\n\nI\u0027m happy to change it now, but importantly I don\u0027t think that anything commited for the V3 API in terms of the protocol should be seen as set in concrete until late in H3 when we have all the tests up and running. We\u0027ll probably have to have more than one pass over all the extensions ported to make sure we really have fixed everything we\u0027re meaning to. And I don\u0027t want us to be tied down to a protocol after just the first commit, but until we have done a release.","commit_id":"0a94150bc8777060f490b8ed6d1f56fc4b3f401f"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"9f4b11ca4db1af0e1b4610d0ea446571492a5b7d","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    name \u003d \"Keypairs\""},{"line_number":196,"context_line":"    alias \u003d \"os-keypairs\""},{"line_number":197,"context_line":"    namespace \u003d \"http://docs.openstack.org/compute/ext/keypairs/api/v1.1\""},{"line_number":198,"context_line":"    version \u003d 1"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def get_resources(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Fc8I%3D","line":197,"updated":"2013-05-10 02:09:00.000000000","message":"Should be api/v3?","commit_id":"75fe93fbd81151e2dc2c4c8cb33b1a766c5bcf2c"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"ea839007f840a4a9c2f786cd86959b575773017c","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"authorize \u003d extensions.extension_authorizer(\u0027compute\u0027, \u0027keypairs\u0027)"},{"line_number":32,"context_line":"soft_authorize \u003d extensions.soft_extension_authorizer(\u0027compute\u0027, \u0027keypairs\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class KeypairTemplate(xmlutil.TemplateBuilder):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2FsEQ%3D","line":32,"updated":"2013-05-27 01:17:50.000000000","message":"Do these need to change based on the ML discussion on naming?","commit_id":"c9c09d0d75cdca1c6c19ea23d786b0bccf34ba3d"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"35444dab0c65f5229db8c8665d5ef6d5d6453bd3","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"authorize \u003d extensions.extension_authorizer(\u0027compute\u0027, \u0027keypairs\u0027)"},{"line_number":32,"context_line":"soft_authorize \u003d extensions.soft_extension_authorizer(\u0027compute\u0027, \u0027keypairs\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class KeypairTemplate(xmlutil.TemplateBuilder):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2FsDQ%3D","line":32,"in_reply_to":"AAAAPH%2F%2FsEQ%3D","updated":"2013-05-27 01:29:06.000000000","message":"yes, since rebasing might as well make this change now.","commit_id":"c9c09d0d75cdca1c6c19ea23d786b0bccf34ba3d"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"75905b067cfe90aa980eb8992307abfee929806d","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"authorize \u003d extensions.extension_authorizer(\u0027compute\u0027, \u0027v3:keypairs\u0027)"},{"line_number":32,"context_line":"soft_authorize \u003d extensions.soft_extension_authorizer(\u0027compute\u0027, \u0027v3:keypairs\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class KeypairTemplate(xmlutil.TemplateBuilder):"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2FrZo%3D","line":32,"updated":"2013-05-27 14:56:43.000000000","message":"So are we using the name here?  or alias?  I thought we said alias on the mailing list.","commit_id":"4dc155dbfaebd5d3e63cd942609d01cd24c11042"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"f9be48224349fdaee5ad699cefaacb032f2903b7","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"authorize \u003d extensions.extension_authorizer(\u0027compute\u0027, \u0027v3:keypairs\u0027)"},{"line_number":32,"context_line":"soft_authorize \u003d extensions.soft_extension_authorizer(\u0027compute\u0027, \u0027v3:keypairs\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class KeypairTemplate(xmlutil.TemplateBuilder):"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2FrXI%3D","line":32,"in_reply_to":"AAAAPH%2F%2FrZo%3D","updated":"2013-05-27 15:20:32.000000000","message":"yes, you\u0027re right. I\u0027ll fix it. Was just thinking about the v3 prefix at the time.","commit_id":"4dc155dbfaebd5d3e63cd942609d01cd24c11042"}],"nova/api/openstack/compute/plugins/v3/servers.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"3aec7a1a48051cbbdd693e04564dcd4d621233db","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        attributes \u003d [\"name\", \"imageRef\", \"flavorRef\", \"adminPass\","},{"line_number":182,"context_line":"                      \"accessIPv4\", \"accessIPv6\", \"key_name\","},{"line_number":183,"context_line":"                      \"availability_zone\", \"min_count\", \"max_count\"]"},{"line_number":184,"context_line":"        for attr in attributes:"},{"line_number":185,"context_line":"            if server_node.getAttribute(attr):"},{"line_number":186,"context_line":"                server[attr] \u003d server_node.getAttribute(attr)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FhME%3D","line":183,"updated":"2013-05-07 02:47:16.000000000","message":"Will the above \"key_name\" be removed?","commit_id":"0a94150bc8777060f490b8ed6d1f56fc4b3f401f"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e727ff7676b47a362f567a4f77bbe630345b6bf6","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        attributes \u003d [\"name\", \"imageRef\", \"flavorRef\", \"adminPass\","},{"line_number":182,"context_line":"                      \"accessIPv4\", \"accessIPv6\", \"key_name\","},{"line_number":183,"context_line":"                      \"availability_zone\", \"min_count\", \"max_count\"]"},{"line_number":184,"context_line":"        for attr in attributes:"},{"line_number":185,"context_line":"            if server_node.getAttribute(attr):"},{"line_number":186,"context_line":"                server[attr] \u003d server_node.getAttribute(attr)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FhGA%3D","line":183,"in_reply_to":"AAAAOn%2F%2FhME%3D","updated":"2013-05-07 05:48:07.000000000","message":"yes, good point. Anything related to an extension outside of servers.py will be removed.","commit_id":"0a94150bc8777060f490b8ed6d1f56fc4b3f401f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"3aec7a1a48051cbbdd693e04564dcd4d621233db","unresolved":false,"context_lines":[{"line_number":1112,"context_line":"                    \u0027confirmResize\u0027)"},{"line_number":1113,"context_line":"        except Exception, e:"},{"line_number":1114,"context_line":"            LOG.exception(_(\"Error in confirm-resize %s\"), e)"},{"line_number":1115,"context_line":"            raise exc.HTTPBadRequest()"},{"line_number":1116,"context_line":"        return exc.HTTPNoContent()"},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"    @wsgi.response(202)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FhRs%3D","line":1115,"updated":"2013-05-07 02:47:16.000000000","message":"The above 1113-1115 are new lines since nova/api/openstack/compute/servers.py, and are they necessary for applying extension framework?\nAlso there are similar lines(1136-1138, 1166-1168).","commit_id":"0a94150bc8777060f490b8ed6d1f56fc4b3f401f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"6609c8286cf16149b33681b54b30dd5facd15c89","unresolved":false,"context_lines":[{"line_number":1112,"context_line":"                    \u0027confirmResize\u0027)"},{"line_number":1113,"context_line":"        except Exception, e:"},{"line_number":1114,"context_line":"            LOG.exception(_(\"Error in confirm-resize %s\"), e)"},{"line_number":1115,"context_line":"            raise exc.HTTPBadRequest()"},{"line_number":1116,"context_line":"        return exc.HTTPNoContent()"},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"    @wsgi.response(202)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FhBM%3D","line":1115,"in_reply_to":"AAAAOn%2F%2FhF0%3D","updated":"2013-05-07 06:46:25.000000000","message":"I see, thanks to the explanation.\n\n\u003e new stuff will only be applied to v3 and bug fixes to both.\n\nagreed.","commit_id":"0a94150bc8777060f490b8ed6d1f56fc4b3f401f"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e727ff7676b47a362f567a4f77bbe630345b6bf6","unresolved":false,"context_lines":[{"line_number":1112,"context_line":"                    \u0027confirmResize\u0027)"},{"line_number":1113,"context_line":"        except Exception, e:"},{"line_number":1114,"context_line":"            LOG.exception(_(\"Error in confirm-resize %s\"), e)"},{"line_number":1115,"context_line":"            raise exc.HTTPBadRequest()"},{"line_number":1116,"context_line":"        return exc.HTTPNoContent()"},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"    @wsgi.response(202)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FhF0%3D","line":1115,"in_reply_to":"AAAAOn%2F%2FhRs%3D","updated":"2013-05-07 05:48:07.000000000","message":"No, I\u0027m guessing they were removed and I have an older version of servers.py. This is one issue we\u0027re going to have to address. There will be a crossover time where I have to port feature changes across and then at some  point new stuff will only be applied to v3 and bug fixes to both.","commit_id":"0a94150bc8777060f490b8ed6d1f56fc4b3f401f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"3aec7a1a48051cbbdd693e04564dcd4d621233db","unresolved":false,"context_lines":[{"line_number":1449,"context_line":"                                                  extra_properties\u003dprops)"},{"line_number":1450,"context_line":"        except exception.InstanceInvalidState as state_error:"},{"line_number":1451,"context_line":"            common.raise_http_conflict_for_instance_invalid_state(state_error,"},{"line_number":1452,"context_line":"                        \u0027createImage\u0027)"},{"line_number":1453,"context_line":""},{"line_number":1454,"context_line":"        # build location of newly-created image entity"},{"line_number":1455,"context_line":"        image_id \u003d str(image[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FhQA%3D","line":1452,"updated":"2013-05-07 02:47:16.000000000","message":"The following lines are removed from nova/api/openstack/compute/servers.py.\n        except exception.Invalid as err:\n            raise exc.HTTPBadRequest(explanation\u003dstr(err))","commit_id":"0a94150bc8777060f490b8ed6d1f56fc4b3f401f"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e727ff7676b47a362f567a4f77bbe630345b6bf6","unresolved":false,"context_lines":[{"line_number":1449,"context_line":"                                                  extra_properties\u003dprops)"},{"line_number":1450,"context_line":"        except exception.InstanceInvalidState as state_error:"},{"line_number":1451,"context_line":"            common.raise_http_conflict_for_instance_invalid_state(state_error,"},{"line_number":1452,"context_line":"                        \u0027createImage\u0027)"},{"line_number":1453,"context_line":""},{"line_number":1454,"context_line":"        # build location of newly-created image entity"},{"line_number":1455,"context_line":"        image_id \u003d str(image[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FhFs%3D","line":1452,"in_reply_to":"AAAAOn%2F%2FhQA%3D","updated":"2013-05-07 05:48:07.000000000","message":"same reason as above I think.","commit_id":"0a94150bc8777060f490b8ed6d1f56fc4b3f401f"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"6c7a2a1da6aec5738ba4ec20ac8d5934c1392e7a","unresolved":false,"context_lines":[{"line_number":727,"context_line":"                    # check if the network id is already present in the list,"},{"line_number":728,"context_line":"                    # we don\u0027t want duplicate networks to be passed"},{"line_number":729,"context_line":"                    # at the boot time"},{"line_number":730,"context_line":"                    for id, ip in networks:"},{"line_number":731,"context_line":"                        if id \u003d\u003d network_uuid:"},{"line_number":732,"context_line":"                            expl \u003d (_(\"Duplicate networks\""},{"line_number":733,"context_line":"                                      \" (%s) are not allowed\") %"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2Fpck%3D","line":730,"updated":"2013-05-28 16:44:46.000000000","message":"Shadowing builtin id.\n\nAlso, walking the whole list every time is inefficient.  Doesn\u0027t matter if the list is always short, though.  Is that guaranteed?","commit_id":"d7da449eef09d6d86d10ffc354e614b58b08d1ce"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"be3bed8a95b63437973896ff8d0c9d9ee66f7938","unresolved":false,"context_lines":[{"line_number":727,"context_line":"                    # check if the network id is already present in the list,"},{"line_number":728,"context_line":"                    # we don\u0027t want duplicate networks to be passed"},{"line_number":729,"context_line":"                    # at the boot time"},{"line_number":730,"context_line":"                    for id, ip in networks:"},{"line_number":731,"context_line":"                        if id \u003d\u003d network_uuid:"},{"line_number":732,"context_line":"                            expl \u003d (_(\"Duplicate networks\""},{"line_number":733,"context_line":"                                      \" (%s) are not allowed\") %"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2FpIU%3D","line":730,"in_reply_to":"AAAAPH%2F%2Fpck%3D","updated":"2013-05-28 18:28:08.000000000","message":"Hi David, this part is unchanged from V2. Am not saying it can\u0027t be made better but for ease of reviewability and tracking what has changed, changes are fairly minimal to what is required to get servers into the V3 framework. And then we can improve things in future changesets.","commit_id":"d7da449eef09d6d86d10ffc354e614b58b08d1ce"}]}
