)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"72229f09c55672b417e1421b61b6427e9b176c01","unresolved":false,"context_lines":[{"line_number":11,"context_line":"and a sample director for creating the access info from the python objects"},{"line_number":12,"context_line":"produced by json parsing."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Incorporates unrelated change to CMS to get pep8 to pass"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Id34261f4a21662b374bb2eff4b9128d0ffb31f2f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"da86d52c_c538f23f","line":14,"updated":"2015-02-09 18:41:40.000000000","message":"could add\n\n    partially implements bp token-provider-cleanup\n\nsince we can build of the Token format provided in this commit to clean up some of the token provider api.","commit_id":"e3ee4a8ad18a365f6662f7055acd4f65650080b6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dc66777d71457bc52112e927c7f2d2322391eb5e","unresolved":false,"context_lines":[{"line_number":11,"context_line":"and a sample director for creating the access info from the python objects"},{"line_number":12,"context_line":"produced by json parsing."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Incorporates unrelated change to CMS to get pep8 to pass"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Id34261f4a21662b374bb2eff4b9128d0ffb31f2f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"da86d52c_609574e3","line":14,"in_reply_to":"da86d52c_c538f23f","updated":"2015-02-09 19:11:05.000000000","message":"Done","commit_id":"e3ee4a8ad18a365f6662f7055acd4f65650080b6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":11,"context_line":"and a sample director for creating the access info from the python objects"},{"line_number":12,"context_line":"produced by json parsing."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Incorporates unrelated change to CMS to get pep8 to pass"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Id34261f4a21662b374bb2eff4b9128d0ffb31f2f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"da86d52c_d6728010","line":14,"updated":"2015-02-15 07:10:42.000000000","message":"if it\u0027s unrelated put it in another patch, also if something was failing pep8 then we would have been screwed a while ago, rebuild your pep8 testenv.","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"}],"keystoneclient/access.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"179a6351b37915ac21d0459bdde335d2a6d3f5ea","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            if AccessInfoV3.is_valid(body, **kwargs):"},{"line_number":49,"context_line":"                if resp and not auth_token:"},{"line_number":50,"context_line":"                    auth_token \u003d resp.headers[\u0027X-Subject-Token\u0027]"},{"line_number":51,"context_line":"                # NOTE(jamielennox): these return AccessInfo because they"},{"line_number":52,"context_line":"                # already have auth_token installed on them."},{"line_number":53,"context_line":"                if body:"},{"line_number":54,"context_line":"                    if region_name:"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_193c60bf","side":"PARENT","line":51,"updated":"2015-02-13 19:18:36.000000000","message":"why remove \u0027they\u0027?","commit_id":"32c18a83e2ffe80f559ca871eeddb2ef8848ff17"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f6b517bdcca27699622a0fd1903f2c2decaafec5","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            if AccessInfoV3.is_valid(body, **kwargs):"},{"line_number":49,"context_line":"                if resp and not auth_token:"},{"line_number":50,"context_line":"                    auth_token \u003d resp.headers[\u0027X-Subject-Token\u0027]"},{"line_number":51,"context_line":"                    # NOTE(jamielennox): these return AccessInfo because"},{"line_number":52,"context_line":"                    # already have auth_token installed on them."},{"line_number":53,"context_line":"                if body:"},{"line_number":54,"context_line":"                    region_name \u003d (region_name or"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_9691e89c","line":51,"updated":"2015-02-15 05:18:16.000000000","message":"This is an unrelated change, revert.","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"66b44980170d7162377325f7f29fd35d1f72d2bf","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            else:"},{"line_number":81,"context_line":"                raise NotImplementedError(_(\u0027Unrecognized auth response\u0027))"},{"line_number":82,"context_line":"        else:"},{"line_number":83,"context_line":"            # TODO(ayoung): this needs tests.  The use of **kwargs"},{"line_number":84,"context_line":"            # does not make sense as this else block cannot be"},{"line_number":85,"context_line":"            # reached with anything in kwargs."},{"line_number":86,"context_line":"            auth_ref \u003d AccessInfoV2(**kwargs)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_3c1abe17","line":83,"updated":"2015-02-28 20:48:16.000000000","message":"I think the only reason this code is here is for the tests... it\u0027s so tests can create the AccessInfo they want.","commit_id":"a62f81d2a39a1fb1e849b7d2d68608a7265b0196"}],"keystoneclient/common/cms.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f6b517bdcca27699622a0fd1903f2c2decaafec5","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    # http://www.openssl.org/docs/apps/cms.html#EXIT_CODES"},{"line_number":169,"context_line":"    #"},{"line_number":170,"context_line":"    # $ openssl cms -verify -certfile not_exist_file -CAfile \\"},{"line_number":171,"context_line":"    #       not_exist_file -inform PEM -nosmimecap -nodetach \\"},{"line_number":172,"context_line":"    #       -nocerts -noattr"},{"line_number":173,"context_line":"    # Error opening certificate file not_exist_file"},{"line_number":174,"context_line":"    #"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_56805046","side":"PARENT","line":171,"updated":"2015-02-15 05:18:16.000000000","message":"This is an unrelated change suggest revert.","commit_id":"32c18a83e2ffe80f559ca871eeddb2ef8848ff17"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    # http://www.openssl.org/docs/apps/cms.html#EXIT_CODES"},{"line_number":169,"context_line":"    #"},{"line_number":170,"context_line":"    # $ openssl cms -verify -certfile not_exist_file -CAfile \\"},{"line_number":171,"context_line":"    #       not_exist_file -inform PEM -nosmimecap -nodetach \\"},{"line_number":172,"context_line":"    #       -nocerts -noattr"},{"line_number":173,"context_line":"    # Error opening certificate file not_exist_file"},{"line_number":174,"context_line":"    #"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_16a5f8b4","side":"PARENT","line":171,"in_reply_to":"da86d52c_56805046","updated":"2015-02-15 07:10:42.000000000","message":"++","commit_id":"32c18a83e2ffe80f559ca871eeddb2ef8848ff17"}],"keystoneclient/exceptions.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class UnsupportedTokenVersionException(Exception):"},{"line_number":107,"context_line":"    \"\"\"Token version is unrecognizable or unsupported.\"\"\""},{"line_number":108,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_36591c8f","line":108,"updated":"2015-02-15 07:10:42.000000000","message":"emit some sort of message here? use ClientException instead of Exception too.","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"}],"keystoneclient/fixture/v2.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        self.root.setdefault(\u0027trust\u0027, {})[\u0027trustee_user_id\u0027] \u003d value"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    @property"},{"line_number":184,"context_line":"    def trustor_user_id(self):"},{"line_number":185,"context_line":"        return self.root.setdefault(\u0027trust\u0027, {}).get(\u0027trustor_user_id\u0027)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    @trustor_user_id.setter"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_56af7094","line":184,"updated":"2015-02-15 07:10:42.000000000","message":"these changes seem like they should go in a patch that precedes this work?","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"}],"keystoneclient/fixture/v3.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def add_endpoint(self, interface, url, region\u003dNone):"},{"line_number":29,"context_line":"        data \u003d {\u0027id\u0027: uuid.uuid4().hex,"},{"line_number":30,"context_line":"                \u0027interface\u0027: interface,"},{"line_number":31,"context_line":"                \u0027url\u0027: url,"},{"line_number":32,"context_line":"                \u0027region\u0027: region}"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_b69d0c69","line":29,"updated":"2015-02-15 07:10:42.000000000","message":"these also seem like changes that should go into an earlier patch","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"}],"keystoneclient/models/access_info.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0b3819c03fb93aff5b1ff407c54be210b13b70c1","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Immutable(object):"},{"line_number":23,"context_line":"    _is_immutable \u003d False"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __setattr__(self, att, v):"},{"line_number":26,"context_line":"        if self._is_immutable is False:"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_e595f688","line":23,"updated":"2015-02-09 18:40:08.000000000","message":"question on this, do we need to have `_is_immutable` here? I would think that if a class inherits from another class named Immutable, the intention should be clear. I\u0027m not seeing any spots where Immutable is inherited from and _is_immutable is changed. So we might be able to do something like: \n\n    class Immutable(object):\n        def __setattr__(self, att, v):\n            raise AttributeError(\u0027Attempting to modify an immutable object\u0027)\n        \n        def __getitem__(self, attr):\n            return self.__dict__[attr]\n\nand so on","commit_id":"e3ee4a8ad18a365f6662f7055acd4f65650080b6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dc66777d71457bc52112e927c7f2d2322391eb5e","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Immutable(object):"},{"line_number":23,"context_line":"    _is_immutable \u003d False"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __setattr__(self, att, v):"},{"line_number":26,"context_line":"        if self._is_immutable is False:"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_20061c21","line":23,"in_reply_to":"da86d52c_e595f688","updated":"2015-02-09 19:11:05.000000000","message":"Done","commit_id":"e3ee4a8ad18a365f6662f7055acd4f65650080b6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0b3819c03fb93aff5b1ff407c54be210b13b70c1","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            if isinstance(delegation, Trust):"},{"line_number":140,"context_line":"                self.trust \u003d delegation"},{"line_number":141,"context_line":"            elif isinstance(delegation, Oauth):"},{"line_number":142,"context_line":"                self.oauth \u003d delegation"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class AuthContext(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_7a3445fb","line":142,"updated":"2015-02-09 18:40:08.000000000","message":"Cool, this would be useful to have for some of the token provider cleanup that needs to be done; \n\nhttps://review.openstack.org/#/c/150629/3/keystone/token/providers/common.py","commit_id":"e3ee4a8ad18a365f6662f7055acd4f65650080b6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def assert_string(obj):"},{"line_number":22,"context_line":"    if not isinstance(obj, basestring):"},{"line_number":23,"context_line":"        raise ValueError(\"%s not a string\" % obj)"},{"line_number":24,"context_line":"    return obj"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_b6c26c32","line":22,"updated":"2015-02-15 07:10:42.000000000","message":"instead of basestring use six.text_types for py3 compat and uft8","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def assert_string(obj):"},{"line_number":22,"context_line":"    if not isinstance(obj, basestring):"},{"line_number":23,"context_line":"        raise ValueError(\"%s not a string\" % obj)"},{"line_number":24,"context_line":"    return obj"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_16ba58c0","line":23,"updated":"2015-02-15 07:10:42.000000000","message":"use single quotes for strings as per our usual convention","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        assert_datetime(issued_at)"},{"line_number":225,"context_line":"        if catalog is not None:"},{"line_number":226,"context_line":"            assert_class(Catalog, catalog)"},{"line_number":227,"context_line":"        if isinstance(scope, Project):"},{"line_number":228,"context_line":"            self.project \u003d scope"},{"line_number":229,"context_line":"        elif isinstance(scope, Domain):"},{"line_number":230,"context_line":"            self.domain \u003d scope"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_d6bfe0a8","line":227,"updated":"2015-02-15 07:10:42.000000000","message":"use assert_is_instance ?","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":226,"context_line":"            assert_class(Catalog, catalog)"},{"line_number":227,"context_line":"        if isinstance(scope, Project):"},{"line_number":228,"context_line":"            self.project \u003d scope"},{"line_number":229,"context_line":"        elif isinstance(scope, Domain):"},{"line_number":230,"context_line":"            self.domain \u003d scope"},{"line_number":231,"context_line":"        elif scope is None:"},{"line_number":232,"context_line":"            scope \u003d None"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_16e178d0","line":229,"updated":"2015-02-15 07:10:42.000000000","message":"assert_is_instance ?","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        self.catalog \u003d catalog"},{"line_number":241,"context_line":"        self.roles \u003d roles"},{"line_number":242,"context_line":"        if delegation is not None:"},{"line_number":243,"context_line":"            if isinstance(delegation, Trust):"},{"line_number":244,"context_line":"                self.trust \u003d delegation"},{"line_number":245,"context_line":"            elif isinstance(delegation, Oauth):"},{"line_number":246,"context_line":"                self.oauth \u003d delegation"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_36e67ce9","line":243,"updated":"2015-02-15 07:10:42.000000000","message":"use assert_is_instance ?","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        if delegation is not None:"},{"line_number":243,"context_line":"            if isinstance(delegation, Trust):"},{"line_number":244,"context_line":"                self.trust \u003d delegation"},{"line_number":245,"context_line":"            elif isinstance(delegation, Oauth):"},{"line_number":246,"context_line":"                self.oauth \u003d delegation"},{"line_number":247,"context_line":"        if federation is not None:"},{"line_number":248,"context_line":"            assert_class(Federation, federation)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_56ebf0af","line":245,"updated":"2015-02-15 07:10:42.000000000","message":"use assert_is_instance ?","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"8b3b160c50891c60838eda7e6f066eb927e8ade4","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def assert_datetime(obj):"},{"line_number":37,"context_line":"    assert_class(datetime.datetime, obj)"},{"line_number":38,"context_line":"    if (obj.tzinfo is None):"},{"line_number":39,"context_line":"        raise ValueError(\u0027Timezone information missing from datetime\u0027)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_4c3fa825","line":38,"updated":"2015-03-02 13:52:03.000000000","message":"Redundant parentheses.","commit_id":"20b552e215428da4f7f120935f9d08175337ebb6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"8b3b160c50891c60838eda7e6f066eb927e8ade4","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def __new__(cls, value):"},{"line_number":54,"context_line":"        # The Python 3 version of this would be"},{"line_number":55,"context_line":"        # return super().__new__(cls, value)"},{"line_number":56,"context_line":"        # But that will not work for Python 2.7.  The followingf"},{"line_number":57,"context_line":"        # works for both."},{"line_number":58,"context_line":"        strval \u003d timeutils.strtime(value)"},{"line_number":59,"context_line":"        return six.text_type.__new__(cls, strval)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_ec15bc9b","line":56,"updated":"2015-03-02 13:52:03.000000000","message":"Double space before The, typo in following","commit_id":"20b552e215428da4f7f120935f9d08175337ebb6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"8b3b160c50891c60838eda7e6f066eb927e8ade4","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        if self._is_immutable is False:"},{"line_number":90,"context_line":"            super(Immutable, self).__setattr__(att, v)"},{"line_number":91,"context_line":"        else:"},{"line_number":92,"context_line":"            raise AttributeError(\u0027attempt to modify immutable object\u0027)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def get(self, attr, default\u003dNone):"},{"line_number":95,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_8c4e00c0","line":92,"updated":"2015-03-02 13:52:03.000000000","message":"Question: Shouldn\u0027t it starts with big A?","commit_id":"20b552e215428da4f7f120935f9d08175337ebb6"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"afd2c5faf4aa039c86321c9bc3c48c5224a21dd4","unresolved":false,"context_lines":[{"line_number":36,"context_line":"def assert_datetime(obj):"},{"line_number":37,"context_line":"    assert_class(datetime.datetime, obj)"},{"line_number":38,"context_line":"    if obj.tzinfo is None:"},{"line_number":39,"context_line":"        raise ValueError(\u0027Timezone information missing from datetime\u0027)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def assert_is_instance(cls, obj):"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa041b7_aebf52cf","line":39,"updated":"2015-04-02 19:17:08.000000000","message":"Use \" and \u0027 consistently for string - sorry I got this from looking at Brant\u0027s comment :)","commit_id":"e7abc0ea01c57c3fea3d28aba11a9f7f266036e0"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"ffd890350c7aa02a14aecf2dd3f4d4dd4cf8325e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"def assert_datetime(obj):"},{"line_number":37,"context_line":"    assert_class(datetime.datetime, obj)"},{"line_number":38,"context_line":"    if obj.tzinfo is None:"},{"line_number":39,"context_line":"        raise ValueError(\u0027Timezone information missing from datetime\u0027)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def assert_is_instance(cls, obj):"}],"source_content_type":"text/x-python","patch_set":17,"id":"9aa53dc9_d01db310","line":39,"in_reply_to":"baa041b7_aebf52cf","updated":"2015-04-07 01:46:30.000000000","message":"Done","commit_id":"e7abc0ea01c57c3fea3d28aba11a9f7f266036e0"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"afd2c5faf4aa039c86321c9bc3c48c5224a21dd4","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        if self._is_immutable is False:"},{"line_number":90,"context_line":"            super(Immutable, self).__setattr__(att, v)"},{"line_number":91,"context_line":"        else:"},{"line_number":92,"context_line":"            raise AttributeError(\u0027Attempt to modify immutable object.\u0027)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def get(self, attr, default\u003dNone):"},{"line_number":95,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa041b7_6eb02af5","line":92,"updated":"2015-04-02 19:17:08.000000000","message":"same comment on using \" and \u0027 consistently","commit_id":"e7abc0ea01c57c3fea3d28aba11a9f7f266036e0"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"afd2c5faf4aa039c86321c9bc3c48c5224a21dd4","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        if adminURL is not None:"},{"line_number":199,"context_line":"            self.adminURL \u003d adminURL"},{"line_number":200,"context_line":"        if tenantId is not None:"},{"line_number":201,"context_line":"            self.tenantId \u003d assert_string(tenantId)"},{"line_number":202,"context_line":"        if interface is not None:"},{"line_number":203,"context_line":"            self.interface \u003d assert_string(interface)"},{"line_number":204,"context_line":"        if versionInfo is not None:"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa041b7_a92bcc81","line":201,"updated":"2015-04-02 19:17:08.000000000","message":"where does tenantId come from? Endpoint does have this property?\n\nUse projectId?","commit_id":"e7abc0ea01c57c3fea3d28aba11a9f7f266036e0"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"ffd890350c7aa02a14aecf2dd3f4d4dd4cf8325e","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        if adminURL is not None:"},{"line_number":199,"context_line":"            self.adminURL \u003d adminURL"},{"line_number":200,"context_line":"        if tenantId is not None:"},{"line_number":201,"context_line":"            self.tenantId \u003d assert_string(tenantId)"},{"line_number":202,"context_line":"        if interface is not None:"},{"line_number":203,"context_line":"            self.interface \u003d assert_string(interface)"},{"line_number":204,"context_line":"        if versionInfo is not None:"}],"source_content_type":"text/x-python","patch_set":17,"id":"9aa53dc9_90ee0beb","line":201,"in_reply_to":"baa041b7_a92bcc81","updated":"2015-04-07 01:46:30.000000000","message":"Some do;  I think it is a Nova ism...but I don\u0027t recall.  Removing it from the API does not seem to break any tests.","commit_id":"e7abc0ea01c57c3fea3d28aba11a9f7f266036e0"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"afd2c5faf4aa039c86321c9bc3c48c5224a21dd4","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            self.adminURL \u003d adminURL"},{"line_number":200,"context_line":"        if tenantId is not None:"},{"line_number":201,"context_line":"            self.tenantId \u003d assert_string(tenantId)"},{"line_number":202,"context_line":"        if interface is not None:"},{"line_number":203,"context_line":"            self.interface \u003d assert_string(interface)"},{"line_number":204,"context_line":"        if versionInfo is not None:"},{"line_number":205,"context_line":"            self.versionInfo \u003d versionInfo"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa041b7_a952ac11","line":202,"updated":"2015-04-02 19:17:08.000000000","message":"isn\u0027t this specific for v3?","commit_id":"e7abc0ea01c57c3fea3d28aba11a9f7f266036e0"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"ffd890350c7aa02a14aecf2dd3f4d4dd4cf8325e","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            self.adminURL \u003d adminURL"},{"line_number":200,"context_line":"        if tenantId is not None:"},{"line_number":201,"context_line":"            self.tenantId \u003d assert_string(tenantId)"},{"line_number":202,"context_line":"        if interface is not None:"},{"line_number":203,"context_line":"            self.interface \u003d assert_string(interface)"},{"line_number":204,"context_line":"        if versionInfo is not None:"},{"line_number":205,"context_line":"            self.versionInfo \u003d versionInfo"}],"source_content_type":"text/x-python","patch_set":17,"id":"9aa53dc9_f0a3179d","line":202,"in_reply_to":"baa041b7_a952ac11","updated":"2015-04-07 01:46:30.000000000","message":"Yes.  Seems like it can be removed as well.","commit_id":"e7abc0ea01c57c3fea3d28aba11a9f7f266036e0"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"afd2c5faf4aa039c86321c9bc3c48c5224a21dd4","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            assert_class(Federation, federation)"},{"line_number":292,"context_line":"            self.federation \u003d federation"},{"line_number":293,"context_line":"        else:"},{"line_number":294,"context_line":"            self.federation \u003d None"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa041b7_697384b2","line":294,"updated":"2015-04-02 19:17:08.000000000","message":"where is the keystone token?","commit_id":"e7abc0ea01c57c3fea3d28aba11a9f7f266036e0"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"ffd890350c7aa02a14aecf2dd3f4d4dd4cf8325e","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            assert_class(Federation, federation)"},{"line_number":292,"context_line":"            self.federation \u003d federation"},{"line_number":293,"context_line":"        else:"},{"line_number":294,"context_line":"            self.federation \u003d None"}],"source_content_type":"text/x-python","patch_set":17,"id":"9aa53dc9_90aa8b6f","line":294,"in_reply_to":"baa041b7_697384b2","updated":"2015-04-07 01:46:30.000000000","message":"This is designed to be used even before a token ID has been assigned.  IT represents the data of the token itself.  Ideally it would be called auth-info, as this is really the auth info, but that name has gone to the dictionary that wraps this.","commit_id":"e7abc0ea01c57c3fea3d28aba11a9f7f266036e0"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"e8be53db5c1962027c12b8538f5a6cef34ea0cff","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"class V2Endpoint(Endpoint):"},{"line_number":189,"context_line":"    # The Endpoint is a subset of these values, all of them are optional"},{"line_number":190,"context_line":"    def __init__(self, id, tenantId, region, interface,"},{"line_number":191,"context_line":"                 publicURL, internalURL, adminURL,"},{"line_number":192,"context_line":"                 versionInfo, versionList, versionId):"},{"line_number":193,"context_line":"        super(V2Endpoint, self).__init__(id, region)"}],"source_content_type":"text/x-python","patch_set":19,"id":"7aaa499b_12745c9a","line":190,"updated":"2015-04-10 18:21:40.000000000","message":"Forgot about tenantId? :)  It is missing the following...\n\nif tenantId is not None:\n            self.tenantId \u003d tenantId","commit_id":"2c308c2293804cbe89a5c71b40fcce554a670872"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5b8861cd25215cf516f02c701c2b3d9639aa5456","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"class V2Endpoint(Endpoint):"},{"line_number":189,"context_line":"    # The Endpoint is a subset of these values, all of them are optional"},{"line_number":190,"context_line":"    def __init__(self, id, tenantId, region, interface,"},{"line_number":191,"context_line":"                 publicURL, internalURL, adminURL,"},{"line_number":192,"context_line":"                 versionInfo, versionList, versionId):"},{"line_number":193,"context_line":"        super(V2Endpoint, self).__init__(id, region)"}],"source_content_type":"text/x-python","patch_set":19,"id":"dac4157f_ac6a7b7f","line":190,"in_reply_to":"7aaa499b_12745c9a","updated":"2015-04-22 18:04:12.000000000","message":"Done","commit_id":"2c308c2293804cbe89a5c71b40fcce554a670872"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"d5bd23fd1297daff7d37232cdab3ef68ccea6866","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        else:"},{"line_number":93,"context_line":"            raise AttributeError(\u0027Attempt to modify immutable object.\u0027)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def get(self, attr, default\u003dNone):"},{"line_number":96,"context_line":"        try:"},{"line_number":97,"context_line":"            return self.__dict__[attr]"},{"line_number":98,"context_line":"        except KeyError:"}],"source_content_type":"text/x-python","patch_set":21,"id":"7ad32947_8eb6fa3b","line":95,"updated":"2015-04-28 02:37:07.000000000","message":"why? what\u0027s wrong with the attribute. Why don\u0027t we know the attributes on the object.","commit_id":"e70a7babdc1bed15bf57b3f90707fcae9e6d3656"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"d5bd23fd1297daff7d37232cdab3ef68ccea6866","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            return default"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def __getitem__(self, attr):"},{"line_number":102,"context_line":"        return self.__dict__[attr]"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def lock(self):"},{"line_number":105,"context_line":"        self._is_immutable \u003d True"}],"source_content_type":"text/x-python","patch_set":21,"id":"7ad32947_2e7c8671","line":102,"updated":"2015-04-28 02:37:07.000000000","message":"why? why wouldn\u0027t i just use the attribute","commit_id":"e70a7babdc1bed15bf57b3f90707fcae9e6d3656"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"d5bd23fd1297daff7d37232cdab3ef68ccea6866","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def __iter__(self):"},{"line_number":114,"context_line":"        for key in dir(self):"},{"line_number":115,"context_line":"            yield key"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class TypeSafeList(list):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7ad32947_0e81ca4a","line":115,"updated":"2015-04-28 02:37:07.000000000","message":"there\u0027s no way a base class should implement this. Who knows what a subclass might put in dir()","commit_id":"e70a7babdc1bed15bf57b3f90707fcae9e6d3656"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"d5bd23fd1297daff7d37232cdab3ef68ccea6866","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            self.versionInfo \u003d versionInfo"},{"line_number":205,"context_line":"        if versionList is not None:"},{"line_number":206,"context_line":"            self.versionList \u003d versionList"},{"line_number":207,"context_line":"        if versionId is not None:"},{"line_number":208,"context_line":"            self.versionId \u003d versionId"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7ad32947_ae909696","line":207,"updated":"2015-04-28 02:37:07.000000000","message":"versionId, versionLIst etc - these are not things that we acknowledge in our APIs. they are extensions\n\nPlease don\u0027t do conditional setting - it makes it weird when you get an AttributeError instead of a None value as you would expect.","commit_id":"e70a7babdc1bed15bf57b3f90707fcae9e6d3656"}],"keystoneclient/models/auth_context.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from oslo_utils import timeutils"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"\"\"\"Unified in-memory access model.\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# gap, in seconds, to determine whether the given token is about to expire"},{"line_number":22,"context_line":"STALE_TOKEN_DURATION \u003d 30"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_f6022471","line":19,"updated":"2015-02-15 07:10:42.000000000","message":"same comment as \u0027access_info.py\u0027 ?","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\"\"\"Unified in-memory access model.\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# gap, in seconds, to determine whether the given token is about to expire"},{"line_number":22,"context_line":"STALE_TOKEN_DURATION \u003d 30"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"# This is a Facade for the rest of the domain model"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_16089890","line":22,"updated":"2015-02-15 07:10:42.000000000","message":"this is already in access_info.py - why restate it?","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"}],"keystoneclient/models/builder.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from keystoneclient import exceptions"},{"line_number":18,"context_line":"from keystoneclient.models import access_info"},{"line_number":19,"context_line":"from keystoneclient.models import auth_context"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from keystoneclient import service_catalog"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_96f3a89e","line":20,"updated":"2015-02-15 07:10:42.000000000","message":"rm this empty line","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# Access Info is version agnostic.  The builder code is version aware."},{"line_number":25,"context_line":"V2 \u003d \u0027v2.0\u0027"},{"line_number":26,"context_line":"V3 \u003d \u0027v3.0\u0027"},{"line_number":27,"context_line":"VERSIONS \u003d frozenset([V2, V3])"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_963ac832","line":26,"updated":"2015-02-15 07:10:42.000000000","message":"should this be \u0027v3\u0027 and not \u0027v3.0\u0027?","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        elif \u0027token\u0027 in token_data and \u0027methods\u0027 in token_data[\u0027token\u0027]:"},{"line_number":199,"context_line":"            return V3"},{"line_number":200,"context_line":"        else:"},{"line_number":201,"context_line":"            raise exceptions.UnsupportedTokenVersionException()"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"class PythonDirector(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_565e9077","line":201,"updated":"2015-02-15 07:10:42.000000000","message":"you are raising this exception, but it\u0027s only return is a pass, this won\u0027t do anything?","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"8b3b160c50891c60838eda7e6f066eb927e8ade4","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def add_endpoint(self, service_id, endpoint_data):"},{"line_number":119,"context_line":"        # While the spec defines that the Endpoint should have"},{"line_number":120,"context_line":"        # both region and region_id, older servers might not"},{"line_number":121,"context_line":"        # honor that.  Makes these values optional."},{"line_number":122,"context_line":"        self.services[service_id].endpoints.append("},{"line_number":123,"context_line":"            access_info.V3Endpoint("},{"line_number":124,"context_line":"                endpoint_data[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_c7d611f1","line":121,"updated":"2015-03-02 13:52:03.000000000","message":"Double space after the period. I\u0027ve seen it in multiple places, so I guess its intentional, so you are free to ignore that comments.","commit_id":"20b552e215428da4f7f120935f9d08175337ebb6"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"da990f68258dcbe24a4bcb4906efdd3999e17b69","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def add_endpoint(self, service_id, endpoint_data):"},{"line_number":119,"context_line":"        # While the spec defines that the Endpoint should have"},{"line_number":120,"context_line":"        # both region and region_id, older servers might not"},{"line_number":121,"context_line":"        # honor that.  Makes these values optional."},{"line_number":122,"context_line":"        self.services[service_id].endpoints.append("},{"line_number":123,"context_line":"            access_info.V3Endpoint("},{"line_number":124,"context_line":"                endpoint_data[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_217196e0","line":121,"in_reply_to":"ba7be1f8_c7d611f1","updated":"2015-03-02 15:27:54.000000000","message":"I had too many years of getting that rule beaten into my head to change it now.  Still think it is better than one.","commit_id":"20b552e215428da4f7f120935f9d08175337ebb6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"8b3b160c50891c60838eda7e6f066eb927e8ade4","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    of VERSIONS"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    Since early version of the tokens do not have a version field"},{"line_number":197,"context_line":"    Select the version based on the available field names."},{"line_number":198,"context_line":"    This logic should be deprecated In future revisions,  and"},{"line_number":199,"context_line":"    the logic should be reduced to checking the version field in"},{"line_number":200,"context_line":"    the token_data itself. This way we can support future versions"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_873a5932","line":197,"updated":"2015-03-02 13:52:03.000000000","message":"*select","commit_id":"20b552e215428da4f7f120935f9d08175337ebb6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"8b3b160c50891c60838eda7e6f066eb927e8ade4","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    Since early version of the tokens do not have a version field"},{"line_number":197,"context_line":"    Select the version based on the available field names."},{"line_number":198,"context_line":"    This logic should be deprecated In future revisions,  and"},{"line_number":199,"context_line":"    the logic should be reduced to checking the version field in"},{"line_number":200,"context_line":"    the token_data itself. This way we can support future versions"},{"line_number":201,"context_line":"    that might have the same fields."}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_a7491dd2","line":198,"updated":"2015-03-02 13:52:03.000000000","message":"*in, double space after comma","commit_id":"20b552e215428da4f7f120935f9d08175337ebb6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"8b3b160c50891c60838eda7e6f066eb927e8ade4","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    that might have the same fields."},{"line_number":202,"context_line":"    \u0027\u0027\u0027"},{"line_number":203,"context_line":"    if token_data and isinstance(token_data, dict):"},{"line_number":204,"context_line":"        if \u0027token_version\u0027 in token_data:"},{"line_number":205,"context_line":"            if token_data[\u0027token_version\u0027] in VERSIONS:"},{"line_number":206,"context_line":"                return token_data[\u0027token_version\u0027]"},{"line_number":207,"context_line":"        if \u0027access\u0027 in token_data:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_67548554","line":204,"updated":"2015-03-02 13:52:03.000000000","message":"How about if token_data.get(\u0027token_version\u0027) in VERSIONS?","commit_id":"20b552e215428da4f7f120935f9d08175337ebb6"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"da990f68258dcbe24a4bcb4906efdd3999e17b69","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    that might have the same fields."},{"line_number":202,"context_line":"    \u0027\u0027\u0027"},{"line_number":203,"context_line":"    if token_data and isinstance(token_data, dict):"},{"line_number":204,"context_line":"        if \u0027token_version\u0027 in token_data:"},{"line_number":205,"context_line":"            if token_data[\u0027token_version\u0027] in VERSIONS:"},{"line_number":206,"context_line":"                return token_data[\u0027token_version\u0027]"},{"line_number":207,"context_line":"        if \u0027access\u0027 in token_data:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_6159ce5a","line":204,"in_reply_to":"ba7be1f8_67548554","updated":"2015-03-02 15:27:54.000000000","message":"That would match if there were a None in Versions, which, admittedly there is not.  I think this is clearer, if less concise.","commit_id":"20b552e215428da4f7f120935f9d08175337ebb6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"8b3b160c50891c60838eda7e6f066eb927e8ade4","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                return token_data[\u0027token_version\u0027]"},{"line_number":207,"context_line":"        if \u0027access\u0027 in token_data:"},{"line_number":208,"context_line":"            return V2"},{"line_number":209,"context_line":"        elif \u0027token\u0027 in token_data and \u0027methods\u0027 in token_data[\u0027token\u0027]:"},{"line_number":210,"context_line":"            return V3"},{"line_number":211,"context_line":"        else:"},{"line_number":212,"context_line":"            raise exceptions.UnsupportedTokenVersionException()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_a7775d01","line":209,"updated":"2015-03-02 13:52:03.000000000","message":"How about elif \u0027methods\u0027 in token_data.get(\u0027token\u0027, [])?","commit_id":"20b552e215428da4f7f120935f9d08175337ebb6"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"da990f68258dcbe24a4bcb4906efdd3999e17b69","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                return token_data[\u0027token_version\u0027]"},{"line_number":207,"context_line":"        if \u0027access\u0027 in token_data:"},{"line_number":208,"context_line":"            return V2"},{"line_number":209,"context_line":"        elif \u0027token\u0027 in token_data and \u0027methods\u0027 in token_data[\u0027token\u0027]:"},{"line_number":210,"context_line":"            return V3"},{"line_number":211,"context_line":"        else:"},{"line_number":212,"context_line":"            raise exceptions.UnsupportedTokenVersionException()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_245b642f","line":209,"in_reply_to":"ba7be1f8_a7775d01","updated":"2015-03-02 15:27:54.000000000","message":"I\u0027m mixed.  I have done checks like that elsewhere, but also this short circuits faster.","commit_id":"20b552e215428da4f7f120935f9d08175337ebb6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"8b3b160c50891c60838eda7e6f066eb927e8ade4","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        if catalog_data is not None:"},{"line_number":262,"context_line":"            builder.add_catalog()"},{"line_number":263,"context_line":"            #  Fixture sending an empty dict for catalog data"},{"line_number":264,"context_line":"            #  This a work around, but should be removed when the"},{"line_number":265,"context_line":"            # fixture is corrected"},{"line_number":266,"context_line":"            if len(catalog_data) \u003d\u003d 0:"},{"line_number":267,"context_line":"                catalog_data \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_47ece18f","line":264,"updated":"2015-03-02 13:52:03.000000000","message":"\"This is a workaround\", double space after # in both lines.","commit_id":"20b552e215428da4f7f120935f9d08175337ebb6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"8b3b160c50891c60838eda7e6f066eb927e8ade4","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        user_roles \u003d access.get(\u0027user\u0027, {}).get(\u0027roles\u0027, [])"},{"line_number":333,"context_line":"        metadata_roles \u003d access.get(\u0027metadata\u0027, {}).get(\u0027roles\u0027, [])"},{"line_number":334,"context_line":"        i \u003d 0"},{"line_number":335,"context_line":"        for user_role in user_roles:"},{"line_number":336,"context_line":"            role_name \u003d user_role[\u0027name\u0027]"},{"line_number":337,"context_line":"            try:"},{"line_number":338,"context_line":"                role_id \u003d metadata_roles[i]"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_c7a53148","line":335,"updated":"2015-03-02 13:52:03.000000000","message":"enumerate can be used here to get rid of manual incrementing the i variable.\n\nfor i, user_role in enumerate(user_roles):","commit_id":"20b552e215428da4f7f120935f9d08175337ebb6"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"8b3b160c50891c60838eda7e6f066eb927e8ade4","unresolved":false,"context_lines":[{"line_number":350,"context_line":"            services \u003d []"},{"line_number":351,"context_line":"        else:"},{"line_number":352,"context_line":"            builder.add_catalog()"},{"line_number":353,"context_line":"        for service in access.get(\u0027serviceCatalog\u0027, []):"},{"line_number":354,"context_line":"            service[\u0027id\u0027] \u003d service[\u0027name\u0027]"},{"line_number":355,"context_line":"            # TODO(ayoung):  V2 Catalog Services don\u0027t have Ids, but V3 do."},{"line_number":356,"context_line":"            builder.add_service(service)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_a2e74b3f","line":353,"updated":"2015-03-02 13:52:03.000000000","message":"Shouldn\u0027t you iterate over services instead of access.get(\u0027serviceCatalog\u0027, [])?","commit_id":"20b552e215428da4f7f120935f9d08175337ebb6"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"da990f68258dcbe24a4bcb4906efdd3999e17b69","unresolved":false,"context_lines":[{"line_number":350,"context_line":"            services \u003d []"},{"line_number":351,"context_line":"        else:"},{"line_number":352,"context_line":"            builder.add_catalog()"},{"line_number":353,"context_line":"        for service in access.get(\u0027serviceCatalog\u0027, []):"},{"line_number":354,"context_line":"            service[\u0027id\u0027] \u003d service[\u0027name\u0027]"},{"line_number":355,"context_line":"            # TODO(ayoung):  V2 Catalog Services don\u0027t have Ids, but V3 do."},{"line_number":356,"context_line":"            builder.add_service(service)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_641b9c1c","line":353,"in_reply_to":"ba7be1f8_a2e74b3f","updated":"2015-03-02 15:27:54.000000000","message":"Yep","commit_id":"20b552e215428da4f7f120935f9d08175337ebb6"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"3878ef328c868920b31ab0f78e5c2cb9b5984842","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# Access Info is version agnostic.  The builder code is version aware."},{"line_number":23,"context_line":"V2 \u003d \u0027v2.0\u0027"},{"line_number":24,"context_line":"V3 \u003d \u0027v3.0\u0027"},{"line_number":25,"context_line":"VERSIONS \u003d frozenset([V2, V3])"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_8ef2c904","line":23,"updated":"2015-03-10 21:40:50.000000000","message":"V2, V3 and VERSIONS are already defined in models/token_model.py.\n\nhttps://github.com/openstack/keystone/blob/master/keystone/models/token_model.py#L27.\n\nShould just import from token_model, and not have them defined at 2 different places.","commit_id":"afa8eea06ef616e715c9e2bcbfa1b9d3f9ddbb58"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"9fc7ec779b7695cb59438c852bc106c880ead937","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# Access Info is version agnostic.  The builder code is version aware."},{"line_number":23,"context_line":"V2 \u003d \u0027v2.0\u0027"},{"line_number":24,"context_line":"V3 \u003d \u0027v3.0\u0027"},{"line_number":25,"context_line":"VERSIONS \u003d frozenset([V2, V3])"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_b818971f","line":23,"in_reply_to":"9a80dd14_8ef2c904","updated":"2015-04-01 15:12:24.000000000","message":"That is on the server.  Those will be replaced by these when the server makes use of this code.","commit_id":"afa8eea06ef616e715c9e2bcbfa1b9d3f9ddbb58"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"915fc745a85e822540bd1ac211598871b8bc32a1","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.user_info \u003d None"},{"line_number":42,"context_line":"        self.user_domain \u003d access_info.Domain(None, None)"},{"line_number":43,"context_line":"        self.methods \u003d []"},{"line_number":44,"context_line":"        self.roles \u003d []"},{"line_number":45,"context_line":"        self.scope \u003d None"},{"line_number":46,"context_line":"        self.services \u003d None"},{"line_number":47,"context_line":"        self.services_list \u003d []"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_87078217","line":44,"updated":"2015-03-06 23:32:31.000000000","message":"It looks like \u0027roles_links\u0027 is somehow lost for v2 token.\n\nhttps://github.com/openstack/keystone/blob/master/keystone/token/providers/common.py#L67\n\nThe existing v2 token formatter gets metadata_ref from token_ref.  From metadata_ref, it gets \u0027roles_links\u0027.  It looks like we need a way to preserve metadata_ref or metadara_ref[\u0027role_links\u0027]?\n\nThoughts?","commit_id":"afa8eea06ef616e715c9e2bcbfa1b9d3f9ddbb58"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"9fc7ec779b7695cb59438c852bc106c880ead937","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.user_info \u003d None"},{"line_number":42,"context_line":"        self.user_domain \u003d access_info.Domain(None, None)"},{"line_number":43,"context_line":"        self.methods \u003d []"},{"line_number":44,"context_line":"        self.roles \u003d []"},{"line_number":45,"context_line":"        self.scope \u003d None"},{"line_number":46,"context_line":"        self.services \u003d None"},{"line_number":47,"context_line":"        self.services_list \u003d []"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_787a9f26","line":44,"in_reply_to":"9a80dd14_87078217","updated":"2015-04-01 15:12:24.000000000","message":"There should be enough information in the Role to generate the roles link.  If has the name and id, and the rest of the link is static.","commit_id":"afa8eea06ef616e715c9e2bcbfa1b9d3f9ddbb58"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1f9eeb5eb761580c8223880858e9cca9458522d2","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    Since early version of the tokens do not have a version field"},{"line_number":197,"context_line":"    select the version based on the available field names."},{"line_number":198,"context_line":"    This logic should be deprecated In future revisions, and"},{"line_number":199,"context_line":"    the logic should be reduced to checking the version field in"},{"line_number":200,"context_line":"    the token_data itself. This way we can support future versions"},{"line_number":201,"context_line":"    that might have the same fields."}],"source_content_type":"text/x-python","patch_set":16,"id":"ba7be1f8_d8a25dfb","line":198,"updated":"2015-03-03 08:07:06.000000000","message":"In should be lowercase.","commit_id":"afa8eea06ef616e715c9e2bcbfa1b9d3f9ddbb58"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"9fc7ec779b7695cb59438c852bc106c880ead937","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    Since early version of the tokens do not have a version field"},{"line_number":197,"context_line":"    select the version based on the available field names."},{"line_number":198,"context_line":"    This logic should be deprecated In future revisions, and"},{"line_number":199,"context_line":"    the logic should be reduced to checking the version field in"},{"line_number":200,"context_line":"    the token_data itself. This way we can support future versions"},{"line_number":201,"context_line":"    that might have the same fields."}],"source_content_type":"text/x-python","patch_set":16,"id":"baa041b7_742270bb","line":198,"in_reply_to":"ba7be1f8_d8a25dfb","updated":"2015-04-01 15:12:24.000000000","message":"Done","commit_id":"afa8eea06ef616e715c9e2bcbfa1b9d3f9ddbb58"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"1b7be296a271df967480c2f7dc50027649d853c1","unresolved":false,"context_lines":[{"line_number":203,"context_line":"    if token_data and isinstance(token_data, dict):"},{"line_number":204,"context_line":"        if \u0027token_version\u0027 in token_data:"},{"line_number":205,"context_line":"            if token_data[\u0027token_version\u0027] in VERSIONS:"},{"line_number":206,"context_line":"                return token_data[\u0027token_version\u0027]"},{"line_number":207,"context_line":"        if \u0027access\u0027 in token_data:"},{"line_number":208,"context_line":"            return V2"},{"line_number":209,"context_line":"        elif \u0027methods\u0027 in token_data.get(\u0027token\u0027, {}):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_35b5b3d0","line":206,"updated":"2015-03-10 18:34:58.000000000","message":"Throw an exception here if \u0027token_version\u0027 is in token_data, but not in VERSIONS.  \u0027token_version\u0027 either had a bad version string or VERSIONS needs to be updated.","commit_id":"afa8eea06ef616e715c9e2bcbfa1b9d3f9ddbb58"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"9fc7ec779b7695cb59438c852bc106c880ead937","unresolved":false,"context_lines":[{"line_number":203,"context_line":"    if token_data and isinstance(token_data, dict):"},{"line_number":204,"context_line":"        if \u0027token_version\u0027 in token_data:"},{"line_number":205,"context_line":"            if token_data[\u0027token_version\u0027] in VERSIONS:"},{"line_number":206,"context_line":"                return token_data[\u0027token_version\u0027]"},{"line_number":207,"context_line":"        if \u0027access\u0027 in token_data:"},{"line_number":208,"context_line":"            return V2"},{"line_number":209,"context_line":"        elif \u0027methods\u0027 in token_data.get(\u0027token\u0027, {}):"}],"source_content_type":"text/x-python","patch_set":16,"id":"baa041b7_9425f4c3","line":206,"in_reply_to":"9a80dd14_35b5b3d0","updated":"2015-04-01 15:12:24.000000000","message":"Done","commit_id":"afa8eea06ef616e715c9e2bcbfa1b9d3f9ddbb58"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1f9eeb5eb761580c8223880858e9cca9458522d2","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        if catalog_data is not None:"},{"line_number":262,"context_line":"            builder.add_catalog()"},{"line_number":263,"context_line":"            # Fixture sending an empty dict for catalog data"},{"line_number":264,"context_line":"            # This a work around, but should be removed when the"},{"line_number":265,"context_line":"            # fixture is corrected"},{"line_number":266,"context_line":"            if len(catalog_data) \u003d\u003d 0:"},{"line_number":267,"context_line":"                catalog_data \u003d []"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba7be1f8_186955be","line":264,"updated":"2015-03-03 08:07:06.000000000","message":"Should be \"This is a workaround\". Even better I guess is replacing \"but\" with \"and\" something like: \"This is a workaround and should be removed when the fixture is corrected\".","commit_id":"afa8eea06ef616e715c9e2bcbfa1b9d3f9ddbb58"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"9fc7ec779b7695cb59438c852bc106c880ead937","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        if catalog_data is not None:"},{"line_number":262,"context_line":"            builder.add_catalog()"},{"line_number":263,"context_line":"            # Fixture sending an empty dict for catalog data"},{"line_number":264,"context_line":"            # This a work around, but should be removed when the"},{"line_number":265,"context_line":"            # fixture is corrected"},{"line_number":266,"context_line":"            if len(catalog_data) \u003d\u003d 0:"},{"line_number":267,"context_line":"                catalog_data \u003d []"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_f8020f71","line":264,"in_reply_to":"ba7be1f8_186955be","updated":"2015-04-01 15:12:24.000000000","message":"Done","commit_id":"afa8eea06ef616e715c9e2bcbfa1b9d3f9ddbb58"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1f9eeb5eb761580c8223880858e9cca9458522d2","unresolved":false,"context_lines":[{"line_number":263,"context_line":"            # Fixture sending an empty dict for catalog data"},{"line_number":264,"context_line":"            # This a work around, but should be removed when the"},{"line_number":265,"context_line":"            # fixture is corrected"},{"line_number":266,"context_line":"            if len(catalog_data) \u003d\u003d 0:"},{"line_number":267,"context_line":"                catalog_data \u003d []"},{"line_number":268,"context_line":"            for service in catalog_data:"},{"line_number":269,"context_line":"                builder.add_service(service)"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba7be1f8_df614d3a","line":266,"updated":"2015-03-03 08:07:06.000000000","message":"In what case this statement is required? Does the catalog_data can be an empty string?","commit_id":"afa8eea06ef616e715c9e2bcbfa1b9d3f9ddbb58"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"9fc7ec779b7695cb59438c852bc106c880ead937","unresolved":false,"context_lines":[{"line_number":263,"context_line":"            # Fixture sending an empty dict for catalog data"},{"line_number":264,"context_line":"            # This a work around, but should be removed when the"},{"line_number":265,"context_line":"            # fixture is corrected"},{"line_number":266,"context_line":"            if len(catalog_data) \u003d\u003d 0:"},{"line_number":267,"context_line":"                catalog_data \u003d []"},{"line_number":268,"context_line":"            for service in catalog_data:"},{"line_number":269,"context_line":"                builder.add_service(service)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_78cfff57","line":266,"in_reply_to":"ba7be1f8_df614d3a","updated":"2015-04-01 15:12:24.000000000","message":"Its in the fixtrues for the client tests.","commit_id":"afa8eea06ef616e715c9e2bcbfa1b9d3f9ddbb58"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"e912f056511ad0b895d6b7422e9dc6de877ad66f","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    def construct(self, token):"},{"line_number":220,"context_line":"        version \u003d get_token_version(token)"},{"line_number":221,"context_line":"        if version \u003d\u003d V2:"},{"line_number":222,"context_line":"            return self._build_token_values_v2(token, \u0027default\u0027)"},{"line_number":223,"context_line":"        elif version \u003d\u003d V3:"},{"line_number":224,"context_line":"            return self.construct_access_info_v3(token[\u0027token\u0027])"},{"line_number":225,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa041b7_b8d55844","line":222,"updated":"2015-04-02 17:55:40.000000000","message":"The definition for _build_token_values_v2 method(...) is missing.","commit_id":"e7abc0ea01c57c3fea3d28aba11a9f7f266036e0"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"ffd890350c7aa02a14aecf2dd3f4d4dd4cf8325e","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    def construct(self, token):"},{"line_number":220,"context_line":"        version \u003d get_token_version(token)"},{"line_number":221,"context_line":"        if version \u003d\u003d V2:"},{"line_number":222,"context_line":"            return self._build_token_values_v2(token, \u0027default\u0027)"},{"line_number":223,"context_line":"        elif version \u003d\u003d V3:"},{"line_number":224,"context_line":"            return self.construct_access_info_v3(token[\u0027token\u0027])"},{"line_number":225,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":17,"id":"9aa53dc9_90c16b31","line":222,"in_reply_to":"baa041b7_b8d55844","updated":"2015-04-07 01:46:30.000000000","message":"Done","commit_id":"e7abc0ea01c57c3fea3d28aba11a9f7f266036e0"}],"keystoneclient/service_catalog.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f6b517bdcca27699622a0fd1903f2c2decaafec5","unresolved":false,"context_lines":[{"line_number":383,"context_line":"            return None"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"class ModelServiceCatalogV2(ServiceCatalog):"},{"line_number":387,"context_line":"    \"\"\"An object for encapsulating the service catalog using raw v2 auth token"},{"line_number":388,"context_line":"    from Keystone."},{"line_number":389,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_36f2fc06","line":386,"updated":"2015-02-15 05:18:16.000000000","message":"Same as below","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f6b517bdcca27699622a0fd1903f2c2decaafec5","unresolved":false,"context_lines":[{"line_number":444,"context_line":"            return None"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"class ModelServiceCatalogV3(ServiceCatalog):"},{"line_number":448,"context_line":"    \"\"\"An object for encapsulating the service catalog represented as"},{"line_number":449,"context_line":"       keystoneclient.models.access_info.ServiceCatalog"},{"line_number":450,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_16edf825","line":447,"updated":"2015-02-15 05:18:16.000000000","message":"Not sure why this isn\u0027t in the models module. It looks to be a model?","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"}],"keystoneclient/tests/client_fixtures.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0b3819c03fb93aff5b1ff407c54be210b13b70c1","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        # in for use in the tests."},{"line_number":62,"context_line":"        with open(os.path.join(CMSDIR, \u0027auth_token_scoped.json\u0027)) as f:"},{"line_number":63,"context_line":"            self.TOKEN_SCOPED_DATA \u003d cms.cms_to_token(f.read())"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        with open(os.path.join(CMSDIR, \u0027auth_token_scoped.pem\u0027)) as f:"},{"line_number":66,"context_line":"            self.SIGNED_TOKEN_SCOPED \u003d cms.cms_to_token(f.read())"},{"line_number":67,"context_line":"        self.SIGNED_TOKEN_SCOPED_HASH \u003d _hash_signed_token_safe("}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_a5b4def2","side":"PARENT","line":64,"updated":"2015-02-09 18:40:08.000000000","message":"unrelated whitespace change?","commit_id":"38f90e7039275b0b193e56cffdd84e73ef247fe4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dc66777d71457bc52112e927c7f2d2322391eb5e","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        # in for use in the tests."},{"line_number":62,"context_line":"        with open(os.path.join(CMSDIR, \u0027auth_token_scoped.json\u0027)) as f:"},{"line_number":63,"context_line":"            self.TOKEN_SCOPED_DATA \u003d cms.cms_to_token(f.read())"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        with open(os.path.join(CMSDIR, \u0027auth_token_scoped.pem\u0027)) as f:"},{"line_number":66,"context_line":"            self.SIGNED_TOKEN_SCOPED \u003d cms.cms_to_token(f.read())"},{"line_number":67,"context_line":"        self.SIGNED_TOKEN_SCOPED_HASH \u003d _hash_signed_token_safe("}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_0b0e9932","side":"PARENT","line":64,"in_reply_to":"da86d52c_a5b4def2","updated":"2015-02-09 19:11:05.000000000","message":"Done","commit_id":"38f90e7039275b0b193e56cffdd84e73ef247fe4"}],"keystoneclient/tests/test_access_info.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0b3819c03fb93aff5b1ff407c54be210b13b70c1","unresolved":false,"context_lines":[{"line_number":109,"context_line":"access_data_unscoped \u003d {"},{"line_number":110,"context_line":"    \"token\": {"},{"line_number":111,"context_line":"        \"expires_at\": \"2013-02-27T18:30:59.999999Z\","},{"line_number":112,"context_line":"        \"issued_at\": \"2013-02-27T16:30:59.999999Z\","},{"line_number":113,"context_line":"        \"methods\": ["},{"line_number":114,"context_line":"            \"password\""},{"line_number":115,"context_line":"        ],"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_658f4624","line":112,"updated":"2015-02-09 18:40:08.000000000","message":"should expires_at be set to some future value?","commit_id":"e3ee4a8ad18a365f6662f7055acd4f65650080b6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dc66777d71457bc52112e927c7f2d2322391eb5e","unresolved":false,"context_lines":[{"line_number":109,"context_line":"access_data_unscoped \u003d {"},{"line_number":110,"context_line":"    \"token\": {"},{"line_number":111,"context_line":"        \"expires_at\": \"2013-02-27T18:30:59.999999Z\","},{"line_number":112,"context_line":"        \"issued_at\": \"2013-02-27T16:30:59.999999Z\","},{"line_number":113,"context_line":"        \"methods\": ["},{"line_number":114,"context_line":"            \"password\""},{"line_number":115,"context_line":"        ],"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_0b35b9da","line":112,"in_reply_to":"da86d52c_658f4624","updated":"2015-02-09 19:11:05.000000000","message":"Done","commit_id":"e3ee4a8ad18a365f6662f7055acd4f65650080b6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0b3819c03fb93aff5b1ff407c54be210b13b70c1","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                \"name\": \"keystone\""},{"line_number":155,"context_line":"            }"},{"line_number":156,"context_line":"        ],"},{"line_number":157,"context_line":"        \"expires_at\": \"2013-02-27T18:30:59.999999Z\","},{"line_number":158,"context_line":"        \"issued_at\": \"2013-02-27T16:30:59.999999Z\","},{"line_number":159,"context_line":"        \"methods\": ["},{"line_number":160,"context_line":"            \"password\""}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_85927a49","line":157,"updated":"2015-02-09 18:40:08.000000000","message":"same comment here","commit_id":"e3ee4a8ad18a365f6662f7055acd4f65650080b6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dc66777d71457bc52112e927c7f2d2322391eb5e","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                \"name\": \"keystone\""},{"line_number":155,"context_line":"            }"},{"line_number":156,"context_line":"        ],"},{"line_number":157,"context_line":"        \"expires_at\": \"2013-02-27T18:30:59.999999Z\","},{"line_number":158,"context_line":"        \"issued_at\": \"2013-02-27T16:30:59.999999Z\","},{"line_number":159,"context_line":"        \"methods\": ["},{"line_number":160,"context_line":"            \"password\""}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_2b343ddd","line":157,"in_reply_to":"da86d52c_85927a49","updated":"2015-02-09 19:11:05.000000000","message":"Done","commit_id":"e3ee4a8ad18a365f6662f7055acd4f65650080b6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0b3819c03fb93aff5b1ff407c54be210b13b70c1","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                \"name\": \"keystone\""},{"line_number":218,"context_line":"            }"},{"line_number":219,"context_line":"        ],"},{"line_number":220,"context_line":"        \"expires_at\": \"2013-02-27T18:30:59.999999Z\","},{"line_number":221,"context_line":"        \"issued_at\": \"2013-02-27T16:30:59.999999Z\","},{"line_number":222,"context_line":"        \"methods\": ["},{"line_number":223,"context_line":"            \"password\""}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_e5a25699","line":220,"updated":"2015-02-09 18:40:08.000000000","message":"same comment here","commit_id":"e3ee4a8ad18a365f6662f7055acd4f65650080b6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dc66777d71457bc52112e927c7f2d2322391eb5e","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                \"name\": \"keystone\""},{"line_number":218,"context_line":"            }"},{"line_number":219,"context_line":"        ],"},{"line_number":220,"context_line":"        \"expires_at\": \"2013-02-27T18:30:59.999999Z\","},{"line_number":221,"context_line":"        \"issued_at\": \"2013-02-27T16:30:59.999999Z\","},{"line_number":222,"context_line":"        \"methods\": ["},{"line_number":223,"context_line":"            \"password\""}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_2b4b5d5a","line":220,"in_reply_to":"da86d52c_e5a25699","updated":"2015-02-09 19:11:05.000000000","message":"Done","commit_id":"e3ee4a8ad18a365f6662f7055acd4f65650080b6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(AccessTestCase, self).setUp()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        self.dom_id \u003d uuid.uuid4().hex"},{"line_number":30,"context_line":"        self.user_id \u003d uuid.uuid4().hex"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_create_user(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_964f28be","line":29,"updated":"2015-02-15 07:10:42.000000000","message":"call this domain_id, not need to shorten\n\non second thought remove this entirely, it\u0027s only used in test_create_user.","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        super(AccessTestCase, self).setUp()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        self.dom_id \u003d uuid.uuid4().hex"},{"line_number":30,"context_line":"        self.user_id \u003d uuid.uuid4().hex"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_create_user(self):"},{"line_number":33,"context_line":"        domain \u003d access_info.Domain(self.dom_id, uuid.uuid4().hex)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_d649a0b8","line":30,"updated":"2015-02-15 07:10:42.000000000","message":"same comment here\n\nthere is no reason (AFAICT) to call these for every test","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.dom_id \u003d uuid.uuid4().hex"},{"line_number":30,"context_line":"        self.user_id \u003d uuid.uuid4().hex"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_create_user(self):"},{"line_number":33,"context_line":"        domain \u003d access_info.Domain(self.dom_id, uuid.uuid4().hex)"},{"line_number":34,"context_line":"        user \u003d access_info.User(self.user_id, uuid.uuid4().hex, domain)"},{"line_number":35,"context_line":"        self.assertEqual(user[\u0027id\u0027], self.user_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_36e75cae","line":32,"updated":"2015-02-15 07:10:42.000000000","message":"need tests for the other fields too.","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.assertEqual(user[\u0027id\u0027], self.user_id)"},{"line_number":36,"context_line":"        self.assertEqual(user[\u0027domain\u0027][\u0027id\u0027], self.dom_id)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def test_class(self):"},{"line_number":39,"context_line":"        try:"},{"line_number":40,"context_line":"            access_info.Role(\u0027u2\u0027, 4)"},{"line_number":41,"context_line":"            self.fail()"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_16cb381f","line":38,"updated":"2015-02-15 07:10:42.000000000","message":"name this a bit better please","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_immutable(self):"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            domain \u003d access_info.Domain(\u0027id\u0027, \u0027name\u0027)"},{"line_number":48,"context_line":"            domain.lock()"},{"line_number":49,"context_line":"            domain.name \u003d \"should not work\""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_56d5b0b7","line":46,"updated":"2015-02-15 07:10:42.000000000","message":"a try/except block in a test seems suspicious","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            domain \u003d access_info.Domain(\u0027id\u0027, \u0027name\u0027)"},{"line_number":48,"context_line":"            domain.lock()"},{"line_number":49,"context_line":"            domain.name \u003d \"should not work\""},{"line_number":50,"context_line":"            self.fail()"},{"line_number":51,"context_line":"        except AttributeError:"},{"line_number":52,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_36d03cc9","line":49,"updated":"2015-02-15 07:10:42.000000000","message":"use single quotes","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        access \u003d director.construct(access_data_domain_scoped)"},{"line_number":69,"context_line":"        self.assertIsNotNone(access)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def assert_list_match(self, first, second):"},{"line_number":72,"context_line":"        index \u003d 0"},{"line_number":73,"context_line":"        a \u003d []"},{"line_number":74,"context_line":"        b \u003d []"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_d6e0c098","line":71,"updated":"2015-02-15 07:10:42.000000000","message":"create a base class that just has the asserts, and extend the tests from there?","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                self.assert_deep_match(v, second[k])"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"access_data_unscoped \u003d {"},{"line_number":116,"context_line":"    \"token\": {"},{"line_number":117,"context_line":"        \"expires_at\": \"2013-02-27T18:30:59.999999Z\","},{"line_number":118,"context_line":"        \"issued_at\": \"2013-02-27T16:30:59.999999Z\","}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_f6ece494","line":115,"updated":"2015-02-15 07:10:42.000000000","message":"put these in a separate file or fixture.","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"}],"keystoneclient/tests/test_fixtures.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0b3819c03fb93aff5b1ff407c54be210b13b70c1","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        self.assertEqual(consumer_id, oauth[\u0027consumer_id\u0027])"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def _assertEndpointInService(self, endpoint, service_endpoints):"},{"line_number":217,"context_line":"        # Workaround foir PEP8(E129) complaint on indentation."},{"line_number":218,"context_line":"        def _endpoint_matches(endpoint, service_endpoint):"},{"line_number":219,"context_line":"            return (endpoint[\u0027interface\u0027] \u003d\u003d service_endpoint[\u0027interface\u0027] and"},{"line_number":220,"context_line":"                    endpoint[\u0027url\u0027] \u003d\u003d service_endpoint[\u0027url\u0027] and"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_85b99acd","line":217,"updated":"2015-02-09 18:40:08.000000000","message":"for?","commit_id":"e3ee4a8ad18a365f6662f7055acd4f65650080b6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dc66777d71457bc52112e927c7f2d2322391eb5e","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        self.assertEqual(consumer_id, oauth[\u0027consumer_id\u0027])"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def _assertEndpointInService(self, endpoint, service_endpoints):"},{"line_number":217,"context_line":"        # Workaround foir PEP8(E129) complaint on indentation."},{"line_number":218,"context_line":"        def _endpoint_matches(endpoint, service_endpoint):"},{"line_number":219,"context_line":"            return (endpoint[\u0027interface\u0027] \u003d\u003d service_endpoint[\u0027interface\u0027] and"},{"line_number":220,"context_line":"                    endpoint[\u0027url\u0027] \u003d\u003d service_endpoint[\u0027url\u0027] and"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_ab6e6dc7","line":217,"in_reply_to":"da86d52c_85b99acd","updated":"2015-02-09 19:11:05.000000000","message":"Done","commit_id":"e3ee4a8ad18a365f6662f7055acd4f65650080b6"}],"keystoneclient/tests/unit/auth/test_identity_v3.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            \"region\": \"RegionOne\","},{"line_number":122,"context_line":"            \"interface\": \"internal\""},{"line_number":123,"context_line":"        }, {"},{"line_number":124,"context_line":"            \"id\": \"481de2659aa349e9a6cf6130c37f4293\","},{"line_number":125,"context_line":"            \"url\": \"http://swift/swiftapi/admin\","},{"line_number":126,"context_line":"            \"region\": \"RegionOne\","},{"line_number":127,"context_line":"            \"interface\": \"admin\""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_7600f435","line":124,"updated":"2015-02-15 07:10:42.000000000","message":"separate patch for this","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"}],"keystoneclient/tests/unit/client_fixtures.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                    },"},{"line_number":454,"context_line":"                    \u0027roles\u0027: ["},{"line_number":455,"context_line":"                        {\u0027name\u0027: \u0027role1\u0027,"},{"line_number":456,"context_line":"                         \u0027id\u0027: \u0027c2000fa28cd54ec4bf86c221a2195225\u0027},"},{"line_number":457,"context_line":"                        {\u0027name\u0027: \u0027role2\u0027,"},{"line_number":458,"context_line":"                         \u0027id\u0027: \u002796ff08a1a88e4b9190ca2a8086c05286\u0027}"},{"line_number":459,"context_line":"                    ],"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_96fd683e","line":456,"updated":"2015-02-15 07:10:42.000000000","message":"separate patch for this?","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"}],"keystoneclient/tests/unit/test_access_info.py":[{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"e912f056511ad0b895d6b7422e9dc6de877ad66f","unresolved":false,"context_lines":[{"line_number":294,"context_line":"            \"name\": \"Joe\""},{"line_number":295,"context_line":"        }"},{"line_number":296,"context_line":"    }"},{"line_number":297,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa041b7_98261467","line":297,"updated":"2015-04-02 17:55:40.000000000","message":"It needs at least 1 additional test case to cover the v2 code path using a set of v2 token access data.","commit_id":"e7abc0ea01c57c3fea3d28aba11a9f7f266036e0"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"ffd890350c7aa02a14aecf2dd3f4d4dd4cf8325e","unresolved":false,"context_lines":[{"line_number":294,"context_line":"            \"name\": \"Joe\""},{"line_number":295,"context_line":"        }"},{"line_number":296,"context_line":"    }"},{"line_number":297,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":17,"id":"9aa53dc9_50e2c3d6","line":297,"in_reply_to":"baa041b7_98261467","updated":"2015-04-07 01:46:30.000000000","message":"Done","commit_id":"e7abc0ea01c57c3fea3d28aba11a9f7f266036e0"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"e8be53db5c1962027c12b8538f5a6cef34ea0cff","unresolved":false,"context_lines":[{"line_number":294,"context_line":"            \"name\": \"Joe\""},{"line_number":295,"context_line":"        }"},{"line_number":296,"context_line":"    }"},{"line_number":297,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":19,"id":"7aaa499b_72ade030","line":297,"updated":"2015-04-10 18:21:40.000000000","message":"Come on.  At least one v2 test case, so I can leverage it in access info formatter ;)","commit_id":"2c308c2293804cbe89a5c71b40fcce554a670872"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5b8861cd25215cf516f02c701c2b3d9639aa5456","unresolved":false,"context_lines":[{"line_number":294,"context_line":"            \"name\": \"Joe\""},{"line_number":295,"context_line":"        }"},{"line_number":296,"context_line":"    }"},{"line_number":297,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":19,"id":"bab921fb_fe9ad9c4","line":297,"in_reply_to":"7aaa499b_72ade030","updated":"2015-04-22 18:04:12.000000000","message":"Done","commit_id":"2c308c2293804cbe89a5c71b40fcce554a670872"}],"keystoneclient/tests/unit/test_auth_token_middleware.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        self.assertEqual(len(self.requests.request_history), 4)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"class DiabloAuthTokenMiddlewareTest(BaseAuthTokenMiddlewareTest,"},{"line_number":292,"context_line":"                                    testresources.ResourcedTestCase):"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    resources \u003d [(\u0027examples\u0027, client_fixtures.EXAMPLES_RESOURCE)]"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_96680823","side":"PARENT","line":291,"updated":"2015-02-15 07:10:42.000000000","message":"whats the reason for this?","commit_id":"32c18a83e2ffe80f559ca871eeddb2ef8848ff17"}],"keystoneclient/tests/unit/test_fixtures.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        self.assertEqual(consumer_id, oauth[\u0027consumer_id\u0027])"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def _assertEndpointInService(self, endpoint, service_endpoints):"},{"line_number":217,"context_line":"        # Workaround foir PEP8(E129) complaint on indentation."},{"line_number":218,"context_line":"        def _endpoint_matches(endpoint, service_endpoint):"},{"line_number":219,"context_line":"            return (endpoint[\u0027interface\u0027] \u003d\u003d service_endpoint[\u0027interface\u0027] and"},{"line_number":220,"context_line":"                    endpoint[\u0027url\u0027] \u003d\u003d service_endpoint[\u0027url\u0027] and"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_167df8e7","line":217,"updated":"2015-02-15 07:10:42.000000000","message":"i think this whole extra check can be done in an earlier patch, it doesn\u0027t rely on any access info stuff?","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                    endpoint[\u0027region\u0027] \u003d\u003d service_endpoint[\u0027region\u0027])"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        for service_endpoint in service_endpoints:"},{"line_number":224,"context_line":"            if (_endpoint_matches(endpoint, service_endpoint)):"},{"line_number":225,"context_line":"                    return"},{"line_number":226,"context_line":"        self.fail(\"endpoint missing from service catalog\")"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_f6778406","line":224,"updated":"2015-02-15 07:10:42.000000000","message":"the outer ()\u0027s are pointless here","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        for service_endpoint in service_endpoints:"},{"line_number":224,"context_line":"            if (_endpoint_matches(endpoint, service_endpoint)):"},{"line_number":225,"context_line":"                    return"},{"line_number":226,"context_line":"        self.fail(\"endpoint missing from service catalog\")"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def test_catalog(self):"},{"line_number":229,"context_line":"        service_type \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_766b941f","line":226,"updated":"2015-02-15 07:10:42.000000000","message":"use single quotes","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"}],"keystoneclient/tests/unit/test_keyring.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                                   use_keyring\u003dTrue)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        # set an token into the keyring"},{"line_number":156,"context_line":"        token_body \u003d deepcopy(PROJECT_SCOPED_TOKEN)"},{"line_number":157,"context_line":"        future \u003d timeutils.utcnow() + datetime.timedelta(minutes\u003d30)"},{"line_number":158,"context_line":"        token_body[\u0027access\u0027][\u0027token\u0027][\u0027expires\u0027] \u003d timeutils.isotime(future)"},{"line_number":159,"context_line":"        auth_ref \u003d access.AccessInfo.factory(body\u003dtoken_body)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_b61eecb9","line":156,"updated":"2015-02-15 07:10:42.000000000","message":"why was this changed? can\u0027t it still be the old line?","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"}],"keystoneclient/tests/unit/v2_0/test_access.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    def test_diablo_token(self):"},{"line_number":110,"context_line":"        diablo_token \u003d self.examples.TOKEN_RESPONSES["},{"line_number":111,"context_line":"            self.examples.VALID_DIABLO_TOKEN]"},{"line_number":112,"context_line":"        auth_ref \u003d access.AccessInfo.factory(body\u003ddiablo_token)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        self.assertTrue(auth_ref)"},{"line_number":115,"context_line":"        self.assertEqual(auth_ref.username, \u0027user_name1\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_561050a8","side":"PARENT","line":112,"updated":"2015-02-15 07:10:42.000000000","message":"why was this removed?","commit_id":"32c18a83e2ffe80f559ca871eeddb2ef8848ff17"}],"keystoneclient/tests/unit/v2_0/test_service_catalog.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.AUTH_RESPONSE_BODY[\u0027access\u0027][\u0027region_name\u0027] \u003d \"North\""},{"line_number":50,"context_line":"        auth_ref \u003d access.AccessInfo.factory(None, self.AUTH_RESPONSE_BODY)"},{"line_number":51,"context_line":"        sc \u003d auth_ref.service_catalog"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        url \u003d sc.url_for(service_type\u003d\u0027image\u0027, endpoint_type\u003d\u0027publicURL\u0027)"},{"line_number":54,"context_line":"        self.assertEqual(url, \"https://image.north.host/v1/\")"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_1616d8a7","side":"PARENT","line":52,"updated":"2015-02-15 07:10:42.000000000","message":"undo this change","commit_id":"32c18a83e2ffe80f559ca871eeddb2ef8848ff17"}],"keystoneclient/tests/unit/v2_0/test_tokens.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"730d6195e2f82f469c08df16f2a868a8a99a89e6","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        token_fixture \u003d fixture.V2Token(token_id\u003dtoken_id)"},{"line_number":188,"context_line":"        self.stub_url(\u0027GET\u0027, [\u0027tokens\u0027, token_id], json\u003dtoken_fixture)"},{"line_number":189,"context_line":"        access_info \u003d self.client.tokens.validate_access_info(token_id)"},{"line_number":190,"context_line":"        self.assertEqual(access_info.version, \u0027v2.0\u0027)"},{"line_number":191,"context_line":"        self.assertEqual(token_id, access_info.auth_token)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def test_validate_token_access_info_with_access_info(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_b647ccbb","line":190,"updated":"2015-02-15 07:10:42.000000000","message":"instead of v2.0, models.builder.V2 ?","commit_id":"38094d51dfbc867dc44d0e74cf9a4dab6c09f9c5"}]}
