)]}'
{"keystone/api/roles.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"89b69f8872bd61f80121ada7a1abb1a6b9cb8434","unresolved":false,"context_lines":[{"line_number":34,"context_line":"class RoleResource(ks_flask.ResourceBase):"},{"line_number":35,"context_line":"    collection_key \u003d \u0027roles\u0027"},{"line_number":36,"context_line":"    member_key \u003d \u0027role\u0027"},{"line_number":37,"context_line":"    get_member_from_driver \u003d PROVIDERS.deferred_provider_lookup("},{"line_number":38,"context_line":"        api\u003d\u0027role_api\u0027, method\u003d\u0027get_role\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _is_domain_role(self, role):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_3b6266d9","line":37,"range":{"start_line":37,"start_character":4,"end_line":37,"end_character":26},"updated":"2018-08-15 06:44:56.000000000","message":"What calls this?","commit_id":"8dc6c1af521f0482558a12ce10c93569717d2100"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"27d87b0fc63be46512d4eeaa93681fc0373505f2","unresolved":false,"context_lines":[{"line_number":34,"context_line":"class RoleResource(ks_flask.ResourceBase):"},{"line_number":35,"context_line":"    collection_key \u003d \u0027roles\u0027"},{"line_number":36,"context_line":"    member_key \u003d \u0027role\u0027"},{"line_number":37,"context_line":"    get_member_from_driver \u003d PROVIDERS.deferred_provider_lookup("},{"line_number":38,"context_line":"        api\u003d\u0027role_api\u0027, method\u003d\u0027get_role\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _is_domain_role(self, role):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_2a53e73a","line":37,"range":{"start_line":37,"start_character":4,"end_line":37,"end_character":26},"in_reply_to":"3f79a3b5_3b6266d9","updated":"2018-08-15 16:16:10.000000000","message":"the RBACEnforcer, .enforce_call\n\nBasically it is used to populate \"role\" in the target dict if the method exists. It\u0027s a mirror of what we have in the old @protected.\n\nI needed a deferred lookup as the lookup only happens on the class not the instance, and instantiating the object proved to be wonky since it gets remapped to a MethodViewtype from a ResourceType (internal flask/flask-restful-isms).\n\nIt isn\u0027t super important here, but a following (groups) patch relies on this functionality for populating the target dict (for now). We can be more explicit, but I\u0027ll need to dig into when/why/where we are expecting this vs. when we aren\u0027t.\n\nRight now, the goal is mirror functionality of @protected as cleanly as possible.","commit_id":"8dc6c1af521f0482558a12ce10c93569717d2100"}]}
