)]}'
{"keystone/tests/unit/test_v3.py":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"1bd32de632fecc8eff3fec27108e63b7038cb23e","unresolved":false,"context_lines":[{"line_number":688,"context_line":"                voluptuous.Required(\u0027id\u0027): unicode or str,"},{"line_number":689,"context_line":"                voluptuous.Required(\u0027name\u0027): unicode or str"},{"line_number":690,"context_line":"            },"},{"line_number":691,"context_line":"            voluptuous.Required(\u0027roles\u0027): list,"},{"line_number":692,"context_line":"            voluptuous.Required(\u0027user\u0027): {"},{"line_number":693,"context_line":"                voluptuous.Required(\u0027domain\u0027): {"},{"line_number":694,"context_line":"                    voluptuous.Required(\u0027id\u0027): unicode or str,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_ef60a037","line":691,"updated":"2015-12-05 11:17:36.000000000","message":"Same comment as in previous patch.\n\nI believe we should check what is in the list. It is a list of ids and names, isn\u0027t it ?","commit_id":"eae71087c97f2f9f59b4344f6e81ebcd56a963e6"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"63ed32e1fb4b9560d33302ee9feb538d1f3d9eb2","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            \u0027minItems\u0027: 1,"},{"line_number":134,"context_line":"            \u0027maxItems\u0027: 2,"},{"line_number":135,"context_line":"        },"},{"line_number":136,"context_line":"        \u0027bind\u0027: {"},{"line_number":137,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":138,"context_line":"            \u0027properties\u0027: {"},{"line_number":139,"context_line":"                \u0027kerberos\u0027: {"},{"line_number":140,"context_line":"                    \u0027type\u0027: \u0027string\u0027,"},{"line_number":141,"context_line":"                },"},{"line_number":142,"context_line":"            },"},{"line_number":143,"context_line":"            \u0027required\u0027: [\u0027kerberos\u0027, ],"},{"line_number":144,"context_line":"            \u0027additionalProperties\u0027: False,"},{"line_number":145,"context_line":"        },"},{"line_number":146,"context_line":"        \u0027expires_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":147,"context_line":"        \u0027issued_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":148,"context_line":"        \u0027methods\u0027: {"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_48f06d67","line":145,"range":{"start_line":136,"start_character":0,"end_line":145,"end_character":10},"updated":"2016-01-23 14:19:54.000000000","message":"this doesn\u0027t looks like should be presented in the token always.\n\nonly external auth mechanisms should have hold this property, right?","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"33d4c0d16e06234cf8a9d346548735fb0d7fbc02","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            \u0027minItems\u0027: 1,"},{"line_number":134,"context_line":"            \u0027maxItems\u0027: 2,"},{"line_number":135,"context_line":"        },"},{"line_number":136,"context_line":"        \u0027bind\u0027: {"},{"line_number":137,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":138,"context_line":"            \u0027properties\u0027: {"},{"line_number":139,"context_line":"                \u0027kerberos\u0027: {"},{"line_number":140,"context_line":"                    \u0027type\u0027: \u0027string\u0027,"},{"line_number":141,"context_line":"                },"},{"line_number":142,"context_line":"            },"},{"line_number":143,"context_line":"            \u0027required\u0027: [\u0027kerberos\u0027, ],"},{"line_number":144,"context_line":"            \u0027additionalProperties\u0027: False,"},{"line_number":145,"context_line":"        },"},{"line_number":146,"context_line":"        \u0027expires_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":147,"context_line":"        \u0027issued_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":148,"context_line":"        \u0027methods\u0027: {"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_5496c43f","line":145,"range":{"start_line":136,"start_character":0,"end_line":145,"end_character":10},"in_reply_to":"9a68dd71_48f06d67","updated":"2016-01-23 21:13:59.000000000","message":"This is listed as an Optional requirement below.","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"3ca2b5fcce025adcb7a4a7f4045e889f4d29969a","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            \u0027minItems\u0027: 1,"},{"line_number":134,"context_line":"            \u0027maxItems\u0027: 2,"},{"line_number":135,"context_line":"        },"},{"line_number":136,"context_line":"        \u0027bind\u0027: {"},{"line_number":137,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":138,"context_line":"            \u0027properties\u0027: {"},{"line_number":139,"context_line":"                \u0027kerberos\u0027: {"},{"line_number":140,"context_line":"                    \u0027type\u0027: \u0027string\u0027,"},{"line_number":141,"context_line":"                },"},{"line_number":142,"context_line":"            },"},{"line_number":143,"context_line":"            \u0027required\u0027: [\u0027kerberos\u0027, ],"},{"line_number":144,"context_line":"            \u0027additionalProperties\u0027: False,"},{"line_number":145,"context_line":"        },"},{"line_number":146,"context_line":"        \u0027expires_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":147,"context_line":"        \u0027issued_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":148,"context_line":"        \u0027methods\u0027: {"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_6e4c54c8","line":145,"range":{"start_line":136,"start_character":0,"end_line":145,"end_character":10},"in_reply_to":"9a68dd71_5496c43f","updated":"2016-01-24 08:25:17.000000000","message":"maybe this can be added dynamically as what you did in L672~L682 when this is actually needed? Since the NOTE in L125 state it clearly that it\u0027s `common token properties`.\n\nmaybe I misunderstand your note.","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d9c482e20037253b3b481b726261c5797160caea","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            \u0027minItems\u0027: 1,"},{"line_number":134,"context_line":"            \u0027maxItems\u0027: 2,"},{"line_number":135,"context_line":"        },"},{"line_number":136,"context_line":"        \u0027bind\u0027: {"},{"line_number":137,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":138,"context_line":"            \u0027properties\u0027: {"},{"line_number":139,"context_line":"                \u0027kerberos\u0027: {"},{"line_number":140,"context_line":"                    \u0027type\u0027: \u0027string\u0027,"},{"line_number":141,"context_line":"                },"},{"line_number":142,"context_line":"            },"},{"line_number":143,"context_line":"            \u0027required\u0027: [\u0027kerberos\u0027, ],"},{"line_number":144,"context_line":"            \u0027additionalProperties\u0027: False,"},{"line_number":145,"context_line":"        },"},{"line_number":146,"context_line":"        \u0027expires_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":147,"context_line":"        \u0027issued_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":148,"context_line":"        \u0027methods\u0027: {"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_c1616a06","line":145,"range":{"start_line":136,"start_character":0,"end_line":145,"end_character":10},"in_reply_to":"9a68dd71_6e4c54c8","updated":"2016-01-25 16:03:24.000000000","message":"Done","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"63ed32e1fb4b9560d33302ee9feb538d1f3d9eb2","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            \u0027required\u0027: [\u0027kerberos\u0027, ],"},{"line_number":144,"context_line":"            \u0027additionalProperties\u0027: False,"},{"line_number":145,"context_line":"        },"},{"line_number":146,"context_line":"        \u0027expires_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":147,"context_line":"        \u0027issued_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":148,"context_line":"        \u0027methods\u0027: {"},{"line_number":149,"context_line":"            \u0027type\u0027: \u0027array\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_283e59da","line":146,"range":{"start_line":146,"start_character":31,"end_line":146,"end_character":39},"updated":"2016-01-23 14:19:54.000000000","message":"I think you can try \"format\": \"date-time\" to validate the format of the this property.\n\nsee: http://json-schema.org/latest/json-schema-validation.html#anchor108","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"33d4c0d16e06234cf8a9d346548735fb0d7fbc02","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            \u0027required\u0027: [\u0027kerberos\u0027, ],"},{"line_number":144,"context_line":"            \u0027additionalProperties\u0027: False,"},{"line_number":145,"context_line":"        },"},{"line_number":146,"context_line":"        \u0027expires_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":147,"context_line":"        \u0027issued_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":148,"context_line":"        \u0027methods\u0027: {"},{"line_number":149,"context_line":"            \u0027type\u0027: \u0027array\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_3491d047","line":146,"range":{"start_line":146,"start_character":31,"end_line":146,"end_character":39},"in_reply_to":"9a68dd71_283e59da","updated":"2016-01-23 21:13:59.000000000","message":"Unfortunately, we are unable to use this format checker provided by the jsonschema library because the implementation of the checker relies on https://pypi.python.org/pypi/strict-rfc3339/ which is GPL, and is forbidden from being included as an OpenStack requirement.\n\nhttps://github.com/openstack/requirements#for-new-requirements","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"3ca2b5fcce025adcb7a4a7f4045e889f4d29969a","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            \u0027required\u0027: [\u0027kerberos\u0027, ],"},{"line_number":144,"context_line":"            \u0027additionalProperties\u0027: False,"},{"line_number":145,"context_line":"        },"},{"line_number":146,"context_line":"        \u0027expires_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":147,"context_line":"        \u0027issued_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":148,"context_line":"        \u0027methods\u0027: {"},{"line_number":149,"context_line":"            \u0027type\u0027: \u0027array\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_4e9cf00e","line":146,"range":{"start_line":146,"start_character":31,"end_line":146,"end_character":39},"in_reply_to":"9a68dd71_3491d047","updated":"2016-01-24 08:25:17.000000000","message":"true, double confirmed, thanks for the info. cool if we can use it but ... :(","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"63ed32e1fb4b9560d33302ee9feb538d1f3d9eb2","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            \u0027additionalProperties\u0027: False,"},{"line_number":145,"context_line":"        },"},{"line_number":146,"context_line":"        \u0027expires_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":147,"context_line":"        \u0027issued_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":148,"context_line":"        \u0027methods\u0027: {"},{"line_number":149,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":150,"context_line":"            \u0027items\u0027: {"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_882d05aa","line":147,"range":{"start_line":147,"start_character":30,"end_line":147,"end_character":38},"updated":"2016-01-23 14:19:54.000000000","message":"same here.","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"33d4c0d16e06234cf8a9d346548735fb0d7fbc02","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            \u0027additionalProperties\u0027: False,"},{"line_number":145,"context_line":"        },"},{"line_number":146,"context_line":"        \u0027expires_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":147,"context_line":"        \u0027issued_at\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":148,"context_line":"        \u0027methods\u0027: {"},{"line_number":149,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":150,"context_line":"            \u0027items\u0027: {"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_f496d83c","line":147,"range":{"start_line":147,"start_character":30,"end_line":147,"end_character":38},"in_reply_to":"9a68dd71_882d05aa","updated":"2016-01-23 21:13:59.000000000","message":"Same as above.","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"63ed32e1fb4b9560d33302ee9feb538d1f3d9eb2","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                \u0027domain\u0027: {"},{"line_number":161,"context_line":"                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":162,"context_line":"                    \u0027properties\u0027: {"},{"line_number":163,"context_line":"                        \u0027id\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":164,"context_line":"                        \u0027name\u0027: {\u0027type\u0027: \u0027string\u0027}"},{"line_number":165,"context_line":"                    },"},{"line_number":166,"context_line":"                    \u0027required\u0027: [\u0027id\u0027, \u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_08583589","line":163,"range":{"start_line":163,"start_character":39,"end_line":163,"end_character":47},"updated":"2016-01-23 14:19:54.000000000","message":"can we leverage the parameter_types.id_string as it is defined in user\u0027s schema?","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"33d4c0d16e06234cf8a9d346548735fb0d7fbc02","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                \u0027domain\u0027: {"},{"line_number":161,"context_line":"                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":162,"context_line":"                    \u0027properties\u0027: {"},{"line_number":163,"context_line":"                        \u0027id\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":164,"context_line":"                        \u0027name\u0027: {\u0027type\u0027: \u0027string\u0027}"},{"line_number":165,"context_line":"                    },"},{"line_number":166,"context_line":"                    \u0027required\u0027: [\u0027id\u0027, \u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_149ccc5b","line":163,"range":{"start_line":163,"start_character":39,"end_line":163,"end_character":47},"in_reply_to":"9a68dd71_08583589","updated":"2016-01-23 21:13:59.000000000","message":"Possibly? I can look into that.","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"3ca2b5fcce025adcb7a4a7f4045e889f4d29969a","unresolved":false,"context_lines":[{"line_number":590,"context_line":"            \u0027properties\u0027: self.token_properties,"},{"line_number":591,"context_line":"            \u0027required\u0027: [\u0027audit_ids\u0027, \u0027expires_at\u0027, \u0027issued_at\u0027, \u0027methods\u0027,"},{"line_number":592,"context_line":"                         \u0027user\u0027],"},{"line_number":593,"context_line":"            \u0027optional\u0027: [\u0027bind\u0027],"},{"line_number":594,"context_line":"            \u0027additionalProperties\u0027: False"},{"line_number":595,"context_line":"        }"},{"line_number":596,"context_line":"        validator_object \u003d validators.SchemaValidator(unscoped_token_schema)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_0e7038db","line":593,"range":{"start_line":593,"start_character":13,"end_line":593,"end_character":21},"updated":"2016-01-24 08:25:17.000000000","message":"out of scope, \u0027optional\u0027 is pointless here, isn\u0027t that the properties that is not required should be optional?","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d9c482e20037253b3b481b726261c5797160caea","unresolved":false,"context_lines":[{"line_number":590,"context_line":"            \u0027properties\u0027: self.token_properties,"},{"line_number":591,"context_line":"            \u0027required\u0027: [\u0027audit_ids\u0027, \u0027expires_at\u0027, \u0027issued_at\u0027, \u0027methods\u0027,"},{"line_number":592,"context_line":"                         \u0027user\u0027],"},{"line_number":593,"context_line":"            \u0027optional\u0027: [\u0027bind\u0027],"},{"line_number":594,"context_line":"            \u0027additionalProperties\u0027: False"},{"line_number":595,"context_line":"        }"},{"line_number":596,"context_line":"        validator_object \u003d validators.SchemaValidator(unscoped_token_schema)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_a12eb689","line":593,"range":{"start_line":593,"start_character":13,"end_line":593,"end_character":21},"in_reply_to":"9a68dd71_0e7038db","updated":"2016-01-25 16:03:24.000000000","message":"It is needed here. Some unscoped token tests do have bind cases - keystone.tests.unit.test_v3_auth.TestAuthKerberos.test_unscoped_bind_with_remote_user for example.","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"3ca2b5fcce025adcb7a4a7f4045e889f4d29969a","unresolved":false,"context_lines":[{"line_number":668,"context_line":"        token \u003d self.assertValidScopedTokenResponse(r, *args, **kwargs)"},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"        # add domain specific properties to the common token validation schema"},{"line_number":671,"context_line":"        self.token_properties[\u0027catalog\u0027] \u003d {\u0027type\u0027: [\u0027array\u0027]}"},{"line_number":672,"context_line":"        self.token_properties[\u0027domain\u0027] \u003d {"},{"line_number":673,"context_line":"            \u0027domain\u0027: {"},{"line_number":674,"context_line":"                \u0027type\u0027: [\u0027object\u0027],"},{"line_number":675,"context_line":"                \u0027required\u0027: [\u0027id\u0027, \u0027name\u0027],"},{"line_number":676,"context_line":"                \u0027properties\u0027: {"},{"line_number":677,"context_line":"                    \u0027id\u0027: {\u0027type\u0027: [\u0027string\u0027]},"},{"line_number":678,"context_line":"                    \u0027name\u0027: {\u0027type\u0027: [\u0027string\u0027]}"},{"line_number":679,"context_line":"                },"},{"line_number":680,"context_line":"                \u0027additionalProperties\u0027: False"},{"line_number":681,"context_line":"            }"},{"line_number":682,"context_line":"        }"},{"line_number":683,"context_line":"        self.token_properties[\u0027roles\u0027] \u003d {\u0027type\u0027: [\u0027array\u0027]}"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"        domain_scoped_token_schema \u003d {"},{"line_number":686,"context_line":"            \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_91e2092e","line":683,"range":{"start_line":671,"start_character":0,"end_line":683,"end_character":60},"updated":"2016-01-24 08:25:17.000000000","message":"it is changing the class level token_properties, so any testcase that will validate the project scope token later will have the domain info defined in the schema, this will make it inaccuate to detect the data creep.\n\nI made the same mistake as this, a copy will help in this case?","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d9c482e20037253b3b481b726261c5797160caea","unresolved":false,"context_lines":[{"line_number":668,"context_line":"        token \u003d self.assertValidScopedTokenResponse(r, *args, **kwargs)"},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"        # add domain specific properties to the common token validation schema"},{"line_number":671,"context_line":"        self.token_properties[\u0027catalog\u0027] \u003d {\u0027type\u0027: [\u0027array\u0027]}"},{"line_number":672,"context_line":"        self.token_properties[\u0027domain\u0027] \u003d {"},{"line_number":673,"context_line":"            \u0027domain\u0027: {"},{"line_number":674,"context_line":"                \u0027type\u0027: [\u0027object\u0027],"},{"line_number":675,"context_line":"                \u0027required\u0027: [\u0027id\u0027, \u0027name\u0027],"},{"line_number":676,"context_line":"                \u0027properties\u0027: {"},{"line_number":677,"context_line":"                    \u0027id\u0027: {\u0027type\u0027: [\u0027string\u0027]},"},{"line_number":678,"context_line":"                    \u0027name\u0027: {\u0027type\u0027: [\u0027string\u0027]}"},{"line_number":679,"context_line":"                },"},{"line_number":680,"context_line":"                \u0027additionalProperties\u0027: False"},{"line_number":681,"context_line":"            }"},{"line_number":682,"context_line":"        }"},{"line_number":683,"context_line":"        self.token_properties[\u0027roles\u0027] \u003d {\u0027type\u0027: [\u0027array\u0027]}"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"        domain_scoped_token_schema \u003d {"},{"line_number":686,"context_line":"            \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_a1d556e5","line":683,"range":{"start_line":671,"start_character":0,"end_line":683,"end_character":60},"in_reply_to":"9a68dd71_91e2092e","updated":"2016-01-25 16:03:24.000000000","message":"Done","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"3ca2b5fcce025adcb7a4a7f4045e889f4d29969a","unresolved":false,"context_lines":[{"line_number":687,"context_line":"            \u0027properties\u0027: self.token_properties,"},{"line_number":688,"context_line":"            \u0027required\u0027: [\u0027audit_ids\u0027, \u0027expires_at\u0027, \u0027issued_at\u0027, \u0027methods\u0027,"},{"line_number":689,"context_line":"                         \u0027user\u0027, \u0027domain\u0027],"},{"line_number":690,"context_line":"            \u0027optional\u0027: [\u0027bind\u0027, \u0027catalog\u0027],"},{"line_number":691,"context_line":"            \u0027additionalProperties\u0027: False"},{"line_number":692,"context_line":"        }"},{"line_number":693,"context_line":"        validator_object \u003d validators.SchemaValidator("}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_0e47d877","line":690,"range":{"start_line":690,"start_character":12,"end_line":690,"end_character":44},"updated":"2016-01-24 08:25:17.000000000","message":"this looks like could be removed as well, the testcase can pass without this. Good as it.","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d9c482e20037253b3b481b726261c5797160caea","unresolved":false,"context_lines":[{"line_number":687,"context_line":"            \u0027properties\u0027: self.token_properties,"},{"line_number":688,"context_line":"            \u0027required\u0027: [\u0027audit_ids\u0027, \u0027expires_at\u0027, \u0027issued_at\u0027, \u0027methods\u0027,"},{"line_number":689,"context_line":"                         \u0027user\u0027, \u0027domain\u0027],"},{"line_number":690,"context_line":"            \u0027optional\u0027: [\u0027bind\u0027, \u0027catalog\u0027],"},{"line_number":691,"context_line":"            \u0027additionalProperties\u0027: False"},{"line_number":692,"context_line":"        }"},{"line_number":693,"context_line":"        validator_object \u003d validators.SchemaValidator("}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_6150be32","line":690,"range":{"start_line":690,"start_character":12,"end_line":690,"end_character":44},"in_reply_to":"9a68dd71_0e47d877","updated":"2016-01-25 16:03:24.000000000","message":"Done","commit_id":"b5a278cbe09f13d4c9504f566811393e18472fdd"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"69ca62bb1a474ee10e42214385c98574d4eb9347","unresolved":false,"context_lines":[{"line_number":124,"context_line":"class RestfulTestCase(unit.SQLDriverOverrides, rest.RestfulTestCase,"},{"line_number":125,"context_line":"                      common_auth.AuthTestMixin):"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    # NOTE(lbragstad): Common token properties found in all token format,"},{"line_number":128,"context_line":"    # regardless of scope."},{"line_number":129,"context_line":"    token_properties \u003d {"},{"line_number":130,"context_line":"        \u0027audit_ids\u0027: {"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_60f2b59c","line":127,"range":{"start_line":127,"start_character":66,"end_line":127,"end_character":72},"updated":"2016-01-27 18:57:54.000000000","message":"fomats","commit_id":"14506bc2187e7cecfa02634a7db07599945eff3f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"99565a15b4df3b704f135c62f6064775a1717e40","unresolved":false,"context_lines":[{"line_number":124,"context_line":"class RestfulTestCase(unit.SQLDriverOverrides, rest.RestfulTestCase,"},{"line_number":125,"context_line":"                      common_auth.AuthTestMixin):"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    # NOTE(lbragstad): Common token properties found in all token format,"},{"line_number":128,"context_line":"    # regardless of scope."},{"line_number":129,"context_line":"    token_properties \u003d {"},{"line_number":130,"context_line":"        \u0027audit_ids\u0027: {"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_73128eb6","line":127,"in_reply_to":"7a5de9d1_60f2b59c","updated":"2016-01-27 20:37:58.000000000","message":"Done","commit_id":"14506bc2187e7cecfa02634a7db07599945eff3f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"69ca62bb1a474ee10e42214385c98574d4eb9347","unresolved":false,"context_lines":[{"line_number":578,"context_line":"        token \u003d self.assertValidTokenResponse(r, *args, **kwargs)"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"        unscoped_token_properties \u003d copy.deepcopy(self.token_properties)"},{"line_number":581,"context_line":"        unscoped_token_properties[\u0027bind\u0027] \u003d {"},{"line_number":582,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":583,"context_line":"            \u0027properties\u0027: {"},{"line_number":584,"context_line":"                \u0027kerberos\u0027: {"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_20eefd8b","line":581,"updated":"2016-01-27 18:57:54.000000000","message":"I don\u0027t think token binding has anything to do with the scope. This should be part of the general token properties.","commit_id":"14506bc2187e7cecfa02634a7db07599945eff3f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"99565a15b4df3b704f135c62f6064775a1717e40","unresolved":false,"context_lines":[{"line_number":578,"context_line":"        token \u003d self.assertValidTokenResponse(r, *args, **kwargs)"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"        unscoped_token_properties \u003d copy.deepcopy(self.token_properties)"},{"line_number":581,"context_line":"        unscoped_token_properties[\u0027bind\u0027] \u003d {"},{"line_number":582,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":583,"context_line":"            \u0027properties\u0027: {"},{"line_number":584,"context_line":"                \u0027kerberos\u0027: {"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_5e467924","line":581,"in_reply_to":"7a5de9d1_20eefd8b","updated":"2016-01-27 20:37:58.000000000","message":"Done","commit_id":"14506bc2187e7cecfa02634a7db07599945eff3f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"69ca62bb1a474ee10e42214385c98574d4eb9347","unresolved":false,"context_lines":[{"line_number":671,"context_line":"    def assertValidDomainScopedTokenResponse(self, r, *args, **kwargs):"},{"line_number":672,"context_line":"        token \u003d self.assertValidScopedTokenResponse(r, *args, **kwargs)"},{"line_number":673,"context_line":""},{"line_number":674,"context_line":"        # NOTE(lbragstad): Here we need to make a copy of the original token"},{"line_number":675,"context_line":"        # properties variable since it is a class level variable and we don\u0027t"},{"line_number":676,"context_line":"        # want to modify it for subsequent runs. The copy should consist of"},{"line_number":677,"context_line":"        # everything necessary for checking domain scoped formats."}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_c0ada932","line":674,"updated":"2016-01-27 18:57:54.000000000","message":"I don\u0027t understand this comment.","commit_id":"14506bc2187e7cecfa02634a7db07599945eff3f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"99565a15b4df3b704f135c62f6064775a1717e40","unresolved":false,"context_lines":[{"line_number":671,"context_line":"    def assertValidDomainScopedTokenResponse(self, r, *args, **kwargs):"},{"line_number":672,"context_line":"        token \u003d self.assertValidScopedTokenResponse(r, *args, **kwargs)"},{"line_number":673,"context_line":""},{"line_number":674,"context_line":"        # NOTE(lbragstad): Here we need to make a copy of the original token"},{"line_number":675,"context_line":"        # properties variable since it is a class level variable and we don\u0027t"},{"line_number":676,"context_line":"        # want to modify it for subsequent runs. The copy should consist of"},{"line_number":677,"context_line":"        # everything necessary for checking domain scoped formats."}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_fe13a55a","line":674,"in_reply_to":"7a5de9d1_c0ada932","updated":"2016-01-27 20:37:58.000000000","message":"Done","commit_id":"14506bc2187e7cecfa02634a7db07599945eff3f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"69ca62bb1a474ee10e42214385c98574d4eb9347","unresolved":false,"context_lines":[{"line_number":672,"context_line":"        token \u003d self.assertValidScopedTokenResponse(r, *args, **kwargs)"},{"line_number":673,"context_line":""},{"line_number":674,"context_line":"        # NOTE(lbragstad): Here we need to make a copy of the original token"},{"line_number":675,"context_line":"        # properties variable since it is a class level variable and we don\u0027t"},{"line_number":676,"context_line":"        # want to modify it for subsequent runs. The copy should consist of"},{"line_number":677,"context_line":"        # everything necessary for checking domain scoped formats."},{"line_number":678,"context_line":"        domain_scoped_properties \u003d copy.deepcopy(self.token_properties)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_4068d9f5","line":675,"updated":"2016-01-27 18:57:54.000000000","message":"if token_properties was a global then there wouldn\u0027t be any confusion.","commit_id":"14506bc2187e7cecfa02634a7db07599945eff3f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"99565a15b4df3b704f135c62f6064775a1717e40","unresolved":false,"context_lines":[{"line_number":672,"context_line":"        token \u003d self.assertValidScopedTokenResponse(r, *args, **kwargs)"},{"line_number":673,"context_line":""},{"line_number":674,"context_line":"        # NOTE(lbragstad): Here we need to make a copy of the original token"},{"line_number":675,"context_line":"        # properties variable since it is a class level variable and we don\u0027t"},{"line_number":676,"context_line":"        # want to modify it for subsequent runs. The copy should consist of"},{"line_number":677,"context_line":"        # everything necessary for checking domain scoped formats."},{"line_number":678,"context_line":"        domain_scoped_properties \u003d copy.deepcopy(self.token_properties)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_4acf97b0","line":675,"in_reply_to":"7a5de9d1_4068d9f5","updated":"2016-01-27 20:37:58.000000000","message":"Unfortunately, since we share it across test cases - then we would have some tests asserting scope with the wrong properties. Which is why we need to make a copy per test case.","commit_id":"14506bc2187e7cecfa02634a7db07599945eff3f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"69ca62bb1a474ee10e42214385c98574d4eb9347","unresolved":false,"context_lines":[{"line_number":682,"context_line":"                \u0027type\u0027: [\u0027object\u0027],"},{"line_number":683,"context_line":"                \u0027required\u0027: [\u0027id\u0027, \u0027name\u0027],"},{"line_number":684,"context_line":"                \u0027properties\u0027: {"},{"line_number":685,"context_line":"                    \u0027id\u0027: {\u0027type\u0027: [\u0027string\u0027]},"},{"line_number":686,"context_line":"                    \u0027name\u0027: {\u0027type\u0027: [\u0027string\u0027]}"},{"line_number":687,"context_line":"                },"},{"line_number":688,"context_line":"                \u0027additionalProperties\u0027: False"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_60587557","line":685,"updated":"2016-01-27 18:57:54.000000000","message":"since there\u0027s only 1 allowed type remove []. Same comment applies to all the type values.","commit_id":"14506bc2187e7cecfa02634a7db07599945eff3f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"99565a15b4df3b704f135c62f6064775a1717e40","unresolved":false,"context_lines":[{"line_number":682,"context_line":"                \u0027type\u0027: [\u0027object\u0027],"},{"line_number":683,"context_line":"                \u0027required\u0027: [\u0027id\u0027, \u0027name\u0027],"},{"line_number":684,"context_line":"                \u0027properties\u0027: {"},{"line_number":685,"context_line":"                    \u0027id\u0027: {\u0027type\u0027: [\u0027string\u0027]},"},{"line_number":686,"context_line":"                    \u0027name\u0027: {\u0027type\u0027: [\u0027string\u0027]}"},{"line_number":687,"context_line":"                },"},{"line_number":688,"context_line":"                \u0027additionalProperties\u0027: False"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_fe41653a","line":685,"in_reply_to":"7a5de9d1_60587557","updated":"2016-01-27 20:37:58.000000000","message":"Done","commit_id":"14506bc2187e7cecfa02634a7db07599945eff3f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6b9997de60e570344e56dee684738aaeee1daac7","unresolved":false,"context_lines":[{"line_number":587,"context_line":"    def assertValidUnscopedTokenResponse(self, r, *args, **kwargs):"},{"line_number":588,"context_line":"        token \u003d self.assertValidTokenResponse(r, *args, **kwargs)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        unscoped_token_schema \u003d {"},{"line_number":591,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":592,"context_line":"            \u0027properties\u0027: self.token_properties,"},{"line_number":593,"context_line":"            \u0027required\u0027: [\u0027audit_ids\u0027, \u0027expires_at\u0027, \u0027issued_at\u0027, \u0027methods\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_1e87a1b6","line":590,"updated":"2016-01-27 20:48:46.000000000","message":"Can\u0027t this be class-scoped? (or global)","commit_id":"9abbe5edcd4ccb55948aaab724c316ad6be0dba9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6b9997de60e570344e56dee684738aaeee1daac7","unresolved":false,"context_lines":[{"line_number":669,"context_line":"    def assertValidDomainScopedTokenResponse(self, r, *args, **kwargs):"},{"line_number":670,"context_line":"        token \u003d self.assertValidScopedTokenResponse(r, *args, **kwargs)"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"        # NOTE(lbragstad): The self.token_properties dictionary is a class"},{"line_number":673,"context_line":"        # level variable. If it is modified in one test, those changes can be"},{"line_number":674,"context_line":"        # carried over to another test. These tests add different things to the"},{"line_number":675,"context_line":"        # self.token_properties dictionary because they test different scope"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_7e4a5585","line":672,"updated":"2016-01-27 20:48:46.000000000","message":"This note is unnecessary since it\u0027s explaining basic python.","commit_id":"9abbe5edcd4ccb55948aaab724c316ad6be0dba9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6b9997de60e570344e56dee684738aaeee1daac7","unresolved":false,"context_lines":[{"line_number":670,"context_line":"        token \u003d self.assertValidScopedTokenResponse(r, *args, **kwargs)"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"        # NOTE(lbragstad): The self.token_properties dictionary is a class"},{"line_number":673,"context_line":"        # level variable. If it is modified in one test, those changes can be"},{"line_number":674,"context_line":"        # carried over to another test. These tests add different things to the"},{"line_number":675,"context_line":"        # self.token_properties dictionary because they test different scope"},{"line_number":676,"context_line":"        # cases. The self.token_properties dictionary contains common"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_be2f6da0","line":673,"updated":"2016-01-27 20:48:46.000000000","message":"comments from the previous patch set\n\n if token_properties was a global then there wouldn\u0027t be any confusion.\n\nI guess this comment was confusing... I meant that if token_properties was a global variable there wouldn\u0027t be a need for a note since it would be obvious why it needed to be copied. I thought the reason for the note is because the use of self made it confusing why copy is needed, since normally things referenced using self are instance variables which you wouldn\u0027t need to protect.","commit_id":"9abbe5edcd4ccb55948aaab724c316ad6be0dba9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6b9997de60e570344e56dee684738aaeee1daac7","unresolved":false,"context_lines":[{"line_number":679,"context_line":"        # other tests that depend on it. To effectively use"},{"line_number":680,"context_line":"        # self.token_properties without failing other tests, we must make a"},{"line_number":681,"context_line":"        # deep copy and modify that copy of self.token_properties. The copy"},{"line_number":682,"context_line":"        # should consist of everything necessary for checking domain scoped"},{"line_number":683,"context_line":"        # formats."},{"line_number":684,"context_line":"        domain_scoped_properties \u003d copy.deepcopy(self.token_properties)"},{"line_number":685,"context_line":"        domain_scoped_properties[\u0027catalog\u0027] \u003d {\u0027type\u0027: [\u0027array\u0027]}"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_5e49998a","line":682,"updated":"2016-01-27 20:48:46.000000000","message":"remove \"should\"","commit_id":"9abbe5edcd4ccb55948aaab724c316ad6be0dba9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6b9997de60e570344e56dee684738aaeee1daac7","unresolved":false,"context_lines":[{"line_number":701,"context_line":"            \u0027properties\u0027: domain_scoped_properties,"},{"line_number":702,"context_line":"            \u0027required\u0027: [\u0027audit_ids\u0027, \u0027expires_at\u0027, \u0027issued_at\u0027, \u0027methods\u0027,"},{"line_number":703,"context_line":"                         \u0027user\u0027, \u0027domain\u0027],"},{"line_number":704,"context_line":"            \u0027optional\u0027: \u0027catalog\u0027,"},{"line_number":705,"context_line":"            \u0027additionalProperties\u0027: False"},{"line_number":706,"context_line":"        }"},{"line_number":707,"context_line":"        validator_object \u003d validators.SchemaValidator("}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_dea7c94d","line":704,"updated":"2016-01-27 20:48:46.000000000","message":"this has to be a list","commit_id":"9abbe5edcd4ccb55948aaab724c316ad6be0dba9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"92a6dc77b0f3f2a3a64666c01f1ded4371b258a9","unresolved":false,"context_lines":[{"line_number":123,"context_line":"class RestfulTestCase(unit.SQLDriverOverrides, rest.RestfulTestCase,"},{"line_number":124,"context_line":"                      common_auth.AuthTestMixin):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    # NOTE(lbragstad): Common token properties found in all token formats,"},{"line_number":127,"context_line":"    # regardless of scope."},{"line_number":128,"context_line":"    def generate_base_token_schema(self):"},{"line_number":129,"context_line":"        \"\"\"Return a dict of common token properties to validate against.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_bf1d2768","line":126,"updated":"2016-01-27 21:47:31.000000000","message":"The function doesn\u0027t require a note since there\u0027s a docstring.","commit_id":"4e20e3b401ecdac41027a050a6ca860b216eb6fc"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"50653ec3b17c13cb12a9b51a68185f8755d623b9","unresolved":false,"context_lines":[{"line_number":123,"context_line":"class RestfulTestCase(unit.SQLDriverOverrides, rest.RestfulTestCase,"},{"line_number":124,"context_line":"                      common_auth.AuthTestMixin):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    # NOTE(lbragstad): Common token properties found in all token formats,"},{"line_number":127,"context_line":"    # regardless of scope."},{"line_number":128,"context_line":"    def generate_base_token_schema(self):"},{"line_number":129,"context_line":"        \"\"\"Return a dict of common token properties to validate against.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_1f49db31","line":126,"in_reply_to":"7a5de9d1_bf1d2768","updated":"2016-01-27 23:09:26.000000000","message":"Done","commit_id":"4e20e3b401ecdac41027a050a6ca860b216eb6fc"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"92a6dc77b0f3f2a3a64666c01f1ded4371b258a9","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    # NOTE(lbragstad): Common token properties found in all token formats,"},{"line_number":127,"context_line":"    # regardless of scope."},{"line_number":128,"context_line":"    def generate_base_token_schema(self):"},{"line_number":129,"context_line":"        \"\"\"Return a dict of common token properties to validate against.\"\"\""},{"line_number":130,"context_line":"        token_properties \u003d {"},{"line_number":131,"context_line":"            \u0027audit_ids\u0027: {"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_24236abf","line":128,"updated":"2016-01-27 21:47:31.000000000","message":"the name of this function should be generate_base_token_properties_schema . The full token schema includes more than just the properties.\n\nAlternatively, have this return the full base schema, which would make more sense.","commit_id":"4e20e3b401ecdac41027a050a6ca860b216eb6fc"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"50653ec3b17c13cb12a9b51a68185f8755d623b9","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    # NOTE(lbragstad): Common token properties found in all token formats,"},{"line_number":127,"context_line":"    # regardless of scope."},{"line_number":128,"context_line":"    def generate_base_token_schema(self):"},{"line_number":129,"context_line":"        \"\"\"Return a dict of common token properties to validate against.\"\"\""},{"line_number":130,"context_line":"        token_properties \u003d {"},{"line_number":131,"context_line":"            \u0027audit_ids\u0027: {"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_dfd82320","line":128,"in_reply_to":"7a5de9d1_24236abf","updated":"2016-01-27 23:09:26.000000000","message":"Done","commit_id":"4e20e3b401ecdac41027a050a6ca860b216eb6fc"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"92a6dc77b0f3f2a3a64666c01f1ded4371b258a9","unresolved":false,"context_lines":[{"line_number":589,"context_line":"    def assertValidUnscopedTokenResponse(self, r, *args, **kwargs):"},{"line_number":590,"context_line":"        token \u003d self.assertValidTokenResponse(r, *args, **kwargs)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        unscoped_token_properties \u003d self.generate_base_token_schema()"},{"line_number":593,"context_line":"        unscoped_token_schema \u003d {"},{"line_number":594,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":595,"context_line":"            \u0027properties\u0027: unscoped_token_properties,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_bf4be758","line":592,"updated":"2016-01-27 21:47:31.000000000","message":"suggest don\u0027t have a new variable.","commit_id":"4e20e3b401ecdac41027a050a6ca860b216eb6fc"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"50653ec3b17c13cb12a9b51a68185f8755d623b9","unresolved":false,"context_lines":[{"line_number":589,"context_line":"    def assertValidUnscopedTokenResponse(self, r, *args, **kwargs):"},{"line_number":590,"context_line":"        token \u003d self.assertValidTokenResponse(r, *args, **kwargs)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        unscoped_token_properties \u003d self.generate_base_token_schema()"},{"line_number":593,"context_line":"        unscoped_token_schema \u003d {"},{"line_number":594,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":595,"context_line":"            \u0027properties\u0027: unscoped_token_properties,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_9f094b98","line":592,"in_reply_to":"7a5de9d1_bf4be758","updated":"2016-01-27 23:09:26.000000000","message":"Done","commit_id":"4e20e3b401ecdac41027a050a6ca860b216eb6fc"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"92a6dc77b0f3f2a3a64666c01f1ded4371b258a9","unresolved":false,"context_lines":[{"line_number":672,"context_line":"    def assertValidDomainScopedTokenResponse(self, r, *args, **kwargs):"},{"line_number":673,"context_line":"        token \u003d self.assertValidScopedTokenResponse(r, *args, **kwargs)"},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"        domain_scoped_properties \u003d self.generate_base_token_schema()"},{"line_number":676,"context_line":"        domain_scoped_properties[\u0027catalog\u0027] \u003d {\u0027type\u0027: \u0027array\u0027}"},{"line_number":677,"context_line":"        domain_scoped_properties[\u0027domain\u0027] \u003d {"},{"line_number":678,"context_line":"            \u0027domain\u0027: {"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_7f824f54","line":675,"updated":"2016-01-27 21:47:31.000000000","message":"suggest pass a parameter to generate_base_token_schema() to generate a schema that allows domains.\n\n self.generate_base_token_schema(allow_domain\u003dTrue)\n\nthen if allow_domain add the domain stuff.","commit_id":"4e20e3b401ecdac41027a050a6ca860b216eb6fc"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"50653ec3b17c13cb12a9b51a68185f8755d623b9","unresolved":false,"context_lines":[{"line_number":672,"context_line":"    def assertValidDomainScopedTokenResponse(self, r, *args, **kwargs):"},{"line_number":673,"context_line":"        token \u003d self.assertValidScopedTokenResponse(r, *args, **kwargs)"},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"        domain_scoped_properties \u003d self.generate_base_token_schema()"},{"line_number":676,"context_line":"        domain_scoped_properties[\u0027catalog\u0027] \u003d {\u0027type\u0027: \u0027array\u0027}"},{"line_number":677,"context_line":"        domain_scoped_properties[\u0027domain\u0027] \u003d {"},{"line_number":678,"context_line":"            \u0027domain\u0027: {"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_34ecf9c6","line":675,"in_reply_to":"7a5de9d1_7f824f54","updated":"2016-01-27 23:09:26.000000000","message":"Done","commit_id":"4e20e3b401ecdac41027a050a6ca860b216eb6fc"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"92a6dc77b0f3f2a3a64666c01f1ded4371b258a9","unresolved":false,"context_lines":[{"line_number":685,"context_line":"                \u0027additionalProperties\u0027: False"},{"line_number":686,"context_line":"            }"},{"line_number":687,"context_line":"        }"},{"line_number":688,"context_line":"        domain_scoped_properties[\u0027roles\u0027] \u003d {\u0027type\u0027: \u0027array\u0027}"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"        domain_scoped_token_schema \u003d {"},{"line_number":691,"context_line":"            \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_bf6207d7","line":688,"updated":"2016-01-27 21:47:31.000000000","message":"suggest use update() then there won\u0027t be as much duplication.","commit_id":"4e20e3b401ecdac41027a050a6ca860b216eb6fc"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"50653ec3b17c13cb12a9b51a68185f8755d623b9","unresolved":false,"context_lines":[{"line_number":685,"context_line":"                \u0027additionalProperties\u0027: False"},{"line_number":686,"context_line":"            }"},{"line_number":687,"context_line":"        }"},{"line_number":688,"context_line":"        domain_scoped_properties[\u0027roles\u0027] \u003d {\u0027type\u0027: \u0027array\u0027}"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"        domain_scoped_token_schema \u003d {"},{"line_number":691,"context_line":"            \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_d4d1e5fc","line":688,"in_reply_to":"7a5de9d1_bf6207d7","updated":"2016-01-27 23:09:26.000000000","message":"Done","commit_id":"4e20e3b401ecdac41027a050a6ca860b216eb6fc"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5e773b51b89294bc1fec5c48e4b8e62b3c391511","unresolved":false,"context_lines":[{"line_number":123,"context_line":"class RestfulTestCase(unit.SQLDriverOverrides, rest.RestfulTestCase,"},{"line_number":124,"context_line":"                      common_auth.AuthTestMixin):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def generate_token_properties_schema(self, domain_scoped\u003dFalse):"},{"line_number":127,"context_line":"        \"\"\"Return a dictionary of token properties to validate against.\"\"\""},{"line_number":128,"context_line":"        token_properties \u003d {"},{"line_number":129,"context_line":"            \u0027audit_ids\u0027: {"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_34b079f4","line":126,"updated":"2016-01-27 23:09:58.000000000","message":"This isn\u0027t returning the properties anymore, so remove properties.","commit_id":"5a6ff3753d06e0cada908dd32b6fdacf174f5fab"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9096b5db2a2dc1f04e0854f705e3816d9883c3c2","unresolved":false,"context_lines":[{"line_number":123,"context_line":"class RestfulTestCase(unit.SQLDriverOverrides, rest.RestfulTestCase,"},{"line_number":124,"context_line":"                      common_auth.AuthTestMixin):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def generate_token_properties_schema(self, domain_scoped\u003dFalse):"},{"line_number":127,"context_line":"        \"\"\"Return a dictionary of token properties to validate against.\"\"\""},{"line_number":128,"context_line":"        token_properties \u003d {"},{"line_number":129,"context_line":"            \u0027audit_ids\u0027: {"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_9a3052ea","line":126,"in_reply_to":"7a5de9d1_34b079f4","updated":"2016-01-28 15:42:22.000000000","message":"Done","commit_id":"5a6ff3753d06e0cada908dd32b6fdacf174f5fab"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5e773b51b89294bc1fec5c48e4b8e62b3c391511","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                    \u0027additionalProperties\u0027: False"},{"line_number":185,"context_line":"                }"},{"line_number":186,"context_line":"            }"},{"line_number":187,"context_line":"            token_properties[\u0027roles\u0027] \u003d {\u0027type\u0027: \u0027array\u0027}"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        token_schema \u003d {"},{"line_number":190,"context_line":"            \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_54889522","line":187,"updated":"2016-01-27 23:09:58.000000000","message":"suggest use token_properties.update() for all these.","commit_id":"5a6ff3753d06e0cada908dd32b6fdacf174f5fab"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9096b5db2a2dc1f04e0854f705e3816d9883c3c2","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                    \u0027additionalProperties\u0027: False"},{"line_number":185,"context_line":"                }"},{"line_number":186,"context_line":"            }"},{"line_number":187,"context_line":"            token_properties[\u0027roles\u0027] \u003d {\u0027type\u0027: \u0027array\u0027}"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        token_schema \u003d {"},{"line_number":190,"context_line":"            \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_9afff2a9","line":187,"in_reply_to":"7a5de9d1_54889522","updated":"2016-01-28 15:42:22.000000000","message":"These dictionaries in token_properties aren\u0027t created yet - so we don\u0027t have anything to update.","commit_id":"5a6ff3753d06e0cada908dd32b6fdacf174f5fab"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"679f0ace9b2370e9f92a1d8779a71680e6116207","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def generate_token_schema(self, domain_scoped\u003dFalse):"},{"line_number":127,"context_line":"        \"\"\"Return a dictionary of token properties to validate against.\"\"\""},{"line_number":128,"context_line":"        token_properties \u003d {"},{"line_number":129,"context_line":"            \u0027audit_ids\u0027: {"},{"line_number":130,"context_line":"                \u0027type\u0027: \u0027array\u0027,"},{"line_number":131,"context_line":"                \u0027items\u0027: {"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a5de9d1_5c02cc0c","line":128,"updated":"2016-01-28 18:40:59.000000000","message":"suggest remove \"token\" prefix. The function name makes this redundant.","commit_id":"5ee51141ba46da4f2db75e0b16ed7ddd823b934e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"679f0ace9b2370e9f92a1d8779a71680e6116207","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        }"},{"line_number":174,"context_line":"        if domain_scoped:"},{"line_number":175,"context_line":"            token_properties[\u0027catalog\u0027] \u003d {\u0027type\u0027: \u0027array\u0027}"},{"line_number":176,"context_line":"            token_properties[\u0027roles\u0027] \u003d {\u0027type\u0027: \u0027array\u0027}"},{"line_number":177,"context_line":"            token_properties[\u0027domain\u0027] \u003d {"},{"line_number":178,"context_line":"                \u0027domain\u0027: {"},{"line_number":179,"context_line":"                    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a5de9d1_37e84910","line":176,"updated":"2016-01-28 18:40:59.000000000","message":"suggest add the type of the elements: \u0027items\u0027: {\u0027type\u0027: \u0027string\u0027}\n\nAlso, \u0027minItems\u0027: 1 since you\u0027re required to have a role.","commit_id":"5ee51141ba46da4f2db75e0b16ed7ddd823b934e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"679f0ace9b2370e9f92a1d8779a71680e6116207","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        }"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        if domain_scoped:"},{"line_number":199,"context_line":"            token_schema[\u0027required\u0027].append(\u0027domain\u0027)"},{"line_number":200,"context_line":"            token_schema[\u0027optional\u0027].append(\u0027catalog\u0027)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        return token_schema"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a5de9d1_fc31380c","line":199,"updated":"2016-01-28 18:40:59.000000000","message":"also add roles","commit_id":"5ee51141ba46da4f2db75e0b16ed7ddd823b934e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"bfbb29fdc0cbf11566fc83fda47e0f8035a16494","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def generate_token_schema(self, domain_scoped\u003dFalse):"},{"line_number":127,"context_line":"        \"\"\"Return a dictionary of token properties to validate against.\"\"\""},{"line_number":128,"context_line":"        token_properties \u003d {"},{"line_number":129,"context_line":"            \u0027audit_ids\u0027: {"},{"line_number":130,"context_line":"                \u0027type\u0027: \u0027array\u0027,"},{"line_number":131,"context_line":"                \u0027items\u0027: {"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a5de9d1_a87cd672","line":128,"updated":"2016-01-28 19:32:06.000000000","message":"suggest remove \"token\" prefix. The function name makes this redundant.","commit_id":"c6b6366b94ec07101c705583f8d5fc413dd8a01f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0a90eb60677192c699844c5a060d60820b711c1e","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def generate_token_schema(self, domain_scoped\u003dFalse):"},{"line_number":127,"context_line":"        \"\"\"Return a dictionary of token properties to validate against.\"\"\""},{"line_number":128,"context_line":"        token_properties \u003d {"},{"line_number":129,"context_line":"            \u0027audit_ids\u0027: {"},{"line_number":130,"context_line":"                \u0027type\u0027: \u0027array\u0027,"},{"line_number":131,"context_line":"                \u0027items\u0027: {"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a5de9d1_082f2af7","line":128,"in_reply_to":"7a5de9d1_a87cd672","updated":"2016-01-28 19:43:31.000000000","message":"Done","commit_id":"c6b6366b94ec07101c705583f8d5fc413dd8a01f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8365d65d11d13c750d0f47de74b94d6645b07beb","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            }"},{"line_number":173,"context_line":"        }"},{"line_number":174,"context_line":"        if domain_scoped:"},{"line_number":175,"context_line":"            properties[\u0027catalog\u0027] \u003d {\u0027type\u0027: \u0027array\u0027}"},{"line_number":176,"context_line":"            properties[\u0027roles\u0027] \u003d {"},{"line_number":177,"context_line":"                \u0027type\u0027: \u0027array\u0027,"},{"line_number":178,"context_line":"                \u0027items\u0027: {"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_284f86be","line":175,"updated":"2016-01-28 19:46:21.000000000","message":"it would be awesome if we had the catalog schema, too.","commit_id":"8a5343c8c219b011d122d3d8951ad541358887be"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4af1f520a7242b08b753f11ba9a5b8d93f8731ab","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            }"},{"line_number":173,"context_line":"        }"},{"line_number":174,"context_line":"        if domain_scoped:"},{"line_number":175,"context_line":"            properties[\u0027catalog\u0027] \u003d {\u0027type\u0027: \u0027array\u0027}"},{"line_number":176,"context_line":"            properties[\u0027roles\u0027] \u003d {"},{"line_number":177,"context_line":"                \u0027type\u0027: \u0027array\u0027,"},{"line_number":178,"context_line":"                \u0027items\u0027: {"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_e8bc0e6e","line":175,"in_reply_to":"7a5de9d1_284f86be","updated":"2016-01-28 19:48:25.000000000","message":"++ maybe that can be addressed in a separate patch/bug, since this bug only deals with token data creep?","commit_id":"8a5343c8c219b011d122d3d8951ad541358887be"}],"keystone/tests/unit/test_v3_auth.py":[{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"a869b93f539b071cd9404fdb438d36cf8e0624ba","unresolved":false,"context_lines":[{"line_number":489,"context_line":"        r \u003d self.get(\u0027/auth/tokens\u0027, headers\u003dself.headers)"},{"line_number":490,"context_line":"        self.assertValidUnscopedTokenResponse(r)"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    def test_domain_scoped_token_format(self):"},{"line_number":493,"context_line":"        # ensure the domain scoped token response contains the appropriate data"},{"line_number":494,"context_line":"        self.assignment_api.create_grant("},{"line_number":495,"context_line":"            self.role[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_6f50a532","line":492,"updated":"2016-01-25 16:22:26.000000000","message":"I can\u0027t seem to find the negative test cases. Could you add a test validating that the validation fails when an extra attribute is in the token.","commit_id":"89e081fb987d876f4abae6080420c58f2e2ccd9a"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"8208be803680a32618483d78daf3ca02449a2a0f","unresolved":false,"context_lines":[{"line_number":489,"context_line":"        r \u003d self.get(\u0027/auth/tokens\u0027, headers\u003dself.headers)"},{"line_number":490,"context_line":"        self.assertValidUnscopedTokenResponse(r)"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    def test_domain_scoped_token_format(self):"},{"line_number":493,"context_line":"        # ensure the domain scoped token response contains the appropriate data"},{"line_number":494,"context_line":"        self.assignment_api.create_grant("},{"line_number":495,"context_line":"            self.role[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_4a8a5865","line":492,"in_reply_to":"9a68dd71_6f50a532","updated":"2016-01-26 02:23:12.000000000","message":"this is added in the follow up - https://review.openstack.org/#/c/253670/5/keystone/tests/unit/test_v3_auth.py","commit_id":"89e081fb987d876f4abae6080420c58f2e2ccd9a"}]}
