)]}'
{"doc/source/authentication-plugins.rst":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b528231d0800e9764a7637691f5bbe33b4d8b17a","unresolved":false,"context_lines":[{"line_number":43,"context_line":"Standard V3 identity plugins are defined in the module"},{"line_number":44,"context_line":"``keystoneclient.auth.identity.v3``."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"V3 Identity plugins are slightly different from there V2 counterparts as a V3"},{"line_number":47,"context_line":"authentication request can contain multiple authentication methods."},{"line_number":48,"context_line":"To handle this V3 defines a number of different ``AuthMethod``:"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3ae8d1ca_6b358d45","line":46,"updated":"2014-05-27 05:15:47.000000000","message":"s/there/their","commit_id":"56ab3ea88f6dab1363091624d3b747a91319d978"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b528231d0800e9764a7637691f5bbe33b4d8b17a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"``keystoneclient.auth.identity.v3``."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"V3 Identity plugins are slightly different from there V2 counterparts as a V3"},{"line_number":47,"context_line":"authentication request can contain multiple authentication methods."},{"line_number":48,"context_line":"To handle this V3 defines a number of different ``AuthMethod``:"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"- ``PasswordMethod``: Authenticate using a username and password."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3ae8d1ca_6b0cad95","line":47,"updated":"2014-05-27 05:15:47.000000000","message":"To me, this sounds like methods \u003d [\u0027token\u0027, \u0027password\u0027], but i thought we don\u0027t really like to advertise. \n\nMaybe i\u0027m mis-interpreting the wording here.","commit_id":"56ab3ea88f6dab1363091624d3b747a91319d978"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b528231d0800e9764a7637691f5bbe33b4d8b17a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"authentication request can contain multiple authentication methods."},{"line_number":48,"context_line":"To handle this V3 defines a number of different ``AuthMethod``:"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"- ``PasswordMethod``: Authenticate using a username and password."},{"line_number":51,"context_line":"- ``TokenMethod``: Authenticate using an existing token."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"These ``AuthMethod`` are then passed to the ``Auth`` plugin::"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3ae8d1ca_8b11f9ae","line":50,"updated":"2014-05-27 05:15:47.000000000","message":"I\u0027d toss in \u0027against a V3 identity service\u0027 like you did in V2, for here and Token.","commit_id":"56ab3ea88f6dab1363091624d3b747a91319d978"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b528231d0800e9764a7637691f5bbe33b4d8b17a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"- ``PasswordMethod``: Authenticate using a username and password."},{"line_number":51,"context_line":"- ``TokenMethod``: Authenticate using an existing token."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"These ``AuthMethod`` are then passed to the ``Auth`` plugin::"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    \u003e\u003e\u003e from keystoneclient import session"},{"line_number":56,"context_line":"    \u003e\u003e\u003e from keystoneclient.auth.identity import v3"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3ae8d1ca_cb222101","line":53,"updated":"2014-05-27 05:15:47.000000000","message":"``AuthMethod``\u0027s?\n\nOr\n\nThe ``AuthMethod`` objects are ...","commit_id":"56ab3ea88f6dab1363091624d3b747a91319d978"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b528231d0800e9764a7637691f5bbe33b4d8b17a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    \u003e\u003e\u003e from keystoneclient import session"},{"line_number":56,"context_line":"    \u003e\u003e\u003e from keystoneclient.auth.identity import v3"},{"line_number":57,"context_line":"    \u003e\u003e\u003e password \u003d v3.PasswordMethod(username\u003d\u0027user\u0027,"},{"line_number":58,"context_line":"    ...                              password\u003d\u0027password\u0027)"},{"line_number":59,"context_line":"    \u003e\u003e\u003e auth \u003d v3.Auth(auth_url\u003d\u0027http://my.keystone.com:5000/v3\u0027,"},{"line_number":60,"context_line":"                       auth_methods\u003d[password],"},{"line_number":61,"context_line":"                       project_id\u003d\u0027projectid\u0027)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3ae8d1ca_2b79c5fc","line":58,"updated":"2014-05-27 05:15:47.000000000","message":"you use ... here, but not in the other example indents, suggest remove","commit_id":"56ab3ea88f6dab1363091624d3b747a91319d978"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b528231d0800e9764a7637691f5bbe33b4d8b17a","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"If you have implemented a new authentication mechanism into a Keystone service"},{"line_number":103,"context_line":"then you will be able to reuse a lot of the infrastructure available for the"},{"line_number":104,"context_line":"existing Identity mechanisms. As the V2 identity API is essentially frozen it"},{"line_number":105,"context_line":"is expected that new plugins are for the V3 API."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"To implement a new V3 plugin you should implement the base"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3ae8d1ca_2b60e534","line":104,"updated":"2014-05-27 05:15:47.000000000","message":"comma after frozen","commit_id":"56ab3ea88f6dab1363091624d3b747a91319d978"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b528231d0800e9764a7637691f5bbe33b4d8b17a","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"The new ``AuthMethod`` should take all the required parameters via ``__init__``"},{"line_number":112,"context_line":"and return from ``get_auth_data`` a tuple with the unique identifier of this"},{"line_number":113,"context_line":"plugin (eg ``password``) and a dictionary containing the payload of values to"},{"line_number":114,"context_line":"send to the authentication server. The session and calling auth object are also"},{"line_number":115,"context_line":"passed to this function so that the plugin may use them as are the request"},{"line_number":116,"context_line":"headers if the plugin needs to manipulate them."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3ae8d1ca_8b5f3972","line":113,"updated":"2014-05-27 05:15:47.000000000","message":"s/eg/e.g.","commit_id":"56ab3ea88f6dab1363091624d3b747a91319d978"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b528231d0800e9764a7637691f5bbe33b4d8b17a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"The new ``AuthMethod`` should take all the required parameters via ``__init__``"},{"line_number":112,"context_line":"and return from ``get_auth_data`` a tuple with the unique identifier of this"},{"line_number":113,"context_line":"plugin (eg ``password``) and a dictionary containing the payload of values to"},{"line_number":114,"context_line":"send to the authentication server. The session and calling auth object are also"},{"line_number":115,"context_line":"passed to this function so that the plugin may use them as are the request"},{"line_number":116,"context_line":"headers if the plugin needs to manipulate them."},{"line_number":117,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3ae8d1ca_cb506161","line":114,"updated":"2014-05-27 05:15:47.000000000","message":"s/object/objects","commit_id":"56ab3ea88f6dab1363091624d3b747a91319d978"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b528231d0800e9764a7637691f5bbe33b4d8b17a","unresolved":false,"context_lines":[{"line_number":112,"context_line":"and return from ``get_auth_data`` a tuple with the unique identifier of this"},{"line_number":113,"context_line":"plugin (eg ``password``) and a dictionary containing the payload of values to"},{"line_number":114,"context_line":"send to the authentication server. The session and calling auth object are also"},{"line_number":115,"context_line":"passed to this function so that the plugin may use them as are the request"},{"line_number":116,"context_line":"headers if the plugin needs to manipulate them."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"You should also provide a class that inherits from"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3ae8d1ca_eb4d1dc6","line":115,"updated":"2014-05-27 05:15:47.000000000","message":"\u0027them as are\u0027 seems redundant","commit_id":"56ab3ea88f6dab1363091624d3b747a91319d978"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b528231d0800e9764a7637691f5bbe33b4d8b17a","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"By convention (and like above) these are named ``PluginType`` and"},{"line_number":123,"context_line":"``PluginTypeMethod`` (for example ``Password`` and ``PasswordMethod``)."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Creating a Plugin"},{"line_number":126,"context_line":"-----------------"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3ae8d1ca_4bcc5136","line":124,"updated":"2014-05-27 05:15:47.000000000","message":"I think an example w/ some code would serve better than the explanation.","commit_id":"56ab3ea88f6dab1363091624d3b747a91319d978"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"22d318d36d67b5117794556e219956a492c63787","unresolved":false,"context_lines":[{"line_number":14,"context_line":"are used and implemented should be generic enough to cover completely"},{"line_number":15,"context_line":"customized authentication solutions."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The subset of authentication plugins intended for use with a Keystone server"},{"line_number":18,"context_line":"are called Identity Plugins."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab895d6_a2117fae","line":17,"updated":"2014-06-29 17:37:39.000000000","message":"change \"a Keystone server\" to \"an Identity API server\".","commit_id":"7bfda725d3090ff255176a2ed552fabafc24bea5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e08e972d5e711bb4b93aa6e271fef9ed715000e9","unresolved":false,"context_lines":[{"line_number":14,"context_line":"are used and implemented should be generic enough to cover completely"},{"line_number":15,"context_line":"customized authentication solutions."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The subset of authentication plugins intended for use with a Keystone server"},{"line_number":18,"context_line":"are called Identity Plugins."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_c1e2a600","line":17,"in_reply_to":"dab895d6_a2117fae","updated":"2014-07-02 12:20:14.000000000","message":"Done","commit_id":"7bfda725d3090ff255176a2ed552fabafc24bea5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"22d318d36d67b5117794556e219956a492c63787","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"V3 Identity plugins are slightly different from their V2 counterparts as a V3"},{"line_number":47,"context_line":"authentication request can contain multiple authentication methods."},{"line_number":48,"context_line":"To handle this V3 defines a number of different :py:class:`~keystoneclient.auth.identity.v3.AuthMethod`:"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"- :py:class:`~keystoneclient.auth.identity.v3.PasswordMethod`: Authenticate"},{"line_number":51,"context_line":"  against a V3 identity service using a username and password."}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab895d6_e2229700","line":48,"updated":"2014-06-29 17:37:39.000000000","message":"suggest split up long lines so that it\u0027s easier to review.\n\nalso, add \"classes\" after this.","commit_id":"7bfda725d3090ff255176a2ed552fabafc24bea5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e08e972d5e711bb4b93aa6e271fef9ed715000e9","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"V3 Identity plugins are slightly different from their V2 counterparts as a V3"},{"line_number":47,"context_line":"authentication request can contain multiple authentication methods."},{"line_number":48,"context_line":"To handle this V3 defines a number of different :py:class:`~keystoneclient.auth.identity.v3.AuthMethod`:"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"- :py:class:`~keystoneclient.auth.identity.v3.PasswordMethod`: Authenticate"},{"line_number":51,"context_line":"  against a V3 identity service using a username and password."}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_e11a4a16","line":48,"in_reply_to":"dab895d6_e2229700","updated":"2014-07-02 12:20:14.000000000","message":"Done","commit_id":"7bfda725d3090ff255176a2ed552fabafc24bea5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"22d318d36d67b5117794556e219956a492c63787","unresolved":false,"context_lines":[{"line_number":115,"context_line":":py:meth:`~keystoneclient.auth.identity.v3.AuthMethod.get_auth_data` function."},{"line_number":116,"context_line":"If your Plugin cannot be used in conjunction with existing"},{"line_number":117,"context_line":":py:class:`keystoneclient.auth.identity.v3.AuthMethod` then you should just"},{"line_number":118,"context_line":"override the :py:class:`keystoneclient.auth.identity.v3.Auth` directly."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"The new :py:class:`~keystoneclient.auth.identity.v3.AuthMethod` should take all"},{"line_number":121,"context_line":"the required parameters via"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab895d6_c253d36a","line":118,"updated":"2014-06-29 17:37:39.000000000","message":"change \"override the\" to \"override\"","commit_id":"7bfda725d3090ff255176a2ed552fabafc24bea5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e08e972d5e711bb4b93aa6e271fef9ed715000e9","unresolved":false,"context_lines":[{"line_number":115,"context_line":":py:meth:`~keystoneclient.auth.identity.v3.AuthMethod.get_auth_data` function."},{"line_number":116,"context_line":"If your Plugin cannot be used in conjunction with existing"},{"line_number":117,"context_line":":py:class:`keystoneclient.auth.identity.v3.AuthMethod` then you should just"},{"line_number":118,"context_line":"override the :py:class:`keystoneclient.auth.identity.v3.Auth` directly."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"The new :py:class:`~keystoneclient.auth.identity.v3.AuthMethod` should take all"},{"line_number":121,"context_line":"the required parameters via"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_61b55aed","line":118,"in_reply_to":"dab895d6_c253d36a","updated":"2014-07-02 12:20:14.000000000","message":"Done","commit_id":"7bfda725d3090ff255176a2ed552fabafc24bea5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0132ea95b894a72ba00643eb042a7f9f767f792e","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"V3 Identity plugins are slightly different from their V2 counterparts as a V3"},{"line_number":47,"context_line":"authentication request can contain multiple authentication methods.  To handle"},{"line_number":48,"context_line":"this V3 defines a number of different"},{"line_number":49,"context_line":":py:class:`~keystoneclient.auth.identity.v3.AuthMethod` classes:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"- :py:class:`~keystoneclient.auth.identity.v3.PasswordMethod`: Authenticate"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_8a2f1088","line":48,"updated":"2014-07-16 14:24:40.000000000","message":"add a comma after *this*,","commit_id":"326d4fbbdb1d73abad2546dd98400a922fc8edf1"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0132ea95b894a72ba00643eb042a7f9f767f792e","unresolved":false,"context_lines":[{"line_number":96,"context_line":"where you have an ``ADMIN_TOKEN`` or in testing when you specifically know the"},{"line_number":97,"context_line":"endpoint you want to communicate with."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"It can be found at :py:class:`keystoneclient.auth.token_endpoint.Token`."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Creating Authentication Plugins"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_2a94448b","line":99,"updated":"2014-07-16 14:24:40.000000000","message":"an example of this would be pretty neat too","commit_id":"326d4fbbdb1d73abad2546dd98400a922fc8edf1"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"25f587b5b32d767486a09121d30cfeeea9833ea2","unresolved":false,"context_lines":[{"line_number":97,"context_line":"endpoint you want to communicate with."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"It can be found at :py:class:`keystoneclient.auth.token_endpoint.Token`."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Creating Authentication Plugins"},{"line_number":103,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_89ed10f2","line":100,"updated":"2014-07-03 08:48:00.000000000","message":"I think a mention of existing contrib plugins would be interesting, namely the oauth1 plugin: \n:py:class:`~keystoneclient.v3.contrib.oauth1.auth.OAuth`","commit_id":"326d4fbbdb1d73abad2546dd98400a922fc8edf1"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0132ea95b894a72ba00643eb042a7f9f767f792e","unresolved":false,"context_lines":[{"line_number":97,"context_line":"endpoint you want to communicate with."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"It can be found at :py:class:`keystoneclient.auth.token_endpoint.Token`."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Creating Authentication Plugins"},{"line_number":103,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_ea7a4c76","line":100,"in_reply_to":"baada198_89ed10f2","updated":"2014-07-16 14:24:40.000000000","message":"good idea for a subsequent patch, trusts too, and federation...","commit_id":"326d4fbbdb1d73abad2546dd98400a922fc8edf1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"851368b92169c69cc5d7d57fd55c6f0999a47bb9","unresolved":false,"context_lines":[{"line_number":151,"context_line":"retrieve the string token from a plugin. It is intended that a plugin will"},{"line_number":152,"context_line":"cache a received token and so if the token is still valid then it should be"},{"line_number":153,"context_line":"re-used rather than fetching a new one. A session object is provided with which"},{"line_number":154,"context_line":"the plugin can contact it\u0027s server. (Note: use `authenticated\u003dFalse` when"},{"line_number":155,"context_line":"making those requests or it will end up being called recursively). The return"},{"line_number":156,"context_line":"value should be the token as a string."},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_45fa5b44","line":154,"updated":"2014-07-16 08:50:07.000000000","message":"nit: \"it\u0027s\" (to prevent formatting strangeness)","commit_id":"326d4fbbdb1d73abad2546dd98400a922fc8edf1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"851368b92169c69cc5d7d57fd55c6f0999a47bb9","unresolved":false,"context_lines":[{"line_number":156,"context_line":"value should be the token as a string."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":":py:meth:`~keystoneclient.auth.base.BaseAuthPlugin.get_endpoint` is called to"},{"line_number":159,"context_line":"determine a base URL for a particular service\u0027s requests. The keyword arguments"},{"line_number":160,"context_line":"provided to the function are those that are given by the `endpoint_filter`"},{"line_number":161,"context_line":"variable in :py:meth:`keystoneclient.session.Session.request`. A session object"},{"line_number":162,"context_line":"is also provided so that the plugin may contact an external source to determine"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_c542eb67","line":159,"updated":"2014-07-16 08:50:07.000000000","message":"nit: \"service\u0027s\"","commit_id":"326d4fbbdb1d73abad2546dd98400a922fc8edf1"}],"doc/source/conf.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"22d318d36d67b5117794556e219956a492c63787","unresolved":false,"context_lines":[{"line_number":28,"context_line":"sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__),"},{"line_number":29,"context_line":"                \u0027..\u0027)))"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"os.environ[\u0027SPHINX_BUILD\u0027] \u003d \u00271\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# If extensions (or modules to document with autodoc) are in another directory,"},{"line_number":34,"context_line":"# add these directories to sys.path here. If the directory is relative to the"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab895d6_224bafb1","line":31,"updated":"2014-06-29 17:37:39.000000000","message":"what is this doing here? It\u0027s not mentioned in the commit message.","commit_id":"7bfda725d3090ff255176a2ed552fabafc24bea5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e08e972d5e711bb4b93aa6e271fef9ed715000e9","unresolved":false,"context_lines":[{"line_number":28,"context_line":"sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__),"},{"line_number":29,"context_line":"                \u0027..\u0027)))"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"os.environ[\u0027SPHINX_BUILD\u0027] \u003d \u00271\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# If extensions (or modules to document with autodoc) are in another directory,"},{"line_number":34,"context_line":"# add these directories to sys.path here. If the directory is relative to the"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_01a9fe7a","line":31,"in_reply_to":"dab895d6_224bafb1","updated":"2014-07-02 12:20:14.000000000","message":"oops, this shouldn\u0027t have ended up here.","commit_id":"7bfda725d3090ff255176a2ed552fabafc24bea5"}]}
