)]}'
{"doc/source/extensions.rst":[{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"860c55aecb1d56725b5ac3142971d7566265feca","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    This extension adds capability to filter roles with optional service IDs"},{"line_number":77,"context_line":"    for token validation to mitigate security risks with role name conflicts."},{"line_number":78,"context_line":"    See https://bugs.launchpad.net/keystone/+bug/890411 for more details."},{"line_number":79,"context_line":"    "},{"line_number":80,"context_line":"    This is an Admin API extension. Applicable to validate token (HEAD) "},{"line_number":81,"context_line":"    and check token (HEAD) APIs only."},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAC3%2F%2F6ZA%3D","line":79,"updated":"2011-12-27 18:06:15.000000000","message":"Remove the extra spaces highlighted in red here","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"}],"etc/keystone.conf":[{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"860c55aecb1d56725b5ac3142971d7566265feca","unresolved":false,"context_lines":[{"line_number":77,"context_line":"# This property is applicable to hpidm extension only."},{"line_number":78,"context_line":"# It will be ignored if hpidm extension is disabled."},{"line_number":79,"context_line":"#"},{"line_number":80,"context_line":"# Specify the global service ID to dictate how the global roles"},{"line_number":81,"context_line":"# are to be returned/processed in validate token call. Notice"},{"line_number":82,"context_line":"# that middle-ware or API clients must specify the exact same"},{"line_number":83,"context_line":"# global service ID in order for Keystone to retrieve the"}],"source_content_type":"text/plain","patch_set":1,"id":"AAAAC3%2F%2F6Y4%3D","line":80,"updated":"2011-12-27 18:06:15.000000000","message":"Not sure I understand this. Do you create a service called \"global\" and put it\u0027s ID here?","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"8947e39a7694d0ee2308389032c2cef57b7a1471","unresolved":false,"context_lines":[{"line_number":77,"context_line":"# This property is applicable to hpidm extension only."},{"line_number":78,"context_line":"# It will be ignored if hpidm extension is disabled."},{"line_number":79,"context_line":"#"},{"line_number":80,"context_line":"# Specify the global service ID to dictate how the global roles"},{"line_number":81,"context_line":"# are to be returned/processed in validate token call. Notice"},{"line_number":82,"context_line":"# that middle-ware or API clients must specify the exact same"},{"line_number":83,"context_line":"# global service ID in order for Keystone to retrieve the"}],"source_content_type":"text/plain","patch_set":1,"id":"AAAAC3%2F%2F6Xg%3D","line":80,"in_reply_to":"AAAAC3%2F%2F6Y4%3D","updated":"2011-12-27 18:32:36.000000000","message":"There is no service ID called \"global\". We are basically using it to tell Keystone backend to return the global roles on validate token (GET) call, and to process the global roles on check token (HEAD) call.","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"860c55aecb1d56725b5ac3142971d7566265feca","unresolved":false,"context_lines":[{"line_number":83,"context_line":"# global service ID in order for Keystone to retrieve the"},{"line_number":84,"context_line":"# global roles in validate token call. Otherwise, it will"},{"line_number":85,"context_line":"# likely result in a 401 since the mismatched global ID"},{"line_number":86,"context_line":"# may not exist in Keystone and therefore considered invalid. "},{"line_number":87,"context_line":"global_service_id \u003d global"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"[keystone.backends.sqlalchemy]"}],"source_content_type":"text/plain","patch_set":1,"id":"AAAAC3%2F%2F6Y8%3D","line":86,"updated":"2011-12-27 18:06:15.000000000","message":"Extra space","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"}],"keystone/contrib/extensions/admin/hpidm/extension.xml":[{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"860c55aecb1d56725b5ac3142971d7566265feca","unresolved":false,"context_lines":[{"line_number":16,"context_line":"            href\u003d\"https://github.com/openstack/keystone/raw/master/keystone/content/admin/HP-IDM-admin-devguide.pdf\"/\u003e"},{"line_number":17,"context_line":"        \u003catom:link rel\u003d\"describedby\""},{"line_number":18,"context_line":"            type\u003d\"application/vnd.sun.wadl+xml\""},{"line_number":19,"context_line":"            href\u003d\"https://github.com/openstack/keystone/raw/master/keystone/content/admin/HP-IDM-admin.wadl\"/\u003e                   "},{"line_number":20,"context_line":"    \u003c/extension\u003e"},{"line_number":21,"context_line":""}],"source_content_type":"application/xml","patch_set":1,"id":"AAAAC3%2F%2F6Y0%3D","line":19,"updated":"2011-12-27 18:06:15.000000000","message":"Remove extra space","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"}],"keystone/logic/extension_reader.py":[{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"860c55aecb1d56725b5ac3142971d7566265feca","unresolved":false,"context_lines":[{"line_number":10,"context_line":"EXTENSIONS_PATH \u003d \u0027contrib/extensions\u0027"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"def get_supported_extensions(options):"},{"line_number":14,"context_line":"    \"\"\" "},{"line_number":15,"context_line":"    Returns list of supported extensions."},{"line_number":16,"context_line":"    options - global configuration options"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6Ys%3D","line":13,"updated":"2011-12-27 18:06:15.000000000","message":"Is this a list of \u0027supported\u0027 or \u0027loaded/enabled\u0027 extensions?\n\nI see now that we call this \u0027supported\u0027 below, but seems to me that is not the correct word to use. Maybe we fix this in another patch.","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"860c55aecb1d56725b5ac3142971d7566265feca","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"def get_supported_extensions(options):"},{"line_number":14,"context_line":"    \"\"\" "},{"line_number":15,"context_line":"    Returns list of supported extensions."},{"line_number":16,"context_line":"    options - global configuration options"},{"line_number":17,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6Yw%3D","line":14,"updated":"2011-12-27 18:06:15.000000000","message":"Extra space","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"},{"author":{"_account_id":8,"name":"Yogeshwar Srikrishnan","email":"yoga80@yahoo.com","username":"yogesh-srikrishnan"},"change_message_id":"407819da1fb1300221adee0a6d8e0ce496abc256","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    Returns list of supported extensions."},{"line_number":16,"context_line":"    options - global configuration options"},{"line_number":17,"context_line":"    \"\"\""},{"line_number":18,"context_line":"    return options.get(CONFIG_EXTENSION_PROPERTY, DEFAULT_EXTENSIONS).split(\u0027,\u0027)"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def is_extension_supported(options, extension_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2F%2Bo%3D","line":18,"updated":"2011-12-28 03:41:29.000000000","message":"Minor suggestion: Do you want to store it in a local variable so that you don\u0027t have to\nfetch it over and over\nif self.supported extensions is None\n  self.supported_extensions \u003d options.get(CONFIG_EXTENSION_PROPERTY, DEFAULT_EXTENSIONS).split(\u0027,\u0027)\n\nreturn self.supported_extensions","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"}],"keystone/logic/service.py":[{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"860c55aecb1d56725b5ac3142971d7566265feca","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    return auth.AuthData(token, user, endpoints, url_types\u003durl_types)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"def get_validate_data(dtoken, duser, service_ids):"},{"line_number":249,"context_line":"    \"\"\"return ValidateData object for a token/user pair\"\"\""},{"line_number":250,"context_line":"    tenant \u003d None"},{"line_number":251,"context_line":"    if dtoken.tenant_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6Yo%3D","line":248,"updated":"2011-12-27 18:06:15.000000000","message":"Does this need to be defaulted to None?","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"8947e39a7694d0ee2308389032c2cef57b7a1471","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    return auth.AuthData(token, user, endpoints, url_types\u003durl_types)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"def get_validate_data(dtoken, duser, service_ids):"},{"line_number":249,"context_line":"    \"\"\"return ValidateData object for a token/user pair\"\"\""},{"line_number":250,"context_line":"    tenant \u003d None"},{"line_number":251,"context_line":"    if dtoken.tenant_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6Xs%3D","line":248,"in_reply_to":"AAAAC3%2F%2F6Yo%3D","updated":"2011-12-27 18:32:36.000000000","message":"Sure, since I am changing the existing interface.","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f1f3f6b003f8d73595ee5af872a8e8bb729e8f3c","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                                                dtoken.tenant_id,"},{"line_number":259,"context_line":"                                                service_ids)"},{"line_number":260,"context_line":"    if not dtoken.tenant_id or not service_ids \\"},{"line_number":261,"context_line":"        or backends.GLOBAL_SERVICE_ID in service_ids:"},{"line_number":262,"context_line":"        # return the global roles for unscoped tokens or"},{"line_number":263,"context_line":"        # its ID is in the service IDs"},{"line_number":264,"context_line":"        ts \u003d ts + get_global_roles_for_user(duser.id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6a0%3D","line":261,"updated":"2011-12-27 18:30:34.000000000","message":"When continuing the opening line of a block, you should indent two levels to distinguish it from the indentation of the enclosed block. You should probably also add parens to both make the logic clearer and eliminate the backslash:\n\nif (not dtoken.tenant_id or not service_ids or\n        (backends.GLOBAL_SERVICE_ID in service_ids)):","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f1f3f6b003f8d73595ee5af872a8e8bb729e8f3c","unresolved":false,"context_lines":[{"line_number":350,"context_line":"    If not service IDs or encounter an invalid service ID,"},{"line_number":351,"context_line":"    fault.UnauthorizedFault will be raised."},{"line_number":352,"context_line":"    \"\"\""},{"line_number":353,"context_line":"    if len(service_ids) \u003d\u003d 0:"},{"line_number":354,"context_line":"        raise fault.UnauthorizedFault(\"Missing service IDs\")"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    for service_id in service_ids:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6ac%3D","line":353,"updated":"2011-12-27 18:30:34.000000000","message":"Better written as:\n\nif not service_ids:","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f1f3f6b003f8d73595ee5af872a8e8bb729e8f3c","unresolved":false,"context_lines":[{"line_number":369,"context_line":"    for service_id in service_ids:"},{"line_number":370,"context_line":"        if service_id !\u003d backends.GLOBAL_SERVICE_ID:"},{"line_number":371,"context_line":"            sroles \u003d api.ROLE.get_by_service(service_id\u003dservice_id)"},{"line_number":372,"context_line":"            if sroles and len(sroles) \u003e 0:"},{"line_number":373,"context_line":"                roles \u003d roles + sroles"},{"line_number":374,"context_line":"    return map(lambda role: role.name, roles)"},{"line_number":375,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6aM%3D","line":372,"updated":"2011-12-27 18:30:34.000000000","message":"This is redundant. Just use:\n\nif sroles:","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f1f3f6b003f8d73595ee5af872a8e8bb729e8f3c","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        drole \u003d api.ROLE.get(drole_ref.role_id)"},{"line_number":386,"context_line":"        ts.append(Role(drole_ref.role_id, drole.name,"},{"line_number":387,"context_line":"                  None, drole_ref.tenant_id))"},{"line_number":388,"context_line":"    return ts"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"def get_tenant_roles_for_user_and_services(user_id, tenant_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6aA%3D","line":388,"updated":"2011-12-27 18:30:34.000000000","message":"This entire method can be written much cleaner with a single list comprehension:\n\nreturn [Role(drole_ref.role_id, drole.name, None, drole_ref.tenant_id)\n        for drole in api.ROLE.ref_get_all_global_roles(user_id)]","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f1f3f6b003f8d73595ee5af872a8e8bb729e8f3c","unresolved":false,"context_lines":[{"line_number":398,"context_line":"    service_ids -- service IDs"},{"line_number":399,"context_line":"    If service_ids are specified, will return the roles filtered by"},{"line_number":400,"context_line":"    service IDs."},{"line_number":401,"context_line":"    \"\"\""},{"line_number":402,"context_line":"    ts \u003d []"},{"line_number":403,"context_line":"    filtered_ts \u003d []"},{"line_number":404,"context_line":"    if tenant_id and user_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6Zc%3D","line":401,"updated":"2011-12-27 18:30:34.000000000","message":"This method could be simplified:\n\nts \u003d []\nif tenant_id and user_id:\n    ts \u003d [Role(drole_ref.role_id, drole.name, None, drole_ref.tenant_id)\n            for drole in api.ROLE.ref_get_all_tenant_roles(user_id, tenant_id)\nif service_ids:\n    sroles_names \u003d get_roles_names_by_service_ids(service_ids)\n    return [role for role in ts\n            if role.name in sroles_names]\nreturn ts","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f1f3f6b003f8d73595ee5af872a8e8bb729e8f3c","unresolved":false,"context_lines":[{"line_number":555,"context_line":"        auth_data \u003d get_validate_data(token, user, service_ids)"},{"line_number":556,"context_line":"        if service_ids and (token.tenant_id or belongs_to):"},{"line_number":557,"context_line":"            # we have service Ids and scope token, make sure we have some roles"},{"line_number":558,"context_line":"            if len(auth_data.user.role_refs.values) \u003d\u003d 0:"},{"line_number":559,"context_line":"                raise fault.UnauthorizedFault(\"No roles found for scope token\")"},{"line_number":560,"context_line":"        return auth_data"},{"line_number":561,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6ZU%3D","line":558,"updated":"2011-12-27 18:30:34.000000000","message":"Should be written:\n\nif not auth_data.user.role_refs.values:","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"}],"keystone/middleware/quantum_auth_token.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f1f3f6b003f8d73595ee5af872a8e8bb729e8f3c","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    def _build_token_uri(self, claims\u003dNone):"},{"line_number":134,"context_line":"        uri \u003d \"/v\" + self.auth_api_version + \"/tokens\" + \\"},{"line_number":135,"context_line":"              (claims and \u0027/\u0027 + claims or \u0027\u0027)"},{"line_number":136,"context_line":"        return uri"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def __init__(self, app, conf):"},{"line_number":139,"context_line":"        \"\"\" Common initialization code \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6Xw%3D","side":"PARENT","line":136,"updated":"2011-12-27 18:30:34.000000000","message":"This method is confusingly written. I would suggest (assuming I understand the intent):\n\ndef _build_token_uri(self, claims\u003dNone):\n    if claims:\n        claim_str \u003d \"/%s%s\" % (claims, self.serviceId_qs)\n    else:\n        claim_str \u003d \"\"\n    return \"/v%s/tokens%s\" % (self.auth_api_version, claim_str)","commit_id":"a57bd96bca6161d6fa977e0731b910b844617d77"}],"keystone/test/functional/common.py":[{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"860c55aecb1d56725b5ac3142971d7566265feca","unresolved":false,"context_lines":[{"line_number":1505,"context_line":"    Base class to run tests for Keystone WSGI middleware."},{"line_number":1506,"context_line":"    \"\"\""},{"line_number":1507,"context_line":"    use_server \u003d True"},{"line_number":1508,"context_line":"    "},{"line_number":1509,"context_line":"    def _setup_test_middleware(self):"},{"line_number":1510,"context_line":"        test_middleware \u003d None"},{"line_number":1511,"context_line":"        if isinstance(self.middleware, tuple):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6Yk%3D","line":1508,"updated":"2011-12-27 18:06:15.000000000","message":"PEP8","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f1f3f6b003f8d73595ee5af872a8e8bb729e8f3c","unresolved":false,"context_lines":[{"line_number":1512,"context_line":"            test_middleware \u003d HeaderApp()"},{"line_number":1513,"context_line":"            for filter in self.middleware:"},{"line_number":1514,"context_line":"                test_middleware \u003d \\"},{"line_number":1515,"context_line":"                filter.filter_factory(self.settings)(test_middleware)"},{"line_number":1516,"context_line":"        else:"},{"line_number":1517,"context_line":"            test_middleware \u003d \\"},{"line_number":1518,"context_line":"                self.middleware.filter_factory(self.settings)(HeaderApp())"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6Xo%3D","line":1515,"updated":"2011-12-27 18:30:34.000000000","message":"Continued line should be indented 2 levels.","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"860c55aecb1d56725b5ac3142971d7566265feca","unresolved":false,"context_lines":[{"line_number":1566,"context_line":"                json[\u0027OS-KSCATALOG:endpointTemplate\u0027]"},{"line_number":1567,"context_line":"            self.create_endpoint_for_tenant(self.tenant[\u0027id\u0027],"},{"line_number":1568,"context_line":"                self.endpoint_templates[x][\u0027id\u0027])"},{"line_number":1569,"context_line":"                "},{"line_number":1570,"context_line":"    def test_with_service_id(self):"},{"line_number":1571,"context_line":"        # create a service role so the scope token validation will succeed"},{"line_number":1572,"context_line":"        r \u003d self.create_role(service_name\u003dself.services[0][\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6Yg%3D","line":1569,"updated":"2011-12-27 18:06:15.000000000","message":"PEP8","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f1f3f6b003f8d73595ee5af872a8e8bb729e8f3c","unresolved":false,"context_lines":[{"line_number":1569,"context_line":"                "},{"line_number":1570,"context_line":"    def test_with_service_id(self):"},{"line_number":1571,"context_line":"        # create a service role so the scope token validation will succeed"},{"line_number":1572,"context_line":"        r \u003d self.create_role(service_name\u003dself.services[0][\u0027name\u0027])"},{"line_number":1573,"context_line":"        role \u003d r.json[\u0027role\u0027]"},{"line_number":1574,"context_line":"        self.grant_role_to_user(self.tenant_user[\u0027id\u0027],"},{"line_number":1575,"context_line":"                                role[\u0027id\u0027], self.tenant[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6Xk%3D","line":1572,"updated":"2011-12-27 18:30:34.000000000","message":"Please don\u0027t use single-letter names except with index counters. Use a descriptive name instead.","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"}],"keystone/test/functional/test_extensions.py":[{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"860c55aecb1d56725b5ac3142971d7566265feca","unresolved":false,"context_lines":[{"line_number":3,"context_line":"from keystone.test.functional import common"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"class TestExtensions(common.FunctionalTestCase):"},{"line_number":7,"context_line":"    def test_extensions_json(self):"},{"line_number":8,"context_line":"        r \u003d self.service_request(path\u003d\u0027/extensions.json\u0027)"},{"line_number":9,"context_line":"        self.assertTrue(\u0027json\u0027 in r.getheader(\u0027Content-Type\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6ZE%3D","side":"PARENT","line":6,"updated":"2011-12-27 18:06:15.000000000","message":"Why did you remove these tests?\n\nI would think you keep those as is and add a new file to test the HPIDM extension?","commit_id":"a57bd96bca6161d6fa977e0731b910b844617d77"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"8947e39a7694d0ee2308389032c2cef57b7a1471","unresolved":false,"context_lines":[{"line_number":3,"context_line":"from keystone.test.functional import common"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"class TestExtensions(common.FunctionalTestCase):"},{"line_number":7,"context_line":"    def test_extensions_json(self):"},{"line_number":8,"context_line":"        r \u003d self.service_request(path\u003d\u0027/extensions.json\u0027)"},{"line_number":9,"context_line":"        self.assertTrue(\u0027json\u0027 in r.getheader(\u0027Content-Type\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6X8%3D","side":"PARENT","line":6,"in_reply_to":"AAAAC3%2F%2F6ZE%3D","updated":"2011-12-27 18:32:36.000000000","message":"I removed them because test_extensions.py was not there in the main branch. I\u0027ll add them back on.","commit_id":"a57bd96bca6161d6fa977e0731b910b844617d77"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"860c55aecb1d56725b5ac3142971d7566265feca","unresolved":false,"context_lines":[{"line_number":9,"context_line":"        self.assertTrue(\u0027json\u0027 in r.getheader(\u0027Content-Type\u0027))"},{"line_number":10,"context_line":"        content \u003d r.json"},{"line_number":11,"context_line":"        self.assertIsNotNone(content[\u0027extensions\u0027])"},{"line_number":12,"context_line":"        self.assertIsNotNone(content[\u0027extensions\u0027][\u0027values\u0027])"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    def test_extensions_xml(self):"},{"line_number":15,"context_line":"        r \u003d self.service_request(path\u003d\u0027/extensions.xml\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6Yc%3D","side":"PARENT","line":12,"updated":"2011-12-27 18:06:15.000000000","message":"We need to add some test cases where the middleware and the server don\u0027t support the HPIDM extension and validate the expected behavior:\n- Server does not support the query string, but middleware sends it\n- Middleware does not support the query string, and validate that default-configured server responds as previously expected","commit_id":"a57bd96bca6161d6fa977e0731b910b844617d77"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"8947e39a7694d0ee2308389032c2cef57b7a1471","unresolved":false,"context_lines":[{"line_number":9,"context_line":"        self.assertTrue(\u0027json\u0027 in r.getheader(\u0027Content-Type\u0027))"},{"line_number":10,"context_line":"        content \u003d r.json"},{"line_number":11,"context_line":"        self.assertIsNotNone(content[\u0027extensions\u0027])"},{"line_number":12,"context_line":"        self.assertIsNotNone(content[\u0027extensions\u0027][\u0027values\u0027])"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    def test_extensions_xml(self):"},{"line_number":15,"context_line":"        r \u003d self.service_request(path\u003d\u0027/extensions.xml\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6X4%3D","side":"PARENT","line":12,"in_reply_to":"AAAAC3%2F%2F6Yc%3D","updated":"2011-12-27 18:32:36.000000000","message":"Thanks. Will do.","commit_id":"a57bd96bca6161d6fa977e0731b910b844617d77"}],"keystone/test/sampledata.py":[{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"860c55aecb1d56725b5ac3142971d7566265feca","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    (\u0027role\u0027, \u0027add\u0027, \u0027barista\u0027, \u0027tea\u0027),"},{"line_number":36,"context_line":"    (\u0027role\u0027, \u0027grant\u0027, \u0027barista\u0027, \u0027pete\u0027),"},{"line_number":37,"context_line":"    (\u0027role\u0027, \u0027add\u0027, \u0027barista-global\u0027),"},{"line_number":38,"context_line":"    (\u0027role\u0027, \u0027grant\u0027, \u0027barista-globa\u0027, \u0027pete\u0027),"},{"line_number":39,"context_line":"# Add Services"},{"line_number":40,"context_line":"    #1 Service Name:exampleservice Type:example type"},{"line_number":41,"context_line":"    (\u0027service\u0027, \u0027add\u0027, \u0027exampleservice\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6YY%3D","line":38,"updated":"2011-12-27 18:06:15.000000000","message":"Typo? \u0027globa\u0027\nIs this used in any tests or sample use cases?","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"8947e39a7694d0ee2308389032c2cef57b7a1471","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    (\u0027role\u0027, \u0027add\u0027, \u0027barista\u0027, \u0027tea\u0027),"},{"line_number":36,"context_line":"    (\u0027role\u0027, \u0027grant\u0027, \u0027barista\u0027, \u0027pete\u0027),"},{"line_number":37,"context_line":"    (\u0027role\u0027, \u0027add\u0027, \u0027barista-global\u0027),"},{"line_number":38,"context_line":"    (\u0027role\u0027, \u0027grant\u0027, \u0027barista-globa\u0027, \u0027pete\u0027),"},{"line_number":39,"context_line":"# Add Services"},{"line_number":40,"context_line":"    #1 Service Name:exampleservice Type:example type"},{"line_number":41,"context_line":"    (\u0027service\u0027, \u0027add\u0027, \u0027exampleservice\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6YA%3D","line":38,"in_reply_to":"AAAAC3%2F%2F6YY%3D","updated":"2011-12-27 18:32:36.000000000","message":"I used this data for command line testing (mostly via curl).","commit_id":"15101f97b075fe8a94d6cc37221de56a014c8a9a"}]}
