)]}'
{"oslo_context/context.py":[{"author":{"_account_id":16051,"name":"Ronald Bradford","email":"ronald.bradford@gmail.com","username":"ronaldbradford"},"change_message_id":"9929a703dabb1709d9afcf020f4e9c17f4c56253","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.read_only \u003d read_only"},{"line_number":62,"context_line":"        self.show_deleted \u003d show_deleted"},{"line_number":63,"context_line":"        self.resource_uuid \u003d resource_uuid"},{"line_number":64,"context_line":"        self.roles \u003d roles"},{"line_number":65,"context_line":"        if not request_id:"},{"line_number":66,"context_line":"            request_id \u003d generate_request_id()"},{"line_number":67,"context_line":"        self.request_id \u003d request_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_49eb21b1","line":64,"range":{"start_line":64,"start_character":13,"end_line":64,"end_character":18},"updated":"2016-01-26 16:50:37.000000000","message":"You set roles (when not specified as None) yet in from_environ() a not specified value is an empty list.","commit_id":"588b1af7dd758e6e0e0eca9aa40a7d87eeedde41"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"70200088428eddd56b887a94e2bc45966179b12f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.read_only \u003d read_only"},{"line_number":62,"context_line":"        self.show_deleted \u003d show_deleted"},{"line_number":63,"context_line":"        self.resource_uuid \u003d resource_uuid"},{"line_number":64,"context_line":"        self.roles \u003d roles"},{"line_number":65,"context_line":"        if not request_id:"},{"line_number":66,"context_line":"            request_id \u003d generate_request_id()"},{"line_number":67,"context_line":"        self.request_id \u003d request_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_1d6fe0fc","line":64,"range":{"start_line":64,"start_character":13,"end_line":64,"end_character":18},"in_reply_to":"7a5de9d1_64e7ad11","updated":"2016-02-02 03:56:02.000000000","message":"Agree, Done.","commit_id":"588b1af7dd758e6e0e0eca9aa40a7d87eeedde41"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"713bdb07169a2451efb407e9f7e170ab222f6363","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.read_only \u003d read_only"},{"line_number":62,"context_line":"        self.show_deleted \u003d show_deleted"},{"line_number":63,"context_line":"        self.resource_uuid \u003d resource_uuid"},{"line_number":64,"context_line":"        self.roles \u003d roles"},{"line_number":65,"context_line":"        if not request_id:"},{"line_number":66,"context_line":"            request_id \u003d generate_request_id()"},{"line_number":67,"context_line":"        self.request_id \u003d request_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_64e7ad11","line":64,"range":{"start_line":64,"start_character":13,"end_line":64,"end_character":18},"in_reply_to":"9a68dd71_49eb21b1","updated":"2016-01-29 20:28:49.000000000","message":"I agree, let\u0027s ensure the attribute always has a consistent type.","commit_id":"588b1af7dd758e6e0e0eca9aa40a7d87eeedde41"},{"author":{"_account_id":16051,"name":"Ronald Bradford","email":"ronald.bradford@gmail.com","username":"ronaldbradford"},"change_message_id":"9929a703dabb1709d9afcf020f4e9c17f4c56253","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                \u0027auth_token\u0027: self.auth_token,"},{"line_number":91,"context_line":"                \u0027request_id\u0027: self.request_id,"},{"line_number":92,"context_line":"                \u0027resource_uuid\u0027: self.resource_uuid,"},{"line_number":93,"context_line":"                \u0027user_identity\u0027: user_idt}"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @classmethod"},{"line_number":96,"context_line":"    def from_dict(cls, ctx):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_e96c5538","line":93,"updated":"2016-01-26 16:50:37.000000000","message":"I am not familiar with your usage of this new roles attribute, however if to_dict() provides a dictionary of RequestContext attributes, is there a reason why a new attribute is not included here?","commit_id":"588b1af7dd758e6e0e0eca9aa40a7d87eeedde41"},{"author":{"_account_id":16051,"name":"Ronald Bradford","email":"ronald.bradford@gmail.com","username":"ronaldbradford"},"change_message_id":"1b0fdd4f84faa83caac2ddc26f760b63f288ed9e","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                \u0027auth_token\u0027: self.auth_token,"},{"line_number":91,"context_line":"                \u0027request_id\u0027: self.request_id,"},{"line_number":92,"context_line":"                \u0027resource_uuid\u0027: self.resource_uuid,"},{"line_number":93,"context_line":"                \u0027user_identity\u0027: user_idt}"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @classmethod"},{"line_number":96,"context_line":"    def from_dict(cls, ctx):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_bf7b72f4","line":93,"in_reply_to":"7a5de9d1_84a98992","updated":"2016-01-29 21:00:16.000000000","message":"That makes sense. It may pay to have some comments on attributes to indicate if they are specifically excluded from certain functionality. (e.g. in this case, not for serializing for RPC).","commit_id":"588b1af7dd758e6e0e0eca9aa40a7d87eeedde41"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"70200088428eddd56b887a94e2bc45966179b12f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                \u0027auth_token\u0027: self.auth_token,"},{"line_number":91,"context_line":"                \u0027request_id\u0027: self.request_id,"},{"line_number":92,"context_line":"                \u0027resource_uuid\u0027: self.resource_uuid,"},{"line_number":93,"context_line":"                \u0027user_identity\u0027: user_idt}"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @classmethod"},{"line_number":96,"context_line":"    def from_dict(cls, ctx):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_3d1bbc82","line":93,"in_reply_to":"7a5de9d1_bf7b72f4","updated":"2016-02-02 03:56:02.000000000","message":"So roles is particularly required for policy enforcement (see follow up patch). In general I have concerns about to_dict. It seems that it is used for a number of different reasons. I\u0027d be happy to add it here for the sake of a full serialization method but i\u0027m wary about adding additional data to the rabbit messages.","commit_id":"588b1af7dd758e6e0e0eca9aa40a7d87eeedde41"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"713bdb07169a2451efb407e9f7e170ab222f6363","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                \u0027auth_token\u0027: self.auth_token,"},{"line_number":91,"context_line":"                \u0027request_id\u0027: self.request_id,"},{"line_number":92,"context_line":"                \u0027resource_uuid\u0027: self.resource_uuid,"},{"line_number":93,"context_line":"                \u0027user_identity\u0027: user_idt}"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @classmethod"},{"line_number":96,"context_line":"    def from_dict(cls, ctx):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_84a98992","line":93,"in_reply_to":"9a68dd71_e96c5538","updated":"2016-01-29 20:28:49.000000000","message":"I think the comment about them not needing to be serialized for RPC applies to this. to_dict() is used to serialize the context, and if roles shouldn\u0027t be included in that then they shouldn\u0027t be included here.","commit_id":"588b1af7dd758e6e0e0eca9aa40a7d87eeedde41"},{"author":{"_account_id":16051,"name":"Ronald Bradford","email":"ronald.bradford@gmail.com","username":"ronaldbradford"},"change_message_id":"9929a703dabb1709d9afcf020f4e9c17f4c56253","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            read_only\u003dctx.get(\"read_only\", False),"},{"line_number":106,"context_line":"            show_deleted\u003dctx.get(\"show_deleted\", False),"},{"line_number":107,"context_line":"            request_id\u003dctx.get(\"request_id\"),"},{"line_number":108,"context_line":"            resource_uuid\u003dctx.get(\"resource_uuid\"))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    @classmethod"},{"line_number":111,"context_line":"    def from_environ(cls, environ, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_a9765d04","line":108,"updated":"2016-01-26 16:50:37.000000000","message":"As per my prior comment. If you can construct an object from a dictionary, why would you exclude this for a new attribute?","commit_id":"588b1af7dd758e6e0e0eca9aa40a7d87eeedde41"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"713bdb07169a2451efb407e9f7e170ab222f6363","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            read_only\u003dctx.get(\"read_only\", False),"},{"line_number":106,"context_line":"            show_deleted\u003dctx.get(\"show_deleted\", False),"},{"line_number":107,"context_line":"            request_id\u003dctx.get(\"request_id\"),"},{"line_number":108,"context_line":"            resource_uuid\u003dctx.get(\"resource_uuid\"))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    @classmethod"},{"line_number":111,"context_line":"    def from_environ(cls, environ, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_a4ae0596","line":108,"in_reply_to":"9a68dd71_a9765d04","updated":"2016-01-29 20:28:49.000000000","message":"Ditto.","commit_id":"588b1af7dd758e6e0e0eca9aa40a7d87eeedde41"}],"oslo_context/tests/test_context.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"e8ddc2a17f2bdfc5d9dfeb4b6f7030ede3f5bc6f","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        ctx \u003d context.RequestContext.from_environ(environ\u003d{})"},{"line_number":158,"context_line":"        self.assertEqual([], ctx.roles)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        ctx \u003d context.RequestContext.from_environ(environ\u003d{\u0027HTTP_X_ROLES\u0027: \u0027\u0027})"},{"line_number":161,"context_line":"        self.assertEqual([], ctx.roles)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_from_function_and_args(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bae84128_ffbcdb07","line":160,"updated":"2016-02-22 21:16:00.000000000","message":"It would be useful to have a case showing that the parsing works properly, too.","commit_id":"f383bd2973c58c5272504603e4f9dddd55c5bb68"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"81d5ae65b1edeefe4af02bc504dd45eeb692091c","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        ctx \u003d context.RequestContext.from_environ(environ\u003d{})"},{"line_number":158,"context_line":"        self.assertEqual([], ctx.roles)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        ctx \u003d context.RequestContext.from_environ(environ\u003d{\u0027HTTP_X_ROLES\u0027: \u0027\u0027})"},{"line_number":161,"context_line":"        self.assertEqual([], ctx.roles)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_from_function_and_args(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bae84128_445b50f6","line":160,"in_reply_to":"bae84128_810b8a29","updated":"2016-02-23 16:00:49.000000000","message":"Yeah, I missed that in my earlier review.","commit_id":"f383bd2973c58c5272504603e4f9dddd55c5bb68"},{"author":{"_account_id":16051,"name":"Ronald Bradford","email":"ronald.bradford@gmail.com","username":"ronaldbradford"},"change_message_id":"1968e1d556a42920136723003a57584205da74a8","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        ctx \u003d context.RequestContext.from_environ(environ\u003d{})"},{"line_number":158,"context_line":"        self.assertEqual([], ctx.roles)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        ctx \u003d context.RequestContext.from_environ(environ\u003d{\u0027HTTP_X_ROLES\u0027: \u0027\u0027})"},{"line_number":161,"context_line":"        self.assertEqual([], ctx.roles)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_from_function_and_args(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bae84128_810b8a29","line":160,"in_reply_to":"bae84128_ffbcdb07","updated":"2016-02-23 15:56:13.000000000","message":"When you say parsing are you referring to L145,154","commit_id":"f383bd2973c58c5272504603e4f9dddd55c5bb68"}]}
