)]}'
{"keystone/tests/unit/token/test_fernet_provider.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d9d6fae06ca230427841aecd0c2aceccba925954","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        federated_info \u003d None"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        payload \u003d token_formatters.UnscopedPayload.assemble("},{"line_number":158,"context_line":"            exp_user_id, exp_methods, project_id, domain_id, exp_expires_at,"},{"line_number":159,"context_line":"            exp_audit_ids, trust_id, federated_info)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        (user_id, methods, expires_at, audit_ids) \u003d ("}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_64f7c4f5","line":158,"updated":"2015-10-07 17:33:36.000000000","message":"should these have the same exp_ convention as the other variables used?","commit_id":"35da87dd5775e29f7cc2a20f8548ea3d9ced227e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4d9279e0161d0336bc98d65e6bb6a6f0ec128016","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        federated_info \u003d None"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        payload \u003d token_formatters.UnscopedPayload.assemble("},{"line_number":158,"context_line":"            exp_user_id, exp_methods, project_id, domain_id, exp_expires_at,"},{"line_number":159,"context_line":"            exp_audit_ids, trust_id, federated_info)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        (user_id, methods, expires_at, audit_ids) \u003d ("}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_187b90f6","line":158,"in_reply_to":"7a2fa921_64f7c4f5","updated":"2015-10-09 00:27:57.000000000","message":"these aren\u0027t expected values, they\u0027re just there to fill in the extra arguments.","commit_id":"35da87dd5775e29f7cc2a20f8548ea3d9ced227e"}],"keystone/token/providers/fernet/token_formatters.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"cd3224f08772edf8ddcb24f3b388d48a742f9cd1","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        }"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        for payload_class in PAYLOAD_CLASSES:"},{"line_number":138,"context_line":"            if payload_class.create_arguments_apply(**create_arguments):"},{"line_number":139,"context_line":"                break"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        version \u003d payload_class.version"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a1a9d01_fff081cb","line":138,"updated":"2015-10-02 13:21:56.000000000","message":"shouldn\u0027t payload_class be set to something so that we know about it outside the context of the for loop?","commit_id":"fe3b43589292e199ba5cf89b439cebff3d5702a8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"29b22c8a9282acac74807807e10f48936fa0bc5a","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        }"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        for payload_class in PAYLOAD_CLASSES:"},{"line_number":138,"context_line":"            if payload_class.create_arguments_apply(**create_arguments):"},{"line_number":139,"context_line":"                break"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        version \u003d payload_class.version"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_8e0fe1e0","line":138,"in_reply_to":"9a1a9d01_fff081cb","updated":"2015-10-06 14:27:40.000000000","message":"python specifies that payload_class will still be defined outside the for loop.","commit_id":"fe3b43589292e199ba5cf89b439cebff3d5702a8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"cd3224f08772edf8ddcb24f3b388d48a742f9cd1","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            if payload_class.create_arguments_apply(**create_arguments):"},{"line_number":139,"context_line":"                break"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        version \u003d payload_class.version"},{"line_number":142,"context_line":"        payload \u003d payload_class.assemble("},{"line_number":143,"context_line":"                user_id, methods, project_id, domain_id, expires_at, audit_ids,"},{"line_number":144,"context_line":"                trust_id, federated_info"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a1a9d01_1fc5355a","line":141,"updated":"2015-10-02 13:21:56.000000000","message":"how do we know what payload_class we\u0027re calling?","commit_id":"fe3b43589292e199ba5cf89b439cebff3d5702a8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"29b22c8a9282acac74807807e10f48936fa0bc5a","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            if payload_class.create_arguments_apply(**create_arguments):"},{"line_number":139,"context_line":"                break"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        version \u003d payload_class.version"},{"line_number":142,"context_line":"        payload \u003d payload_class.assemble("},{"line_number":143,"context_line":"                user_id, methods, project_id, domain_id, expires_at, audit_ids,"},{"line_number":144,"context_line":"                trust_id, federated_info"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_ce2cf94c","line":141,"in_reply_to":"9a1a9d01_1fc5355a","updated":"2015-10-06 14:27:40.000000000","message":"This code doesn\u0027t care what payload_class we\u0027re calling.","commit_id":"fe3b43589292e199ba5cf89b439cebff3d5702a8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"cd3224f08772edf8ddcb24f3b388d48a742f9cd1","unresolved":false,"context_lines":[{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    @classmethod"},{"line_number":374,"context_line":"    def assemble(cls, user_id, methods, project_id, domain_id, expires_at,"},{"line_number":375,"context_line":"                 audit_ids, trust_id, federated_info):"},{"line_number":376,"context_line":"        \"\"\"Assemble the payload of a domain-scoped token."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        :param user_id: ID of the user in the token request"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a1a9d01_1f9c5568","line":375,"updated":"2015-10-02 13:21:56.000000000","message":"so, all classes are going to require these arguments in their assemble methods even though they aren\u0027t used?","commit_id":"fe3b43589292e199ba5cf89b439cebff3d5702a8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"29b22c8a9282acac74807807e10f48936fa0bc5a","unresolved":false,"context_lines":[{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    @classmethod"},{"line_number":374,"context_line":"    def assemble(cls, user_id, methods, project_id, domain_id, expires_at,"},{"line_number":375,"context_line":"                 audit_ids, trust_id, federated_info):"},{"line_number":376,"context_line":"        \"\"\"Assemble the payload of a domain-scoped token."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        :param user_id: ID of the user in the token request"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_51faccbe","line":375,"in_reply_to":"9a1a9d01_1f9c5568","updated":"2015-10-06 14:27:40.000000000","message":"yes, they\u0027re all the same so that the caller doesn\u0027t need to know details about the subclasses.","commit_id":"fe3b43589292e199ba5cf89b439cebff3d5702a8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"cd3224f08772edf8ddcb24f3b388d48a742f9cd1","unresolved":false,"context_lines":[{"line_number":674,"context_line":"    FederatedUnscopedPayload,"},{"line_number":675,"context_line":"    ProjectScopedPayload,"},{"line_number":676,"context_line":"    DomainScopedPayload,"},{"line_number":677,"context_line":"    UnscopedPayload,  # The order is important."},{"line_number":678,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a1a9d01_1fbbf50f","line":677,"updated":"2015-10-02 13:21:56.000000000","message":"An explanation about why the order would probably be useful here since it\u0027s not as easy to tell given the refactor.","commit_id":"fe3b43589292e199ba5cf89b439cebff3d5702a8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"29b22c8a9282acac74807807e10f48936fa0bc5a","unresolved":false,"context_lines":[{"line_number":674,"context_line":"    FederatedUnscopedPayload,"},{"line_number":675,"context_line":"    ProjectScopedPayload,"},{"line_number":676,"context_line":"    DomainScopedPayload,"},{"line_number":677,"context_line":"    UnscopedPayload,  # The order is important."},{"line_number":678,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_f1943838","line":677,"in_reply_to":"9a1a9d01_1fbbf50f","updated":"2015-10-06 14:27:40.000000000","message":"Done","commit_id":"fe3b43589292e199ba5cf89b439cebff3d5702a8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"307e6383776dcbd5bde46687b989498cec501b7e","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                     domain_id\u003dNone, project_id\u003dNone, trust_id\u003dNone,"},{"line_number":139,"context_line":"                     federated_info\u003dNone):"},{"line_number":140,"context_line":"        \"\"\"Given a set of payload attributes, generate a Fernet token.\"\"\""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        for payload_class in PAYLOAD_CLASSES:"},{"line_number":143,"context_line":"            if payload_class.create_arguments_apply("},{"line_number":144,"context_line":"                    project_id\u003dproject_id, domain_id\u003ddomain_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_3310384e","line":141,"updated":"2015-10-07 16:38:24.000000000","message":"revert this whitespace change? \n\nI think we have a change to make this consistent. https://review.openstack.org/#/c/229887/","commit_id":"35da87dd5775e29f7cc2a20f8548ea3d9ced227e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4d9279e0161d0336bc98d65e6bb6a6f0ec128016","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                     domain_id\u003dNone, project_id\u003dNone, trust_id\u003dNone,"},{"line_number":139,"context_line":"                     federated_info\u003dNone):"},{"line_number":140,"context_line":"        \"\"\"Given a set of payload attributes, generate a Fernet token.\"\"\""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        for payload_class in PAYLOAD_CLASSES:"},{"line_number":143,"context_line":"            if payload_class.create_arguments_apply("},{"line_number":144,"context_line":"                    project_id\u003dproject_id, domain_id\u003ddomain_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_1862b03e","line":141,"in_reply_to":"7a2fa921_3310384e","updated":"2015-10-09 00:27:57.000000000","message":"Done","commit_id":"35da87dd5775e29f7cc2a20f8548ea3d9ced227e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d9d6fae06ca230427841aecd0c2aceccba925954","unresolved":false,"context_lines":[{"line_number":637,"context_line":"# the catch-all after all the other payloads have been checked."},{"line_number":638,"context_line":"# TODO(blk-u): Clean up the create_arguments_apply methods so that they don\u0027t"},{"line_number":639,"context_line":"# depend on the previous classes then these can be in any order."},{"line_number":640,"context_line":"PAYLOAD_CLASSES \u003d ["},{"line_number":641,"context_line":"    TrustScopedPayload,"},{"line_number":642,"context_line":"    FederatedProjectScopedPayload,"},{"line_number":643,"context_line":"    FederatedDomainScopedPayload,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_2448ec2c","line":640,"updated":"2015-10-07 17:33:36.000000000","message":"I don\u0027t think we need to have this as a module level global variable do we? \n\nCan the TokenFormatter class keep track of this as a class variable?","commit_id":"35da87dd5775e29f7cc2a20f8548ea3d9ced227e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4d9279e0161d0336bc98d65e6bb6a6f0ec128016","unresolved":false,"context_lines":[{"line_number":637,"context_line":"# the catch-all after all the other payloads have been checked."},{"line_number":638,"context_line":"# TODO(blk-u): Clean up the create_arguments_apply methods so that they don\u0027t"},{"line_number":639,"context_line":"# depend on the previous classes then these can be in any order."},{"line_number":640,"context_line":"PAYLOAD_CLASSES \u003d ["},{"line_number":641,"context_line":"    TrustScopedPayload,"},{"line_number":642,"context_line":"    FederatedProjectScopedPayload,"},{"line_number":643,"context_line":"    FederatedDomainScopedPayload,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_58d90821","line":640,"in_reply_to":"7a2fa921_2448ec2c","updated":"2015-10-09 00:27:57.000000000","message":"problem is you can\u0027t reference these symbols (TrustScopedPayload, etc.) in TokenFormatter since they\u0027re not defined yet.","commit_id":"35da87dd5775e29f7cc2a20f8548ea3d9ced227e"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"a033e8e9cf296306866445743b02f9c2f077399b","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    @classmethod"},{"line_number":391,"context_line":"    def create_arguments_apply(cls, **kwargs):"},{"line_number":392,"context_line":"        return kwargs[\u0027domain_id\u0027]"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    @classmethod"},{"line_number":395,"context_line":"    def assemble(cls, user_id, methods, project_id, domain_id, expires_at,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_a77dd1e8","line":392,"updated":"2015-12-06 22:21:36.000000000","message":"Shouldn\u0027t this return a boolean value ? Same for the next classes based on BasePayload","commit_id":"1d1c6b0b6d17d7a5577371f4a05907bb4311f0d4"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"63e9fb39b39ebec6dbe2ef09ca36d9884308c24e","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    @classmethod"},{"line_number":391,"context_line":"    def create_arguments_apply(cls, **kwargs):"},{"line_number":392,"context_line":"        return kwargs[\u0027domain_id\u0027]"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    @classmethod"},{"line_number":395,"context_line":"    def assemble(cls, user_id, methods, project_id, domain_id, expires_at,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_856518b6","line":392,"in_reply_to":"7a740942_540a797a","updated":"2015-12-18 13:26:47.000000000","message":"It works indeed, but perhaps returning a boolean would make the code clearer ? Anyway, I am fine with this as it is","commit_id":"1d1c6b0b6d17d7a5577371f4a05907bb4311f0d4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"47fc6772dbe153e4bcd60896a71ddbf79142744e","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    @classmethod"},{"line_number":391,"context_line":"    def create_arguments_apply(cls, **kwargs):"},{"line_number":392,"context_line":"        return kwargs[\u0027domain_id\u0027]"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    @classmethod"},{"line_number":395,"context_line":"    def assemble(cls, user_id, methods, project_id, domain_id, expires_at,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_540a797a","line":392,"in_reply_to":"7a740942_a77dd1e8","updated":"2015-12-07 15:29:56.000000000","message":"Samuel - this is how the code worked before. there\u0027s no need to convert to a bool, this is how python works.","commit_id":"1d1c6b0b6d17d7a5577371f4a05907bb4311f0d4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d66f359f4d1a948704774a1ecf41e1d911e9eaf4","unresolved":false,"context_lines":[{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    @classmethod"},{"line_number":483,"context_line":"    def create_arguments_apply(cls, **kwargs):"},{"line_number":484,"context_line":"        return kwargs[\u0027trust_id\u0027]"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    @classmethod"},{"line_number":487,"context_line":"    def assemble(cls, user_id, methods, project_id, domain_id, expires_at,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_821bfa1b","line":484,"updated":"2015-12-01 17:07:13.000000000","message":"Should this be checking that project_id is also a required keyword argument of TrustScopedPayload.assemble()? Checking that trust_id is a keyword is enough to determine that we\u0027re dealing with a trust scoped token, but it doesn\u0027t check all the things required.\n\nIs that something we want this method to cover?","commit_id":"1d1c6b0b6d17d7a5577371f4a05907bb4311f0d4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eb56f0d6e416dc8c8a4b6bc8a9fe045ba5e9d1f1","unresolved":false,"context_lines":[{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    @classmethod"},{"line_number":483,"context_line":"    def create_arguments_apply(cls, **kwargs):"},{"line_number":484,"context_line":"        return kwargs[\u0027trust_id\u0027]"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    @classmethod"},{"line_number":487,"context_line":"    def assemble(cls, user_id, methods, project_id, domain_id, expires_at,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_e47ac987","line":484,"in_reply_to":"9a8ffd7b_821bfa1b","updated":"2015-12-02 18:42:45.000000000","message":"Lance - in the original code at line 141 all that was checked is that trust_id is supplied, so it must have been enough to only check trust_id before otherwise there\u0027s an existing bug in the code.","commit_id":"1d1c6b0b6d17d7a5577371f4a05907bb4311f0d4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d66f359f4d1a948704774a1ecf41e1d911e9eaf4","unresolved":false,"context_lines":[{"line_number":642,"context_line":""},{"line_number":643,"context_line":"    @classmethod"},{"line_number":644,"context_line":"    def create_arguments_apply(cls, **kwargs):"},{"line_number":645,"context_line":"        return kwargs[\u0027project_id\u0027] and kwargs[\u0027federated_info\u0027]"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"class FederatedDomainScopedPayload(FederatedScopedPayload):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_82777a3a","line":645,"updated":"2015-12-01 17:07:13.000000000","message":"Like this, should we be doing this with trust scoped tokens?","commit_id":"1d1c6b0b6d17d7a5577371f4a05907bb4311f0d4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eb56f0d6e416dc8c8a4b6bc8a9fe045ba5e9d1f1","unresolved":false,"context_lines":[{"line_number":642,"context_line":""},{"line_number":643,"context_line":"    @classmethod"},{"line_number":644,"context_line":"    def create_arguments_apply(cls, **kwargs):"},{"line_number":645,"context_line":"        return kwargs[\u0027project_id\u0027] and kwargs[\u0027federated_info\u0027]"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"class FederatedDomainScopedPayload(FederatedScopedPayload):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_84f09dfe","line":645,"in_reply_to":"9a8ffd7b_82777a3a","updated":"2015-12-02 18:42:45.000000000","message":"Lance - see previous response. This is what the code was doing before. The goal of this change was to not change the behavior at all, assuming the original behavior was correct. If the original behavior wasn\u0027t correct then we should fix that first, but I think it was right and the tests pass.","commit_id":"1d1c6b0b6d17d7a5577371f4a05907bb4311f0d4"}]}
