)]}'
{"openstack/connection.py":[{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"1bacf424050e4eea77bd25b590edb80ce22f0166","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            The value given here will be prepended to the default, which is"},{"line_number":108,"context_line":"            specified in :attr:`~openstack.transport.USER_AGENT`."},{"line_number":109,"context_line":"            The resulting ``user_agent`` value is used for the ``User-Agent``"},{"line_number":110,"context_line":"            HTTP header."},{"line_number":111,"context_line":"        :param str auth_plugin: The name of authentication plugin to use.  If"},{"line_number":112,"context_line":"            the authentication plugin name is not provided, the connection will"},{"line_number":113,"context_line":"            try to guess what plugin to use based on the *auth_url* in the"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_34accb8c","line":110,"updated":"2015-02-08 13:55:24.000000000","message":"Document the proper format of a User-Agent string so users are more likely to get it right and don\u0027t have to look it up in a RFC.","commit_id":"c73f7c493fa097741cb59d5419847d836f021b61"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"8c0202f98c431912b766f5c9868129a921a981a6","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            The value given here will be prepended to the default, which is"},{"line_number":108,"context_line":"            specified in :attr:`~openstack.transport.USER_AGENT`."},{"line_number":109,"context_line":"            The resulting ``user_agent`` value is used for the ``User-Agent``"},{"line_number":110,"context_line":"            HTTP header."},{"line_number":111,"context_line":"        :param str auth_plugin: The name of authentication plugin to use.  If"},{"line_number":112,"context_line":"            the authentication plugin name is not provided, the connection will"},{"line_number":113,"context_line":"            try to guess what plugin to use based on the *auth_url* in the"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_4f9b6672","line":110,"in_reply_to":"da86d52c_34accb8c","updated":"2015-02-08 16:01:49.000000000","message":"The proper format is shown when you click on USER_AGENT, and it\u0027s fully documented right above that. Since we\u0027re not doing anything with the user_agent here except passing it through, I don\u0027t want to start duplicating and then over-burdening people with user agent information.","commit_id":"c73f7c493fa097741cb59d5419847d836f021b61"}],"openstack/transport.py":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"04755f42c85af0ef1b5b54453362179c33a258c5","unresolved":false,"context_lines":[{"line_number":96,"context_line":"~~~~~~~~~~"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"User-Agent handling as constructed by this class follows"},{"line_number":99,"context_line":"`RFC 7231 Section 5.5.3 \u003chttp://tools.ietf.org/html/rfc7231#section-5.5.3\u003e`_."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"* The default :attr:`~openstack.transport.USER_AGENT` contains"},{"line_number":102,"context_line":"  the SDK version and Python version."}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_34484bcc","line":99,"updated":"2015-02-08 13:52:22.000000000","message":"Should we add that user-specified user-agents should follow that as well and maybe provide an example of what that would look like?","commit_id":"c73f7c493fa097741cb59d5419847d836f021b61"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"8c0202f98c431912b766f5c9868129a921a981a6","unresolved":false,"context_lines":[{"line_number":96,"context_line":"~~~~~~~~~~"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"User-Agent handling as constructed by this class follows"},{"line_number":99,"context_line":"`RFC 7231 Section 5.5.3 \u003chttp://tools.ietf.org/html/rfc7231#section-5.5.3\u003e`_."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"* The default :attr:`~openstack.transport.USER_AGENT` contains"},{"line_number":102,"context_line":"  the SDK version and Python version."}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_8fa55eb7","line":99,"in_reply_to":"da86d52c_34484bcc","updated":"2015-02-08 16:01:49.000000000","message":"I added some extra text and one example. If people need more they will have to read the RFC.","commit_id":"c73f7c493fa097741cb59d5419847d836f021b61"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"04755f42c85af0ef1b5b54453362179c33a258c5","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"_logger \u003d logging.getLogger(__name__)"},{"line_number":134,"context_line":"JSON \u003d \u0027application/json\u0027"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"class Transport(requests.Session):"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_143b4739","line":135,"updated":"2015-02-08 13:52:22.000000000","message":"So this should be good. I wonder if you would rather use a function to generate this (with some extra details) from requests [1]\n\nI think you\u0027d probably want to do something like:\n\n    default_user_agent(\u0027python-openstacksdk/%s python-requests\u0027 % \n                       openstack.__version__)\n\n[1]: https://github.com/kennethreitz/requests/blob/master/requests/utils.py#L540","commit_id":"c73f7c493fa097741cb59d5419847d836f021b61"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"8c0202f98c431912b766f5c9868129a921a981a6","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"_logger \u003d logging.getLogger(__name__)"},{"line_number":134,"context_line":"JSON \u003d \u0027application/json\u0027"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"class Transport(requests.Session):"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_ef1eda0c","line":135,"in_reply_to":"da86d52c_143b4739","updated":"2015-02-08 16:01:49.000000000","message":"Done, but slightly differently. I prefer visually that we construct our own value and then add to it from requests, but the end result is the same.","commit_id":"c73f7c493fa097741cb59d5419847d836f021b61"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"1bacf424050e4eea77bd25b590edb80ce22f0166","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            pass"},{"line_number":234,"context_line":"        else:"},{"line_number":235,"context_line":"            headers.setdefault(\u0027User-Agent\u0027, self._user_agent)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        if redirect is None:"},{"line_number":238,"context_line":"            redirect \u003d self._redirect"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_d4b44fd3","line":236,"updated":"2015-02-08 13:55:24.000000000","message":"Do we want to check that the User-Agent string the user passed in (however they it is they passed it in) is valid before sending the request or raise an exception if it\u0027s invalid?\n\nIt\u0027s the kind of thing that would be pretty easy for a user to get wrong.","commit_id":"c73f7c493fa097741cb59d5419847d836f021b61"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"8c0202f98c431912b766f5c9868129a921a981a6","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            pass"},{"line_number":234,"context_line":"        else:"},{"line_number":235,"context_line":"            headers.setdefault(\u0027User-Agent\u0027, self._user_agent)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        if redirect is None:"},{"line_number":238,"context_line":"            redirect \u003d self._redirect"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_4fc4465f","line":236,"in_reply_to":"da86d52c_d4b44fd3","updated":"2015-02-08 16:01:49.000000000","message":"I don\u0027t want to get in the business of denying or otherwise making it a hassle to make requests based on our decision to provide an RFC-compliant string. I think we\u0027ve documented and explained this as far as we need to, but ultimately if a caller wants to add something of their own, they should be able to do it.","commit_id":"c73f7c493fa097741cb59d5419847d836f021b61"}]}
