)]}'
{"keystone/common/controller.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"abdbeef0eef0edb2bb30ee0bb943c2ae2f23e809","unresolved":false,"context_lines":[{"line_number":13,"context_line":"DEFAULT_DOMAIN_ID \u003d CONF.identity.default_domain_id"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def _buildpolicycheckcredentials(self, action, context, kwargs):"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    LOG.debug(_(\u0027RBAC: Authorizing %s(%s)\u0027) % ("},{"line_number":19,"context_line":"        action,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BzDY%3D","line":16,"updated":"2013-02-19 01:00:43.000000000","message":"suggest **kwargs to match python convention.\n\nalso, pep8 naming convention\nhttp://www.python.org/dev/peps/pep-0008/#function-names","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e3966e3a7445da72a224903537d6a3fc94b3dbb7","unresolved":false,"context_lines":[{"line_number":13,"context_line":"DEFAULT_DOMAIN_ID \u003d CONF.identity.default_domain_id"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def _buildpolicycheckcredentials(self, action, context, kwargs):"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    LOG.debug(_(\u0027RBAC: Authorizing %s(%s)\u0027) % ("},{"line_number":19,"context_line":"        action,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2ByLo%3D","line":16,"in_reply_to":"AAAAM3%2F%2BzDY%3D","updated":"2013-02-19 10:45:25.000000000","message":"so **kwargs does seem to work here....and could you be more specific about the name convention that this clashes with?","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"abdbeef0eef0edb2bb30ee0bb943c2ae2f23e809","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                LOG.warning(_(\u0027RBAC: Bypassing authorization\u0027))"},{"line_number":117,"context_line":"            return f(self, context, filters, **kwargs)"},{"line_number":118,"context_line":"        return wrapper"},{"line_number":119,"context_line":"    return _filterprotected"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"@dependency.requires(\u0027identity_api\u0027, \u0027policy_api\u0027, \u0027token_api\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BzBI%3D","line":119,"updated":"2013-02-19 01:00:43.000000000","message":"there\u0027s a lot of common code between protected and filterprotected. Is protected just a filterprotected with an empty filters?","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e3966e3a7445da72a224903537d6a3fc94b3dbb7","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                LOG.warning(_(\u0027RBAC: Bypassing authorization\u0027))"},{"line_number":117,"context_line":"            return f(self, context, filters, **kwargs)"},{"line_number":118,"context_line":"        return wrapper"},{"line_number":119,"context_line":"    return _filterprotected"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"@dependency.requires(\u0027identity_api\u0027, \u0027policy_api\u0027, \u0027token_api\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2ByL8%3D","line":119,"in_reply_to":"AAAAM3%2F%2BzBI%3D","updated":"2013-02-19 10:45:25.000000000","message":"Yes, true, but I struggled to get the parameter passing to work correctly with just one decorator (or two consecutive ones)","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"58f49ac43efa8423e0160685ea4376a0e1d12dd5","unresolved":false,"context_lines":[{"line_number":13,"context_line":"DEFAULT_DOMAIN_ID \u003d CONF.identity.default_domain_id"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def _buildpolicycheckcredentials(self, action, context, kwargs):"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    LOG.debug(_(\u0027RBAC: Authorizing %s(%s)\u0027) % ("},{"line_number":19,"context_line":"        action,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Bw7c%3D","line":16,"updated":"2013-02-20 15:04:22.000000000","message":"pep8 on naming convention\n\n  def _build_policy_check_credentials","commit_id":"77da33e362e634d05e34395038a7098c1c139398"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e885ec399d6bb798dfb515fc2af72fcdc0ce2a15","unresolved":false,"context_lines":[{"line_number":13,"context_line":"DEFAULT_DOMAIN_ID \u003d CONF.identity.default_domain_id"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def _buildpolicycheckcredentials(self, action, context, kwargs):"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    LOG.debug(_(\u0027RBAC: Authorizing %s(%s)\u0027) % ("},{"line_number":19,"context_line":"        action,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BugY%3D","line":16,"in_reply_to":"AAAAM3%2F%2Bw7c%3D","updated":"2013-02-20 17:14:10.000000000","message":"Done","commit_id":"77da33e362e634d05e34395038a7098c1c139398"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"7ee7aaba52155789e20c1fb741949fcc884497be","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        creds[\u0027domain_id\u0027] \u003d token_data[\u0027domain\u0027][\u0027id\u0027]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    creds[\u0027roles\u0027] \u003d [token_data[\u0027user\u0027][\u0027roles\u0027][role][\u0027name\u0027]"},{"line_number":51,"context_line":"                      for role in token_data[\u0027user\u0027][\u0027roles\u0027]]"},{"line_number":52,"context_line":"    return creds"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BwNc%3D","line":51,"updated":"2013-02-19 22:47:34.000000000","message":"For v3 tokens, roles are directly under root container. They are no longer in user container.","commit_id":"77da33e362e634d05e34395038a7098c1c139398"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e885ec399d6bb798dfb515fc2af72fcdc0ce2a15","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        creds[\u0027domain_id\u0027] \u003d token_data[\u0027domain\u0027][\u0027id\u0027]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    creds[\u0027roles\u0027] \u003d [token_data[\u0027user\u0027][\u0027roles\u0027][role][\u0027name\u0027]"},{"line_number":51,"context_line":"                      for role in token_data[\u0027user\u0027][\u0027roles\u0027]]"},{"line_number":52,"context_line":"    return creds"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BugU%3D","line":51,"in_reply_to":"AAAAM3%2F%2BwNc%3D","updated":"2013-02-20 17:14:10.000000000","message":"Done","commit_id":"77da33e362e634d05e34395038a7098c1c139398"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4c6437ad88473a5e7ca5d86f1d2c24d9bc17ca86","unresolved":false,"context_lines":[{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":36,"context_line":"    creds \u003d {}"},{"line_number":37,"context_line":"    token_data \u003d token_ref[\u0027token_data\u0027]"},{"line_number":38,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e 77da33e... Pass query filter attributes to policy engine"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    try:"},{"line_number":41,"context_line":"        creds[\u0027user_id\u0027] \u003d token_data[\u0027user\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2Btqw%3D","line":38,"updated":"2013-02-20 22:18:20.000000000","message":"i left this here for you to resolve","commit_id":"9a8b295da4708dea61b5cc7fd56436f42b786bb5"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2090786dd4f973b00143d9d58683c64522dc50d7","unresolved":false,"context_lines":[{"line_number":13,"context_line":"DEFAULT_DOMAIN_ID \u003d CONF.identity.default_domain_id"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def _buildpolicycheckcredentials(self, action, context, kwargs):"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    LOG.debug(_(\u0027RBAC: Authorizing %s(%s)\u0027) % ("},{"line_number":19,"context_line":"        action,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Btds%3D","line":16,"updated":"2013-02-21 00:12:25.000000000","message":"naming convention?","commit_id":"7b39a6095bd35c6f8a29741667b30d11ea634898"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"026b861d6e2968361c8c4fc0a6437e3055ca6253","unresolved":false,"context_lines":[{"line_number":13,"context_line":"DEFAULT_DOMAIN_ID \u003d CONF.identity.default_domain_id"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def _buildpolicycheckcredentials(self, action, context, kwargs):"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    LOG.debug(_(\u0027RBAC: Authorizing %s(%s)\u0027) % ("},{"line_number":19,"context_line":"        action,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2BtcQ%3D","line":16,"in_reply_to":"AAAAM3%2F%2Btds%3D","updated":"2013-02-21 00:18:04.000000000","message":"damn, missed that one in the re-merge. Thx","commit_id":"7b39a6095bd35c6f8a29741667b30d11ea634898"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2090786dd4f973b00143d9d58683c64522dc50d7","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @functools.wraps(f)"},{"line_number":58,"context_line":"    def wrapper(self, context, **kwargs):"},{"line_number":59,"context_line":"        if not context[\u0027is_admin\u0027]:"},{"line_number":60,"context_line":"            action \u003d \u0027identity:%s\u0027 % f.__name__"},{"line_number":61,"context_line":"            creds \u003d _buildpolicycheckcredentials(self, action, context, kwargs)"},{"line_number":62,"context_line":"            # Simply use the passed kwargs as the target dict, which"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2BtdY%3D","line":59,"updated":"2013-02-21 00:12:25.000000000","message":"I am under the impression the \u0027ADMIN\u0027 token is going away?","commit_id":"7b39a6095bd35c6f8a29741667b30d11ea634898"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"026b861d6e2968361c8c4fc0a6437e3055ca6253","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @functools.wraps(f)"},{"line_number":58,"context_line":"    def wrapper(self, context, **kwargs):"},{"line_number":59,"context_line":"        if not context[\u0027is_admin\u0027]:"},{"line_number":60,"context_line":"            action \u003d \u0027identity:%s\u0027 % f.__name__"},{"line_number":61,"context_line":"            creds \u003d _buildpolicycheckcredentials(self, action, context, kwargs)"},{"line_number":62,"context_line":"            # Simply use the passed kwargs as the target dict, which"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Bta8%3D","line":59,"in_reply_to":"AAAAM3%2F%2BtdY%3D","updated":"2013-02-21 00:18:04.000000000","message":"so, not sure..this was here before, so wasn\u0027t sure if we can remove - maybe we will follow up with a bug fix on that if we decide to kill it","commit_id":"7b39a6095bd35c6f8a29741667b30d11ea634898"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2090786dd4f973b00143d9d58683c64522dc50d7","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    @functools.wraps(f)"},{"line_number":58,"context_line":"    def wrapper(self, context, **kwargs):"},{"line_number":59,"context_line":"        if not context[\u0027is_admin\u0027]:"},{"line_number":60,"context_line":"            action \u003d \u0027identity:%s\u0027 % f.__name__"},{"line_number":61,"context_line":"            creds \u003d _buildpolicycheckcredentials(self, action, context, kwargs)"},{"line_number":62,"context_line":"            # Simply use the passed kwargs as the target dict, which"},{"line_number":63,"context_line":"            # would typically include the prime key of a get/update/delete"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Btdg%3D","line":60,"updated":"2013-02-21 00:12:25.000000000","message":"That would pretty much force all the method name to be globally unique within the identity context right?","commit_id":"7b39a6095bd35c6f8a29741667b30d11ea634898"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"026b861d6e2968361c8c4fc0a6437e3055ca6253","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    @functools.wraps(f)"},{"line_number":58,"context_line":"    def wrapper(self, context, **kwargs):"},{"line_number":59,"context_line":"        if not context[\u0027is_admin\u0027]:"},{"line_number":60,"context_line":"            action \u003d \u0027identity:%s\u0027 % f.__name__"},{"line_number":61,"context_line":"            creds \u003d _buildpolicycheckcredentials(self, action, context, kwargs)"},{"line_number":62,"context_line":"            # Simply use the passed kwargs as the target dict, which"},{"line_number":63,"context_line":"            # would typically include the prime key of a get/update/delete"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Bta4%3D","line":60,"in_reply_to":"AAAAM3%2F%2Btdg%3D","updated":"2013-02-21 00:18:04.000000000","message":"yep","commit_id":"7b39a6095bd35c6f8a29741667b30d11ea634898"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2090786dd4f973b00143d9d58683c64522dc50d7","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"                # First  any query filter parameters"},{"line_number":97,"context_line":"                target \u003d dict()"},{"line_number":98,"context_line":"                if False and len(filters) \u003e 0:"},{"line_number":99,"context_line":"                    for filter in filters:"},{"line_number":100,"context_line":"                        if filter in context[\u0027query_string\u0027]:"},{"line_number":101,"context_line":"                            target[filter] \u003d context[\u0027query_string\u0027][filter]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2BtdE%3D","line":98,"updated":"2013-02-21 00:12:25.000000000","message":"why if False?","commit_id":"7b39a6095bd35c6f8a29741667b30d11ea634898"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"026b861d6e2968361c8c4fc0a6437e3055ca6253","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"                # First  any query filter parameters"},{"line_number":97,"context_line":"                target \u003d dict()"},{"line_number":98,"context_line":"                if False and len(filters) \u003e 0:"},{"line_number":99,"context_line":"                    for filter in filters:"},{"line_number":100,"context_line":"                        if filter in context[\u0027query_string\u0027]:"},{"line_number":101,"context_line":"                            target[filter] \u003d context[\u0027query_string\u0027][filter]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2BtbA%3D","line":98,"in_reply_to":"AAAAM3%2F%2BtdE%3D","updated":"2013-02-21 00:18:04.000000000","message":"sorry , some extra debug left in","commit_id":"7b39a6095bd35c6f8a29741667b30d11ea634898"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2090786dd4f973b00143d9d58683c64522dc50d7","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                # Now any formal url parameters"},{"line_number":108,"context_line":"                for key in kwargs:"},{"line_number":109,"context_line":"                    target[key] \u003d kwargs[key]"},{"line_number":110,"context_line":"                    print \u0027Adding\u0027, target[key]"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"                self.policy_api.enforce(context, creds, action, target)"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2BtdA%3D","line":110,"updated":"2013-02-21 00:12:25.000000000","message":"print -\u003e LOG.debug()","commit_id":"7b39a6095bd35c6f8a29741667b30d11ea634898"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"fcd269c2daa03a0f69501d363e00227b91852ad3","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"                # First  any query filter parameters"},{"line_number":98,"context_line":"                target \u003d dict()"},{"line_number":99,"context_line":"                if len(filters) \u003e 0:"},{"line_number":100,"context_line":"                    for filter in filters:"},{"line_number":101,"context_line":"                        if filter in context[\u0027query_string\u0027]:"},{"line_number":102,"context_line":"                            target[filter] \u003d context[\u0027query_string\u0027][filter]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2BtZ0%3D","line":99,"updated":"2013-02-21 00:31:19.000000000","message":"this if is completely unnecessary -- the for loop won\u0027t iterate if filters \u003d\u003d []","commit_id":"a081e251f9f4a3d86702874bbd7ff77a22214ae2"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"648196bc7ecfac739e631c62cbf48da6a9965a1d","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"                # First  any query filter parameters"},{"line_number":98,"context_line":"                target \u003d dict()"},{"line_number":99,"context_line":"                if len(filters) \u003e 0:"},{"line_number":100,"context_line":"                    for filter in filters:"},{"line_number":101,"context_line":"                        if filter in context[\u0027query_string\u0027]:"},{"line_number":102,"context_line":"                            target[filter] \u003d context[\u0027query_string\u0027][filter]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2BtVo%3D","line":99,"in_reply_to":"AAAAM3%2F%2BtZ0%3D","updated":"2013-02-21 00:41:01.000000000","message":"I know...but I need it for the Log.debug statement, without intertwining the debug and the main code that made it more messy","commit_id":"a081e251f9f4a3d86702874bbd7ff77a22214ae2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"fcd269c2daa03a0f69501d363e00227b91852ad3","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    @classmethod"},{"line_number":187,"context_line":"    def wrap_collection(cls, context, refs, filters\u003dNone):"},{"line_number":188,"context_line":"        if filters:"},{"line_number":189,"context_line":"            for f in filters:"},{"line_number":190,"context_line":"                refs \u003d cls.filter_by_attribute(context, refs, f)"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2BtZY%3D","line":188,"updated":"2013-02-21 00:31:19.000000000","message":"same, remove \u0027if filters\u0027","commit_id":"a081e251f9f4a3d86702874bbd7ff77a22214ae2"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"3aee4b81b5cf26ff4592e14083bcb6de6adfe6a9","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    @classmethod"},{"line_number":187,"context_line":"    def wrap_collection(cls, context, refs, filters\u003dNone):"},{"line_number":188,"context_line":"        if filters:"},{"line_number":189,"context_line":"            for f in filters:"},{"line_number":190,"context_line":"                refs \u003d cls.filter_by_attribute(context, refs, f)"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2BtTM%3D","line":188,"in_reply_to":"AAAAM3%2F%2BtVc%3D","updated":"2013-02-21 00:55:38.000000000","message":"actually, not quite - since I don\u0027t believe that None is iterable, but changing the default of filters to [] allows me to remove this check","commit_id":"a081e251f9f4a3d86702874bbd7ff77a22214ae2"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"648196bc7ecfac739e631c62cbf48da6a9965a1d","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    @classmethod"},{"line_number":187,"context_line":"    def wrap_collection(cls, context, refs, filters\u003dNone):"},{"line_number":188,"context_line":"        if filters:"},{"line_number":189,"context_line":"            for f in filters:"},{"line_number":190,"context_line":"                refs \u003d cls.filter_by_attribute(context, refs, f)"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2BtVc%3D","line":188,"in_reply_to":"AAAAM3%2F%2BtZY%3D","updated":"2013-02-21 00:41:01.000000000","message":"yep, agreed","commit_id":"a081e251f9f4a3d86702874bbd7ff77a22214ae2"}],"keystone/policy/controllers.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ec6ee8c3e3dedc35193603123a525050bf691839","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        ref \u003d self.policy_api.create_policy(context, ref[\u0027id\u0027], ref)"},{"line_number":31,"context_line":"        return PolicyV3.wrap_member(context, ref)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @controller.filterprotected(\u0027type\u0027)"},{"line_number":34,"context_line":"    def list_policies(self, context, filters):"},{"line_number":35,"context_line":"        refs \u003d self.policy_api.list_policies(context)"},{"line_number":36,"context_line":"        for filter in filters:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bz%2F8%3D","line":33,"updated":"2013-02-18 18:59:51.000000000","message":"i\u0027d much rather see this as two decorators (I assume order would matter), e.g.:\n\n  @controller.filter_by(\u0027type\u0027)\n  @controller.protected","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e3966e3a7445da72a224903537d6a3fc94b3dbb7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        ref \u003d self.policy_api.create_policy(context, ref[\u0027id\u0027], ref)"},{"line_number":31,"context_line":"        return PolicyV3.wrap_member(context, ref)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @controller.filterprotected(\u0027type\u0027)"},{"line_number":34,"context_line":"    def list_policies(self, context, filters):"},{"line_number":35,"context_line":"        refs \u003d self.policy_api.list_policies(context)"},{"line_number":36,"context_line":"        for filter in filters:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2ByME%3D","line":33,"in_reply_to":"AAAAM3%2F%2Bz%2F8%3D","updated":"2013-02-19 10:45:25.000000000","message":"That was my first thought too...but I struggled to get the second decorator to work correctly in terms of whether filters were set or not...","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ec6ee8c3e3dedc35193603123a525050bf691839","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def list_policies(self, context, filters):"},{"line_number":35,"context_line":"        refs \u003d self.policy_api.list_policies(context)"},{"line_number":36,"context_line":"        for filter in filters:"},{"line_number":37,"context_line":"            refs \u003d self._filter_by_attribute(context, refs, filter)"},{"line_number":38,"context_line":"        return PolicyV3.wrap_collection(context, refs)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @controller.protected"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B0Ag%3D","line":37,"updated":"2013-02-18 18:59:51.000000000","message":"HACKING- filter is a reserved word\n\nthis would also be appropriate to do in wrap_collection -- it\u0027s one of the reasons why i passed context to it","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e3966e3a7445da72a224903537d6a3fc94b3dbb7","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def list_policies(self, context, filters):"},{"line_number":35,"context_line":"        refs \u003d self.policy_api.list_policies(context)"},{"line_number":36,"context_line":"        for filter in filters:"},{"line_number":37,"context_line":"            refs \u003d self._filter_by_attribute(context, refs, filter)"},{"line_number":38,"context_line":"        return PolicyV3.wrap_collection(context, refs)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @controller.protected"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2ByNE%3D","line":37,"in_reply_to":"AAAAM3%2F%2B0Ag%3D","updated":"2013-02-19 10:45:25.000000000","message":"Done","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"}],"tests/test_v3.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ec6ee8c3e3dedc35193603123a525050bf691839","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"class RestfulTestCase(test_content_types.RestfulTestCase):"},{"line_number":14,"context_line":"    def setUp(self, auth\u003dNone):"},{"line_number":15,"context_line":"        self.config(["},{"line_number":16,"context_line":"            test.etcdir(\u0027keystone.conf.sample\u0027),"},{"line_number":17,"context_line":"            test.testsdir(\u0027test_overrides.conf\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B0Bs%3D","line":14,"updated":"2013-02-18 18:59:51.000000000","message":"?? remove","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e3966e3a7445da72a224903537d6a3fc94b3dbb7","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"class RestfulTestCase(test_content_types.RestfulTestCase):"},{"line_number":14,"context_line":"    def setUp(self, auth\u003dNone):"},{"line_number":15,"context_line":"        self.config(["},{"line_number":16,"context_line":"            test.etcdir(\u0027keystone.conf.sample\u0027),"},{"line_number":17,"context_line":"            test.testsdir(\u0027test_overrides.conf\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BySA%3D","line":14,"in_reply_to":"AAAAM3%2F%2B0Bs%3D","updated":"2013-02-19 10:45:25.000000000","message":"Done (was hang-over from when I was thinking of only specify the auth required on set up, rather than on each call)","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ec6ee8c3e3dedc35193603123a525050bf691839","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        ref[\u0027type\u0027] \u003d uuid.uuid4().hex"},{"line_number":91,"context_line":"        return ref"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def get_admin_token(self):"},{"line_number":94,"context_line":"        \"\"\"Convenience method so that we can test authenticated requests.\"\"\""},{"line_number":95,"context_line":"        # FIXME(dolph): should use real auth"},{"line_number":96,"context_line":"        return \u0027ADMIN\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B0BY%3D","line":93,"updated":"2013-02-18 18:59:51.000000000","message":"get_project_token? it\u0027s hardcoded with admin_token today, but should be performing v3 auth to get a project scoped token to test with... get_domain_token() should be another new call when we get there","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e3966e3a7445da72a224903537d6a3fc94b3dbb7","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        ref[\u0027type\u0027] \u003d uuid.uuid4().hex"},{"line_number":91,"context_line":"        return ref"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def get_admin_token(self):"},{"line_number":94,"context_line":"        \"\"\"Convenience method so that we can test authenticated requests.\"\"\""},{"line_number":95,"context_line":"        # FIXME(dolph): should use real auth"},{"line_number":96,"context_line":"        return \u0027ADMIN\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2ByR8%3D","line":93,"in_reply_to":"AAAAM3%2F%2B0BY%3D","updated":"2013-02-19 10:45:25.000000000","message":"Renamed, and we\u0027ll come back and fix this later","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ec6ee8c3e3dedc35193603123a525050bf691839","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            return self.admin_request("},{"line_number":132,"context_line":"                path\u003dpath,"},{"line_number":133,"context_line":"                token\u003dself.get_admin_token(),"},{"line_number":134,"context_line":"                **kwargs)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def get(self, path, auth\u003dNone, **kwargs):"},{"line_number":137,"context_line":"        return self.v3_request(method\u003d\u0027GET\u0027, path\u003dpath,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B0A8%3D","line":134,"updated":"2013-02-18 18:59:51.000000000","message":"admin_request vs public_request shouldn\u0027t make a difference -- only use one or the other -- i ran with admin just because it\u0027s on our IANA registered port","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e3966e3a7445da72a224903537d6a3fc94b3dbb7","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            return self.admin_request("},{"line_number":132,"context_line":"                path\u003dpath,"},{"line_number":133,"context_line":"                token\u003dself.get_admin_token(),"},{"line_number":134,"context_line":"                **kwargs)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def get(self, path, auth\u003dNone, **kwargs):"},{"line_number":137,"context_line":"        return self.v3_request(method\u003d\u0027GET\u0027, path\u003dpath,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2ByR4%3D","line":134,"in_reply_to":"AAAAM3%2F%2B0A8%3D","updated":"2013-02-19 10:45:25.000000000","message":"Done","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"58f49ac43efa8423e0160685ea4376a0e1d12dd5","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        ref[\u0027type\u0027] \u003d uuid.uuid4().hex"},{"line_number":91,"context_line":"        return ref"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def get_project_token(self):"},{"line_number":94,"context_line":"        \"\"\"Convenience method so that we can test authenticated requests.\"\"\""},{"line_number":95,"context_line":"        # FIXME(dolph): should use real auth"},{"line_number":96,"context_line":"        return \u0027ADMIN\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Buvw%3D","line":93,"updated":"2013-02-20 15:04:22.000000000","message":"this is the only change in this file that makes sense to me -- the rest look like they can be reverted after rebasing on a newer version of gyee\u0027s patch\n\nalthough since this will also return a real token with the admin role in gyee\u0027s patch, perhaps get_admin_token() would be even more appropriate","commit_id":"77da33e362e634d05e34395038a7098c1c139398"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e885ec399d6bb798dfb515fc2af72fcdc0ce2a15","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        ref[\u0027type\u0027] \u003d uuid.uuid4().hex"},{"line_number":91,"context_line":"        return ref"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def get_project_token(self):"},{"line_number":94,"context_line":"        \"\"\"Convenience method so that we can test authenticated requests.\"\"\""},{"line_number":95,"context_line":"        # FIXME(dolph): should use real auth"},{"line_number":96,"context_line":"        return \u0027ADMIN\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BugQ%3D","line":93,"in_reply_to":"AAAAM3%2F%2Buvw%3D","updated":"2013-02-20 17:14:10.000000000","message":"Done","commit_id":"77da33e362e634d05e34395038a7098c1c139398"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"58f49ac43efa8423e0160685ea4376a0e1d12dd5","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        r \u003d self.admin_request("},{"line_number":116,"context_line":"            method\u003d\u0027POST\u0027,"},{"line_number":117,"context_line":"            path\u003d\u0027/v3/auth\u0027,"},{"line_number":118,"context_line":"            # FIXME(henry-nash) We shouldn\u0027t have to use the admin token here"},{"line_number":119,"context_line":"            token\u003d\u0027ADMIN\u0027,"},{"line_number":120,"context_line":"            body\u003dauth)"},{"line_number":121,"context_line":"        return r.getheader(\u0027X-Subject-Token\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BuwA%3D","line":118,"updated":"2013-02-20 15:04:22.000000000","message":"then remove it, can\u0027t merge like this","commit_id":"77da33e362e634d05e34395038a7098c1c139398"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e885ec399d6bb798dfb515fc2af72fcdc0ce2a15","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        r \u003d self.admin_request("},{"line_number":116,"context_line":"            method\u003d\u0027POST\u0027,"},{"line_number":117,"context_line":"            path\u003d\u0027/v3/auth\u0027,"},{"line_number":118,"context_line":"            # FIXME(henry-nash) We shouldn\u0027t have to use the admin token here"},{"line_number":119,"context_line":"            token\u003d\u0027ADMIN\u0027,"},{"line_number":120,"context_line":"            body\u003dauth)"},{"line_number":121,"context_line":"        return r.getheader(\u0027X-Subject-Token\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BugM%3D","line":118,"in_reply_to":"AAAAM3%2F%2BuwA%3D","updated":"2013-02-20 17:14:10.000000000","message":"Done","commit_id":"77da33e362e634d05e34395038a7098c1c139398"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"58f49ac43efa8423e0160685ea4376a0e1d12dd5","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def v3_request(self, path, auth\u003dNone, **kwargs):"},{"line_number":124,"context_line":"        path \u003d \u0027/v3\u0027 + path"},{"line_number":125,"context_line":"        if auth:"},{"line_number":126,"context_line":"            return self.admin_request("},{"line_number":127,"context_line":"                path\u003dpath,"},{"line_number":128,"context_line":"                token\u003dself.get_requested_token(auth),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Buvc%3D","line":125,"updated":"2013-02-20 15:04:22.000000000","message":"i\u0027d rather see token\u003dNone as part of the v3_request signature, and then have:\n\n  token \u003d token or self.get_project_token() when calling admin_request\n\neither way you don\u0027t need to modify any of the calls below to pass auth... those methods pass kwargs they don\u0027t understand straight through","commit_id":"77da33e362e634d05e34395038a7098c1c139398"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e885ec399d6bb798dfb515fc2af72fcdc0ce2a15","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def v3_request(self, path, auth\u003dNone, **kwargs):"},{"line_number":124,"context_line":"        path \u003d \u0027/v3\u0027 + path"},{"line_number":125,"context_line":"        if auth:"},{"line_number":126,"context_line":"            return self.admin_request("},{"line_number":127,"context_line":"                path\u003dpath,"},{"line_number":128,"context_line":"                token\u003dself.get_requested_token(auth),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BugI%3D","line":125,"in_reply_to":"AAAAM3%2F%2Buvc%3D","updated":"2013-02-20 17:14:10.000000000","message":"simplified.","commit_id":"77da33e362e634d05e34395038a7098c1c139398"}],"tests/test_v3_identity.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ec6ee8c3e3dedc35193603123a525050bf691839","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import nose.exc"},{"line_number":18,"context_line":"import tempfile"},{"line_number":19,"context_line":"import uuid"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from keystone.common import policy as common_policy"},{"line_number":22,"context_line":"from keystone.policy.backends import rules"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B0DU%3D","line":20,"updated":"2013-02-18 18:59:51.000000000","message":"nose import goes in a second group, between stdlib and keystone","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e3966e3a7445da72a224903537d6a3fc94b3dbb7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import nose.exc"},{"line_number":18,"context_line":"import tempfile"},{"line_number":19,"context_line":"import uuid"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from keystone.common import policy as common_policy"},{"line_number":22,"context_line":"from keystone.policy.backends import rules"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2ByTU%3D","line":20,"in_reply_to":"AAAAM3%2F%2B0DU%3D","updated":"2013-02-19 10:45:25.000000000","message":"Done","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ec6ee8c3e3dedc35193603123a525050bf691839","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import tempfile"},{"line_number":19,"context_line":"import uuid"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from keystone.common import policy as common_policy"},{"line_number":22,"context_line":"from keystone.policy.backends import rules"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import test_v3"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B0DM%3D","line":21,"updated":"2013-02-18 18:59:51.000000000","message":"unused? remove","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e3966e3a7445da72a224903537d6a3fc94b3dbb7","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import tempfile"},{"line_number":19,"context_line":"import uuid"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from keystone.common import policy as common_policy"},{"line_number":22,"context_line":"from keystone.policy.backends import rules"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import test_v3"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2ByTQ%3D","line":21,"in_reply_to":"AAAAM3%2F%2B0DM%3D","updated":"2013-02-19 10:45:25.000000000","message":"Done","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ec6ee8c3e3dedc35193603123a525050bf691839","unresolved":false,"context_lines":[{"line_number":624,"context_line":"        self.assertEqual(len(entities), 3)"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"    def test_list_users_filtered_by_domain(self):"},{"line_number":627,"context_line":"        \"\"\"GET /users?domain_id\u003d\u0027my domain\u0027 \"\"\""},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"        raise nose.exc.SkipTest(\u0027Blocked by incomplete \u0027"},{"line_number":630,"context_line":"                                \u0027domain scoping in v3/auth\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B0DA%3D","line":627,"updated":"2013-02-18 18:59:51.000000000","message":"fix docstr example","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e3966e3a7445da72a224903537d6a3fc94b3dbb7","unresolved":false,"context_lines":[{"line_number":624,"context_line":"        self.assertEqual(len(entities), 3)"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"    def test_list_users_filtered_by_domain(self):"},{"line_number":627,"context_line":"        \"\"\"GET /users?domain_id\u003d\u0027my domain\u0027 \"\"\""},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"        raise nose.exc.SkipTest(\u0027Blocked by incomplete \u0027"},{"line_number":630,"context_line":"                                \u0027domain scoping in v3/auth\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BySE%3D","line":627,"in_reply_to":"AAAAM3%2F%2B0DA%3D","updated":"2013-02-19 10:45:25.000000000","message":"Done","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ec6ee8c3e3dedc35193603123a525050bf691839","unresolved":false,"context_lines":[{"line_number":632,"context_line":"        # scoped token"},{"line_number":633,"context_line":"        new_policy \u003d \"\"\"{\"identity:list_users\": [\"domain_id:%(domain_id)s\"]}\"\"\""},{"line_number":634,"context_line":"        with open(self.tmpfilename, \"w\") as policyfile:"},{"line_number":635,"context_line":"            policyfile.write(new_polciy)"},{"line_number":636,"context_line":"        url_by_name \u003d \u0027/users?domain_id\u003d%s\u0027 % self.user1[\u0027domain_id\u0027]"},{"line_number":637,"context_line":"        r \u003d self.get(url_by_name, self.auth)"},{"line_number":638,"context_line":"        print \u0027Fini\u0027, r.body"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B0Ck%3D","line":635,"updated":"2013-02-18 18:59:51.000000000","message":"typo?","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e3966e3a7445da72a224903537d6a3fc94b3dbb7","unresolved":false,"context_lines":[{"line_number":632,"context_line":"        # scoped token"},{"line_number":633,"context_line":"        new_policy \u003d \"\"\"{\"identity:list_users\": [\"domain_id:%(domain_id)s\"]}\"\"\""},{"line_number":634,"context_line":"        with open(self.tmpfilename, \"w\") as policyfile:"},{"line_number":635,"context_line":"            policyfile.write(new_polciy)"},{"line_number":636,"context_line":"        url_by_name \u003d \u0027/users?domain_id\u003d%s\u0027 % self.user1[\u0027domain_id\u0027]"},{"line_number":637,"context_line":"        r \u003d self.get(url_by_name, self.auth)"},{"line_number":638,"context_line":"        print \u0027Fini\u0027, r.body"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BySI%3D","line":635,"in_reply_to":"AAAAM3%2F%2B0Ck%3D","updated":"2013-02-19 10:45:25.000000000","message":"Done","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ec6ee8c3e3dedc35193603123a525050bf691839","unresolved":false,"context_lines":[{"line_number":635,"context_line":"            policyfile.write(new_polciy)"},{"line_number":636,"context_line":"        url_by_name \u003d \u0027/users?domain_id\u003d%s\u0027 % self.user1[\u0027domain_id\u0027]"},{"line_number":637,"context_line":"        r \u003d self.get(url_by_name, self.auth)"},{"line_number":638,"context_line":"        print \u0027Fini\u0027, r.body"},{"line_number":639,"context_line":"        entities \u003d r.body.get(\u0027users\u0027)"},{"line_number":640,"context_line":"        self.assertEqual(len(entities), 1)"},{"line_number":641,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B0Cw%3D","line":638,"updated":"2013-02-18 18:59:51.000000000","message":"remove print","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e3966e3a7445da72a224903537d6a3fc94b3dbb7","unresolved":false,"context_lines":[{"line_number":635,"context_line":"            policyfile.write(new_polciy)"},{"line_number":636,"context_line":"        url_by_name \u003d \u0027/users?domain_id\u003d%s\u0027 % self.user1[\u0027domain_id\u0027]"},{"line_number":637,"context_line":"        r \u003d self.get(url_by_name, self.auth)"},{"line_number":638,"context_line":"        print \u0027Fini\u0027, r.body"},{"line_number":639,"context_line":"        entities \u003d r.body.get(\u0027users\u0027)"},{"line_number":640,"context_line":"        self.assertEqual(len(entities), 1)"},{"line_number":641,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BySM%3D","line":638,"in_reply_to":"AAAAM3%2F%2B0Cw%3D","updated":"2013-02-19 10:45:25.000000000","message":"Done","commit_id":"586300d2e606879eea8abd4c4b6cf5b664c6052e"}],"tests/test_v3_protection.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b72ad3cbb32614f5cddc6dacacea944afcd024ba","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.project \u003d self.new_project_ref("},{"line_number":59,"context_line":"            domain_id\u003dself.domainA[\u0027id\u0027])"},{"line_number":60,"context_line":"        project_ref \u003d self.identity_api.create_project(self.project[\u0027id\u0027],"},{"line_number":61,"context_line":"                                                       self.project)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        self.role \u003d self.new_role_ref()"},{"line_number":64,"context_line":"        self.identity_api.create_role(self.role[\u0027id\u0027], self.role)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Btbo%3D","line":61,"updated":"2013-02-21 00:15:04.000000000","message":"user, project, and domain are already created for you as part of V3 auth API changes.","commit_id":"7b39a6095bd35c6f8a29741667b30d11ea634898"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"026b861d6e2968361c8c4fc0a6437e3055ca6253","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.project \u003d self.new_project_ref("},{"line_number":59,"context_line":"            domain_id\u003dself.domainA[\u0027id\u0027])"},{"line_number":60,"context_line":"        project_ref \u003d self.identity_api.create_project(self.project[\u0027id\u0027],"},{"line_number":61,"context_line":"                                                       self.project)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        self.role \u003d self.new_role_ref()"},{"line_number":64,"context_line":"        self.identity_api.create_role(self.role[\u0027id\u0027], self.role)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Btac%3D","line":61,"in_reply_to":"AAAAM3%2F%2Btbo%3D","updated":"2013-02-21 00:18:04.000000000","message":"true, but I want a particular mixture of users in different domains...","commit_id":"7b39a6095bd35c6f8a29741667b30d11ea634898"}]}
