)]}'
{"ironic/api/controllers/v1/allocation.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b88f40d56d980123b0c5dc9eb3956da1b9c3902d","unresolved":true,"context_lines":[{"line_number":226,"context_line":"        for allocation in allocations:"},{"line_number":227,"context_line":"            api_utils.check_owner_policy(\u0027allocation\u0027,"},{"line_number":228,"context_line":"                                         \u0027baremetal:allocation:get\u0027,"},{"line_number":229,"context_line":"                                         allocation.owner)"},{"line_number":230,"context_line":"        print(\u0027Past policy checking \u003c------------------------------\u0027)"},{"line_number":231,"context_line":"        return list_convert_with_links(allocations, limit,"},{"line_number":232,"context_line":"                                       url\u003dresource_url,"}],"source_content_type":"text/x-python","patch_set":2,"id":"8f02ddda_1ac440e3","line":229,"updated":"2021-03-04 01:32:10.000000000","message":"Do we really need to check the get policy on each individual allocation, or can we just rely on the filter returning those allowed, and assert the filter works with tests?","commit_id":"45df1ecb81649cf4f3e95a11d009990800b3fdb7"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"26dbf4e3cb3c77f67c7e6206b359d0aa86b28efe","unresolved":true,"context_lines":[{"line_number":226,"context_line":"        for allocation in allocations:"},{"line_number":227,"context_line":"            api_utils.check_owner_policy(\u0027allocation\u0027,"},{"line_number":228,"context_line":"                                         \u0027baremetal:allocation:get\u0027,"},{"line_number":229,"context_line":"                                         allocation.owner)"},{"line_number":230,"context_line":"        print(\u0027Past policy checking \u003c------------------------------\u0027)"},{"line_number":231,"context_line":"        return list_convert_with_links(allocations, limit,"},{"line_number":232,"context_line":"                                       url\u003dresource_url,"}],"source_content_type":"text/x-python","patch_set":2,"id":"64393b36_9d26ea04","line":229,"in_reply_to":"8f02ddda_1ac440e3","updated":"2021-03-04 14:16:34.000000000","message":"I think we do anytime a node is visible or accessed even as a part of a url for like /v1/allocations/\u003cnode\u003e/allocation because access to the higher level part of the URL is not verified/checked, it just gets passed all the way down to the controller.","commit_id":"45df1ecb81649cf4f3e95a11d009990800b3fdb7"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"a5b6cc1a3d642c39c076bb0fdecbc7eaa247699d","unresolved":true,"context_lines":[{"line_number":324,"context_line":"        # although it is not actually that horrible since it is phased out"},{"line_number":325,"context_line":"        # just modifying/assembling the allocation. Given that, it seems"},{"line_number":326,"context_line":"        # not great to try for a full method rewrite at the same time as"},{"line_number":327,"context_line":"        # RBAC work, so the complexity limit is being raised. :("},{"line_number":328,"context_line":"        if cdict.get(\u0027system_scope\u0027) !\u003d \u0027all\u0027:"},{"line_number":329,"context_line":"            # if not a system scope originated request, we need to check/apply"},{"line_number":330,"context_line":"            # an owner."}],"source_content_type":"text/x-python","patch_set":5,"id":"2c7b7916_eaeb4a6d","line":327,"updated":"2021-03-08 16:57:12.000000000","message":"this is ok, 19 should be fine for now, and it\u0027s definitely not that horrible :D","commit_id":"1ed0255c7d5da9c9e05cb66d3fb3771912a2da60"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0cfe3c57e99774dc50c51834c97d65f39141e35a","unresolved":true,"context_lines":[{"line_number":324,"context_line":"        # although it is not actually that horrible since it is phased out"},{"line_number":325,"context_line":"        # just modifying/assembling the allocation. Given that, it seems"},{"line_number":326,"context_line":"        # not great to try for a full method rewrite at the same time as"},{"line_number":327,"context_line":"        # RBAC work, so the complexity limit is being raised. :("},{"line_number":328,"context_line":"        if cdict.get(\u0027system_scope\u0027) !\u003d \u0027all\u0027:"},{"line_number":329,"context_line":"            # if not a system scope originated request, we need to check/apply"},{"line_number":330,"context_line":"            # an owner."}],"source_content_type":"text/x-python","patch_set":5,"id":"a4b8223a_8347cf35","line":327,"in_reply_to":"2c7b7916_eaeb4a6d","updated":"2021-03-08 17:35:02.000000000","message":"I still feel bad :)","commit_id":"1ed0255c7d5da9c9e05cb66d3fb3771912a2da60"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c0ca8d6d60eed202e79ec8df946842ad8dd235c5","unresolved":true,"context_lines":[{"line_number":148,"context_line":"        :param resource_url: Optional, URL to the allocation resource."},{"line_number":149,"context_line":"        :param fields: Optional, a list with a specified set of fields"},{"line_number":150,"context_line":"                       of the resource to be returned."},{"line_number":151,"context_line":"        :param owner: project_id of owner to filter by"},{"line_number":152,"context_line":"        \"\"\""},{"line_number":153,"context_line":"        limit \u003d api_utils.validate_limit(limit)"},{"line_number":154,"context_line":"        sort_dir \u003d api_utils.validate_sort_dir(sort_dir)"}],"source_content_type":"text/x-python","patch_set":12,"id":"33294f30_71787ca7","line":151,"updated":"2021-03-11 01:05:14.000000000","message":"need param docs for parent_node","commit_id":"073b585e811427791fa8b4d53aeda770931ebaed"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        :param resource_url: Optional, URL to the allocation resource."},{"line_number":149,"context_line":"        :param fields: Optional, a list with a specified set of fields"},{"line_number":150,"context_line":"                       of the resource to be returned."},{"line_number":151,"context_line":"        :param owner: project_id of owner to filter by"},{"line_number":152,"context_line":"        \"\"\""},{"line_number":153,"context_line":"        limit \u003d api_utils.validate_limit(limit)"},{"line_number":154,"context_line":"        sort_dir \u003d api_utils.validate_sort_dir(sort_dir)"}],"source_content_type":"text/x-python","patch_set":12,"id":"d032a2fd_f68c1ac1","line":151,"in_reply_to":"33294f30_71787ca7","updated":"2021-03-16 13:03:52.000000000","message":"Done","commit_id":"073b585e811427791fa8b4d53aeda770931ebaed"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c0ca8d6d60eed202e79ec8df946842ad8dd235c5","unresolved":true,"context_lines":[{"line_number":157,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":158,"context_line":"                _(\"The sort_key value %(key)s is an invalid field for \""},{"line_number":159,"context_line":"                  \"sorting\") % {\u0027key\u0027: sort_key})"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # If the user is not allowed to see everything, we need to filter"},{"line_number":162,"context_line":"        # based upon access rights."},{"line_number":163,"context_line":"        cdict \u003d api.request.context.to_policy_values()"}],"source_content_type":"text/x-python","patch_set":12,"id":"9cdf7a99_9fe5035d","line":160,"updated":"2021-03-11 01:05:14.000000000","message":"Given the different branches node_uuid can be initialized, can we have a node_uuid \u003d None here","commit_id":"073b585e811427791fa8b4d53aeda770931ebaed"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c0ca8d6d60eed202e79ec8df946842ad8dd235c5","unresolved":true,"context_lines":[{"line_number":166,"context_line":"                    \u0027baremetal:allocataion:list_all\u0027):"},{"line_number":167,"context_line":"                owner \u003d cdict.get(\u0027project_id\u0027)"},{"line_number":168,"context_line":"        else:"},{"line_number":169,"context_line":"            node_uuid \u003d parent_node"},{"line_number":170,"context_line":"        marker_obj \u003d None"},{"line_number":171,"context_line":"        if marker:"},{"line_number":172,"context_line":"            marker_obj \u003d objects.Allocation.get_by_uuid(api.request.context,"}],"source_content_type":"text/x-python","patch_set":12,"id":"b735afa7_1608886f","line":169,"updated":"2021-03-11 01:05:14.000000000","message":"There are paths here where neither owner nor node_uuid are set, which might be correct but I\u0027m struggling to infer what each case means. Maybe a comment inside each branch which explains \"this therefore we\u0027re filtering by that\"","commit_id":"073b585e811427791fa8b4d53aeda770931ebaed"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":true,"context_lines":[{"line_number":166,"context_line":"                    \u0027baremetal:allocataion:list_all\u0027):"},{"line_number":167,"context_line":"                owner \u003d cdict.get(\u0027project_id\u0027)"},{"line_number":168,"context_line":"        else:"},{"line_number":169,"context_line":"            node_uuid \u003d parent_node"},{"line_number":170,"context_line":"        marker_obj \u003d None"},{"line_number":171,"context_line":"        if marker:"},{"line_number":172,"context_line":"            marker_obj \u003d objects.Allocation.get_by_uuid(api.request.context,"}],"source_content_type":"text/x-python","patch_set":12,"id":"c754303a_95cd5590","line":169,"in_reply_to":"b735afa7_1608886f","updated":"2021-03-16 13:03:52.000000000","message":"Doing that upfront likely would have helped me :) Everything getting routed through the same place in the controller increases the risk unfortunately, even if it seems cleaner in initial development 😞","commit_id":"073b585e811427791fa8b4d53aeda770931ebaed"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c0ca8d6d60eed202e79ec8df946842ad8dd235c5","unresolved":true,"context_lines":[{"line_number":344,"context_line":"        # although it is not actually that horrible since it is phased out"},{"line_number":345,"context_line":"        # just modifying/assembling the allocation. Given that, it seems"},{"line_number":346,"context_line":"        # not great to try for a full method rewrite at the same time as"},{"line_number":347,"context_line":"        # RBAC work, so the complexity limit is being raised. :("},{"line_number":348,"context_line":"        if (CONF.oslo_policy.enforce_new_defaults"},{"line_number":349,"context_line":"            and cdict.get(\u0027system_scope\u0027) !\u003d \u0027all\u0027):"},{"line_number":350,"context_line":"            # if not a system scope originated request, we need to check/apply"}],"source_content_type":"text/x-python","patch_set":12,"id":"4a6d8644_e86ec561","line":347,"updated":"2021-03-11 01:05:14.000000000","message":"Or this block could be moved a new api_utils.check_allocation_... function ;)","commit_id":"073b585e811427791fa8b4d53aeda770931ebaed"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":true,"context_lines":[{"line_number":344,"context_line":"        # although it is not actually that horrible since it is phased out"},{"line_number":345,"context_line":"        # just modifying/assembling the allocation. Given that, it seems"},{"line_number":346,"context_line":"        # not great to try for a full method rewrite at the same time as"},{"line_number":347,"context_line":"        # RBAC work, so the complexity limit is being raised. :("},{"line_number":348,"context_line":"        if (CONF.oslo_policy.enforce_new_defaults"},{"line_number":349,"context_line":"            and cdict.get(\u0027system_scope\u0027) !\u003d \u0027all\u0027):"},{"line_number":350,"context_line":"            # if not a system scope originated request, we need to check/apply"}],"source_content_type":"text/x-python","patch_set":12,"id":"b759e46b_0f0f1025","line":347,"in_reply_to":"4a6d8644_e86ec561","updated":"2021-03-16 13:03:52.000000000","message":"Maybe line 356 to get the allocation project id. Maybe.","commit_id":"073b585e811427791fa8b4d53aeda770931ebaed"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ff536460d120eb0c4494194b6419ae360c908b8","unresolved":true,"context_lines":[{"line_number":137,"context_line":"                                    state\u003dNone, owner\u003dNone, marker\u003dNone,"},{"line_number":138,"context_line":"                                    limit\u003dNone, sort_key\u003d\u0027id\u0027, sort_dir\u003d\u0027asc\u0027,"},{"line_number":139,"context_line":"                                    resource_url\u003dNone, fields\u003dNone,"},{"line_number":140,"context_line":"                                    parent_node\u003dNone):"},{"line_number":141,"context_line":"        \"\"\"Return allocations collection."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        :param node_ident: UUID or name of a node."}],"source_content_type":"text/x-python","patch_set":15,"id":"985df651_1c9c6e5b","line":140,"updated":"2021-03-15 17:18:13.000000000","message":"nit: use\n\n self.parent_node_ident\n\n(may require adding a default value of None to this class)","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":true,"context_lines":[{"line_number":137,"context_line":"                                    state\u003dNone, owner\u003dNone, marker\u003dNone,"},{"line_number":138,"context_line":"                                    limit\u003dNone, sort_key\u003d\u0027id\u0027, sort_dir\u003d\u0027asc\u0027,"},{"line_number":139,"context_line":"                                    resource_url\u003dNone, fields\u003dNone,"},{"line_number":140,"context_line":"                                    parent_node\u003dNone):"},{"line_number":141,"context_line":"        \"\"\"Return allocations collection."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        :param node_ident: UUID or name of a node."}],"source_content_type":"text/x-python","patch_set":15,"id":"dbb6220a_548c4665","line":140,"in_reply_to":"985df651_1c9c6e5b","updated":"2021-03-16 13:03:52.000000000","message":"Can\u0027t. self.parent_node_ident only exists when invoked via the subcontroller of a node. The pattern elsewhere and also here is to directly assert it on the call to the method from the class that would have it.","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ff536460d120eb0c4494194b6419ae360c908b8","unresolved":true,"context_lines":[{"line_number":161,"context_line":"                _(\"The sort_key value %(key)s is an invalid field for \""},{"line_number":162,"context_line":"                  \"sorting\") % {\u0027key\u0027: sort_key})"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        node_uuid \u003d None"},{"line_number":165,"context_line":"        # If the user is not allowed to see everything, we need to filter"},{"line_number":166,"context_line":"        # based upon access rights."},{"line_number":167,"context_line":"        cdict \u003d api.request.context.to_policy_values()"}],"source_content_type":"text/x-python","patch_set":15,"id":"b57d2abc_9d641401","line":164,"updated":"2021-03-15 17:18:13.000000000","message":"node_uuid is unconditionally set below, let\u0027s not set it in this block","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":true,"context_lines":[{"line_number":161,"context_line":"                _(\"The sort_key value %(key)s is an invalid field for \""},{"line_number":162,"context_line":"                  \"sorting\") % {\u0027key\u0027: sort_key})"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        node_uuid \u003d None"},{"line_number":165,"context_line":"        # If the user is not allowed to see everything, we need to filter"},{"line_number":166,"context_line":"        # based upon access rights."},{"line_number":167,"context_line":"        cdict \u003d api.request.context.to_policy_values()"}],"source_content_type":"text/x-python","patch_set":15,"id":"de83c2da_c853141b","line":164,"in_reply_to":"b57d2abc_9d641401","updated":"2021-03-16 13:03:52.000000000","message":"Yeah, this seems redundant.","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ff536460d120eb0c4494194b6419ae360c908b8","unresolved":true,"context_lines":[{"line_number":177,"context_line":"        else:"},{"line_number":178,"context_line":"            # The controller is being accessed as a sub-resource."},{"line_number":179,"context_line":"            # Cool, but that means there can only be one result."},{"line_number":180,"context_line":"            node_uuid \u003d parent_node"},{"line_number":181,"context_line":"            # Override if any node_ident was submitted in since this"},{"line_number":182,"context_line":"            # is a subresource query."},{"line_number":183,"context_line":"            node_ident \u003d parent_node"}],"source_content_type":"text/x-python","patch_set":15,"id":"78dfe69c_03d16f2e","line":180,"updated":"2021-03-15 17:18:13.000000000","message":"It seems that parent_node can be a name: https://opendev.org/openstack/ironic/src/branch/master/ironic/api/controllers/v1/node.py#L1653. You do convert node_ident into node_uuid on line 198, so maybe remove this line to avoid confusion?","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":true,"context_lines":[{"line_number":177,"context_line":"        else:"},{"line_number":178,"context_line":"            # The controller is being accessed as a sub-resource."},{"line_number":179,"context_line":"            # Cool, but that means there can only be one result."},{"line_number":180,"context_line":"            node_uuid \u003d parent_node"},{"line_number":181,"context_line":"            # Override if any node_ident was submitted in since this"},{"line_number":182,"context_line":"            # is a subresource query."},{"line_number":183,"context_line":"            node_ident \u003d parent_node"}],"source_content_type":"text/x-python","patch_set":15,"id":"3adb2644_9ba64422","line":180,"in_reply_to":"78dfe69c_03d16f2e","updated":"2021-03-16 13:03:52.000000000","message":"Ack, yeah. I guess the going back/forth in this got me a little confused. 😭","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ff536460d120eb0c4494194b6419ae360c908b8","unresolved":true,"context_lines":[{"line_number":226,"context_line":"        for allocation in allocations:"},{"line_number":227,"context_line":"            api_utils.check_owner_policy(\u0027allocation\u0027,"},{"line_number":228,"context_line":"                                         \u0027baremetal:allocation:get\u0027,"},{"line_number":229,"context_line":"                                         allocation.owner)"},{"line_number":230,"context_line":"        return list_convert_with_links(allocations, limit,"},{"line_number":231,"context_line":"                                       url\u003dresource_url,"},{"line_number":232,"context_line":"                                       fields\u003dfields,"}],"source_content_type":"text/x-python","patch_set":15,"id":"e0df67ed_3b1c4487","line":229,"updated":"2021-03-15 17:18:13.000000000","message":"Seems redundant with filters above?","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":true,"context_lines":[{"line_number":226,"context_line":"        for allocation in allocations:"},{"line_number":227,"context_line":"            api_utils.check_owner_policy(\u0027allocation\u0027,"},{"line_number":228,"context_line":"                                         \u0027baremetal:allocation:get\u0027,"},{"line_number":229,"context_line":"                                         allocation.owner)"},{"line_number":230,"context_line":"        return list_convert_with_links(allocations, limit,"},{"line_number":231,"context_line":"                                       url\u003dresource_url,"},{"line_number":232,"context_line":"                                       fields\u003dfields,"}],"source_content_type":"text/x-python","patch_set":15,"id":"03b9577e_18972339","line":229,"in_reply_to":"e0df67ed_3b1c4487","updated":"2021-03-16 13:03:52.000000000","message":"This is the actual policy enforcement check which is fairly low overhead. If we didn\u0027t have this and someone wanted to lock down gets in a specific way, not having it would result in inconsistent behavior. You have to keep in mind, we can no longer check up front like we were, we have to check with the data before us which we actually have.","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ff536460d120eb0c4494194b6419ae360c908b8","unresolved":true,"context_lines":[{"line_number":313,"context_line":"            api_utils.check_policy(\u0027baremetal:allocation:create\u0027)"},{"line_number":314,"context_line":"            self._check_allowed_allocation_fields(allocation)"},{"line_number":315,"context_line":"            if (not CONF.oslo_policy.enforce_new_defaults"},{"line_number":316,"context_line":"                and not allocation.get(\u0027owner\u0027)):"},{"line_number":317,"context_line":"                # Even if permitted, we need to go ahead and check if this is"},{"line_number":318,"context_line":"                # restricted for now until scoped interaction is the default"},{"line_number":319,"context_line":"                # interaction."}],"source_content_type":"text/x-python","patch_set":15,"id":"d1596af6_d5da2133","line":316,"updated":"2021-03-15 17:18:13.000000000","message":"nit: missing indentation","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            api_utils.check_policy(\u0027baremetal:allocation:create\u0027)"},{"line_number":314,"context_line":"            self._check_allowed_allocation_fields(allocation)"},{"line_number":315,"context_line":"            if (not CONF.oslo_policy.enforce_new_defaults"},{"line_number":316,"context_line":"                and not allocation.get(\u0027owner\u0027)):"},{"line_number":317,"context_line":"                # Even if permitted, we need to go ahead and check if this is"},{"line_number":318,"context_line":"                # restricted for now until scoped interaction is the default"},{"line_number":319,"context_line":"                # interaction."}],"source_content_type":"text/x-python","patch_set":15,"id":"3e80ec2a_ca1a7b39","line":316,"in_reply_to":"d1596af6_d5da2133","updated":"2021-03-16 13:03:52.000000000","message":"Done","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ff536460d120eb0c4494194b6419ae360c908b8","unresolved":true,"context_lines":[{"line_number":328,"context_line":"            cdict \u003d api.request.context.to_policy_values()"},{"line_number":329,"context_line":"            project \u003d cdict.get(\u0027project_id\u0027)"},{"line_number":330,"context_line":"            if (project and allocation.get(\u0027owner\u0027)"},{"line_number":331,"context_line":"                and project !\u003d allocation.get(\u0027owner\u0027)):"},{"line_number":332,"context_line":"                raise"},{"line_number":333,"context_line":"            if project and not CONF.oslo_policy.enforce_new_defaults:"},{"line_number":334,"context_line":"                api_utils.check_policy(\u0027baremetal:allocation:create_pre_rbac\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"aae392be_63ec49c4","line":331,"updated":"2021-03-15 17:18:13.000000000","message":"ditto (and maybe line break not needed since one of the 3 conditions is redundant)","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":true,"context_lines":[{"line_number":328,"context_line":"            cdict \u003d api.request.context.to_policy_values()"},{"line_number":329,"context_line":"            project \u003d cdict.get(\u0027project_id\u0027)"},{"line_number":330,"context_line":"            if (project and allocation.get(\u0027owner\u0027)"},{"line_number":331,"context_line":"                and project !\u003d allocation.get(\u0027owner\u0027)):"},{"line_number":332,"context_line":"                raise"},{"line_number":333,"context_line":"            if project and not CONF.oslo_policy.enforce_new_defaults:"},{"line_number":334,"context_line":"                api_utils.check_policy(\u0027baremetal:allocation:create_pre_rbac\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"4709243a_4a34094b","line":331,"in_reply_to":"aae392be_63ec49c4","updated":"2021-03-16 13:03:52.000000000","message":"If in noauth, there is no project ID\n\nso...\n\nproject \u003d None\nif (None and None and None !\u003d None)\n\nI guess that works. 😊","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ff536460d120eb0c4494194b6419ae360c908b8","unresolved":true,"context_lines":[{"line_number":363,"context_line":"        # not great to try for a full method rewrite at the same time as"},{"line_number":364,"context_line":"        # RBAC work, so the complexity limit is being raised. :("},{"line_number":365,"context_line":"        if (CONF.oslo_policy.enforce_new_defaults"},{"line_number":366,"context_line":"            and cdict.get(\u0027system_scope\u0027) !\u003d \u0027all\u0027):"},{"line_number":367,"context_line":"            # if not a system scope originated request, we need to check/apply"},{"line_number":368,"context_line":"            # an owner - But we can only do this with when new defaults are"},{"line_number":369,"context_line":"            # enabled."}],"source_content_type":"text/x-python","patch_set":15,"id":"714faad9_062e9825","line":366,"updated":"2021-03-15 17:18:13.000000000","message":"ditto","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        # not great to try for a full method rewrite at the same time as"},{"line_number":364,"context_line":"        # RBAC work, so the complexity limit is being raised. :("},{"line_number":365,"context_line":"        if (CONF.oslo_policy.enforce_new_defaults"},{"line_number":366,"context_line":"            and cdict.get(\u0027system_scope\u0027) !\u003d \u0027all\u0027):"},{"line_number":367,"context_line":"            # if not a system scope originated request, we need to check/apply"},{"line_number":368,"context_line":"            # an owner - But we can only do this with when new defaults are"},{"line_number":369,"context_line":"            # enabled."}],"source_content_type":"text/x-python","patch_set":15,"id":"13e628e0_9939f921","line":366,"in_reply_to":"714faad9_062e9825","updated":"2021-03-16 13:03:52.000000000","message":"Done","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ff536460d120eb0c4494194b6419ae360c908b8","unresolved":true,"context_lines":[{"line_number":373,"context_line":"                if not api_utils.check_policy_true("},{"line_number":374,"context_line":"                        \u0027baremetal:allocation:create_restricted\u0027):"},{"line_number":375,"context_line":"                    if req_alloc_owner !\u003d project_id:"},{"line_number":376,"context_line":"                        msg \u003d _(\"Cannot create allocation with an owner \""},{"line_number":377,"context_line":"                                \"Project ID value %(req_owner)s not matching \""},{"line_number":378,"context_line":"                                \"the requestor Project ID %(project)s. \""},{"line_number":379,"context_line":"                                \"Policy baremetal:allocation:create_restricted\""}],"source_content_type":"text/x-python","patch_set":15,"id":"923de726_25020e59","line":376,"updated":"2021-03-15 17:18:13.000000000","message":"nit: join 3 if clauses","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"}],"ironic/common/policy.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b88f40d56d980123b0c5dc9eb3956da1b9c3902d","unresolved":false,"context_lines":[{"line_number":1590,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":1591,"context_line":"        name\u003d\u0027baremetal:allocation:create_restricted\u0027,"},{"line_number":1592,"context_line":"        check_str\u003dSYSTEM_MEMBER, # TODO This likely needs to be any project scoped admin."},{"line_number":1593,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":1594,"context_line":"        description\u003d("},{"line_number":1595,"context_line":"            \u0027Create Allocation records that are restricted to an owner\u0027"},{"line_number":1596,"context_line":"        ),"}],"source_content_type":"text/x-python","patch_set":2,"id":"8a45d6f1_db8b4751","line":1593,"updated":"2021-03-04 01:32:10.000000000","message":"calm down pep8","commit_id":"45df1ecb81649cf4f3e95a11d009990800b3fdb7"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"26dbf4e3cb3c77f67c7e6206b359d0aa86b28efe","unresolved":false,"context_lines":[{"line_number":1590,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":1591,"context_line":"        name\u003d\u0027baremetal:allocation:create_restricted\u0027,"},{"line_number":1592,"context_line":"        check_str\u003dSYSTEM_MEMBER, # TODO This likely needs to be any project scoped admin."},{"line_number":1593,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":1594,"context_line":"        description\u003d("},{"line_number":1595,"context_line":"            \u0027Create Allocation records that are restricted to an owner\u0027"},{"line_number":1596,"context_line":"        ),"}],"source_content_type":"text/x-python","patch_set":2,"id":"b36f8984_fb136bf9","line":1593,"in_reply_to":"8a45d6f1_db8b4751","updated":"2021-03-04 14:16:34.000000000","message":"iknowrite!","commit_id":"45df1ecb81649cf4f3e95a11d009990800b3fdb7"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c0ca8d6d60eed202e79ec8df946842ad8dd235c5","unresolved":true,"context_lines":[{"line_number":1630,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":1631,"context_line":"        description\u003d(\u0027Logical restrictor to prevent legacy allocation rule \u0027"},{"line_number":1632,"context_line":"                     \u0027missuse - Requires blank allocations to originate from \u0027"},{"line_number":1633,"context_line":"                     \u0027the legac baremetal_admin.\u0027),"},{"line_number":1634,"context_line":"        operations\u003d["},{"line_number":1635,"context_line":"            {\u0027path\u0027: \u0027/allocations/{allocation_id}\u0027, \u0027method\u0027: \u0027PATCH\u0027},"},{"line_number":1636,"context_line":"        ],"}],"source_content_type":"text/x-python","patch_set":12,"id":"55c069ff_80716b36","line":1633,"range":{"start_line":1633,"start_character":26,"end_line":1633,"end_character":31},"updated":"2021-03-11 01:05:14.000000000","message":"legacy","commit_id":"073b585e811427791fa8b4d53aeda770931ebaed"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":false,"context_lines":[{"line_number":1630,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":1631,"context_line":"        description\u003d(\u0027Logical restrictor to prevent legacy allocation rule \u0027"},{"line_number":1632,"context_line":"                     \u0027missuse - Requires blank allocations to originate from \u0027"},{"line_number":1633,"context_line":"                     \u0027the legac baremetal_admin.\u0027),"},{"line_number":1634,"context_line":"        operations\u003d["},{"line_number":1635,"context_line":"            {\u0027path\u0027: \u0027/allocations/{allocation_id}\u0027, \u0027method\u0027: \u0027PATCH\u0027},"},{"line_number":1636,"context_line":"        ],"}],"source_content_type":"text/x-python","patch_set":12,"id":"b21f7979_d35bad61","line":1633,"range":{"start_line":1633,"start_character":26,"end_line":1633,"end_character":31},"in_reply_to":"55c069ff_80716b36","updated":"2021-03-16 13:03:52.000000000","message":"Done","commit_id":"073b585e811427791fa8b4d53aeda770931ebaed"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":true,"context_lines":[{"line_number":124,"context_line":"# The system has rights to manage the allocations for users, in a sense"},{"line_number":125,"context_line":"# a delegated management since they are not creating a real object or asset,"},{"line_number":126,"context_line":"# but allocations of assets."},{"line_number":127,"context_line":"ALLOCATION_ADMIN \u003d ("},{"line_number":128,"context_line":"    \u0027(\u0027 + SYSTEM_MEMBER + \u0027) or (\u0027 + ALLOCATION_OWNER_ADMIN + \u0027)\u0027"},{"line_number":129,"context_line":")"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"ALLOCATION_MEMBER \u003d ("},{"line_number":132,"context_line":"    \u0027(\u0027 + SYSTEM_MEMBER + \u0027) or (\u0027 + ALLOCATION_OWNER_MEMBER + \u0027)\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"714c8bb7_60b51995","line":129,"range":{"start_line":127,"start_character":0,"end_line":129,"end_character":1},"updated":"2021-03-16 13:03:52.000000000","message":"Allocation admin goes away in this change since MEMBER is all that is required.","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ff536460d120eb0c4494194b6419ae360c908b8","unresolved":true,"context_lines":[{"line_number":137,"context_line":")"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"ALLOCATION_CREATOR \u003d ("},{"line_number":140,"context_line":"    \u0027(\u0027 + SYSTEM_MEMBER + \u0027) or (role:admin)\u0027"},{"line_number":141,"context_line":")"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"# Special purpose aliases for things like \"ability to access the API"}],"source_content_type":"text/x-python","patch_set":15,"id":"5ded2a90_ad80b238","line":140,"updated":"2021-03-15 17:18:13.000000000","message":"I think it should be member. Even though it will allow lessees to allocation as a side effect, I find it important to allow members in an owner project to allocate nodes since they\u0027re able to deploy them.\n\nIf we really want to get rid of this side effect, we need to somehow provide the current role down the stack, all the way to conductor/allocations.py. It may be an overkill.","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":true,"context_lines":[{"line_number":137,"context_line":")"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"ALLOCATION_CREATOR \u003d ("},{"line_number":140,"context_line":"    \u0027(\u0027 + SYSTEM_MEMBER + \u0027) or (role:admin)\u0027"},{"line_number":141,"context_line":")"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"# Special purpose aliases for things like \"ability to access the API"}],"source_content_type":"text/x-python","patch_set":15,"id":"a958c4d5_63e8b952","line":140,"in_reply_to":"5ded2a90_ad80b238","updated":"2021-03-16 13:03:52.000000000","message":"FWIW, I think it already gets passed in the request context if we really needed it, but trying to keep everything to project_id of the requester.","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ff536460d120eb0c4494194b6419ae360c908b8","unresolved":true,"context_lines":[{"line_number":1601,"context_line":"    ),"},{"line_number":1602,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":1603,"context_line":"        name\u003d\u0027baremetal:allocation:delete\u0027,"},{"line_number":1604,"context_line":"        check_str\u003dALLOCATION_ADMIN,"},{"line_number":1605,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":1606,"context_line":"        description\u003d\u0027Delete Allocation records\u0027,"},{"line_number":1607,"context_line":"        operations\u003d["}],"source_content_type":"text/x-python","patch_set":15,"id":"abf3496b_bac9f3e4","line":1604,"updated":"2021-03-15 17:18:13.000000000","message":"Should be ALLOCATION_MEMBER, I think. Allocations are not physical concepts like nodes, more like a claim of a node. Whoever can unprovision a node should be able to remove an allocation.\n\nPer IRC discussion: this would allow members of a lessee project to delete allocations as well. An alternative approach is to load a node on deletion and check it. Explicit allocation deletions are infrequent, so this is fine too.\n\nI\u0027ll leave it up to you to decide.","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":true,"context_lines":[{"line_number":1601,"context_line":"    ),"},{"line_number":1602,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":1603,"context_line":"        name\u003d\u0027baremetal:allocation:delete\u0027,"},{"line_number":1604,"context_line":"        check_str\u003dALLOCATION_ADMIN,"},{"line_number":1605,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":1606,"context_line":"        description\u003d\u0027Delete Allocation records\u0027,"},{"line_number":1607,"context_line":"        operations\u003d["}],"source_content_type":"text/x-python","patch_set":15,"id":"d8708662_84409dd7","line":1604,"in_reply_to":"abf3496b_bac9f3e4","updated":"2021-03-16 13:03:52.000000000","message":"Changing to member. I think ultimately it is fine if they don\u0027t have rights on the other side of things if someone populated it. Actually it is likely a good thing^(TM)","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ff536460d120eb0c4494194b6419ae360c908b8","unresolved":true,"context_lines":[{"line_number":1626,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":1627,"context_line":"        name\u003d\u0027baremetal:allocation:create_pre_rbac\u0027,"},{"line_number":1628,"context_line":"        check_str\u003d(\u0027rule:is_member and role:baremetal_admin or \u0027"},{"line_number":1629,"context_line":"                   \u0027is_admin_project:True and role:admin\u0027),"},{"line_number":1630,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":1631,"context_line":"        description\u003d(\u0027Logical restrictor to prevent legacy allocation rule \u0027"},{"line_number":1632,"context_line":"                     \u0027missuse - Requires blank allocations to originate from \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"2b866e2b_64296e9d","line":1629,"updated":"2021-03-15 17:18:13.000000000","message":"nit: I\u0027d use brackets to avoid and/or ordering confusion","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":false,"context_lines":[{"line_number":1626,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":1627,"context_line":"        name\u003d\u0027baremetal:allocation:create_pre_rbac\u0027,"},{"line_number":1628,"context_line":"        check_str\u003d(\u0027rule:is_member and role:baremetal_admin or \u0027"},{"line_number":1629,"context_line":"                   \u0027is_admin_project:True and role:admin\u0027),"},{"line_number":1630,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":1631,"context_line":"        description\u003d(\u0027Logical restrictor to prevent legacy allocation rule \u0027"},{"line_number":1632,"context_line":"                     \u0027missuse - Requires blank allocations to originate from \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"31866ee2_09316934","line":1629,"in_reply_to":"2b866e2b_64296e9d","updated":"2021-03-16 13:03:52.000000000","message":"Done","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"}],"ironic/tests/unit/api/controllers/v1/test_allocation.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"040959ff0bd1c4066d0e228cbeb9a5ac15c521a1","unresolved":true,"context_lines":[{"line_number":393,"context_line":"                owner\u003downer,"},{"line_number":394,"context_line":"                uuid\u003duuidutils.generate_uuid(),"},{"line_number":395,"context_line":"                name\u003d\u0027allocation%s\u0027 % i)"},{"line_number":396,"context_line":"        # NOTE(TheJulia): Force the cast of the action to a system scoped"},{"line_number":397,"context_line":"        # scoped request. System scoped is allowed to view everything,"},{"line_number":398,"context_line":"        # where as project scoped requests are actually filtered with the"},{"line_number":399,"context_line":"        # secure-rbac work. This was done in troubleshooting the code,"}],"source_content_type":"text/x-python","patch_set":15,"id":"047f25b5_899646e4","line":396,"range":{"start_line":396,"start_character":67,"end_line":396,"end_character":73},"updated":"2021-03-15 14:50:32.000000000","message":"nit: double \u0027scoped\u0027","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":false,"context_lines":[{"line_number":393,"context_line":"                owner\u003downer,"},{"line_number":394,"context_line":"                uuid\u003duuidutils.generate_uuid(),"},{"line_number":395,"context_line":"                name\u003d\u0027allocation%s\u0027 % i)"},{"line_number":396,"context_line":"        # NOTE(TheJulia): Force the cast of the action to a system scoped"},{"line_number":397,"context_line":"        # scoped request. System scoped is allowed to view everything,"},{"line_number":398,"context_line":"        # where as project scoped requests are actually filtered with the"},{"line_number":399,"context_line":"        # secure-rbac work. This was done in troubleshooting the code,"}],"source_content_type":"text/x-python","patch_set":15,"id":"63a83a88_b38ffcec","line":396,"range":{"start_line":396,"start_character":67,"end_line":396,"end_character":73},"in_reply_to":"047f25b5_899646e4","updated":"2021-03-16 13:03:52.000000000","message":"Done","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"}],"ironic/tests/unit/api/test_rbac_project_scoped.yaml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ff536460d120eb0c4494194b6419ae360c908b8","unresolved":true,"context_lines":[{"line_number":2316,"context_line":"  headers: *lessee_admin_headers"},{"line_number":2317,"context_line":"  assert_status: 503"},{"line_number":2318,"context_line":""},{"line_number":2319,"context_line":"owner_member_cannot_delete_their_allocation:"},{"line_number":2320,"context_line":"  path: \u0027/v1/allocations/{owner_allocation}\u0027"},{"line_number":2321,"context_line":"  method: delete"},{"line_number":2322,"context_line":"  headers: *owner_member_headers"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"05632887_f4a5f684","line":2319,"range":{"start_line":2319,"start_character":13,"end_line":2319,"end_character":26},"updated":"2021-03-15 17:18:13.000000000","message":"This seems wrong to me. Owner members can unprovision nodes (which indirectly deletes an allocation), they should be able to delete allocations as well.","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ff536460d120eb0c4494194b6419ae360c908b8","unresolved":true,"context_lines":[{"line_number":2322,"context_line":"  headers: *owner_member_headers"},{"line_number":2323,"context_line":"  assert_status: 403"},{"line_number":2324,"context_line":""},{"line_number":2325,"context_line":"lessee_member_cannot_delete_their_allocation:"},{"line_number":2326,"context_line":"  path: \u0027/v1/allocations/{lessee_allocation}\u0027"},{"line_number":2327,"context_line":"  method: delete"},{"line_number":2328,"context_line":"  headers: *lessee_member_headers"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"25aefcbd_af1f326c","line":2325,"range":{"start_line":2325,"start_character":14,"end_line":2325,"end_character":27},"updated":"2021-03-15 17:18:13.000000000","message":"note to myself: we\u0027ve talked with Julia, this is correct.","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ae0926348a1326a14515972480467cb5ae840bdd","unresolved":true,"context_lines":[{"line_number":2322,"context_line":"  headers: *owner_member_headers"},{"line_number":2323,"context_line":"  assert_status: 403"},{"line_number":2324,"context_line":""},{"line_number":2325,"context_line":"lessee_member_cannot_delete_their_allocation:"},{"line_number":2326,"context_line":"  path: \u0027/v1/allocations/{lessee_allocation}\u0027"},{"line_number":2327,"context_line":"  method: delete"},{"line_number":2328,"context_line":"  headers: *lessee_member_headers"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"48cf05a6_87df4be2","line":2325,"range":{"start_line":2325,"start_character":14,"end_line":2325,"end_character":27},"in_reply_to":"25aefcbd_af1f326c","updated":"2021-03-16 13:03:52.000000000","message":"Added note to help provide context","commit_id":"88673f1e949a41cfe804ff919e16935c6dca11e1"}]}
