)]}'
{"EXTENSIONS_HOWTO.rst":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"855e461e182dee2d19fa1150c1249c9d184c5752","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Example::"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    [example]"},{"line_number":53,"context_line":"    driver \u003d keystone.contrib.example.backends.sql.mySQLClass"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAATn%2F%2F9R0%3D","line":52,"updated":"2013-10-24 16:19:35.000000000","message":"Is \u0027example\u0027 here intended to be the \u0027extension\u0027 being added? Like \u0027my_extention\u0027 above?","commit_id":"523db2c98944e2b6a3dbe0335a5c9b0be2798729"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"a8b0c2306fe5e97cf1f8b4cbc4d15dd88cbb1c18","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Example::"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    [example]"},{"line_number":53,"context_line":"    driver \u003d keystone.contrib.example.backends.sql.mySQLClass"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAATn%2F%2F9OU%3D","line":52,"in_reply_to":"AAAATn%2F%2F9R0%3D","updated":"2013-10-24 16:38:53.000000000","message":"Yes. This will be the section for your extension. I kept the name \"example\" because of the real example extension present in the code, so hopefully people can follow the changes throughout.","commit_id":"523db2c98944e2b6a3dbe0335a5c9b0be2798729"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"855e461e182dee2d19fa1150c1249c9d184c5752","unresolved":false,"context_lines":[{"line_number":98,"context_line":"------------------------"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"The `__init__.py` file represents the package constructor. Extension needs to"},{"line_number":101,"context_line":"import what necessary from the `core.py` module."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Example:"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAATn%2F%2F9S0%3D","line":101,"updated":"2013-10-24 16:19:35.000000000","message":"what -\u003e what is ?","commit_id":"523db2c98944e2b6a3dbe0335a5c9b0be2798729"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"a8b0c2306fe5e97cf1f8b4cbc4d15dd88cbb1c18","unresolved":false,"context_lines":[{"line_number":98,"context_line":"------------------------"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"The `__init__.py` file represents the package constructor. Extension needs to"},{"line_number":101,"context_line":"import what necessary from the `core.py` module."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Example:"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAATn%2F%2F9OA%3D","line":101,"in_reply_to":"AAAATn%2F%2F9S0%3D","updated":"2013-10-24 16:38:53.000000000","message":"Done","commit_id":"523db2c98944e2b6a3dbe0335a5c9b0be2798729"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"855e461e182dee2d19fa1150c1249c9d184c5752","unresolved":false,"context_lines":[{"line_number":223,"context_line":"repository."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"In order to create the Extension tables and its attributesa db_sync command must"},{"line_number":227,"context_line":"be executed."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAATn%2F%2F9R4%3D","line":226,"updated":"2013-10-24 16:19:35.000000000","message":"separate \u0027attributes\u0027 and \u0027a\u0027","commit_id":"523db2c98944e2b6a3dbe0335a5c9b0be2798729"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"a8b0c2306fe5e97cf1f8b4cbc4d15dd88cbb1c18","unresolved":false,"context_lines":[{"line_number":223,"context_line":"repository."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"In order to create the Extension tables and its attributesa db_sync command must"},{"line_number":227,"context_line":"be executed."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAATn%2F%2F9Ng%3D","line":226,"in_reply_to":"AAAATn%2F%2F9R4%3D","updated":"2013-10-24 16:38:53.000000000","message":"Done","commit_id":"523db2c98944e2b6a3dbe0335a5c9b0be2798729"}],"doc/source/EXTENSIONS_HOWTO.rst":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0440919b36d8d2329f7d904a326ffa5c42423d53","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"                         \\ core.py              (mandatory)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"                         \\ controllers.py       (optional)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"                         \\ routers.py           (optional)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAATn%2F%2F87A%3D","line":31,"updated":"2013-10-24 17:37:00.000000000","message":"can we change (optional) to (recommended) for controllers and routers?","commit_id":"a37a412fd63e6487e7171f5ce27b8cb5d38e671c"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"4424cb4d694de7798eba7971cad63eedea9120c6","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"                         \\ core.py              (mandatory)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"                         \\ controllers.py       (optional)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"                         \\ routers.py           (optional)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAATn%2F%2F31k%3D","line":31,"in_reply_to":"AAAATn%2F%2F87A%3D","updated":"2013-10-25 21:22:22.000000000","message":"Done","commit_id":"a37a412fd63e6487e7171f5ce27b8cb5d38e671c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0440919b36d8d2329f7d904a326ffa5c42423d53","unresolved":false,"context_lines":[{"line_number":36,"context_line":"- If the Extension implements backends a `backends` folder should exist."},{"line_number":37,"context_line":"- If the Extension adds data a `migrate_repo` folder should exist."},{"line_number":38,"context_line":"- If configuration changes are required/introduced in the `keystone.conf.sample`"},{"line_number":39,"context_line":"  file, these should be kept disabled as default and have their own element."},{"line_number":40,"context_line":"- If configuration changes are required/introduced in the `keystone-paste.ini`,"},{"line_number":41,"context_line":"  the new filter must be declared."},{"line_number":42,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAATn%2F%2F86o%3D","line":39,"updated":"2013-10-24 17:37:00.000000000","message":"nit: change element to section","commit_id":"a37a412fd63e6487e7171f5ce27b8cb5d38e671c"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"4424cb4d694de7798eba7971cad63eedea9120c6","unresolved":false,"context_lines":[{"line_number":36,"context_line":"- If the Extension implements backends a `backends` folder should exist."},{"line_number":37,"context_line":"- If the Extension adds data a `migrate_repo` folder should exist."},{"line_number":38,"context_line":"- If configuration changes are required/introduced in the `keystone.conf.sample`"},{"line_number":39,"context_line":"  file, these should be kept disabled as default and have their own element."},{"line_number":40,"context_line":"- If configuration changes are required/introduced in the `keystone-paste.ini`,"},{"line_number":41,"context_line":"  the new filter must be declared."},{"line_number":42,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAATn%2F%2F31Q%3D","line":39,"in_reply_to":"AAAATn%2F%2F86o%3D","updated":"2013-10-25 21:22:22.000000000","message":"Done","commit_id":"a37a412fd63e6487e7171f5ce27b8cb5d38e671c"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"df58a0f872299d75090bf66c637a6a79b9b43cb9","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"                         \\ controllers.py       (mandatory for API Extension)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"                         \\ routers.py           (mandatory for API Extension)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"- If the Extension implements an API Extension the `controllers.py` and"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAATn%2F%2FzaE%3D","line":33,"updated":"2013-10-28 20:03:49.000000000","message":"Check: http://docs-draft.openstack.org/46/53046/7/check/gate-keystone-docs/a17d7d4/doc/build/html/EXTENSIONS_HOWTO.html make sure this looks like you expect it to.  It seems a little off on rendering (the \\ turn into just indents?)","commit_id":"9b5283e5ae935dc23ff2ce6067a3b08634ececfb"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"dcd20647d8197d1edd828e1a1d694c95685aaf6e","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"                         \\ controllers.py       (mandatory for API Extension)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"                         \\ routers.py           (mandatory for API Extension)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"- If the Extension implements an API Extension the `controllers.py` and"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAATn%2F%2Fyq8%3D","line":33,"in_reply_to":"AAAATn%2F%2FzaE%3D","updated":"2013-10-29 00:16:36.000000000","message":"I escaped the \\ so now it show it. I hope this is better.","commit_id":"9b5283e5ae935dc23ff2ce6067a3b08634ececfb"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"df58a0f872299d75090bf66c637a6a79b9b43cb9","unresolved":false,"context_lines":[{"line_number":36,"context_line":"- If the Extension implements an API Extension the `controllers.py` and"},{"line_number":37,"context_line":"  `routers.py` must be present and correctly handle the API Extension requests"},{"line_number":38,"context_line":"  and responses."},{"line_number":39,"context_line":"- If the Extension implements backends a `backends` folder should exist."},{"line_number":40,"context_line":"- If the Extension adds data a `migrate_repo` folder should exist."},{"line_number":41,"context_line":"- If configuration changes are required/introduced in the `keystone.conf.sample`"},{"line_number":42,"context_line":"  file, these should be kept disabled as default and have their own element."}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAATn%2F%2FzbA%3D","line":39,"updated":"2013-10-28 20:03:49.000000000","message":"Suggest adding a description of what a \"backend\" is.","commit_id":"9b5283e5ae935dc23ff2ce6067a3b08634ececfb"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"dcd20647d8197d1edd828e1a1d694c95685aaf6e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"- If the Extension implements an API Extension the `controllers.py` and"},{"line_number":37,"context_line":"  `routers.py` must be present and correctly handle the API Extension requests"},{"line_number":38,"context_line":"  and responses."},{"line_number":39,"context_line":"- If the Extension implements backends a `backends` folder should exist."},{"line_number":40,"context_line":"- If the Extension adds data a `migrate_repo` folder should exist."},{"line_number":41,"context_line":"- If configuration changes are required/introduced in the `keystone.conf.sample`"},{"line_number":42,"context_line":"  file, these should be kept disabled as default and have their own element."}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAATn%2F%2FysA%3D","line":39,"in_reply_to":"AAAATn%2F%2FzbA%3D","updated":"2013-10-29 00:16:36.000000000","message":"Done","commit_id":"9b5283e5ae935dc23ff2ce6067a3b08634ececfb"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"df58a0f872299d75090bf66c637a6a79b9b43cb9","unresolved":false,"context_lines":[{"line_number":37,"context_line":"  `routers.py` must be present and correctly handle the API Extension requests"},{"line_number":38,"context_line":"  and responses."},{"line_number":39,"context_line":"- If the Extension implements backends a `backends` folder should exist."},{"line_number":40,"context_line":"- If the Extension adds data a `migrate_repo` folder should exist."},{"line_number":41,"context_line":"- If configuration changes are required/introduced in the `keystone.conf.sample`"},{"line_number":42,"context_line":"  file, these should be kept disabled as default and have their own element."},{"line_number":43,"context_line":"- If configuration changes are required/introduced in the `keystone-paste.ini`,"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAATn%2F%2Fza0%3D","line":40,"updated":"2013-10-28 20:03:49.000000000","message":"suggest being more specific about what \"data\" is. (e.g. make the summary a little more expressive based upon the migrate_repo info below.  don\u0027t add a ton more info here.)  \"data structures\" might be sufficient (based upon description below).","commit_id":"9b5283e5ae935dc23ff2ce6067a3b08634ececfb"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"dcd20647d8197d1edd828e1a1d694c95685aaf6e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"  `routers.py` must be present and correctly handle the API Extension requests"},{"line_number":38,"context_line":"  and responses."},{"line_number":39,"context_line":"- If the Extension implements backends a `backends` folder should exist."},{"line_number":40,"context_line":"- If the Extension adds data a `migrate_repo` folder should exist."},{"line_number":41,"context_line":"- If configuration changes are required/introduced in the `keystone.conf.sample`"},{"line_number":42,"context_line":"  file, these should be kept disabled as default and have their own element."},{"line_number":43,"context_line":"- If configuration changes are required/introduced in the `keystone-paste.ini`,"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAATn%2F%2FysU%3D","line":40,"in_reply_to":"AAAATn%2F%2Fza0%3D","updated":"2013-10-29 00:16:36.000000000","message":"Done","commit_id":"9b5283e5ae935dc23ff2ce6067a3b08634ececfb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9991f8c2658fe43fc6686189f63a6e5b561c7ac6","unresolved":false,"context_lines":[{"line_number":83,"context_line":"`keystone-paste.ini` File"},{"line_number":84,"context_line":"--------------------------"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"In the case an Extension is implementing a `filter` and APIs in the `OS`"},{"line_number":87,"context_line":"namespace, a new filter is necessary to be introduced in the"},{"line_number":88,"context_line":"`keystone-paste.ini` file."},{"line_number":89,"context_line":"The Extension should declare the filter factory constructor in the `ini` file."}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAATn%2F%2FyY8%3D","line":86,"updated":"2013-10-29 03:07:32.000000000","message":"nit: I think you described this better in line 45, \"implementing a filter\" sounds funny to me (imo).","commit_id":"0af9defd8013cca60270ab246ab8513df98b1833"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"2ff3dae24ce956e5e38fc2156799b59d1de46a6e","unresolved":false,"context_lines":[{"line_number":83,"context_line":"`keystone-paste.ini` File"},{"line_number":84,"context_line":"--------------------------"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"In the case an Extension is implementing a `filter` and APIs in the `OS`"},{"line_number":87,"context_line":"namespace, a new filter is necessary to be introduced in the"},{"line_number":88,"context_line":"`keystone-paste.ini` file."},{"line_number":89,"context_line":"The Extension should declare the filter factory constructor in the `ini` file."}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAATn%2F%2FyTA%3D","line":86,"in_reply_to":"AAAATn%2F%2FyY8%3D","updated":"2013-10-29 04:33:15.000000000","message":"Done","commit_id":"0af9defd8013cca60270ab246ab8513df98b1833"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9991f8c2658fe43fc6686189f63a6e5b561c7ac6","unresolved":false,"context_lines":[{"line_number":136,"context_line":"-------"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"`routers.py` have the objective of routing the HTTP requests and direct them to"},{"line_number":139,"context_line":"the right method within the `Controllers`. Extension routers are extending the"},{"line_number":140,"context_line":"`wsgi.ExtensionRouter` and hence they need to import the `wsgi` package."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAATn%2F%2FyZU%3D","line":139,"updated":"2013-10-29 03:07:32.000000000","message":"nit: I think this last sentence is a bit redundant, or at least the part that describes the import anyway.","commit_id":"0af9defd8013cca60270ab246ab8513df98b1833"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"2ff3dae24ce956e5e38fc2156799b59d1de46a6e","unresolved":false,"context_lines":[{"line_number":136,"context_line":"-------"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"`routers.py` have the objective of routing the HTTP requests and direct them to"},{"line_number":139,"context_line":"the right method within the `Controllers`. Extension routers are extending the"},{"line_number":140,"context_line":"`wsgi.ExtensionRouter` and hence they need to import the `wsgi` package."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAATn%2F%2FySs%3D","line":139,"in_reply_to":"AAAATn%2F%2FyZU%3D","updated":"2013-10-29 04:33:15.000000000","message":"Done","commit_id":"0af9defd8013cca60270ab246ab8513df98b1833"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9991f8c2658fe43fc6686189f63a6e5b561c7ac6","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                              \\\\\\   kvs.py            (optional)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"In the `sql.py` backend implementation is mandatory to define the new table(s)"},{"line_number":203,"context_line":"that the Extension introduces and the attributes they are composed of."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAATn%2F%2FyZc%3D","line":202,"updated":"2013-10-29 03:07:32.000000000","message":"nit: ... *it* is mandatory to define ...","commit_id":"0af9defd8013cca60270ab246ab8513df98b1833"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"2ff3dae24ce956e5e38fc2156799b59d1de46a6e","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                              \\\\\\   kvs.py            (optional)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"In the `sql.py` backend implementation is mandatory to define the new table(s)"},{"line_number":203,"context_line":"that the Extension introduces and the attributes they are composed of."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAATn%2F%2FyS4%3D","line":202,"in_reply_to":"AAAATn%2F%2FyZc%3D","updated":"2013-10-29 04:33:15.000000000","message":"Done","commit_id":"0af9defd8013cca60270ab246ab8513df98b1833"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"c12b7553c43995fc6695b519993fd1c28df430e4","unresolved":false,"context_lines":[{"line_number":38,"context_line":"  and responses."},{"line_number":39,"context_line":"- If the Extension implements backends a `backends` folder should exist."},{"line_number":40,"context_line":"  Backends are defined to store data persistently and can use a variety of"},{"line_number":41,"context_line":"  technologies. Please see the Backends section in this document for more info."},{"line_number":42,"context_line":"- If the Extension adds data structures a `migrate_repo` folder should exist."},{"line_number":43,"context_line":"- If configuration changes are required/introduced in the `keystone.conf.sample`"},{"line_number":44,"context_line":"  file, these should be kept disabled as default and have their own element."}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAATn%2F%2FqYw%3D","line":41,"updated":"2013-10-30 18:32:04.000000000","message":"++ Good Description of backends.  Much clearer.","commit_id":"092da0b8cb2a9522e9ff8f9f799169a2c211f2bd"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"c12b7553c43995fc6695b519993fd1c28df430e4","unresolved":false,"context_lines":[{"line_number":116,"context_line":"----"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"The `core.py` file represents the main module defining the data structure and"},{"line_number":119,"context_line":"interface. In the `Model View Control` (MVC) model it represent the `Model` part"},{"line_number":120,"context_line":"and it delegates to the `Backends` the data layer implementation."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"In case the `core.py` file contains a `Manager` and a `Driver` it must provide"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAATn%2F%2FqY0%3D","line":119,"updated":"2013-10-30 18:32:04.000000000","message":"represent should be \"represents\"","commit_id":"092da0b8cb2a9522e9ff8f9f799169a2c211f2bd"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"8fefc36b3d318423f0dbd3a2a95f45b25fdc4a4d","unresolved":false,"context_lines":[{"line_number":116,"context_line":"----"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"The `core.py` file represents the main module defining the data structure and"},{"line_number":119,"context_line":"interface. In the `Model View Control` (MVC) model it represent the `Model` part"},{"line_number":120,"context_line":"and it delegates to the `Backends` the data layer implementation."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"In case the `core.py` file contains a `Manager` and a `Driver` it must provide"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAATn%2F%2Fpz4%3D","line":119,"in_reply_to":"AAAATn%2F%2FqY0%3D","updated":"2013-10-30 20:17:48.000000000","message":"Done","commit_id":"092da0b8cb2a9522e9ff8f9f799169a2c211f2bd"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"c12b7553c43995fc6695b519993fd1c28df430e4","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                              \\\\\\   kvs.py            (optional)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"In the `sql.py` backend implementation it is mandatory to define the new"},{"line_number":203,"context_line":"table(s) that the Extension introduces and the attributes they are composed of."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAATn%2F%2FqWg%3D","line":202,"updated":"2013-10-30 18:32:04.000000000","message":"Suggest minor rephrase to indicate SQL is not a required backend.  e.g. \"If a SQL backend is provided, in the `sql.py`...\"","commit_id":"092da0b8cb2a9522e9ff8f9f799169a2c211f2bd"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"8fefc36b3d318423f0dbd3a2a95f45b25fdc4a4d","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                              \\\\\\   kvs.py            (optional)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"In the `sql.py` backend implementation it is mandatory to define the new"},{"line_number":203,"context_line":"table(s) that the Extension introduces and the attributes they are composed of."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAATn%2F%2Fpzw%3D","line":202,"in_reply_to":"AAAATn%2F%2FqWg%3D","updated":"2013-10-30 20:17:48.000000000","message":"Done","commit_id":"092da0b8cb2a9522e9ff8f9f799169a2c211f2bd"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"c12b7553c43995fc6695b519993fd1c28df430e4","unresolved":false,"context_lines":[{"line_number":228,"context_line":"------------------"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"In case the Extension is adding data structures, these must be stored in a"},{"line_number":231,"context_line":"separate database and must not be included in the `migrate_repo` of the core"},{"line_number":232,"context_line":"Keystone. Please refere to the \u0027migrate.cfg\u0027 file to configure the Extension"},{"line_number":233,"context_line":"repository."},{"line_number":234,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAATn%2F%2FqMM%3D","line":231,"updated":"2013-10-30 18:32:04.000000000","message":"I don\u0027t believe we are storing in separate databases, but adding new tables to the already existing keystone database.  The idea is to isolate the need for these migrations (and tables) if the extension is not being used.","commit_id":"092da0b8cb2a9522e9ff8f9f799169a2c211f2bd"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"fac4221813306cfab108d635e967b852168df700","unresolved":false,"context_lines":[{"line_number":228,"context_line":"------------------"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"In case the Extension is adding data structures, these must be stored in a"},{"line_number":231,"context_line":"separate database and must not be included in the `migrate_repo` of the core"},{"line_number":232,"context_line":"Keystone. Please refere to the \u0027migrate.cfg\u0027 file to configure the Extension"},{"line_number":233,"context_line":"repository."},{"line_number":234,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAATn%2F%2Fpy0%3D","line":231,"in_reply_to":"AAAATn%2F%2FqMM%3D","updated":"2013-10-30 20:18:19.000000000","message":"Done","commit_id":"092da0b8cb2a9522e9ff8f9f799169a2c211f2bd"}],"keystone/contrib/example/__init__.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"df58a0f872299d75090bf66c637a6a79b9b43cb9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#package init"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2Fzdo%3D","line":1,"updated":"2013-10-28 20:03:49.000000000","message":"(NIT) suggest removing this line.  I don\u0027t think we should encourage new extensions to have this comment in them.","commit_id":"9b5283e5ae935dc23ff2ce6067a3b08634ececfb"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"dcd20647d8197d1edd828e1a1d694c95685aaf6e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#package init"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2Fyr8%3D","line":1,"in_reply_to":"AAAATn%2F%2Fzdo%3D","updated":"2013-10-29 00:16:36.000000000","message":"Done","commit_id":"9b5283e5ae935dc23ff2ce6067a3b08634ececfb"}],"keystone/contrib/example/configuration.rst":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"855e461e182dee2d19fa1150c1249c9d184c5752","unresolved":false,"context_lines":[{"line_number":1,"context_line":".."},{"line_number":2,"context_line":"      Copyright 2011-2013 OpenStack, Foundation"},{"line_number":3,"context_line":"      All Rights Reserved."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"      Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAATn%2F%2F9RQ%3D","line":2,"updated":"2013-10-24 16:19:35.000000000","message":"Newly added file with a copyright from previous year? This *might* only need the 2013, not entirely sure but thought I\u0027d comment.","commit_id":"523db2c98944e2b6a3dbe0335a5c9b0be2798729"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"a8b0c2306fe5e97cf1f8b4cbc4d15dd88cbb1c18","unresolved":false,"context_lines":[{"line_number":1,"context_line":".."},{"line_number":2,"context_line":"      Copyright 2011-2013 OpenStack, Foundation"},{"line_number":3,"context_line":"      All Rights Reserved."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"      Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAATn%2F%2F9LI%3D","line":2,"in_reply_to":"AAAATn%2F%2F9RQ%3D","updated":"2013-10-24 16:38:53.000000000","message":"Done","commit_id":"523db2c98944e2b6a3dbe0335a5c9b0be2798729"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"855e461e182dee2d19fa1150c1249c9d184c5752","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Please describe here in details how to enable your extension:"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"1. add the required fields and values in the ``[example]`` section"},{"line_number":24,"context_line":"   in ``keystone.conf``."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"2. optional: add the required ``filter`` to the ``pipeline`` in ``keystone-paste.ini``"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAATn%2F%2F9Q4%3D","line":23,"updated":"2013-10-24 16:19:35.000000000","message":"Should \u0027example\u0027 be something more descriptive of the extension being added? Like \u0027my_new_extension\u0027?","commit_id":"523db2c98944e2b6a3dbe0335a5c9b0be2798729"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"a8b0c2306fe5e97cf1f8b4cbc4d15dd88cbb1c18","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Please describe here in details how to enable your extension:"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"1. add the required fields and values in the ``[example]`` section"},{"line_number":24,"context_line":"   in ``keystone.conf``."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"2. optional: add the required ``filter`` to the ``pipeline`` in ``keystone-paste.ini``"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAATn%2F%2F9K4%3D","line":23,"in_reply_to":"AAAATn%2F%2F9Q4%3D","updated":"2013-10-24 16:38:53.000000000","message":"Since this is the config.rst file inside the example extension it should have a section name that reflects the extension name.","commit_id":"523db2c98944e2b6a3dbe0335a5c9b0be2798729"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0440919b36d8d2329f7d904a326ffa5c42423d53","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Please describe here in details how to enable your extension:"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"1. add the required fields and values in the ``[example]`` section"},{"line_number":24,"context_line":"   in ``keystone.conf``."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"2. optional: add the required ``filter`` to the ``pipeline`` in ``keystone-paste.ini``"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAATn%2F%2F87o%3D","line":23,"updated":"2013-10-24 17:37:00.000000000","message":"nit: capitalize the first letters","commit_id":"a37a412fd63e6487e7171f5ce27b8cb5d38e671c"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"4424cb4d694de7798eba7971cad63eedea9120c6","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Please describe here in details how to enable your extension:"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"1. add the required fields and values in the ``[example]`` section"},{"line_number":24,"context_line":"   in ``keystone.conf``."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"2. optional: add the required ``filter`` to the ``pipeline`` in ``keystone-paste.ini``"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAATn%2F%2F304%3D","line":23,"in_reply_to":"AAAATn%2F%2F87o%3D","updated":"2013-10-25 21:22:22.000000000","message":"Done","commit_id":"a37a412fd63e6487e7171f5ce27b8cb5d38e671c"}],"keystone/contrib/example/core.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0440919b36d8d2329f7d904a326ffa5c42423d53","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@dependency.provider(\u0027example_api\u0027)"},{"line_number":30,"context_line":"class Manager(manager.Manager):"},{"line_number":31,"context_line":"    \"\"\"Example Manager."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    See :mod:`keystone.common.manager.Manager` for more details on how this"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2F88g%3D","line":30,"updated":"2013-10-24 17:37:00.000000000","message":"class ExampleManager","commit_id":"a37a412fd63e6487e7171f5ce27b8cb5d38e671c"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"4424cb4d694de7798eba7971cad63eedea9120c6","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@dependency.provider(\u0027example_api\u0027)"},{"line_number":30,"context_line":"class Manager(manager.Manager):"},{"line_number":31,"context_line":"    \"\"\"Example Manager."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    See :mod:`keystone.common.manager.Manager` for more details on how this"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2F3zs%3D","line":30,"in_reply_to":"AAAATn%2F%2F88g%3D","updated":"2013-10-25 21:22:22.000000000","message":"Done","commit_id":"a37a412fd63e6487e7171f5ce27b8cb5d38e671c"},{"author":{"_account_id":5971,"name":"nachiappan-veerappan-nachiappan","email":"nachiappan_vrn@yahoo.com","username":"nachiappan-veerappan-nachiappan"},"change_message_id":"f108bfd8b8cf566b998c63cb2344fb9f7a9b589c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    dynamically calls the backend."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    \"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class Driver(object):"},{"line_number":40,"context_line":"    \"\"\"Interface description for Example driver.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2F8uM%3D","line":37,"updated":"2013-10-24 18:21:49.000000000","message":"Fabio, \n\nShould the following be part of the template \n\ndef __init__(self):\n        super(Manager, self).__init__(CONF.ExampleDriver.driver)","commit_id":"a37a412fd63e6487e7171f5ce27b8cb5d38e671c"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"4424cb4d694de7798eba7971cad63eedea9120c6","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    dynamically calls the backend."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    \"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class Driver(object):"},{"line_number":40,"context_line":"    \"\"\"Interface description for Example driver.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2F3v4%3D","line":37,"in_reply_to":"AAAATn%2F%2F8uM%3D","updated":"2013-10-25 21:22:22.000000000","message":"Thanks, good suggestion!\nDone","commit_id":"a37a412fd63e6487e7171f5ce27b8cb5d38e671c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0440919b36d8d2329f7d904a326ffa5c42423d53","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class Driver(object):"},{"line_number":40,"context_line":"    \"\"\"Interface description for Example driver.\"\"\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def do_something(self, data):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2F88c%3D","line":39,"updated":"2013-10-24 17:37:00.000000000","message":"class ExampleDriver","commit_id":"a37a412fd63e6487e7171f5ce27b8cb5d38e671c"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"4424cb4d694de7798eba7971cad63eedea9120c6","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class Driver(object):"},{"line_number":40,"context_line":"    \"\"\"Interface description for Example driver.\"\"\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def do_something(self, data):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2F3zw%3D","line":39,"in_reply_to":"AAAATn%2F%2F88c%3D","updated":"2013-10-25 21:22:22.000000000","message":"Done","commit_id":"a37a412fd63e6487e7171f5ce27b8cb5d38e671c"}]}
