)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"1a13989ffe98da3ce1c6250c7f25f8b7e2ed2be0","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Image member name validation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When adding a new member to an image whose name is longer than 255"},{"line_number":10,"context_line":"characters an Internal Server Error occurs (500). Its caused by databse"},{"line_number":11,"context_line":"restriction which defines member field as varchar(255). The issue"},{"line_number":12,"context_line":"affects both - API v1 and v2."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa32b979_da363b50","line":9,"updated":"2015-06-18 21:44:12.000000000","message":"Actually, member is a tenant, and here we\u0027re using tenant id instead of name. So I think the commit message is a little bit confused.","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1f852984806fb6906410127f08f42c50c0efb084","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Image member name validation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When adding a new member to an image whose name is longer than 255"},{"line_number":10,"context_line":"characters an Internal Server Error occurs (500). Its caused by databse"},{"line_number":11,"context_line":"restriction which defines member field as varchar(255). The issue"},{"line_number":12,"context_line":"affects both - API v1 and v2."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa32b979_11592435","line":9,"in_reply_to":"fa32b979_da363b50","updated":"2015-06-25 09:49:25.000000000","message":"Done","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"2ff8a6cce480ec5cf1dc5ae0832d76a8ba28f54d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Image member name validation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When adding a new member to an image whose name is longer than 255"},{"line_number":10,"context_line":"characters an Internal Server Error occurs (500). Its caused by databse"},{"line_number":11,"context_line":"restriction which defines member field as varchar(255). The issue"},{"line_number":12,"context_line":"affects both - API v1 and v2."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa32b979_ae7eeb18","line":10,"updated":"2015-06-24 01:12:43.000000000","message":"s/databse/database","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1f852984806fb6906410127f08f42c50c0efb084","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Image member name validation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When adding a new member to an image whose name is longer than 255"},{"line_number":10,"context_line":"characters an Internal Server Error occurs (500). Its caused by databse"},{"line_number":11,"context_line":"restriction which defines member field as varchar(255). The issue"},{"line_number":12,"context_line":"affects both - API v1 and v2."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa32b979_715f500f","line":10,"in_reply_to":"fa32b979_ae7eeb18","updated":"2015-06-25 09:49:25.000000000","message":"Done","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"df2433ad055dbfa0c8618e118c794e06ed329892","unresolved":false,"context_lines":[{"line_number":19,"context_line":"deserializer to provide better way of handling any kind of validation."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I21c84d4af8481edbe867fe04d57ce154931fde5d"},{"line_number":22,"context_line":"Closes-Bug: 1424038"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa32b979_0ca9ed8f","line":22,"updated":"2015-06-24 22:54:18.000000000","message":"Also, #1424038","commit_id":"6a14c4186c4eef39bc6af610b56f418950a95e2e"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"a93af0990ece28351eeee16714fac9050f63b959","unresolved":false,"context_lines":[{"line_number":19,"context_line":"deserializer to provide better way of handling any kind of validation."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I21c84d4af8481edbe867fe04d57ce154931fde5d"},{"line_number":22,"context_line":"Closes-Bug: 1424038"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa32b979_402d66fc","line":22,"in_reply_to":"fa32b979_0ca9ed8f","updated":"2015-06-25 09:56:34.000000000","message":"You mean missing #, or is there another related bug? Added #","commit_id":"6a14c4186c4eef39bc6af610b56f418950a95e2e"},{"author":{"_account_id":14274,"name":"XinXiaohui","email":"xiaohui.xin@intel.com","username":"XinXiaohui"},"change_message_id":"3297c28c2557d58a4a8c86c3bf2661ff284367e3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Image member name validation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When adding a new member to an image whose id is longer than 255"},{"line_number":10,"context_line":"characters an Internal Server Error occurs (500). Its caused by database"},{"line_number":11,"context_line":"restriction which defines member field as varchar(255). The issue"},{"line_number":12,"context_line":"affects both - API v1 and v2."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a8ffd7b_e5031e0e","line":10,"updated":"2015-11-24 21:45:52.000000000","message":"s/Its/It\u0027s/","commit_id":"5985dec891f84abe9edbe372b3e5fcdfff962812"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"ddb9ab09585aef2a96faa0611449bf1ef0908532","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Image member name validation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When adding a new member to an image whose id is longer than 255"},{"line_number":10,"context_line":"characters an Internal Server Error occurs (500). Its caused by database"},{"line_number":11,"context_line":"restriction which defines member field as varchar(255). The issue"},{"line_number":12,"context_line":"affects both - API v1 and v2."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5a710552_614bb05a","line":10,"in_reply_to":"9a8ffd7b_e5031e0e","updated":"2015-12-14 23:24:15.000000000","message":"Fixed","commit_id":"5985dec891f84abe9edbe372b3e5fcdfff962812"}],"glance/api/v1/members.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0122474867c073c6e372f4960899fcc26fd9f6a1","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        if context.owner is None and not context.is_admin:"},{"line_number":42,"context_line":"            raise webob.exc.HTTPUnauthorized(_(\"No authenticated user\"))"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _validate_member_id(self, req, member_id, allow_empty\u003dTrue):"},{"line_number":45,"context_line":"        if not allow_empty and not member_id:"},{"line_number":46,"context_line":"            msg \u003d _(\"Member id can\u0027t be empty\")"},{"line_number":47,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg, request\u003dreq)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3acd31a7_62528315","line":44,"updated":"2015-04-30 11:48:37.000000000","message":"we can mark this method as static, self is not used here.","commit_id":"705d8f96faf766da0acf7b0ed3942ba41d99f663"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"c3717e916f8780e494043804078f6919b9edd967","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        if context.owner is None and not context.is_admin:"},{"line_number":42,"context_line":"            raise webob.exc.HTTPUnauthorized(_(\"No authenticated user\"))"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _validate_member_id(self, req, member_id, allow_empty\u003dTrue):"},{"line_number":45,"context_line":"        if not allow_empty and not member_id:"},{"line_number":46,"context_line":"            msg \u003d _(\"Member id can\u0027t be empty\")"},{"line_number":47,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg, request\u003dreq)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9af37de9_4331efa1","line":44,"in_reply_to":"3acd31a7_62528315","updated":"2015-05-11 13:53:36.000000000","message":"Done","commit_id":"705d8f96faf766da0acf7b0ed3942ba41d99f663"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"1a13989ffe98da3ce1c6250c7f25f8b7e2ed2be0","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            raise webob.exc.HTTPUnauthorized(_(\"No authenticated user\"))"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @staticmethod"},{"line_number":45,"context_line":"    def _validate_member_id(req, member_id, allow_empty\u003dTrue):"},{"line_number":46,"context_line":"        if not allow_empty and not member_id:"},{"line_number":47,"context_line":"            msg \u003d _(\"Member id can\u0027t be empty\")"},{"line_number":48,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg, request\u003dreq)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_1a3d838e","line":45,"updated":"2015-06-18 21:44:12.000000000","message":"Do we have a scenario to allow the member id as empty?","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1f852984806fb6906410127f08f42c50c0efb084","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            raise webob.exc.HTTPUnauthorized(_(\"No authenticated user\"))"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @staticmethod"},{"line_number":45,"context_line":"    def _validate_member_id(req, member_id, allow_empty\u003dTrue):"},{"line_number":46,"context_line":"        if not allow_empty and not member_id:"},{"line_number":47,"context_line":"            msg \u003d _(\"Member id can\u0027t be empty\")"},{"line_number":48,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg, request\u003dreq)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_cb70eb74","line":45,"in_reply_to":"fa32b979_1a3d838e","updated":"2015-06-25 09:49:25.000000000","message":"My bad. I\u0027ve looked at the docstring for the member update method:\n\n{\"member\": {\n                \"can_share\": [True|False]\n            }}\n\nand infer that the id can be skipped as it doesn\u0027t exist in this sample json. But the id is not passed in the request body, but rather as argument in the requested URL\n\n/v2/images/1/members/2\n\nFixed. Thanks for being watchful.","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"df2433ad055dbfa0c8618e118c794e06ed329892","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        memberships \u003d body.get(\u0027memberships\u0027)"},{"line_number":194,"context_line":"        if memberships:"},{"line_number":195,"context_line":"            for membership in memberships:"},{"line_number":196,"context_line":"                self._validate_member_id(req, membership.get(\u0027member_id\u0027))"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"            new_number_of_members \u003d len(body[\u0027memberships\u0027])"},{"line_number":199,"context_line":"            self._enforce_image_member_quota(req, new_number_of_members)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_2cacf19d","line":196,"updated":"2015-06-24 22:54:18.000000000","message":"In which circumstances can `member_id` be missing? If there are None, I\u0027d prefer this to use the itemgetter directly rather than the `get` method.","commit_id":"6a14c4186c4eef39bc6af610b56f418950a95e2e"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"a93af0990ece28351eeee16714fac9050f63b959","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        memberships \u003d body.get(\u0027memberships\u0027)"},{"line_number":194,"context_line":"        if memberships:"},{"line_number":195,"context_line":"            for membership in memberships:"},{"line_number":196,"context_line":"                self._validate_member_id(req, membership.get(\u0027member_id\u0027))"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"            new_number_of_members \u003d len(body[\u0027memberships\u0027])"},{"line_number":199,"context_line":"            self._enforce_image_member_quota(req, new_number_of_members)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_20138266","line":196,"in_reply_to":"fa32b979_2cacf19d","updated":"2015-06-25 09:56:34.000000000","message":"Check the `test_replace_members_missing_id` in `glance.tests.v1.test_api` which covers such scenario.","commit_id":"6a14c4186c4eef39bc6af610b56f418950a95e2e"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"2e24c3f57df14021870ee184da0a32ecb381cb8c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            raise webob.exc.HTTPUnauthorized(_(\"No authenticated user\"))"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @staticmethod"},{"line_number":45,"context_line":"    def _validate_member_id(req, member_id):"},{"line_number":46,"context_line":"        if not member_id:"},{"line_number":47,"context_line":"            msg \u003d _(\"Member id can\u0027t be empty\")"},{"line_number":48,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg, request\u003dreq)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_ebdbe419","line":45,"updated":"2015-08-18 10:28:27.000000000","message":"Looks like part of this functionality could be covered by\nhttps://review.openstack.org/#/c/203948/.\nCould you please collaborate and use the single method for string length validation instead of duplicating the code?","commit_id":"5985dec891f84abe9edbe372b3e5fcdfff962812"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"2e24c3f57df14021870ee184da0a32ecb381cb8c","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        if not member_id:"},{"line_number":47,"context_line":"            msg \u003d _(\"Member id can\u0027t be empty\")"},{"line_number":48,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg, request\u003dreq)"},{"line_number":49,"context_line":"        elif len(member_id) \u003e 255:"},{"line_number":50,"context_line":"            msg \u003d _(\"Member id too long: %d\") % len(member_id)"},{"line_number":51,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg, request\u003dreq)"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_abb64cda","line":49,"updated":"2015-08-18 10:28:27.000000000","message":"here we have the patch that introduces a variable instead of magic numbers.\nI would recommend for you to rebase on this patch (https://review.openstack.org/#/c/203948/).","commit_id":"5985dec891f84abe9edbe372b3e5fcdfff962812"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"9d51e2de3763a8ea6a1e1d5ec7cd2c337b8122fe","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        if not member_id:"},{"line_number":47,"context_line":"            msg \u003d _(\"Member id can\u0027t be empty\")"},{"line_number":48,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg, request\u003dreq)"},{"line_number":49,"context_line":"        elif len(member_id) \u003e 255:"},{"line_number":50,"context_line":"            msg \u003d _(\"Member id too long: %d\") % len(member_id)"},{"line_number":51,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg, request\u003dreq)"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_3e1dc773","line":49,"in_reply_to":"fa1b9901_abb64cda","updated":"2015-12-14 23:20:43.000000000","message":"Kairat, that review is not merge-able at the moment. I will, however, (since I\u0027ve taken over this review) rebase that one atop this one and update this one to use that work.\n\nI tackled this one first because it is the higher priority (on launchpad) of the two and it makes sense to get this one in first.","commit_id":"5985dec891f84abe9edbe372b3e5fcdfff962812"}],"glance/api/v2/image_members.py":[{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"b14bac5d9381b07029c4dcb66e56d6f08b49ece4","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        # TODO(krykowski): for backwards compatibility both `member` and"},{"line_number":233,"context_line":"        # `member_id` can be passed as a member identifier. It is worth"},{"line_number":234,"context_line":"        # noting that `member_id` is prefered way of providing the identifier"},{"line_number":235,"context_line":"        # as it is included in the member schema"},{"line_number":236,"context_line":"        member \u003d body.pop(\u0027member\u0027, None)"},{"line_number":237,"context_line":"        if \u0027member_id\u0027 not in body:"},{"line_number":238,"context_line":"            body[\u0027member_id\u0027] \u003d member"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_99809f48","line":235,"updated":"2015-04-28 10:28:03.000000000","message":"Should some deprecation warning be emitted in here that the `member` should be used instead of `member_id`?","commit_id":"9c0504fa1778f4f58b302ee5f2cbffafe119d9f4"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"726efcd11f252a6c91e7a8b83a89f7969234ddcf","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            self.schema.validate(body)"},{"line_number":242,"context_line":"        except exception.InvalidObject as e:"},{"line_number":243,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":244,"context_line":"        try:"},{"line_number":245,"context_line":"            member_id \u003d body[\u0027member_id\u0027]"},{"line_number":246,"context_line":"            if not member_id:"},{"line_number":247,"context_line":"                raise ValueError()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9abe1de1_d6dc9548","line":244,"updated":"2015-04-27 12:23:17.000000000","message":"If you could add minLength to the schema then we could do away with the whole try catch block.","commit_id":"9c0504fa1778f4f58b302ee5f2cbffafe119d9f4"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"e4ffd3b40f62927d07b6adadebd2e92eaa5ff125","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            self.schema.validate(body)"},{"line_number":242,"context_line":"        except exception.InvalidObject as e:"},{"line_number":243,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":244,"context_line":"        try:"},{"line_number":245,"context_line":"            member_id \u003d body[\u0027member_id\u0027]"},{"line_number":246,"context_line":"            if not member_id:"},{"line_number":247,"context_line":"                raise ValueError()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_ced86720","line":244,"in_reply_to":"7ad32947_99a9bfe2","updated":"2015-04-28 10:41:46.000000000","message":"I am talking about the try block code in L231-240. Had there been a minLength  similar to maxLength there would be no need to check for \"\" being passed.\n\nOn a side note given that member_id should always be a tenant_id(UUID) there is an implicit minimum length.","commit_id":"9c0504fa1778f4f58b302ee5f2cbffafe119d9f4"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"327ba40276f3d28dd9f929925130db324df7d906","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            self.schema.validate(body)"},{"line_number":242,"context_line":"        except exception.InvalidObject as e:"},{"line_number":243,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":244,"context_line":"        try:"},{"line_number":245,"context_line":"            member_id \u003d body[\u0027member_id\u0027]"},{"line_number":246,"context_line":"            if not member_id:"},{"line_number":247,"context_line":"                raise ValueError()"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_99d3df38","line":244,"in_reply_to":"7ad32947_ced86720","updated":"2015-04-29 09:44:45.000000000","message":"Done. I\u0027ve set the minLength to \"1\" for now to make it work as it was working previously. Separate bug report for adjusting it to the UUID length should be added and discussed.","commit_id":"9c0504fa1778f4f58b302ee5f2cbffafe119d9f4"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"777834eb3c8ef2d36632479ad896456e4e283d23","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            self.schema.validate(body)"},{"line_number":242,"context_line":"        except exception.InvalidObject as e:"},{"line_number":243,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":244,"context_line":"        try:"},{"line_number":245,"context_line":"            member_id \u003d body[\u0027member_id\u0027]"},{"line_number":246,"context_line":"            if not member_id:"},{"line_number":247,"context_line":"                raise ValueError()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_0fad39e9","line":244,"in_reply_to":"7ad32947_ced86720","updated":"2015-04-28 11:42:26.000000000","message":"Owww, got your point now. Will push a patchset for it!","commit_id":"9c0504fa1778f4f58b302ee5f2cbffafe119d9f4"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"b14bac5d9381b07029c4dcb66e56d6f08b49ece4","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            self.schema.validate(body)"},{"line_number":242,"context_line":"        except exception.InvalidObject as e:"},{"line_number":243,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":244,"context_line":"        try:"},{"line_number":245,"context_line":"            member_id \u003d body[\u0027member_id\u0027]"},{"line_number":246,"context_line":"            if not member_id:"},{"line_number":247,"context_line":"                raise ValueError()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_99a9bfe2","line":244,"in_reply_to":"9abe1de1_d6dc9548","updated":"2015-04-28 10:28:03.000000000","message":"Why should I put minLength to the schema? There is no minimum length for the member_id AFAIK. The try-except block is used here, because `validate` method will raise an InvalidObject exception if provided data doesn\u0027t match corresponding schema. You can check how it works for images in here:\n\nhttps://github.com/openstack/glance/blob/master/glance/api/v2/images.py#L350","commit_id":"9c0504fa1778f4f58b302ee5f2cbffafe119d9f4"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"21af2c163e9bc5773acabada1f92f925d21087be","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        # as it is included in the member schema"},{"line_number":236,"context_line":"        member \u003d body.pop(\u0027member\u0027, None)"},{"line_number":237,"context_line":"        if \u0027member_id\u0027 not in body:"},{"line_number":238,"context_line":"            body[\u0027member_id\u0027] \u003d member"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        try:"},{"line_number":241,"context_line":"            self.schema.validate(body)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_03076582","line":238,"updated":"2015-06-18 18:53:10.000000000","message":"maybe it better to write\nif \u0027member_id\u0027 not in body:\t\n\tbody[\u0027member_id\u0027] \u003d body.pop(\u0027member\u0027, None)\n\nor with exception\nif \u0027member_id\u0027 not in body:\n\ttry:\n\t\tbody[\u0027member_id\u0027] \u003d body.pop(\u0027member\u0027)\n\texcept KeyError:\n\t\tmsg \u003d _(\"Member to be added not specified\")\n\t\traise webob.exc.HTTPBadRequest(explanation\u003dmsg)","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1f852984806fb6906410127f08f42c50c0efb084","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        # as it is included in the member schema"},{"line_number":236,"context_line":"        member \u003d body.pop(\u0027member\u0027, None)"},{"line_number":237,"context_line":"        if \u0027member_id\u0027 not in body:"},{"line_number":238,"context_line":"            body[\u0027member_id\u0027] \u003d member"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        try:"},{"line_number":241,"context_line":"            self.schema.validate(body)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_8ba743a6","line":238,"in_reply_to":"fa32b979_03076582","updated":"2015-06-25 09:49:25.000000000","message":"The first one is cleaner than the solution which I\u0027ve proposed. Replaced.","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"21af2c163e9bc5773acabada1f92f925d21087be","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":244,"context_line":"        try:"},{"line_number":245,"context_line":"            member_id \u003d body[\u0027member_id\u0027]"},{"line_number":246,"context_line":"        except KeyError:"},{"line_number":247,"context_line":"            msg \u003d _(\"Member to be added not specified\")"},{"line_number":248,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":249,"context_line":"        return dict(member_id\u003dmember_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_2395c931","line":246,"updated":"2015-06-18 18:53:10.000000000","message":"I think since you do the assignment of body[\u0027member_id\u0027] on line 238 this exception is never raised.","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"1a13989ffe98da3ce1c6250c7f25f8b7e2ed2be0","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":244,"context_line":"        try:"},{"line_number":245,"context_line":"            member_id \u003d body[\u0027member_id\u0027]"},{"line_number":246,"context_line":"        except KeyError:"},{"line_number":247,"context_line":"            msg \u003d _(\"Member to be added not specified\")"},{"line_number":248,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":249,"context_line":"        return dict(member_id\u003dmember_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_da42bb0e","line":246,"in_reply_to":"fa32b979_2395c931","updated":"2015-06-18 21:44:12.000000000","message":"+1\n\nAnd I\u0027m thinking could we merge above code as below:\n\nbody[\u0027member_id\u0027] \u003d body.pop(\u0027member\u0027, None) or body.pop(\u0027member_id\u0027, None)","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1f852984806fb6906410127f08f42c50c0efb084","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":244,"context_line":"        try:"},{"line_number":245,"context_line":"            member_id \u003d body[\u0027member_id\u0027]"},{"line_number":246,"context_line":"        except KeyError:"},{"line_number":247,"context_line":"            msg \u003d _(\"Member to be added not specified\")"},{"line_number":248,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":249,"context_line":"        return dict(member_id\u003dmember_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_36753e97","line":246,"in_reply_to":"fa32b979_2395c931","updated":"2015-06-25 09:49:25.000000000","message":"Right. Custom handling for this exception is not needed any more, as the schema validation will raise if there is no member_id in the body.","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1f852984806fb6906410127f08f42c50c0efb084","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":244,"context_line":"        try:"},{"line_number":245,"context_line":"            member_id \u003d body[\u0027member_id\u0027]"},{"line_number":246,"context_line":"        except KeyError:"},{"line_number":247,"context_line":"            msg \u003d _(\"Member to be added not specified\")"},{"line_number":248,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":249,"context_line":"        return dict(member_id\u003dmember_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_2b64f71f","line":246,"in_reply_to":"fa32b979_da42bb0e","updated":"2015-06-25 09:49:25.000000000","message":"I think that the simplification (1) proposed by Mike is easier to read and understand what is going on in this place.","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"}],"glance/tests/unit/v1/test_api.py":[{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"726efcd11f252a6c91e7a8b83a89f7969234ddcf","unresolved":false,"context_lines":[{"line_number":3078,"context_line":""},{"line_number":3079,"context_line":"    def test_replace_members_id_too_long(self):"},{"line_number":3080,"context_line":"        \"\"\""},{"line_number":3081,"context_line":"        Tests replacing image members raises bad request if id is too long"},{"line_number":3082,"context_line":"        \"\"\""},{"line_number":3083,"context_line":"        test_router \u003d router.API(self.mapper)"},{"line_number":3084,"context_line":"        self.api \u003d test_utils.FakeAuthMiddleware("}],"source_content_type":"text/x-python","patch_set":1,"id":"9abe1de1_168fad24","line":3081,"updated":"2015-04-27 12:23:17.000000000","message":"Do we have a test where there is no member_id as part of the request?","commit_id":"9c0504fa1778f4f58b302ee5f2cbffafe119d9f4"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"b14bac5d9381b07029c4dcb66e56d6f08b49ece4","unresolved":false,"context_lines":[{"line_number":3078,"context_line":""},{"line_number":3079,"context_line":"    def test_replace_members_id_too_long(self):"},{"line_number":3080,"context_line":"        \"\"\""},{"line_number":3081,"context_line":"        Tests replacing image members raises bad request if id is too long"},{"line_number":3082,"context_line":"        \"\"\""},{"line_number":3083,"context_line":"        test_router \u003d router.API(self.mapper)"},{"line_number":3084,"context_line":"        self.api \u003d test_utils.FakeAuthMiddleware("}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_59f56781","line":3081,"in_reply_to":"9abe1de1_168fad24","updated":"2015-04-28 10:28:03.000000000","message":"Good point. Done.","commit_id":"9c0504fa1778f4f58b302ee5f2cbffafe119d9f4"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"1a13989ffe98da3ce1c6250c7f25f8b7e2ed2be0","unresolved":false,"context_lines":[{"line_number":2936,"context_line":"        test_router_api \u003d router.API(self.mapper)"},{"line_number":2937,"context_line":"        self.api \u003d test_utils.FakeAuthMiddleware("},{"line_number":2938,"context_line":"            test_router_api, is_admin\u003dTrue)"},{"line_number":2939,"context_line":"        member_id \u003d \u0027\u0027\u0027bahu3Srucr5fXuD5qVpyrD5ZCI4XHyG2LDZZnfxPG9Cta7nBsfSl"},{"line_number":2940,"context_line":"        rckopMsuZpLUDV0mbpu3flxcPShjIOlJWo1JQIRcmmD6FW3H29V8M5m20OAcHx0jCVI"},{"line_number":2941,"context_line":"        zVOVmU7CAUGbFmnc41sHRyxGIfTEcLFqiww8M2jAHPpONYRNYaOJaJ77mlpDt2vYabk"},{"line_number":2942,"context_line":"        RYfwlHSyC31uzgfIt7vmiJfPOWBRGgwepQ1LhtWT2HA99vB3Vz3cYoi0WzCcspxQXqT"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_777aa8be","line":2939,"updated":"2015-06-18 21:44:12.000000000","message":"(nit): But how about using \u0027A\u0027*256 ? instead of using a long string.","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1f852984806fb6906410127f08f42c50c0efb084","unresolved":false,"context_lines":[{"line_number":2936,"context_line":"        test_router_api \u003d router.API(self.mapper)"},{"line_number":2937,"context_line":"        self.api \u003d test_utils.FakeAuthMiddleware("},{"line_number":2938,"context_line":"            test_router_api, is_admin\u003dTrue)"},{"line_number":2939,"context_line":"        member_id \u003d \u0027\u0027\u0027bahu3Srucr5fXuD5qVpyrD5ZCI4XHyG2LDZZnfxPG9Cta7nBsfSl"},{"line_number":2940,"context_line":"        rckopMsuZpLUDV0mbpu3flxcPShjIOlJWo1JQIRcmmD6FW3H29V8M5m20OAcHx0jCVI"},{"line_number":2941,"context_line":"        zVOVmU7CAUGbFmnc41sHRyxGIfTEcLFqiww8M2jAHPpONYRNYaOJaJ77mlpDt2vYabk"},{"line_number":2942,"context_line":"        RYfwlHSyC31uzgfIt7vmiJfPOWBRGgwepQ1LhtWT2HA99vB3Vz3cYoi0WzCcspxQXqT"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_96df6ad5","line":2939,"in_reply_to":"fa32b979_777aa8be","updated":"2015-06-25 09:49:25.000000000","message":"Shame on me, didn\u0027t think about that. Done :)","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"1a13989ffe98da3ce1c6250c7f25f8b7e2ed2be0","unresolved":false,"context_lines":[{"line_number":3004,"context_line":"            test_router, is_admin\u003dTrue)"},{"line_number":3005,"context_line":""},{"line_number":3006,"context_line":"        fixture \u003d [dict(some_id\u003d\u0027pattieblack\u0027, can_share\u003dFalse)]"},{"line_number":3007,"context_line":"        # Replace"},{"line_number":3008,"context_line":"        req \u003d webob.Request.blank(\u0027/images/%s/members\u0027 % UUID2)"},{"line_number":3009,"context_line":"        req.method \u003d \u0027PUT\u0027"},{"line_number":3010,"context_line":"        req.content_type \u003d \u0027application/json\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_f7331812","line":3007,"updated":"2015-06-18 21:44:12.000000000","message":"(nit): Let\u0027s remove this comment if there is another patch set. I think it\u0027s from a copy-paste.","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1f852984806fb6906410127f08f42c50c0efb084","unresolved":false,"context_lines":[{"line_number":3004,"context_line":"            test_router, is_admin\u003dTrue)"},{"line_number":3005,"context_line":""},{"line_number":3006,"context_line":"        fixture \u003d [dict(some_id\u003d\u0027pattieblack\u0027, can_share\u003dFalse)]"},{"line_number":3007,"context_line":"        # Replace"},{"line_number":3008,"context_line":"        req \u003d webob.Request.blank(\u0027/images/%s/members\u0027 % UUID2)"},{"line_number":3009,"context_line":"        req.method \u003d \u0027PUT\u0027"},{"line_number":3010,"context_line":"        req.content_type \u003d \u0027application/json\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_76a74650","line":3007,"in_reply_to":"fa32b979_f7331812","updated":"2015-06-25 09:49:25.000000000","message":"Done","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"1a13989ffe98da3ce1c6250c7f25f8b7e2ed2be0","unresolved":false,"context_lines":[{"line_number":3118,"context_line":"        self.api \u003d test_utils.FakeAuthMiddleware("},{"line_number":3119,"context_line":"            test_router, is_admin\u003dTrue)"},{"line_number":3120,"context_line":""},{"line_number":3121,"context_line":"        member_id \u003d \u0027\u0027\u0027bahu3Srucr5fXuD5qVpyrD5ZCI4XHyG2LDZZnfxPG9Cta7nBsfSl"},{"line_number":3122,"context_line":"        rckopMsuZpLUDV0mbpu3flxcPShjIOlJWo1JQIRcmmD6FW3H29V8M5m20OAcHx0jCVI"},{"line_number":3123,"context_line":"        zVOVmU7CAUGbFmnc41sHRyxGIfTEcLFqiww8M2jAHPpONYRNYaOJaJ77mlpDt2vYabk"},{"line_number":3124,"context_line":"        RYfwlHSyC31uzgfIt7vmiJfPOWBRGgwepQ1LhtWT2HA99vB3Vz3cYoi0WzCcspxQXqT"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_7728689a","line":3121,"updated":"2015-06-18 21:44:12.000000000","message":"Ditto","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1f852984806fb6906410127f08f42c50c0efb084","unresolved":false,"context_lines":[{"line_number":3118,"context_line":"        self.api \u003d test_utils.FakeAuthMiddleware("},{"line_number":3119,"context_line":"            test_router, is_admin\u003dTrue)"},{"line_number":3120,"context_line":""},{"line_number":3121,"context_line":"        member_id \u003d \u0027\u0027\u0027bahu3Srucr5fXuD5qVpyrD5ZCI4XHyG2LDZZnfxPG9Cta7nBsfSl"},{"line_number":3122,"context_line":"        rckopMsuZpLUDV0mbpu3flxcPShjIOlJWo1JQIRcmmD6FW3H29V8M5m20OAcHx0jCVI"},{"line_number":3123,"context_line":"        zVOVmU7CAUGbFmnc41sHRyxGIfTEcLFqiww8M2jAHPpONYRNYaOJaJ77mlpDt2vYabk"},{"line_number":3124,"context_line":"        RYfwlHSyC31uzgfIt7vmiJfPOWBRGgwepQ1LhtWT2HA99vB3Vz3cYoi0WzCcspxQXqT"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_5669e2f7","line":3121,"in_reply_to":"fa32b979_7728689a","updated":"2015-06-25 09:49:25.000000000","message":"Done","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"1a13989ffe98da3ce1c6250c7f25f8b7e2ed2be0","unresolved":false,"context_lines":[{"line_number":3124,"context_line":"        RYfwlHSyC31uzgfIt7vmiJfPOWBRGgwepQ1LhtWT2HA99vB3Vz3cYoi0WzCcspxQXqT"},{"line_number":3125,"context_line":"        yvBKQVPcK6WM4QOo1wuXvfmPQK2MsFA19Eu3JZzTZlceb1I\u0027\u0027\u0027"},{"line_number":3126,"context_line":"        fixture \u003d [dict(member_id\u003dmember_id, can_share\u003dFalse)]"},{"line_number":3127,"context_line":"        # Replace"},{"line_number":3128,"context_line":"        req \u003d webob.Request.blank(\u0027/images/%s/members\u0027 % UUID2)"},{"line_number":3129,"context_line":"        req.method \u003d \u0027PUT\u0027"},{"line_number":3130,"context_line":"        req.content_type \u003d \u0027application/json\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_b73910f4","line":3127,"updated":"2015-06-18 21:44:12.000000000","message":"Ditto","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1f852984806fb6906410127f08f42c50c0efb084","unresolved":false,"context_lines":[{"line_number":3124,"context_line":"        RYfwlHSyC31uzgfIt7vmiJfPOWBRGgwepQ1LhtWT2HA99vB3Vz3cYoi0WzCcspxQXqT"},{"line_number":3125,"context_line":"        yvBKQVPcK6WM4QOo1wuXvfmPQK2MsFA19Eu3JZzTZlceb1I\u0027\u0027\u0027"},{"line_number":3126,"context_line":"        fixture \u003d [dict(member_id\u003dmember_id, can_share\u003dFalse)]"},{"line_number":3127,"context_line":"        # Replace"},{"line_number":3128,"context_line":"        req \u003d webob.Request.blank(\u0027/images/%s/members\u0027 % UUID2)"},{"line_number":3129,"context_line":"        req.method \u003d \u0027PUT\u0027"},{"line_number":3130,"context_line":"        req.content_type \u003d \u0027application/json\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_f66916f9","line":3127,"in_reply_to":"fa32b979_b73910f4","updated":"2015-06-25 09:49:25.000000000","message":"Done","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"}],"glance/tests/unit/v2/test_image_members_resource.py":[{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"1a13989ffe98da3ce1c6250c7f25f8b7e2ed2be0","unresolved":false,"context_lines":[{"line_number":537,"context_line":"                          request)"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"    def test_create_member_too_long(self):"},{"line_number":540,"context_line":"        member_id \u003d \u0027\u0027\u0027bahu3Srucr5fXuD5qVpyrD5ZCI4XHyG2LDZZnfxPG9Cta7nBsfSl"},{"line_number":541,"context_line":"        rckopMsuZpLUDV0mbpu3flxcPShjIOlJWo1JQIRcmmD6FW3H29V8M5m20OAcHx0jCVI"},{"line_number":542,"context_line":"        zVOVmU7CAUGbFmnc41sHRyxGIfTEcLFqiww8M2jAHPpONYRNYaOJaJ77mlpDt2vYabk"},{"line_number":543,"context_line":"        RYfwlHSyC31uzgfIt7vmiJfPOWBRGgwepQ1LhtWT2HA99vB3Vz3cYoi0WzCcspxQXqT"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_fa28df87","line":540,"updated":"2015-06-18 21:44:12.000000000","message":"\u0027A\u0027*256?","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1f852984806fb6906410127f08f42c50c0efb084","unresolved":false,"context_lines":[{"line_number":537,"context_line":"                          request)"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"    def test_create_member_too_long(self):"},{"line_number":540,"context_line":"        member_id \u003d \u0027\u0027\u0027bahu3Srucr5fXuD5qVpyrD5ZCI4XHyG2LDZZnfxPG9Cta7nBsfSl"},{"line_number":541,"context_line":"        rckopMsuZpLUDV0mbpu3flxcPShjIOlJWo1JQIRcmmD6FW3H29V8M5m20OAcHx0jCVI"},{"line_number":542,"context_line":"        zVOVmU7CAUGbFmnc41sHRyxGIfTEcLFqiww8M2jAHPpONYRNYaOJaJ77mlpDt2vYabk"},{"line_number":543,"context_line":"        RYfwlHSyC31uzgfIt7vmiJfPOWBRGgwepQ1LhtWT2HA99vB3Vz3cYoi0WzCcspxQXqT"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_b6786ec5","line":540,"in_reply_to":"fa32b979_fa28df87","updated":"2015-06-25 09:49:25.000000000","message":"Done","commit_id":"6d6144c88326561cf1e7d3e44fa29320075d86b6"}],"releasenotes/notes/image-member-name-length-validation-8e50e43273804f99.yaml":[{"author":{"_account_id":7575,"name":"Sabari","email":"smurugesan@vmware.com","username":"sabari"},"change_message_id":"fddf9d0be4a69a005d259953702f55245e8e609d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Image member names were previously not checked when adding an image member "},{"line_number":4,"context_line":"    to an image. As a result, Glance did not handle an exception triggered by "}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5a710552_edb98fcc","line":1,"updated":"2015-12-16 01:16:38.000000000","message":"We should mention that we now favor a new attribute \u0027member_id\u0027 for \u0027member\u0027 in the POST request for creating image members in v2.  Not sure if that would go into \u0027features\u0027 or \u0027others\u0027 section. \n\nAlso, IIUC, this would result in a minor version bump for v2 but it can be release noted when that happens.","commit_id":"ba31dae5f2e2775cd94abd4742c8910d56cd0801"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"602d9cac9c6f2b06e63a754a7cabe261d5274ef4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Image member names were previously not checked when adding an image member "},{"line_number":4,"context_line":"    to an image. As a result, Glance did not handle an exception triggered by "}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3a7e1126_5baf8fe3","line":1,"in_reply_to":"5a710552_edb98fcc","updated":"2015-12-16 23:14:37.000000000","message":"In reviewing the part of the patch you\u0027re discussing more closely, I\u0027m not entirely convinced that should be included here. I think that should be an entirely separate bug. I\u0027m not certain it belongs as a minor API version bump since Kamil\u0027s point about member_id being in the schema is a valid one. We\u0027ve been advertising the fact that member_id is what we accept but we have not been doing so.\n\nSo this will result in a necessity to change http://developer.openstack.org/api-ref-image-v2.html#createImageMember-v2\n\nSince we\u0027re accepting both and the create call is so simple, I\u0027m willing to bet that no one will send both, they\u0027ll send either one or the other, but we still need to document precedence.","commit_id":"ba31dae5f2e2775cd94abd4742c8910d56cd0801"},{"author":{"_account_id":7575,"name":"Sabari","email":"smurugesan@vmware.com","username":"sabari"},"change_message_id":"fddf9d0be4a69a005d259953702f55245e8e609d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Image member names were previously not checked when adding an image member "},{"line_number":4,"context_line":"    to an image. As a result, Glance did not handle an exception triggered by "},{"line_number":5,"context_line":"    the database when the length of the image member name exceeded the maximum "},{"line_number":6,"context_line":"    length that the column type allowed which resulted in a 500 response. By "}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5a710552_2d8c777e","line":3,"updated":"2015-12-16 01:16:38.000000000","message":"Nit: Whitespace","commit_id":"ba31dae5f2e2775cd94abd4742c8910d56cd0801"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"602d9cac9c6f2b06e63a754a7cabe261d5274ef4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Image member names were previously not checked when adding an image member "},{"line_number":4,"context_line":"    to an image. As a result, Glance did not handle an exception triggered by "},{"line_number":5,"context_line":"    the database when the length of the image member name exceeded the maximum "},{"line_number":6,"context_line":"    length that the column type allowed which resulted in a 500 response. By "}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3a7e1126_db813f4f","line":3,"in_reply_to":"5a710552_2d8c777e","updated":"2015-12-16 23:14:37.000000000","message":"Done","commit_id":"ba31dae5f2e2775cd94abd4742c8910d56cd0801"}]}
