)]}'
{"keystoneclient/auth/base.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9327da19fd1621349f389dbc5c9284db77cda329","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        \"\"\"Return an endpoint for the client."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        The endpoint should reflect the type of service required, whether it"},{"line_number":36,"context_line":"        should use the public, admin or private url."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        :param Session session: The session object that the auth_plugin"},{"line_number":39,"context_line":"                                belongs to. (optional)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F994Q%3D","line":36,"updated":"2014-01-31 15:40:29.000000000","message":"We don\u0027t have a concept of \"private\" endpoints. \"internal\" endpoints simply imply public service API on a non-public IP / network interface.","commit_id":"c9f6f2d01bea2a483fc189192d3432008258bf71"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"7b8ebe0168df77117ac496b19667e1a38b39482f","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        \"\"\"Return an endpoint for the client."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        The endpoint should reflect the type of service required, whether it"},{"line_number":36,"context_line":"        should use the public, admin or private url."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        :param Session session: The session object that the auth_plugin"},{"line_number":39,"context_line":"                                belongs to. (optional)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F937o%3D","line":36,"in_reply_to":"AAAAUH%2F994Q%3D","updated":"2014-02-02 21:16:54.000000000","message":"ok, i took that from the names of te types in the service catalog that uses the names internal piblic and admin","commit_id":"c9f6f2d01bea2a483fc189192d3432008258bf71"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"080a87cdedacead5c1fd2248f07bf780c377a976","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        :param Session session: The session object that the auth_plugin"},{"line_number":50,"context_line":"                                belongs to."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        :returns string: The base URL that will should be used to talk to the"},{"line_number":53,"context_line":"                         required service or None if not available."},{"line_number":54,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAVX%2F%2F9I4%3D","line":52,"updated":"2014-02-27 06:59:22.000000000","message":"s/that will should be/that will be/","commit_id":"c09fffa24ce7b927a14492748295ecb72478e01a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1a4a9092711ca37a806796fc6563d68eef35308d","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        The following are parameters that are common and should be used:"},{"line_number":46,"context_line":"        - service_type: what sort of service is required."},{"line_number":47,"context_line":"        - endpoint_type: what visibility the endpoint should have."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        :param Session session: The session object that the auth_plugin"},{"line_number":50,"context_line":"                                belongs to."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2FnGg%3D","line":47,"updated":"2014-03-05 03:11:30.000000000","message":"is this referring to an endpoint\u0027s \"interface\"? (endpoint don\u0027t have \u0027types\u0027)\n\nif so, \"interface\" should default to public unless specified otherwise","commit_id":"0c6f5d0e431e1e91389f08b5b40ff92206a1ed98"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"480c7f453c519e4f8e579b5b3075d554a77020f9","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        The following are parameters that are common and should be used:"},{"line_number":46,"context_line":"        - service_type: what sort of service is required."},{"line_number":47,"context_line":"        - endpoint_type: what visibility the endpoint should have."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        :param Session session: The session object that the auth_plugin"},{"line_number":50,"context_line":"                                belongs to."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2FFuk%3D","line":47,"in_reply_to":"AAAAVn%2F%2FnGg%3D","updated":"2014-03-10 00:57:01.000000000","message":"Yes, this should default to public - however that is a plugin call.\n\nThis terminology is used fairly extensively throughout the client. Should we try and rename this to interface?","commit_id":"0c6f5d0e431e1e91389f08b5b40ff92206a1ed98"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"13fb60146afd4a5bd229416f2fe3e9d7b2de5aae","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def get_endpoint(self, session, **kwargs):"},{"line_number":39,"context_line":"        \"\"\"Return an endpoint for the client."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        There are no required arguments to get_endpoint as a plugin"},{"line_number":42,"context_line":"        implementation should use best effort with the information available to"},{"line_number":43,"context_line":"        determine the endpoint."},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FkJ4%3D","line":41,"updated":"2014-03-17 00:20:19.000000000","message":"this says there\u0027s no required argument but \u0027session\u0027 is a required argument.","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"47c63cea6e5491d2463d7524e297fae673758218","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def get_endpoint(self, session, **kwargs):"},{"line_number":39,"context_line":"        \"\"\"Return an endpoint for the client."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        There are no required arguments to get_endpoint as a plugin"},{"line_number":42,"context_line":"        implementation should use best effort with the information available to"},{"line_number":43,"context_line":"        determine the endpoint."},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2Fi4o%3D","line":41,"in_reply_to":"AAAAWH%2F%2FkJ4%3D","updated":"2014-03-17 07:16:39.000000000","message":"Done","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"13fb60146afd4a5bd229416f2fe3e9d7b2de5aae","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        implementation should use best effort with the information available to"},{"line_number":43,"context_line":"        determine the endpoint."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        The following are parameters that are common and should be used:"},{"line_number":46,"context_line":"        - service_type: what sort of service is required."},{"line_number":47,"context_line":"        - interface: what visibility the endpoint should have."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FkJw%3D","line":45,"updated":"2014-03-17 00:20:19.000000000","message":"add a blank line after this line for rst.","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"47c63cea6e5491d2463d7524e297fae673758218","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        implementation should use best effort with the information available to"},{"line_number":43,"context_line":"        determine the endpoint."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        The following are parameters that are common and should be used:"},{"line_number":46,"context_line":"        - service_type: what sort of service is required."},{"line_number":47,"context_line":"        - interface: what visibility the endpoint should have."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2Fi4k%3D","line":45,"in_reply_to":"AAAAWH%2F%2FkJw%3D","updated":"2014-03-17 07:16:39.000000000","message":"Done","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9451caf76f295b6cc2703cc10131dbe84f914115","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        How the token is obtained is up to the plugin. If it is still valid"},{"line_number":26,"context_line":"        it may be re-used, retrieved from cache or invoke an authentication"},{"line_number":27,"context_line":"        request against a server."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        There are no required kwargs. They are passed directly to the auth"},{"line_number":30,"context_line":"        plugin and they are implementation specific."}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FRSM%3D","line":27,"updated":"2014-03-19 00:07:25.000000000","message":"fwiw, i don\u0027t think all auth plugins should be expected to produce \"tokens\"... but that\u0027s way out of scope here","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9ae3b0cb05c7c3e0605b1051ea4c5e1d04b9e014","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        How the token is obtained is up to the plugin. If it is still valid"},{"line_number":26,"context_line":"        it may be re-used, retrieved from cache or invoke an authentication"},{"line_number":27,"context_line":"        request against a server."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        There are no required kwargs. They are passed directly to the auth"},{"line_number":30,"context_line":"        plugin and they are implementation specific."}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FRPo%3D","line":27,"in_reply_to":"AAAAWH%2F%2FRSM%3D","updated":"2014-03-19 00:19:26.000000000","message":"good point, and i was thinking about that previously but it involves a fair bit of change from the way session requests are generated for not much benefit at this time.","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9451caf76f295b6cc2703cc10131dbe84f914115","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        :return string: A token to use."},{"line_number":36,"context_line":"        \"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def get_endpoint(self, session, **kwargs):"},{"line_number":39,"context_line":"        \"\"\"Return an endpoint for the client."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        There are no required keyword arguments to get_endpoint as a plugin"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FRTo%3D","line":38,"updated":"2014-03-19 00:07:25.000000000","message":"abstractmethod?","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9ae3b0cb05c7c3e0605b1051ea4c5e1d04b9e014","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        :return string: A token to use."},{"line_number":36,"context_line":"        \"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def get_endpoint(self, session, **kwargs):"},{"line_number":39,"context_line":"        \"\"\"Return an endpoint for the client."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        There are no required keyword arguments to get_endpoint as a plugin"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FRPQ%3D","line":38,"in_reply_to":"AAAAWH%2F%2FRTo%3D","updated":"2014-03-19 00:19:26.000000000","message":"i\u0027m not allowed to add abstractmethods to existing classes :(\n\nAlso in the same way that not all plugins may want to produce tokens not all plugins may be able to resolve an endpoint.","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9451caf76f295b6cc2703cc10131dbe84f914115","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def get_endpoint(self, session, **kwargs):"},{"line_number":39,"context_line":"        \"\"\"Return an endpoint for the client."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        There are no required keyword arguments to get_endpoint as a plugin"},{"line_number":42,"context_line":"        implementation should use best effort with the information available to"},{"line_number":43,"context_line":"        determine the endpoint."},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FRTM%3D","line":41,"updated":"2014-03-19 00:07:25.000000000","message":"``get_endpoint``","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9ae3b0cb05c7c3e0605b1051ea4c5e1d04b9e014","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def get_endpoint(self, session, **kwargs):"},{"line_number":39,"context_line":"        \"\"\"Return an endpoint for the client."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        There are no required keyword arguments to get_endpoint as a plugin"},{"line_number":42,"context_line":"        implementation should use best effort with the information available to"},{"line_number":43,"context_line":"        determine the endpoint."},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FRMw%3D","line":41,"in_reply_to":"AAAAWH%2F%2FRTM%3D","updated":"2014-03-19 00:19:26.000000000","message":"Done","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9451caf76f295b6cc2703cc10131dbe84f914115","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        There are no required keyword arguments to get_endpoint as a plugin"},{"line_number":42,"context_line":"        implementation should use best effort with the information available to"},{"line_number":43,"context_line":"        determine the endpoint."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        The following are keyword parameters that are common and should be"},{"line_number":46,"context_line":"        used if available:"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FRS4%3D","line":43,"updated":"2014-03-19 00:07:25.000000000","message":"you really can\u0027t make *any* guarantees about what information should plugins expect to receive? not even service_type vs serviceType?","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9ae3b0cb05c7c3e0605b1051ea4c5e1d04b9e014","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        There are no required keyword arguments to get_endpoint as a plugin"},{"line_number":42,"context_line":"        implementation should use best effort with the information available to"},{"line_number":43,"context_line":"        determine the endpoint."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        The following are keyword parameters that are common and should be"},{"line_number":46,"context_line":"        used if available:"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FROM%3D","line":43,"in_reply_to":"AAAAWH%2F%2FRS4%3D","updated":"2014-03-19 00:19:26.000000000","message":"I list the common ones below which are the ones that the clients will use internally and so a plugin should know about. It is therefore in there interest to implement those same options.\n\nOther than that i can say that \u0027identity\u0027 plugins won\u0027t work without at least the service_type, but that doesn\u0027t transfer to everyone","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9451caf76f295b6cc2703cc10131dbe84f914115","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        The following are keyword parameters that are common and should be"},{"line_number":46,"context_line":"        used if available:"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        - service_type: what sort of service is required."},{"line_number":49,"context_line":"        - interface: what visibility the endpoint should have."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        :param Session session: The session object that the auth_plugin"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FRTY%3D","line":48,"updated":"2014-03-19 00:07:25.000000000","message":"``service_type``","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9ae3b0cb05c7c3e0605b1051ea4c5e1d04b9e014","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        The following are keyword parameters that are common and should be"},{"line_number":46,"context_line":"        used if available:"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        - service_type: what sort of service is required."},{"line_number":49,"context_line":"        - interface: what visibility the endpoint should have."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        :param Session session: The session object that the auth_plugin"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FRMo%3D","line":48,"in_reply_to":"AAAAWH%2F%2FRTY%3D","updated":"2014-03-19 00:19:26.000000000","message":"Done","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9451caf76f295b6cc2703cc10131dbe84f914115","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        used if available:"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        - service_type: what sort of service is required."},{"line_number":49,"context_line":"        - interface: what visibility the endpoint should have."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        :param Session session: The session object that the auth_plugin"},{"line_number":52,"context_line":"                                belongs to."}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FRTU%3D","line":49,"updated":"2014-03-19 00:07:25.000000000","message":"``interface``","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9ae3b0cb05c7c3e0605b1051ea4c5e1d04b9e014","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        used if available:"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        - service_type: what sort of service is required."},{"line_number":49,"context_line":"        - interface: what visibility the endpoint should have."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        :param Session session: The session object that the auth_plugin"},{"line_number":52,"context_line":"                                belongs to."}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FRMk%3D","line":49,"in_reply_to":"AAAAWH%2F%2FRTU%3D","updated":"2014-03-19 00:19:26.000000000","message":"Done","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"722eee8d55f54102b5258cdb8e28615d73dbfe5d","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        :param Session session: The session object that the auth_plugin"},{"line_number":50,"context_line":"                                belongs to."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        :returns string: The base URL that will be used to talk to the"},{"line_number":54,"context_line":"                         required service or None if not available."}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B3O4%3D","line":51,"updated":"2014-03-22 15:27:01.000000000","message":"remove one of these blank lines.","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5a405fdd0b113184fd98cfec568bdd983f4d7593","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        :param Session session: The session object that the auth_plugin"},{"line_number":50,"context_line":"                                belongs to."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        :returns string: The base URL that will be used to talk to the"},{"line_number":54,"context_line":"                         required service or None if not available."}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B07w%3D","line":51,"in_reply_to":"AAAAWH%2F%2B3O4%3D","updated":"2014-03-24 01:06:15.000000000","message":"Done","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"}],"keystoneclient/auth/identity/base.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9327da19fd1621349f389dbc5c9284db77cda329","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        return self.auth_ref.auth_token"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def get_endpoint(self, service_type, endpoint_type, **kwargs):"},{"line_number":53,"context_line":"        if not endpoint_type:"},{"line_number":54,"context_line":"            endpoint_type \u003d \u0027public\u0027"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if not self.auth_ref:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F9934%3D","line":53,"updated":"2014-01-31 15:40:29.000000000","message":"if endpoint_type is optional, then make it optional in the method signature","commit_id":"c9f6f2d01bea2a483fc189192d3432008258bf71"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"080a87cdedacead5c1fd2248f07bf780c377a976","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        :return string or None: A valid token or None if not available."},{"line_number":104,"context_line":"        \"\"\""},{"line_number":105,"context_line":"        if endpoint_type \u003d\u003d \u0027auth\u0027:"},{"line_number":106,"context_line":"            return self.auth_url"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        if not service_type:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAVX%2F%2F9Es%3D","line":105,"updated":"2014-02-27 06:59:22.000000000","message":"What is endpoint_type? That map to \u0027interface\u0027? In that case, I would expect \u0027public\u0027, \u0027internal\u0027, or \u0027admin\u0027. Are we overloading it with \u0027auth\u0027 as well? Some doc string explaining it usage would be awesome.","commit_id":"c09fffa24ce7b927a14492748295ecb72478e01a"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"2bd4b4252dbe18f45e727fdd61d182903f6119a4","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        :return string or None: A valid token or None if not available."},{"line_number":104,"context_line":"        \"\"\""},{"line_number":105,"context_line":"        if endpoint_type \u003d\u003d \u0027auth\u0027:"},{"line_number":106,"context_line":"            return self.auth_url"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        if not service_type:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAVX%2F%2F82s%3D","line":105,"in_reply_to":"AAAAVX%2F%2F9Es%3D","updated":"2014-02-27 07:06:51.000000000","message":"Yes endpoint_type is essentially interface. I took the name from the service catalog and it seems to be known elsewhere. \n\nSo it is generally used for public, internal or admin. I added Auth there as there are certain requests that explicitly want to talk to the URL that the plugin was authenticated with, eg http://localhost:5000/v2.0 this seemed a good way of exposing that information.","commit_id":"c09fffa24ce7b927a14492748295ecb72478e01a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1a4a9092711ca37a806796fc6563d68eef35308d","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        the session and kwargs."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        Currently endpoint_type maps to the \u0027interface\u0027 value of the service"},{"line_number":102,"context_line":"        catalog and thus known endpoint_types are: public, private and admin."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        :raises HTTPError: An error from an invalid HTTP response."},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2FnFg%3D","line":102,"updated":"2014-03-05 03:11:30.000000000","message":"\"private\" isn\u0027t a thing at all... \"internal\" refers to a service API on an internal network interface rather than an interface with a public IP, though","commit_id":"0c6f5d0e431e1e91389f08b5b40ff92206a1ed98"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"13fb60146afd4a5bd229416f2fe3e9d7b2de5aae","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        If a valid token is not present then a new one will be fetched using"},{"line_number":99,"context_line":"        the session and kwargs."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        Currently endpoint_type maps to the \u0027interface\u0027 value of the service"},{"line_number":102,"context_line":"        catalog and thus known endpoint_types are: public, internal and admin."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        :raises HTTPError: An error from an invalid HTTP response."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FkJY%3D","line":101,"updated":"2014-03-17 00:20:19.000000000","message":"what\u0027s endpoint_type?","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"47c63cea6e5491d2463d7524e297fae673758218","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        If a valid token is not present then a new one will be fetched using"},{"line_number":99,"context_line":"        the session and kwargs."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        Currently endpoint_type maps to the \u0027interface\u0027 value of the service"},{"line_number":102,"context_line":"        catalog and thus known endpoint_types are: public, internal and admin."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        :raises HTTPError: An error from an invalid HTTP response."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2Fi3I%3D","line":101,"in_reply_to":"AAAAWH%2F%2FkJY%3D","updated":"2014-03-17 07:16:39.000000000","message":"Done","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"13fb60146afd4a5bd229416f2fe3e9d7b2de5aae","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        :raises HTTPError: An error from an invalid HTTP response."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        :return string or None: A valid token or None if not available."},{"line_number":107,"context_line":"        \"\"\""},{"line_number":108,"context_line":"        if not service_type:"},{"line_number":109,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FkJM%3D","line":106,"updated":"2014-03-17 00:20:19.000000000","message":"should be \"endpoint URL\" rather than \"token\"","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"47c63cea6e5491d2463d7524e297fae673758218","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        :raises HTTPError: An error from an invalid HTTP response."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        :return string or None: A valid token or None if not available."},{"line_number":107,"context_line":"        \"\"\""},{"line_number":108,"context_line":"        if not service_type:"},{"line_number":109,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2Fi3E%3D","line":106,"in_reply_to":"AAAAWH%2F%2FkJM%3D","updated":"2014-03-17 07:16:39.000000000","message":"Done","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"13fb60146afd4a5bd229416f2fe3e9d7b2de5aae","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        :return string or None: A valid token or None if not available."},{"line_number":107,"context_line":"        \"\"\""},{"line_number":108,"context_line":"        if not service_type:"},{"line_number":109,"context_line":"            return None"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        if not interface:"},{"line_number":112,"context_line":"            interface \u003d \u0027public\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FkJI%3D","line":109,"updated":"2014-03-17 00:20:19.000000000","message":"should document in the docstring that the service type is required otherwise no endpoint will be returned.","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"47c63cea6e5491d2463d7524e297fae673758218","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        :return string or None: A valid token or None if not available."},{"line_number":107,"context_line":"        \"\"\""},{"line_number":108,"context_line":"        if not service_type:"},{"line_number":109,"context_line":"            return None"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        if not interface:"},{"line_number":112,"context_line":"            interface \u003d \u0027public\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2Fi3A%3D","line":109,"in_reply_to":"AAAAWH%2F%2FkJI%3D","updated":"2014-03-17 07:16:39.000000000","message":"Done","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"13fb60146afd4a5bd229416f2fe3e9d7b2de5aae","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            return None"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        if not interface:"},{"line_number":112,"context_line":"            interface \u003d \u0027public\u0027"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        service_catalog \u003d self.get_access(session).service_catalog"},{"line_number":115,"context_line":"        return service_catalog.url_for(service_type\u003dservice_type,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FkJE%3D","line":112,"updated":"2014-03-17 00:20:19.000000000","message":"should document in the docstring that the public interface will be used if none is provided.","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"47c63cea6e5491d2463d7524e297fae673758218","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            return None"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        if not interface:"},{"line_number":112,"context_line":"            interface \u003d \u0027public\u0027"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        service_catalog \u003d self.get_access(session).service_catalog"},{"line_number":115,"context_line":"        return service_catalog.url_for(service_type\u003dservice_type,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2Fi28%3D","line":112,"in_reply_to":"AAAAWH%2F%2FkJE%3D","updated":"2014-03-17 07:16:39.000000000","message":"Done","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"722eee8d55f54102b5258cdb8e28615d73dbfe5d","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        If a valid token is not present then a new one will be fetched using"},{"line_number":99,"context_line":"        the session and kwargs."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        :param string service_type: The type of service to lookup then endpoint"},{"line_number":102,"context_line":"                                    for. The plugin will return None (failure)"},{"line_number":103,"context_line":"                                    if service_type is not provided."},{"line_number":104,"context_line":"        :param string interface: The expose of the endpoint. Should be public,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B3P0%3D","line":101,"updated":"2014-03-22 15:27:01.000000000","message":"change \"then endpoint\" to \"the endpoint\" (then -\u003e the)","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5a405fdd0b113184fd98cfec568bdd983f4d7593","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        If a valid token is not present then a new one will be fetched using"},{"line_number":99,"context_line":"        the session and kwargs."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        :param string service_type: The type of service to lookup then endpoint"},{"line_number":102,"context_line":"                                    for. The plugin will return None (failure)"},{"line_number":103,"context_line":"                                    if service_type is not provided."},{"line_number":104,"context_line":"        :param string interface: The expose of the endpoint. Should be public,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B07o%3D","line":101,"in_reply_to":"AAAAWH%2F%2B3P0%3D","updated":"2014-03-24 01:06:15.000000000","message":"Done","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"722eee8d55f54102b5258cdb8e28615d73dbfe5d","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        the session and kwargs."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        :param string service_type: The type of service to lookup then endpoint"},{"line_number":102,"context_line":"                                    for. The plugin will return None (failure)"},{"line_number":103,"context_line":"                                    if service_type is not provided."},{"line_number":104,"context_line":"        :param string interface: The expose of the endpoint. Should be public,"},{"line_number":105,"context_line":"                                 internal or admin. Defaults to public."}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B3Ps%3D","line":102,"updated":"2014-03-22 15:27:01.000000000","message":"change \"The plugin\" to \"This plugin\", otherwise I don\u0027t know which plugin you\u0027re referring to.","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5a405fdd0b113184fd98cfec568bdd983f4d7593","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        the session and kwargs."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        :param string service_type: The type of service to lookup then endpoint"},{"line_number":102,"context_line":"                                    for. The plugin will return None (failure)"},{"line_number":103,"context_line":"                                    if service_type is not provided."},{"line_number":104,"context_line":"        :param string interface: The expose of the endpoint. Should be public,"},{"line_number":105,"context_line":"                                 internal or admin. Defaults to public."}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B07g%3D","line":102,"in_reply_to":"AAAAWH%2F%2B3Ps%3D","updated":"2014-03-24 01:06:15.000000000","message":"Done","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"722eee8d55f54102b5258cdb8e28615d73dbfe5d","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        :param string service_type: The type of service to lookup then endpoint"},{"line_number":102,"context_line":"                                    for. The plugin will return None (failure)"},{"line_number":103,"context_line":"                                    if service_type is not provided."},{"line_number":104,"context_line":"        :param string interface: The expose of the endpoint. Should be public,"},{"line_number":105,"context_line":"                                 internal or admin. Defaults to public."},{"line_number":106,"context_line":"        :param string region_name: The region the endpoint should exist in."},{"line_number":107,"context_line":"                                   (optional)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B3Po%3D","line":104,"updated":"2014-03-22 15:27:01.000000000","message":"change \"expose\" to \"exposure\", otherwise I don\u0027t know what it means.\n\nSuggest put public, internal, and admin in `` so readers know it\u0027s a literal.","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5a405fdd0b113184fd98cfec568bdd983f4d7593","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        :param string service_type: The type of service to lookup then endpoint"},{"line_number":102,"context_line":"                                    for. The plugin will return None (failure)"},{"line_number":103,"context_line":"                                    if service_type is not provided."},{"line_number":104,"context_line":"        :param string interface: The expose of the endpoint. Should be public,"},{"line_number":105,"context_line":"                                 internal or admin. Defaults to public."},{"line_number":106,"context_line":"        :param string region_name: The region the endpoint should exist in."},{"line_number":107,"context_line":"                                   (optional)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B07Q%3D","line":104,"in_reply_to":"AAAAWH%2F%2B3Po%3D","updated":"2014-03-24 01:06:15.000000000","message":"Done","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"722eee8d55f54102b5258cdb8e28615d73dbfe5d","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        :return string or None: A valid endpoint URL or None if not available."},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        if not service_type:"},{"line_number":114,"context_line":"            return None"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        if not interface:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B3Oo%3D","line":113,"updated":"2014-03-22 15:27:01.000000000","message":"Should log something since the caller won\u0027t have any idea what\u0027s going on.","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5a405fdd0b113184fd98cfec568bdd983f4d7593","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        :return string or None: A valid endpoint URL or None if not available."},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        if not service_type:"},{"line_number":114,"context_line":"            return None"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        if not interface:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B07A%3D","line":113,"in_reply_to":"AAAAWH%2F%2B3Oo%3D","updated":"2014-03-24 01:06:15.000000000","message":"Done","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7ae42ac171584a2f9f0980502291d22716c6be91","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        If a valid token is not present then a new one will be fetched using"},{"line_number":99,"context_line":"        the session and kwargs."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        :param string service_type: The type of service to lookup the endpoint"},{"line_number":102,"context_line":"                                    for. This plugin will return None (failure)"},{"line_number":103,"context_line":"                                    if service_type is not provided."}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAWH%2F%2Bmw8%3D","line":100,"updated":"2014-03-25 16:01:31.000000000","message":"missing \u0027session\u0027 var in doc strings?","commit_id":"505b81921ea41f8674e6013645a6fb8a03915b27"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1bd7162e627a0785279ceb09879c445d3f0ffc15","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        if not service_type:"},{"line_number":115,"context_line":"            LOG.warn(\u0027Plugin cannot return an endpoint without knowing the \u0027"},{"line_number":116,"context_line":"                     \u0027service type that is required. Add service_type to \u0027"},{"line_number":117,"context_line":"                     \u0027endpoint filtering data.\u0027)"},{"line_number":118,"context_line":"            return None"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        if not interface:"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAWH%2F%2Bsgg%3D","line":117,"updated":"2014-03-25 01:18:18.000000000","message":"this is where it might be more useful to raise an exception because then the api could provide this info to the caller.","commit_id":"505b81921ea41f8674e6013645a6fb8a03915b27"}],"keystoneclient/baseclient.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"7f9f49bbb5747bbc6abe90382c338ea7dfeed5cb","unresolved":false,"context_lines":[{"line_number":16,"context_line":"class Client(object):"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    service_type \u003d None"},{"line_number":19,"context_line":"    endpoint_type \u003d None"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def __init__(self, session):"},{"line_number":22,"context_line":"        self.session \u003d session"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FIEo%3D","line":19,"updated":"2014-01-17 06:57:13.000000000","message":"why need these here? should just get them from kwargs.","commit_id":"c9f6f2d01bea2a483fc189192d3432008258bf71"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"a1ffbf0c03e73cb6f12119ec528f34ee435b0fcd","unresolved":false,"context_lines":[{"line_number":16,"context_line":"class Client(object):"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    service_type \u003d None"},{"line_number":19,"context_line":"    endpoint_type \u003d None"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def __init__(self, session):"},{"line_number":22,"context_line":"        self.session \u003d session"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FH5Y%3D","line":19,"in_reply_to":"AAAAUH%2F%2FIEo%3D","updated":"2014-01-17 07:47:08.000000000","message":"because below we set the defaults for this. For example in client we will have a class property that says service_type\u003d\u0027identity\u0027 and then we don\u0027t have to worry about it again it will automatically be added to every request.","commit_id":"c9f6f2d01bea2a483fc189192d3432008258bf71"}],"keystoneclient/httpclient.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9327da19fd1621349f389dbc5c9284db77cda329","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"class HTTPClient(baseclient.Client, base.BaseIdentityPlugin):"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    endpoint_type \u003d \u0027admin\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def __init__(self, username\u003dNone, tenant_id\u003dNone, tenant_name\u003dNone,"},{"line_number":62,"context_line":"                 password\u003dNone, auth_url\u003dNone, region_name\u003dNone, timeout\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F992s%3D","line":59,"updated":"2014-01-31 15:40:29.000000000","message":"i\u0027m not sure that this is a great default :-( non-public api\u0027s should be the exception","commit_id":"c9f6f2d01bea2a483fc189192d3432008258bf71"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"7b8ebe0168df77117ac496b19667e1a38b39482f","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"class HTTPClient(baseclient.Client, base.BaseIdentityPlugin):"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    endpoint_type \u003d \u0027admin\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def __init__(self, username\u003dNone, tenant_id\u003dNone, tenant_name\u003dNone,"},{"line_number":62,"context_line":"                 password\u003dNone, auth_url\u003dNone, region_name\u003dNone, timeout\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F937c%3D","line":59,"in_reply_to":"AAAAUH%2F992s%3D","updated":"2014-02-02 21:16:54.000000000","message":"It\u0027s a terrible default - but this is maintaining compatibility with the current client not trying to do anything new.","commit_id":"c9f6f2d01bea2a483fc189192d3432008258bf71"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9327da19fd1621349f389dbc5c9284db77cda329","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def get_endpoint(self, *args, **kwargs):"},{"line_number":280,"context_line":"        if self._endpoint:"},{"line_number":281,"context_line":"            return self._endpoint"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        return super(HTTPClient, self).get_endpoint(*args, **kwargs)"},{"line_number":284,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F992U%3D","line":281,"updated":"2014-01-31 15:40:29.000000000","message":"even if this _endpoint doesn\u0027t match *args, **kwargs ?","commit_id":"c9f6f2d01bea2a483fc189192d3432008258bf71"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"7b8ebe0168df77117ac496b19667e1a38b39482f","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def get_endpoint(self, *args, **kwargs):"},{"line_number":280,"context_line":"        if self._endpoint:"},{"line_number":281,"context_line":"            return self._endpoint"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        return super(HTTPClient, self).get_endpoint(*args, **kwargs)"},{"line_number":284,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F937Y%3D","line":281,"in_reply_to":"AAAAUH%2F992U%3D","updated":"2014-02-02 21:16:54.000000000","message":"Again this is a compatibility thing. If you force set the endpoint in client it will always be returned regardless of params.","commit_id":"c9f6f2d01bea2a483fc189192d3432008258bf71"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"a573c8fc1aba43c5cda9d9a1404622844fe20f2d","unresolved":false,"context_lines":[{"line_number":565,"context_line":"        concatenating self.management_url and url and passing in method and"},{"line_number":566,"context_line":"        any associated kwargs."},{"line_number":567,"context_line":"        \"\"\""},{"line_number":568,"context_line":"        endpoint_type \u003d \u0027admin\u0027 if management else \u0027public\u0027"},{"line_number":569,"context_line":"        endpoint_filter \u003d kwargs.setdefault(\u0027endpoint_filter\u0027, {})"},{"line_number":570,"context_line":"        endpoint_filter.setdefault(\u0027service_type\u0027, \u0027identity\u0027)"},{"line_number":571,"context_line":"        endpoint_filter.setdefault(\u0027endpoint_type\u0027, endpoint_type)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2F0Ps%3D","line":568,"updated":"2014-03-03 23:54:52.000000000","message":"review note: this is a slight departure from current in that we will use \u0027public\u0027 from the service catalog rather than the auth_url when using a session object which is correct. In the traditional case it will still use the auth_url","commit_id":"041f252db267b5d65bfa20e5e66d72afb206c818"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1a4a9092711ca37a806796fc6563d68eef35308d","unresolved":false,"context_lines":[{"line_number":460,"context_line":"        try:"},{"line_number":461,"context_line":"            self._management_url \u003d self.auth_ref.service_catalog.url_for("},{"line_number":462,"context_line":"                service_type\u003d\u0027identity\u0027,"},{"line_number":463,"context_line":"                endpoint_type\u003d\u0027admin\u0027,"},{"line_number":464,"context_line":"                region_name\u003dregion_name)"},{"line_number":465,"context_line":"        except exceptions.EndpointNotFound:"},{"line_number":466,"context_line":"            _logger.warning(\"Failed to retrieve management_url from token\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2FnFE%3D","line":463,"updated":"2014-03-05 03:11:30.000000000","message":"this needs to be fixed...","commit_id":"0c6f5d0e431e1e91389f08b5b40ff92206a1ed98"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"480c7f453c519e4f8e579b5b3075d554a77020f9","unresolved":false,"context_lines":[{"line_number":460,"context_line":"        try:"},{"line_number":461,"context_line":"            self._management_url \u003d self.auth_ref.service_catalog.url_for("},{"line_number":462,"context_line":"                service_type\u003d\u0027identity\u0027,"},{"line_number":463,"context_line":"                endpoint_type\u003d\u0027admin\u0027,"},{"line_number":464,"context_line":"                region_name\u003dregion_name)"},{"line_number":465,"context_line":"        except exceptions.EndpointNotFound:"},{"line_number":466,"context_line":"            _logger.warning(\"Failed to retrieve management_url from token\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2FFvc%3D","line":463,"in_reply_to":"AAAAVn%2F%2FnFE%3D","updated":"2014-03-10 00:57:01.000000000","message":"can only really be done for V3, and this is working towards fixing it.","commit_id":"0c6f5d0e431e1e91389f08b5b40ff92206a1ed98"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"6fb80777d6ef0aad4a23fd8dbaecb83ff998c0cb","unresolved":false,"context_lines":[{"line_number":571,"context_line":"        endpoint_filter.setdefault(\u0027endpoint_type\u0027, endpoint_type)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        if self.region_name:"},{"line_number":574,"context_line":"            endpoint_filter.setdefault(\u0027region_name\u0027, self.region_name)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"        kwargs.setdefault(\u0027authenticated\u0027, None)"},{"line_number":577,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2Fo2s%3D","line":574,"updated":"2014-03-04 22:28:53.000000000","message":"In some ways the design of the keystone client is awesome and then it seems odd to me that this kind of logic is stuffed into a HttpClient class.  Probably nothing to be done about it now, but maybe in the future, the HttpClient class could just handled HTTP layer stuff.","commit_id":"0c6f5d0e431e1e91389f08b5b40ff92206a1ed98"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"6e72060098951b3e9ea715dc66bd76b280fb7d37","unresolved":false,"context_lines":[{"line_number":571,"context_line":"        endpoint_filter.setdefault(\u0027endpoint_type\u0027, endpoint_type)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        if self.region_name:"},{"line_number":574,"context_line":"            endpoint_filter.setdefault(\u0027region_name\u0027, self.region_name)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"        kwargs.setdefault(\u0027authenticated\u0027, None)"},{"line_number":577,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2FQ78%3D","line":574,"in_reply_to":"AAAAVn%2F%2FX9k%3D","updated":"2014-03-07 06:58:32.000000000","message":"So that\u0027s pretty much what I am trying to do with the session object. Clients hasa session and you communicate through it. What i am trying to do though is further abstract the concepts of http. From that point of view the fact that keystoneclient\u0027s base client is a HTTPClient is just a bad name rather than something that acutally does communication. \n\nFrom the point of view of the client object we don\u0027t care what the transport is at all. I just say that this client wants to request things form the \u0027identity\u0027 service_type and the session handles everything else.\n\nWhether session and transport should be further seperated i\u0027m not sure. It\u0027s definetly possible but at least so far there has been no talk of adding any other transport layer than the requests lib. I was thinking that an async transport layer (like twisted) would be useful but i can\u0027t see (i haven\u0027t tried that hard) a way of usefully abstracting such different frameworks.\n\nIf you see me on IRC ping me and we can discuss, jamielennox.","commit_id":"0c6f5d0e431e1e91389f08b5b40ff92206a1ed98"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"e90e18113c9e59f1f41f6425730722c3fd59fce7","unresolved":false,"context_lines":[{"line_number":571,"context_line":"        endpoint_filter.setdefault(\u0027endpoint_type\u0027, endpoint_type)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        if self.region_name:"},{"line_number":574,"context_line":"            endpoint_filter.setdefault(\u0027region_name\u0027, self.region_name)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"        kwargs.setdefault(\u0027authenticated\u0027, None)"},{"line_number":577,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2FX9k%3D","line":574,"in_reply_to":"AAAAVn%2F%2Fc%2BA%3D","updated":"2014-03-06 14:52:15.000000000","message":"I think part of the problem is probably that the clients isa HTTPClient rather than hasa.  I think that causes stuff to get put in here as it is kind of a base class.\n\nI come from a telecom background, so everything to me is a protocol stack.  HTTP is the transport and identity is the application.  If the layers hasa, they do not expose lower layers and it is clearer where to put things.\n\nLooks kind of like there may be room for and endpoint class and maybe a keyring class to pull stuff out of here in baby steps.","commit_id":"0c6f5d0e431e1e91389f08b5b40ff92206a1ed98"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"ffef221d02cfced62b7d4cf2dfe8cd6abb144add","unresolved":false,"context_lines":[{"line_number":571,"context_line":"        endpoint_filter.setdefault(\u0027endpoint_type\u0027, endpoint_type)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        if self.region_name:"},{"line_number":574,"context_line":"            endpoint_filter.setdefault(\u0027region_name\u0027, self.region_name)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"        kwargs.setdefault(\u0027authenticated\u0027, None)"},{"line_number":577,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2Fc%2BA%3D","line":574,"in_reply_to":"AAAAVn%2F%2Fo2s%3D","updated":"2014-03-06 00:44:52.000000000","message":"Well HTTPClient is different in keystone as opposed to the other clients.\n\nI\u0027m interested though in where else this sort of thing should/could go? \n\nThe way i look at it is that things like setting that we need to talk to the \u0027identity\u0027 service needs to happen for every request that passes through the client. So it makes sense to send that via the client rather than have it in every call.\n\nOn the other hand there\u0027s a lot of left over crap that i\u0027m trying to build on top of here so i am somewhat constrained.","commit_id":"0c6f5d0e431e1e91389f08b5b40ff92206a1ed98"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"13fb60146afd4a5bd229416f2fe3e9d7b2de5aae","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            return self.auth_token_from_user"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def get_endpoint(self, session, interface\u003dNone, **kwargs):"},{"line_number":254,"context_line":"        if interface \u003d\u003d \u0027public\u0027:"},{"line_number":255,"context_line":"            return self.auth_url"},{"line_number":256,"context_line":"        else:"},{"line_number":257,"context_line":"            return self.management_url"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FkHM%3D","line":254,"updated":"2014-03-17 00:20:19.000000000","message":"in keystoneclient/auth/identity/base.py the default interface was public, whereas this one is the management interface... why the difference?","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"47c63cea6e5491d2463d7524e297fae673758218","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            return self.auth_token_from_user"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def get_endpoint(self, session, interface\u003dNone, **kwargs):"},{"line_number":254,"context_line":"        if interface \u003d\u003d \u0027public\u0027:"},{"line_number":255,"context_line":"            return self.auth_url"},{"line_number":256,"context_line":"        else:"},{"line_number":257,"context_line":"            return self.management_url"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2Fjjo%3D","line":254,"in_reply_to":"AAAAWH%2F%2FkHM%3D","updated":"2014-03-17 07:16:39.000000000","message":"because the current default of the client is the management url. When this merges I want to make the V3 Api use public by default.","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"13fb60146afd4a5bd229416f2fe3e9d7b2de5aae","unresolved":false,"context_lines":[{"line_number":578,"context_line":"            return self.request(url, method, **kwargs)"},{"line_number":579,"context_line":"        except (exceptions.MissingAuthPlugin, exceptions.EndpointNotFound):"},{"line_number":580,"context_line":"            raise exceptions.AuthorizationFailure("},{"line_number":581,"context_line":"                \u0027Current authorization does not have a known management url\u0027)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def get(self, url, **kwargs):"},{"line_number":584,"context_line":"        return self._cs_request(url, \u0027GET\u0027, **kwargs)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FkGk%3D","line":581,"updated":"2014-03-17 00:20:19.000000000","message":"why is this being raised for MissingAuthPlugin?","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"47c63cea6e5491d2463d7524e297fae673758218","unresolved":false,"context_lines":[{"line_number":578,"context_line":"            return self.request(url, method, **kwargs)"},{"line_number":579,"context_line":"        except (exceptions.MissingAuthPlugin, exceptions.EndpointNotFound):"},{"line_number":580,"context_line":"            raise exceptions.AuthorizationFailure("},{"line_number":581,"context_line":"                \u0027Current authorization does not have a known management url\u0027)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def get(self, url, **kwargs):"},{"line_number":584,"context_line":"        return self._cs_request(url, \u0027GET\u0027, **kwargs)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2Fjjc%3D","line":581,"in_reply_to":"AAAAWH%2F%2FkGk%3D","updated":"2014-03-17 07:16:39.000000000","message":"compatability. The original implementation of raising AuthorizationFailure if is_management and self.management_url essentially means that the plugin is unauthenticated.\n\nIn the session case that will come through as a MissingAuthPlugin if there is no plugin or EndpointNotFound if there is no management_url. AutorhoizationFailures will be raised as before.","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"af7039ea5dda43c7764dbd26629d448c989af633","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    def get_endpoint(self, session, interface\u003dNone, **kwargs):"},{"line_number":254,"context_line":"        if interface \u003d\u003d \u0027public\u0027:"},{"line_number":255,"context_line":"            return self.auth_url"},{"line_number":256,"context_line":"        else:"},{"line_number":257,"context_line":"            return self.management_url"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    @auth_token.setter"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FShs%3D","line":256,"updated":"2014-03-18 23:57:43.000000000","message":"elif interface \u003d\u003d \u0027admin\u0027:\n    return self.management_url\nelse:\n    raise EndpointNotFound","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9ae3b0cb05c7c3e0605b1051ea4c5e1d04b9e014","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    def get_endpoint(self, session, interface\u003dNone, **kwargs):"},{"line_number":254,"context_line":"        if interface \u003d\u003d \u0027public\u0027:"},{"line_number":255,"context_line":"            return self.auth_url"},{"line_number":256,"context_line":"        else:"},{"line_number":257,"context_line":"            return self.management_url"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    @auth_token.setter"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FRQE%3D","line":256,"in_reply_to":"AAAAWH%2F%2FRRg%3D","updated":"2014-03-19 00:19:26.000000000","message":"right, but this method will only get called if you use the client directly - ie the old way. In which case \u0027internal\u0027 never worked.","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9451caf76f295b6cc2703cc10131dbe84f914115","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    def get_endpoint(self, session, interface\u003dNone, **kwargs):"},{"line_number":254,"context_line":"        if interface \u003d\u003d \u0027public\u0027:"},{"line_number":255,"context_line":"            return self.auth_url"},{"line_number":256,"context_line":"        else:"},{"line_number":257,"context_line":"            return self.management_url"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    @auth_token.setter"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FRRg%3D","line":256,"in_reply_to":"AAAAWH%2F%2FRS8%3D","updated":"2014-03-19 00:07:25.000000000","message":"if i ask for the \u0027internal\u0027 interface and you give me an admin-only interface back, then you\u0027ve broken my app","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"f4ecffc7876a7de44c0f229ba6c4032325b418a5","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    def get_endpoint(self, session, interface\u003dNone, **kwargs):"},{"line_number":254,"context_line":"        if interface \u003d\u003d \u0027public\u0027:"},{"line_number":255,"context_line":"            return self.auth_url"},{"line_number":256,"context_line":"        else:"},{"line_number":257,"context_line":"            return self.management_url"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    @auth_token.setter"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F%2FRS8%3D","line":256,"in_reply_to":"AAAAWH%2F%2FShs%3D","updated":"2014-03-18 23:59:56.000000000","message":"yes and no, this whole file is a compatability layer at this point. If you aren\u0027t using the auth_url then you are always using the management url.","commit_id":"0eac02b233915f19bb1b855117fe95f6c9cf4bad"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"722eee8d55f54102b5258cdb8e28615d73dbfe5d","unresolved":false,"context_lines":[{"line_number":578,"context_line":"            return self.request(url, method, **kwargs)"},{"line_number":579,"context_line":"        except (exceptions.MissingAuthPlugin, exceptions.EndpointNotFound):"},{"line_number":580,"context_line":"            raise exceptions.AuthorizationFailure("},{"line_number":581,"context_line":"                \u0027Current authorization does not have a known management url\u0027)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def get(self, url, **kwargs):"},{"line_number":584,"context_line":"        return self._cs_request(url, \u0027GET\u0027, **kwargs)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B3PQ%3D","line":581,"updated":"2014-03-22 15:27:01.000000000","message":"Log something if it\u0027s MissingAuthPlugin or EndpointNotFound so that when we\u0027re debugging we\u0027ll have some idea what the problem is.","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5a405fdd0b113184fd98cfec568bdd983f4d7593","unresolved":false,"context_lines":[{"line_number":578,"context_line":"            return self.request(url, method, **kwargs)"},{"line_number":579,"context_line":"        except (exceptions.MissingAuthPlugin, exceptions.EndpointNotFound):"},{"line_number":580,"context_line":"            raise exceptions.AuthorizationFailure("},{"line_number":581,"context_line":"                \u0027Current authorization does not have a known management url\u0027)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def get(self, url, **kwargs):"},{"line_number":584,"context_line":"        return self._cs_request(url, \u0027GET\u0027, **kwargs)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B06U%3D","line":581,"in_reply_to":"AAAAWH%2F%2B3PQ%3D","updated":"2014-03-24 01:06:15.000000000","message":"I had endpointnotfound in there because that is essentially the same as not having a management url. however that hides a lot of information that may be wanted higher up. \n\nI\u0027m not sure if allowing EndpointNotFound to be raised through here is a change in compatability. I don\u0027t think it should be as the only things that are calling through here should be our own managers. \n\nI\u0027ve changed this to lett EndpointNotFound pass through and catch it in the clients.","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"}],"keystoneclient/session.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9327da19fd1621349f389dbc5c9284db77cda329","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                                    a path that should be relative to the entry"},{"line_number":158,"context_line":"                                    for this in the service catalog. (optional)"},{"line_number":159,"context_line":"        :param string endpoint_type: The endpoint type to retrieve the base url"},{"line_number":160,"context_line":"                                     for the service_type. (optional)"},{"line_number":161,"context_line":"        :param kwargs: any other parameter that can be passed to"},{"line_number":162,"context_line":"                       requests.Session.request (such as `headers`). Except:"},{"line_number":163,"context_line":"                       \u0027data\u0027 will be overwritten by the data in \u0027json\u0027 param."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F991o%3D","line":160,"updated":"2014-01-31 15:40:29.000000000","message":"i feel like this is leading to massive scope creep for a \"session\"","commit_id":"c9f6f2d01bea2a483fc189192d3432008258bf71"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"7b8ebe0168df77117ac496b19667e1a38b39482f","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                                    a path that should be relative to the entry"},{"line_number":158,"context_line":"                                    for this in the service catalog. (optional)"},{"line_number":159,"context_line":"        :param string endpoint_type: The endpoint type to retrieve the base url"},{"line_number":160,"context_line":"                                     for the service_type. (optional)"},{"line_number":161,"context_line":"        :param kwargs: any other parameter that can be passed to"},{"line_number":162,"context_line":"                       requests.Session.request (such as `headers`). Except:"},{"line_number":163,"context_line":"                       \u0027data\u0027 will be overwritten by the data in \u0027json\u0027 param."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F937M%3D","line":160,"in_reply_to":"AAAAUH%2F991o%3D","updated":"2014-02-02 21:16:54.000000000","message":"Actually this is where i think that session starts to really become useful. \n\nAs we see from glance and such we are currently in the situation where some of the clients are doing there own service catalog manipulation. Some rely on keystoneclient for this and some just implement there own parsing. \n\nWhere this will lead is that the session keeps control over how and who you communicate with. The service catalog is part of the token and we should be enforcing that people actually get the urls from here - and there is really no reason that the end users should want to deal with that directly.\n\nAs said nova will now just say give send \u0027/xxxx\u0027 to the public identity endpoint for version 3 in region RegionOne. (Yes i missed some of these parameters, this patch is a bit POC and i know i\u0027ve added those somewhere) - no more having every client try to figure out what/where/how that works.","commit_id":"c9f6f2d01bea2a483fc189192d3432008258bf71"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"13fb60146afd4a5bd229416f2fe3e9d7b2de5aae","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                                     which it should be able to determine an"},{"line_number":125,"context_line":"                                     endpoint to use for this request. If not"},{"line_number":126,"context_line":"                                     provided then URL is expected to be a"},{"line_number":127,"context_line":"                                     fully qualified URL. (optional)"},{"line_number":128,"context_line":"        :param kwargs: any other parameter that can be passed to"},{"line_number":129,"context_line":"                       requests.Session.request (such as `headers`). Except:"},{"line_number":130,"context_line":"                       \u0027data\u0027 will be overwritten by the data in \u0027json\u0027 param."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FkGI%3D","line":127,"updated":"2014-03-17 00:20:19.000000000","message":"the doc for url says it\u0027s always a fully qualified URL anyways, so why mention it here?","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"47c63cea6e5491d2463d7524e297fae673758218","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                                     which it should be able to determine an"},{"line_number":125,"context_line":"                                     endpoint to use for this request. If not"},{"line_number":126,"context_line":"                                     provided then URL is expected to be a"},{"line_number":127,"context_line":"                                     fully qualified URL. (optional)"},{"line_number":128,"context_line":"        :param kwargs: any other parameter that can be passed to"},{"line_number":129,"context_line":"                       requests.Session.request (such as `headers`). Except:"},{"line_number":130,"context_line":"                       \u0027data\u0027 will be overwritten by the data in \u0027json\u0027 param."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2Fi1s%3D","line":127,"in_reply_to":"AAAAWH%2F%2FkGI%3D","updated":"2014-03-17 07:16:39.000000000","message":"Done","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"13fb60146afd4a5bd229416f2fe3e9d7b2de5aae","unresolved":false,"context_lines":[{"line_number":347,"context_line":"    def get_endpoint(self, **kwargs):"},{"line_number":348,"context_line":"        \"\"\"Get an endpoint as provided by the auth plugin.\"\"\""},{"line_number":349,"context_line":"        if not self.auth:"},{"line_number":350,"context_line":"            raise exceptions.MissingAuthPlugin(\u0027Auth Plugin required to \u0027"},{"line_number":351,"context_line":"                                               \u0027determine endpoint URL\u0027)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        return self.auth.get_endpoint(self, **kwargs)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FkFk%3D","line":350,"updated":"2014-03-17 00:20:19.000000000","message":"lowercase \"Plugin\", and make this a full sentence...\n\n An auth plugin is required to determine the endpoint URL.","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"47c63cea6e5491d2463d7524e297fae673758218","unresolved":false,"context_lines":[{"line_number":347,"context_line":"    def get_endpoint(self, **kwargs):"},{"line_number":348,"context_line":"        \"\"\"Get an endpoint as provided by the auth plugin.\"\"\""},{"line_number":349,"context_line":"        if not self.auth:"},{"line_number":350,"context_line":"            raise exceptions.MissingAuthPlugin(\u0027Auth Plugin required to \u0027"},{"line_number":351,"context_line":"                                               \u0027determine endpoint URL\u0027)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        return self.auth.get_endpoint(self, **kwargs)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2Fi0c%3D","line":350,"in_reply_to":"AAAAWH%2F%2FkFk%3D","updated":"2014-03-17 07:16:39.000000000","message":"Done","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"722eee8d55f54102b5258cdb8e28615d73dbfe5d","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        :param string url: Path or fully qualified URL of HTTP request. If only"},{"line_number":107,"context_line":"                           a path is provided then endpoint_filter must also be"},{"line_number":108,"context_line":"                           provided such that the base URL can be determined."},{"line_number":109,"context_line":"        :param string method: The http method to use. (eg. \u0027GET\u0027, \u0027POST\u0027)"},{"line_number":110,"context_line":"        :param string original_ip: Mark this request as forwarded for this ip."},{"line_number":111,"context_line":"                                   (optional)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B3Oc%3D","line":108,"updated":"2014-03-22 15:27:01.000000000","message":"it also looks like that if url is a fully qualified URL then the endpoint_filter must not be provided... based on the code at line 163... it\u0027ll build a URL like http://compute:5000/http://compute:5000","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5a405fdd0b113184fd98cfec568bdd983f4d7593","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        :param string url: Path or fully qualified URL of HTTP request. If only"},{"line_number":107,"context_line":"                           a path is provided then endpoint_filter must also be"},{"line_number":108,"context_line":"                           provided such that the base URL can be determined."},{"line_number":109,"context_line":"        :param string method: The http method to use. (eg. \u0027GET\u0027, \u0027POST\u0027)"},{"line_number":110,"context_line":"        :param string original_ip: Mark this request as forwarded for this ip."},{"line_number":111,"context_line":"                                   (optional)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B03o%3D","line":108,"in_reply_to":"AAAAWH%2F%2B3Oc%3D","updated":"2014-03-24 01:06:15.000000000","message":"Yes, i had this marked as a TODO further down but i may as well just tackle it now.\n\nIf a full URL is passed then it makes sense to ignore the endpoint_filter as an endpoint_filter is likely to be populated by the client object by default.","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1bd7162e627a0785279ceb09879c445d3f0ffc15","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"            headers[\u0027X-Auth-Token\u0027] \u003d token"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # if we are passed a fully qualified URL and a endpoint_filter we"},{"line_number":175,"context_line":"        # should ignore the filter. This will make it easier for clients who"},{"line_number":176,"context_line":"        # want to overrule the default endpoint_filter data added to all client"},{"line_number":177,"context_line":"        # requests. We check fully qualified here by the presence of a host."}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAWH%2F%2Bse4%3D","line":174,"updated":"2014-03-25 01:18:18.000000000","message":"change \"a endpoint_filter\" to \"an endpoint_filter\" (a -\u003e an)","commit_id":"505b81921ea41f8674e6013645a6fb8a03915b27"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1bd7162e627a0785279ceb09879c445d3f0ffc15","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        # should ignore the filter. This will make it easier for clients who"},{"line_number":176,"context_line":"        # want to overrule the default endpoint_filter data added to all client"},{"line_number":177,"context_line":"        # requests. We check fully qualified here by the presence of a host."},{"line_number":178,"context_line":"        url_data \u003d urllib.parse.urlparse(url)"},{"line_number":179,"context_line":"        if endpoint_filter and not url_data.netloc:"},{"line_number":180,"context_line":"            base_url \u003d self.get_endpoint(**endpoint_filter)"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAWH%2F%2BseY%3D","line":178,"updated":"2014-03-25 01:18:18.000000000","message":"do we need to catch a url parse error and raise a keystoneclient exception?\n\nWe should have a test for this.","commit_id":"505b81921ea41f8674e6013645a6fb8a03915b27"}],"keystoneclient/tests/auth/test_identity_v2.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"13fb60146afd4a5bd229416f2fe3e9d7b2de5aae","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        self.assertEqual(admin_resp.status_code, 200)"},{"line_number":177,"context_line":"        self.assertEqual(admin_resp.text, \u0027SUCCESS ADMIN\u0027)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        # test that it defaults to the public url"},{"line_number":180,"context_line":"        admin_resp \u003d s.get(\u0027/path\u0027,"},{"line_number":181,"context_line":"                           endpoint_filter\u003d{\u0027service_type\u0027: \u0027compute\u0027})"},{"line_number":182,"context_line":"        self.assertEqual(admin_resp.status_code, 200)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FkFc%3D","line":179,"updated":"2014-03-17 00:20:19.000000000","message":"suggest split these tests into separate test functions since they\u0027re testing different things.","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"47c63cea6e5491d2463d7524e297fae673758218","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        self.assertEqual(admin_resp.status_code, 200)"},{"line_number":177,"context_line":"        self.assertEqual(admin_resp.text, \u0027SUCCESS ADMIN\u0027)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        # test that it defaults to the public url"},{"line_number":180,"context_line":"        admin_resp \u003d s.get(\u0027/path\u0027,"},{"line_number":181,"context_line":"                           endpoint_filter\u003d{\u0027service_type\u0027: \u0027compute\u0027})"},{"line_number":182,"context_line":"        self.assertEqual(admin_resp.status_code, 200)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2Fi0k%3D","line":179,"in_reply_to":"AAAAWH%2F%2FkFc%3D","updated":"2014-03-17 07:16:39.000000000","message":"Done","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"722eee8d55f54102b5258cdb8e28615d73dbfe5d","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        s \u003d session.Session(auth\u003da)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        resp \u003d s.get(\u0027/path\u0027,"},{"line_number":170,"context_line":"                     endpoint_filter\u003d{\u0027service_type\u0027: \u0027compute\u0027,"},{"line_number":171,"context_line":"                                      \u0027interface\u0027: \u0027admin\u0027})"},{"line_number":172,"context_line":"        self.assertEqual(resp.status_code, 200)"},{"line_number":173,"context_line":"        self.assertEqual(resp.text, \u0027SUCCESS ADMIN\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B3No%3D","line":170,"updated":"2014-03-22 15:27:01.000000000","message":"there should be a test that shows what happens when there\u0027s no service type.\n\nthere should be a test that shows what happens when get with a fully qualified URL.","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5a405fdd0b113184fd98cfec568bdd983f4d7593","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        s \u003d session.Session(auth\u003da)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        resp \u003d s.get(\u0027/path\u0027,"},{"line_number":170,"context_line":"                     endpoint_filter\u003d{\u0027service_type\u0027: \u0027compute\u0027,"},{"line_number":171,"context_line":"                                      \u0027interface\u0027: \u0027admin\u0027})"},{"line_number":172,"context_line":"        self.assertEqual(resp.status_code, 200)"},{"line_number":173,"context_line":"        self.assertEqual(resp.text, \u0027SUCCESS ADMIN\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B0vQ%3D","line":170,"in_reply_to":"AAAAWH%2F%2B3No%3D","updated":"2014-03-24 01:06:15.000000000","message":"Done","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"722eee8d55f54102b5258cdb8e28615d73dbfe5d","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                     endpoint_filter\u003d{\u0027service_type\u0027: \u0027compute\u0027,"},{"line_number":171,"context_line":"                                      \u0027interface\u0027: \u0027admin\u0027})"},{"line_number":172,"context_line":"        self.assertEqual(resp.status_code, 200)"},{"line_number":173,"context_line":"        self.assertEqual(resp.text, \u0027SUCCESS ADMIN\u0027)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @httpretty.activate"},{"line_number":176,"context_line":"    def test_service_url_defaults_to_public(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B3N4%3D","line":173,"updated":"2014-03-22 15:27:01.000000000","message":"what is this validating? that httpretty works as expected? why test httpretty? suggest remove this line.\n\nCouldn\u0027t this test just validate that the request path was as expected?","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5a405fdd0b113184fd98cfec568bdd983f4d7593","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                     endpoint_filter\u003d{\u0027service_type\u0027: \u0027compute\u0027,"},{"line_number":171,"context_line":"                                      \u0027interface\u0027: \u0027admin\u0027})"},{"line_number":172,"context_line":"        self.assertEqual(resp.status_code, 200)"},{"line_number":173,"context_line":"        self.assertEqual(resp.text, \u0027SUCCESS ADMIN\u0027)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @httpretty.activate"},{"line_number":176,"context_line":"    def test_service_url_defaults_to_public(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B0vU%3D","line":173,"in_reply_to":"AAAAWH%2F%2B3N4%3D","updated":"2014-03-24 01:06:15.000000000","message":"Done","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"722eee8d55f54102b5258cdb8e28615d73dbfe5d","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        a \u003d v2.Password(self.TEST_URL, username\u003dself.TEST_USER,"},{"line_number":183,"context_line":"                        password\u003dself.TEST_PASS)"},{"line_number":184,"context_line":"        s \u003d session.Session(auth\u003da)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        # test that it defaults to the public url"},{"line_number":187,"context_line":"        resp \u003d s.get(\u0027/path\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B3Ng%3D","line":184,"updated":"2014-03-22 15:27:01.000000000","message":"the 2 new tests have a lot of code in common, suggest move it to a function.","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5a405fdd0b113184fd98cfec568bdd983f4d7593","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        a \u003d v2.Password(self.TEST_URL, username\u003dself.TEST_USER,"},{"line_number":183,"context_line":"                        password\u003dself.TEST_PASS)"},{"line_number":184,"context_line":"        s \u003d session.Session(auth\u003da)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        # test that it defaults to the public url"},{"line_number":187,"context_line":"        resp \u003d s.get(\u0027/path\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B0tU%3D","line":184,"in_reply_to":"AAAAWH%2F%2B3Ng%3D","updated":"2014-03-24 01:06:15.000000000","message":"Done","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"722eee8d55f54102b5258cdb8e28615d73dbfe5d","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        resp \u003d s.get(\u0027/path\u0027,"},{"line_number":188,"context_line":"                     endpoint_filter\u003d{\u0027service_type\u0027: \u0027compute\u0027})"},{"line_number":189,"context_line":"        self.assertEqual(resp.status_code, 200)"},{"line_number":190,"context_line":"        self.assertEqual(resp.text, \u0027SUCCESS PUBLIC\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B3Nc%3D","line":190,"updated":"2014-03-22 15:27:01.000000000","message":"suggest remove this line.","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5a405fdd0b113184fd98cfec568bdd983f4d7593","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        resp \u003d s.get(\u0027/path\u0027,"},{"line_number":188,"context_line":"                     endpoint_filter\u003d{\u0027service_type\u0027: \u0027compute\u0027})"},{"line_number":189,"context_line":"        self.assertEqual(resp.status_code, 200)"},{"line_number":190,"context_line":"        self.assertEqual(resp.text, \u0027SUCCESS PUBLIC\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B0vM%3D","line":190,"in_reply_to":"AAAAWH%2F%2B3Nc%3D","updated":"2014-03-24 01:06:15.000000000","message":"Done","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"}],"keystoneclient/tests/auth/test_identity_v3.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"13fb60146afd4a5bd229416f2fe3e9d7b2de5aae","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        self.assertEqual(admin_resp.status_code, 200)"},{"line_number":318,"context_line":"        self.assertEqual(admin_resp.text, \u0027SUCCESS ADMIN\u0027)"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        # test that it defaults to the public url"},{"line_number":321,"context_line":"        admin_resp \u003d s.get(\u0027/path\u0027,"},{"line_number":322,"context_line":"                           endpoint_filter\u003d{\u0027service_type\u0027: \u0027compute\u0027})"},{"line_number":323,"context_line":"        self.assertEqual(admin_resp.status_code, 200)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FkFU%3D","line":320,"updated":"2014-03-17 00:20:19.000000000","message":"suggest split these tests up.","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"47c63cea6e5491d2463d7524e297fae673758218","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        self.assertEqual(admin_resp.status_code, 200)"},{"line_number":318,"context_line":"        self.assertEqual(admin_resp.text, \u0027SUCCESS ADMIN\u0027)"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        # test that it defaults to the public url"},{"line_number":321,"context_line":"        admin_resp \u003d s.get(\u0027/path\u0027,"},{"line_number":322,"context_line":"                           endpoint_filter\u003d{\u0027service_type\u0027: \u0027compute\u0027})"},{"line_number":323,"context_line":"        self.assertEqual(admin_resp.status_code, 200)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2Fi0g%3D","line":320,"in_reply_to":"AAAAWH%2F%2FkFU%3D","updated":"2014-03-17 07:16:39.000000000","message":"Done","commit_id":"343b432c69681573361e14fb141579f635c3ad09"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"722eee8d55f54102b5258cdb8e28615d73dbfe5d","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                     endpoint_filter\u003d{\u0027service_type\u0027: \u0027compute\u0027,"},{"line_number":312,"context_line":"                                      \u0027interface\u0027: \u0027admin\u0027})"},{"line_number":313,"context_line":"        self.assertEqual(resp.status_code, 200)"},{"line_number":314,"context_line":"        self.assertEqual(resp.text, \u0027SUCCESS ADMIN\u0027)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    @httpretty.activate"},{"line_number":317,"context_line":"    def test_service_url_defaults_to_public(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B3NI%3D","line":314,"updated":"2014-03-22 15:27:01.000000000","message":"same comments here as on in test_identity_v2.py","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5a405fdd0b113184fd98cfec568bdd983f4d7593","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                     endpoint_filter\u003d{\u0027service_type\u0027: \u0027compute\u0027,"},{"line_number":312,"context_line":"                                      \u0027interface\u0027: \u0027admin\u0027})"},{"line_number":313,"context_line":"        self.assertEqual(resp.status_code, 200)"},{"line_number":314,"context_line":"        self.assertEqual(resp.text, \u0027SUCCESS ADMIN\u0027)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    @httpretty.activate"},{"line_number":317,"context_line":"    def test_service_url_defaults_to_public(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B0tQ%3D","line":314,"in_reply_to":"AAAAWH%2F%2B3NI%3D","updated":"2014-03-24 01:06:15.000000000","message":"Done","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7ae42ac171584a2f9f0980502291d22716c6be91","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            \"region\": \"RegionOne\","},{"line_number":48,"context_line":"            \"interface\": \"admin\""},{"line_number":49,"context_line":"        }],"},{"line_number":50,"context_line":"        \"type\": \"nova_compat\""},{"line_number":51,"context_line":"    }, {"},{"line_number":52,"context_line":"        \"endpoints\": [{"},{"line_number":53,"context_line":"            \"url\": \"http://nova/novapi/public\","}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAWH%2F%2Bmt8%3D","line":50,"updated":"2014-03-25 16:01:31.000000000","message":"compute?","commit_id":"505b81921ea41f8674e6013645a6fb8a03915b27"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1bd7162e627a0785279ceb09879c445d3f0ffc15","unresolved":false,"context_lines":[{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        resp \u003d s.get(\u0027/path\u0027, endpoint_filter\u003dendpoint_filter)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        self.assertEqual(resp.status_code, 200)"},{"line_number":314,"context_line":"        path \u003d \"%s/%s\" % (urllib.parse.urlparse(base_url).path, \u0027path\u0027)"},{"line_number":315,"context_line":"        self.assertEqual(httpretty.last_request().path, path)"},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAWH%2F%2Bsbs%3D","line":313,"updated":"2014-03-25 01:18:18.000000000","message":"(nit) the order for the arguments is expected, actual","commit_id":"505b81921ea41f8674e6013645a6fb8a03915b27"}],"keystoneclient/tests/test_session.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"722eee8d55f54102b5258cdb8e28615d73dbfe5d","unresolved":false,"context_lines":[{"line_number":359,"context_line":"                                         \u0027interface\u0027: interface})"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        self.assertEqual(resp.text, body)"},{"line_number":362,"context_line":"        self.assertEqual(resp.status_code, status)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def test_service_url_raises_if_no_auth_plugin(self):"},{"line_number":365,"context_line":"        sess \u003d client_session.Session()"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B3Ms%3D","line":362,"updated":"2014-03-22 15:27:01.000000000","message":"don\u0027t we just want to verify that the request path was as expected?","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5a405fdd0b113184fd98cfec568bdd983f4d7593","unresolved":false,"context_lines":[{"line_number":359,"context_line":"                                         \u0027interface\u0027: interface})"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        self.assertEqual(resp.text, body)"},{"line_number":362,"context_line":"        self.assertEqual(resp.status_code, status)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def test_service_url_raises_if_no_auth_plugin(self):"},{"line_number":365,"context_line":"        sess \u003d client_session.Session()"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2B0tE%3D","line":362,"in_reply_to":"AAAAWH%2F%2B3Ms%3D","updated":"2014-03-24 01:06:15.000000000","message":"Done, but it serves the same purpose as it means we obviously hit the path that we stubbed.","commit_id":"516f360cf9eca0d184de0b46844371f624b5e34d"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"76a5fba701a902f0f3ac4b9652890e8acc17195f","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        \u0027compute\u0027: {\u0027public\u0027: \u0027http://compute-public:2222/v1.0\u0027,"},{"line_number":288,"context_line":"                    \u0027admin\u0027: \u0027http://compute-admin:2222/v1.0\u0027},"},{"line_number":289,"context_line":"        \u0027image\u0027: {\u0027public\u0027: \u0027http://image-public:3333/v2.0\u0027,"},{"line_number":290,"context_line":"                  \u0027admin\u0027: \u0027http://image-admin:3333/v2.0\u0027}"},{"line_number":291,"context_line":"    }"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def __init__(self, token\u003dTEST_TOKEN):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAWH%2F%2BujE%3D","line":290,"updated":"2014-03-24 19:28:21.000000000","message":"this is pretty much what the catalog itself should look like!","commit_id":"505b81921ea41f8674e6013645a6fb8a03915b27"}]}
