)]}'
{"doc/source/contributor/api_change_tutorial.rst":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4d820edf9b3644e1900acf361f539cd3fb40da90","unresolved":false,"context_lines":[{"line_number":75,"context_line":"Architectural Recapitulation"},{"line_number":76,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"As you saw in the :doc:`../getting-started/architecture` document, there are"},{"line_number":79,"context_line":"four logical levels of code at which a successful request calls: router,"},{"line_number":80,"context_line":"controller, manager and"},{"line_number":81,"context_line":"driver."},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_459334fb","side":"PARENT","line":79,"range":{"start_line":78,"start_character":67,"end_line":79,"end_character":27},"updated":"2020-05-12 23:31:35.000000000","message":"There are still different logical levels, it would be unfortunate to lose that information. I think we could say there are three now, since flask kind of combines the router and controller layers.","commit_id":"7bb6314e40d6947294260324e84a58de191f8609"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4d820edf9b3644e1900acf361f539cd3fb40da90","unresolved":false,"context_lines":[{"line_number":81,"context_line":"driver."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"For the role backend, they can be found in the directory `keystone/assignment`,"},{"line_number":84,"context_line":"in the following paths, respectively: `routers.py`, `controllers.py`, `core.py`"},{"line_number":85,"context_line":"and `role_backends/sql.py` (currently only the SQL driver is supported)."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Changing the SQL Model and Driver"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_889ba3c7","side":"PARENT","line":84,"range":{"start_line":84,"start_character":71,"end_line":84,"end_character":78},"updated":"2020-05-12 23:31:35.000000000","message":"this is still important","commit_id":"7bb6314e40d6947294260324e84a58de191f8609"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4d820edf9b3644e1900acf361f539cd3fb40da90","unresolved":false,"context_lines":[{"line_number":145,"context_line":"Changing the Controller and Router"},{"line_number":146,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Business logic should not go in the controller. The controller should be viewed"},{"line_number":149,"context_line":"as a binding between the business logic and the HTTP protocol. Thus, it is in"},{"line_number":150,"context_line":"charge of calling the appropriate manager call and wrapping responses into HTTP"},{"line_number":151,"context_line":"format."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"Controllers use JSON schemas do determine whether a provided role is a valid"},{"line_number":154,"context_line":"representation or not. Role create and role update schemas are available at"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_68d56f43","side":"PARENT","line":151,"range":{"start_line":148,"start_character":0,"end_line":151,"end_character":7},"updated":"2020-05-12 23:31:35.000000000","message":"This is still vital information. I would prefer to reword it rather than delete it.","commit_id":"7bb6314e40d6947294260324e84a58de191f8609"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4d820edf9b3644e1900acf361f539cd3fb40da90","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"Besides doing the entity validation using such schemas, controllers pass and"},{"line_number":165,"context_line":"accept all the attributes to and from the manager. Thus, there is no further"},{"line_number":166,"context_line":"change needed at the controller level."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Furthermore, as role entities are passed in the request body to keystone calls,"},{"line_number":169,"context_line":"the role routes do not need to be changed; i.e the routes still are::"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_285097d4","side":"PARENT","line":166,"updated":"2020-05-12 23:31:35.000000000","message":"This is important information.","commit_id":"7bb6314e40d6947294260324e84a58de191f8609"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4d820edf9b3644e1900acf361f539cd3fb40da90","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"As you saw in the :doc:`../getting-started/architecture` document, from rocky"},{"line_number":79,"context_line":"release of openstack keystone adopted `Flask-RESTful`_ that allows to define"},{"line_number":80,"context_line":"API\u0027s successfully and request calls to the appropriate manager and driver."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":".. _`Flask-RESTful`: https://flask-restful.readthedocs.io/en/latest/"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_455a144f","line":80,"range":{"start_line":80,"start_character":6,"end_line":80,"end_character":18},"updated":"2020-05-12 23:31:35.000000000","message":"This word doesn\u0027t really make sense here. In the old doc it was talking about a \"successful request\" not a successful API definition.","commit_id":"f68cf6961218cbe89d4c643bf80df64c812e0fec"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"912a76622a5a73d49c405afd95e6f065b2013d7b","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"As you saw in the :doc:`../getting-started/architecture` document, from rocky"},{"line_number":79,"context_line":"release of openstack keystone adopted `Flask-RESTful`_ that allows to define"},{"line_number":80,"context_line":"API\u0027s successfully and request calls to the appropriate manager and driver."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":".. _`Flask-RESTful`: https://flask-restful.readthedocs.io/en/latest/"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_2ddea96c","line":80,"range":{"start_line":80,"start_character":6,"end_line":80,"end_character":18},"in_reply_to":"ff570b3c_455a144f","updated":"2020-05-15 12:58:22.000000000","message":"Thanks Colleen for helping out here.","commit_id":"f68cf6961218cbe89d4c643bf80df64c812e0fec"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4d820edf9b3644e1900acf361f539cd3fb40da90","unresolved":false,"context_lines":[{"line_number":78,"context_line":"As you saw in the :doc:`../getting-started/architecture` document, from rocky"},{"line_number":79,"context_line":"release of openstack keystone adopted `Flask-RESTful`_ that allows to define"},{"line_number":80,"context_line":"API\u0027s successfully and request calls to the appropriate manager and driver."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":".. _`Flask-RESTful`: https://flask-restful.readthedocs.io/en/latest/"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"For the role backend, they can be found in the directory `keystone/assignment`,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_e8369fe7","line":81,"updated":"2020-05-12 23:31:35.000000000","message":"I don\u0027t think this sentence needs to change this much. Flask isn\u0027t really important here, it\u0027s an implementation detail. I would just keep it mostly the same, something like \"...there are three logical levels of code through which a request passes: the API routing and request handling layer, the resource manager, and the driver.\"","commit_id":"f68cf6961218cbe89d4c643bf80df64c812e0fec"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"912a76622a5a73d49c405afd95e6f065b2013d7b","unresolved":false,"context_lines":[{"line_number":78,"context_line":"As you saw in the :doc:`../getting-started/architecture` document, from rocky"},{"line_number":79,"context_line":"release of openstack keystone adopted `Flask-RESTful`_ that allows to define"},{"line_number":80,"context_line":"API\u0027s successfully and request calls to the appropriate manager and driver."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":".. _`Flask-RESTful`: https://flask-restful.readthedocs.io/en/latest/"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"For the role backend, they can be found in the directory `keystone/assignment`,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_4de15d2a","line":81,"in_reply_to":"ff570b3c_e8369fe7","updated":"2020-05-15 12:58:22.000000000","message":"Done","commit_id":"f68cf6961218cbe89d4c643bf80df64c812e0fec"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4d820edf9b3644e1900acf361f539cd3fb40da90","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":".. _`Flask-RESTful`: https://flask-restful.readthedocs.io/en/latest/"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"For the role backend, they can be found in the directory `keystone/assignment`,"},{"line_number":85,"context_line":"in the following paths, respectively: the keystone API\u0027s at `keystone/api` and"},{"line_number":86,"context_line":"`role_backends/sql.py` (currently only the SQL driver is supported)."},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_c8a59b06","line":84,"range":{"start_line":84,"start_character":40,"end_line":84,"end_character":78},"updated":"2020-05-12 23:31:35.000000000","message":"keystone/api isn\u0027t in this directory","commit_id":"f68cf6961218cbe89d4c643bf80df64c812e0fec"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"912a76622a5a73d49c405afd95e6f065b2013d7b","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":".. _`Flask-RESTful`: https://flask-restful.readthedocs.io/en/latest/"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"For the role backend, they can be found in the directory `keystone/assignment`,"},{"line_number":85,"context_line":"in the following paths, respectively: the keystone API\u0027s at `keystone/api` and"},{"line_number":86,"context_line":"`role_backends/sql.py` (currently only the SQL driver is supported)."},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_cdce0db3","line":84,"range":{"start_line":84,"start_character":40,"end_line":84,"end_character":78},"in_reply_to":"ff570b3c_c8a59b06","updated":"2020-05-15 12:58:22.000000000","message":"Done","commit_id":"f68cf6961218cbe89d4c643bf80df64c812e0fec"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4d820edf9b3644e1900acf361f539cd3fb40da90","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Managers handle the business logic. Keystone provides the basic CRUD for role"},{"line_number":131,"context_line":"entities, that means that the role manager simply calls the driver with the"},{"line_number":132,"context_line":"arguments received from appropriate HTTP methods of \u0027role\u0027resource. Additionally,"},{"line_number":133,"context_line":"it handles the cache management."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Thus, there is no manager change needed to make it able to operate role"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_68ec4f29","line":132,"range":{"start_line":132,"start_character":24,"end_line":132,"end_character":66},"updated":"2020-05-12 23:31:35.000000000","message":"This isn\u0027t capturing the original meaning. \"\u0027role\u0027resource\" isn\u0027t clear in this context. I would just replace \"controller\" in the original with \"API handler\" or \"API resource\" or \"API route\" or even \"API controller\"","commit_id":"f68cf6961218cbe89d4c643bf80df64c812e0fec"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"912a76622a5a73d49c405afd95e6f065b2013d7b","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Managers handle the business logic. Keystone provides the basic CRUD for role"},{"line_number":131,"context_line":"entities, that means that the role manager simply calls the driver with the"},{"line_number":132,"context_line":"arguments received from appropriate HTTP methods of \u0027role\u0027resource. Additionally,"},{"line_number":133,"context_line":"it handles the cache management."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Thus, there is no manager change needed to make it able to operate role"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_6dbd4101","line":132,"range":{"start_line":132,"start_character":24,"end_line":132,"end_character":66},"in_reply_to":"ff570b3c_68ec4f29","updated":"2020-05-15 12:58:22.000000000","message":"API controller seems a reasonable word.","commit_id":"f68cf6961218cbe89d4c643bf80df64c812e0fec"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4d820edf9b3644e1900acf361f539cd3fb40da90","unresolved":false,"context_lines":[{"line_number":143,"context_line":"each driver. Both common and business logics go in the manager, while backend"},{"line_number":144,"context_line":"specific logic goes in the drivers."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Changing the SCHEMA"},{"line_number":147,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"JSON schemas are used to determine whether a provided role is a valid representation"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_48e7cb41","line":146,"range":{"start_line":146,"start_character":13,"end_line":146,"end_character":19},"updated":"2020-05-12 23:31:35.000000000","message":"Why is this capitalized?\n\nThis section was about changing the API interface, not just the schema.","commit_id":"f68cf6961218cbe89d4c643bf80df64c812e0fec"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"912a76622a5a73d49c405afd95e6f065b2013d7b","unresolved":false,"context_lines":[{"line_number":143,"context_line":"each driver. Both common and business logics go in the manager, while backend"},{"line_number":144,"context_line":"specific logic goes in the drivers."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Changing the SCHEMA"},{"line_number":147,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"JSON schemas are used to determine whether a provided role is a valid representation"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_4dbafd09","line":146,"range":{"start_line":146,"start_character":13,"end_line":146,"end_character":19},"in_reply_to":"ff570b3c_48e7cb41","updated":"2020-05-15 12:58:22.000000000","message":"I updated it to API interface.","commit_id":"f68cf6961218cbe89d4c643bf80df64c812e0fec"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4d820edf9b3644e1900acf361f539cd3fb40da90","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"JSON schemas are used to determine whether a provided role is a valid representation"},{"line_number":150,"context_line":"or not. Role create and role update schemas are available at"},{"line_number":151,"context_line":"`keystone/assignment/schema.py`. Validation for a role resource will look like this::"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    class RoleResource(ks_flask.ResourceBase):"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_a844a71c","line":151,"range":{"start_line":151,"start_character":33,"end_line":151,"end_character":85},"updated":"2020-05-12 23:31:35.000000000","message":"This is confusing because you haven\u0027t mentioned which file your example is in, and the previous sentence mentioned schema.py which is not where this API logic is.","commit_id":"f68cf6961218cbe89d4c643bf80df64c812e0fec"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"912a76622a5a73d49c405afd95e6f065b2013d7b","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"JSON schemas are used to determine whether a provided role is a valid representation"},{"line_number":150,"context_line":"or not. Role create and role update schemas are available at"},{"line_number":151,"context_line":"`keystone/assignment/schema.py`. Validation for a role resource will look like this::"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    class RoleResource(ks_flask.ResourceBase):"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_ed3e7189","line":151,"range":{"start_line":151,"start_character":33,"end_line":151,"end_character":85},"in_reply_to":"ff570b3c_a844a71c","updated":"2020-05-15 12:58:22.000000000","message":"Added the file information here.","commit_id":"f68cf6961218cbe89d4c643bf80df64c812e0fec"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4d820edf9b3644e1900acf361f539cd3fb40da90","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        \u0027description\u0027: parameter_types.description"},{"line_number":166,"context_line":"    }"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"However, you should add tests for API unit test to `keystone/tests/unit/test_v3_role.py`"},{"line_number":169,"context_line":"and document about the new parameter in the `api-ref`_."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":".. _api-ref: https://docs.openstack.org/api-ref/identity/"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_a85dc7ea","line":168,"range":{"start_line":168,"start_character":0,"end_line":168,"end_character":8},"updated":"2020-05-12 23:31:35.000000000","message":"However what? This word doesn\u0027t make sense here.","commit_id":"f68cf6961218cbe89d4c643bf80df64c812e0fec"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"912a76622a5a73d49c405afd95e6f065b2013d7b","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        \u0027description\u0027: parameter_types.description"},{"line_number":166,"context_line":"    }"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"However, you should add tests for API unit test to `keystone/tests/unit/test_v3_role.py`"},{"line_number":169,"context_line":"and document about the new parameter in the `api-ref`_."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":".. _api-ref: https://docs.openstack.org/api-ref/identity/"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff570b3c_cd43ad12","line":168,"range":{"start_line":168,"start_character":0,"end_line":168,"end_character":8},"in_reply_to":"ff570b3c_a85dc7ea","updated":"2020-05-15 12:58:22.000000000","message":"Done","commit_id":"f68cf6961218cbe89d4c643bf80df64c812e0fec"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"09050c3b54646cfefccc4e47f05acc5441032f7d","unresolved":false,"context_lines":[{"line_number":79,"context_line":"three logical levels of code at which a request passes: the API routing and"},{"line_number":80,"context_line":"request handling layer, the resource manager, and the driver."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"The Role APIs can be found in directory `keystone/api`. For the role backend,"},{"line_number":83,"context_line":"they can be found in the directory `keystone/assignment`, in the following"},{"line_number":84,"context_line":"paths, respectively: `core.py` and `role_backends/sql.py` (currently only the"},{"line_number":85,"context_line":"SQL driver is supported)."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ff570b3c_8de4ca0e","line":82,"updated":"2020-05-19 21:05:17.000000000","message":"Kind of awkward phrasing. I would say:\n\n For the role backend, the API resource can be found under the `keystone/api` directory in the `role.py` file, and the manager and driver can be found in the `keystone/assignment` directory in the `core.py` and `role_backends/sql.py` files, respectively (currently only...).","commit_id":"189e25ddcf1de3a6768831810603bf23451fe9d7"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"ab456aca316b30bc95aff1378dcc9902801f1405","unresolved":false,"context_lines":[{"line_number":79,"context_line":"three logical levels of code at which a request passes: the API routing and"},{"line_number":80,"context_line":"request handling layer, the resource manager, and the driver."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"The Role APIs can be found in directory `keystone/api`. For the role backend,"},{"line_number":83,"context_line":"they can be found in the directory `keystone/assignment`, in the following"},{"line_number":84,"context_line":"paths, respectively: `core.py` and `role_backends/sql.py` (currently only the"},{"line_number":85,"context_line":"SQL driver is supported)."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ff570b3c_7a900396","line":82,"in_reply_to":"ff570b3c_8de4ca0e","updated":"2020-05-20 07:51:45.000000000","message":"Done","commit_id":"189e25ddcf1de3a6768831810603bf23451fe9d7"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"09050c3b54646cfefccc4e47f05acc5441032f7d","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"Managers handle the business logic. Keystone provides the basic CRUD for role"},{"line_number":130,"context_line":"entities, that means that the role manager simply calls the driver with the"},{"line_number":131,"context_line":"arguments received from the API controller, and then returns the driver\u0027s result"},{"line_number":132,"context_line":"back to API controller. Additionally, it handles the cache management."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"Thus, there is no manager change needed to make it able to operate role"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ff570b3c_cdc36256","line":131,"range":{"start_line":131,"start_character":28,"end_line":131,"end_character":42},"updated":"2020-05-19 21:05:17.000000000","message":"in the meeting today we discussed using \"API resource\"","commit_id":"189e25ddcf1de3a6768831810603bf23451fe9d7"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"ab456aca316b30bc95aff1378dcc9902801f1405","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"Managers handle the business logic. Keystone provides the basic CRUD for role"},{"line_number":130,"context_line":"entities, that means that the role manager simply calls the driver with the"},{"line_number":131,"context_line":"arguments received from the API controller, and then returns the driver\u0027s result"},{"line_number":132,"context_line":"back to API controller. Additionally, it handles the cache management."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"Thus, there is no manager change needed to make it able to operate role"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ff570b3c_baebbb10","line":131,"range":{"start_line":131,"start_character":28,"end_line":131,"end_character":42},"in_reply_to":"ff570b3c_cdc36256","updated":"2020-05-20 07:51:45.000000000","message":"Done","commit_id":"189e25ddcf1de3a6768831810603bf23451fe9d7"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"09050c3b54646cfefccc4e47f05acc5441032f7d","unresolved":false,"context_lines":[{"line_number":143,"context_line":"specific logic goes in the drivers."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Changing the API Interface"},{"line_number":146,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Business logic should not go in the API controller. The API controller should be"},{"line_number":149,"context_line":"viewed as a binding between the business logic and the HTTP protocol. Thus, it is in"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ff570b3c_0dc27a59","line":146,"range":{"start_line":146,"start_character":26,"end_line":146,"end_character":34},"updated":"2020-05-19 21:05:17.000000000","message":"mismatched underline","commit_id":"189e25ddcf1de3a6768831810603bf23451fe9d7"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"ab456aca316b30bc95aff1378dcc9902801f1405","unresolved":false,"context_lines":[{"line_number":143,"context_line":"specific logic goes in the drivers."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Changing the API Interface"},{"line_number":146,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Business logic should not go in the API controller. The API controller should be"},{"line_number":149,"context_line":"viewed as a binding between the business logic and the HTTP protocol. Thus, it is in"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ff570b3c_9aeeb71f","line":146,"range":{"start_line":146,"start_character":26,"end_line":146,"end_character":34},"in_reply_to":"ff570b3c_0dc27a59","updated":"2020-05-20 07:51:45.000000000","message":"Done","commit_id":"189e25ddcf1de3a6768831810603bf23451fe9d7"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"09050c3b54646cfefccc4e47f05acc5441032f7d","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"API controllers use JSON schemas do determine whether a provided role is a"},{"line_number":154,"context_line":"valid representation or not. Role create and role update schemas are available at"},{"line_number":155,"context_line":"`keystone/assignment/schema.py`. Validation for a role resource is available at"},{"line_number":156,"context_line":"`keystone/api/roles.py` which will look like this::"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    class RoleResource(ks_flask.ResourceBase):"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        def post(self):"},{"line_number":161,"context_line":"            \"\"\"Create role."},{"line_number":162,"context_line":"            ..."},{"line_number":163,"context_line":"            validation.lazy_validate(schema.role_create, role)"},{"line_number":164,"context_line":"            ..."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"You will need to update their properties to include a `description` attribute::"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"ff570b3c_6db176e1","line":164,"range":{"start_line":155,"start_character":32,"end_line":164,"end_character":15},"updated":"2020-05-19 21:05:17.000000000","message":"See the sentence before this - this section is supposed to be about the schema definition in keystone/assignment/schema.py. I don\u0027t think it\u0027s worthwhile to include this part of the flask code (remember this tutorial is about how to change the API - this part is most likely not going to need to change). If you feel strongly that it should be included, it needs to logically flow from an explanation of the flask code, not be inserted into an explanation of the schema definition in schema.py.","commit_id":"189e25ddcf1de3a6768831810603bf23451fe9d7"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"ab456aca316b30bc95aff1378dcc9902801f1405","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"API controllers use JSON schemas do determine whether a provided role is a"},{"line_number":154,"context_line":"valid representation or not. Role create and role update schemas are available at"},{"line_number":155,"context_line":"`keystone/assignment/schema.py`. Validation for a role resource is available at"},{"line_number":156,"context_line":"`keystone/api/roles.py` which will look like this::"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    class RoleResource(ks_flask.ResourceBase):"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        def post(self):"},{"line_number":161,"context_line":"            \"\"\"Create role."},{"line_number":162,"context_line":"            ..."},{"line_number":163,"context_line":"            validation.lazy_validate(schema.role_create, role)"},{"line_number":164,"context_line":"            ..."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"You will need to update their properties to include a `description` attribute::"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"ff570b3c_9a3cf793","line":164,"range":{"start_line":155,"start_character":32,"end_line":164,"end_character":15},"in_reply_to":"ff570b3c_6db176e1","updated":"2020-05-20 07:51:45.000000000","message":"The purpose of adding this was for the user to have a clear picture about where the validation is being done. But your point is totally valid that this doc is about making changes and we dont change anything in validation. So it should not be inserted.","commit_id":"189e25ddcf1de3a6768831810603bf23451fe9d7"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"09050c3b54646cfefccc4e47f05acc5441032f7d","unresolved":false,"context_lines":[{"line_number":177,"context_line":"You should add tests for API unit test to `keystone/tests/unit/test_v3_role.py`"},{"line_number":178,"context_line":"and document about the new parameter in the `api-ref`_."},{"line_number":179,"context_line":""},{"line_number":180,"context_line":".. _api-ref: https://docs.openstack.org/api-ref/identity/"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"Furthermore, as role entities are passed in the API request body to keystone calls,"},{"line_number":183,"context_line":"the role routes do not need to be changed; i.e the routes still are::"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ff570b3c_add38e03","line":180,"updated":"2020-05-19 21:05:17.000000000","message":"Good addition :)","commit_id":"189e25ddcf1de3a6768831810603bf23451fe9d7"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"09050c3b54646cfefccc4e47f05acc5441032f7d","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":".. _api-ref: https://docs.openstack.org/api-ref/identity/"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"Furthermore, as role entities are passed in the API request body to keystone calls,"},{"line_number":183,"context_line":"the role routes do not need to be changed; i.e the routes still are::"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"      POST /v3/roles"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ff570b3c_0de39ada","line":182,"range":{"start_line":182,"start_character":48,"end_line":182,"end_character":52},"updated":"2020-05-19 21:05:17.000000000","message":"you don\u0027t need to add this word, \"request body\" is clear enough on its own.","commit_id":"189e25ddcf1de3a6768831810603bf23451fe9d7"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"ab456aca316b30bc95aff1378dcc9902801f1405","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":".. _api-ref: https://docs.openstack.org/api-ref/identity/"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"Furthermore, as role entities are passed in the API request body to keystone calls,"},{"line_number":183,"context_line":"the role routes do not need to be changed; i.e the routes still are::"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"      POST /v3/roles"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ff570b3c_faf1b302","line":182,"range":{"start_line":182,"start_character":48,"end_line":182,"end_character":52},"in_reply_to":"ff570b3c_0de39ada","updated":"2020-05-20 07:51:45.000000000","message":"Done","commit_id":"189e25ddcf1de3a6768831810603bf23451fe9d7"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7692233b93bcce907532c448ce7f5843073a2cde","unresolved":false,"context_lines":[{"line_number":80,"context_line":"request handling layer, the resource manager, and the driver."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"For the role backend, the API resource can be found under the `keystone/api`"},{"line_number":83,"context_line":"directory in the `role.py` file, and the manager and driver can be found in"},{"line_number":84,"context_line":"the `keystone/assignment` directory in the `core.py` and `role_backends/sql.py`"},{"line_number":85,"context_line":"files, respectively (currently only the SQL driver is supported)."},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff570b3c_2c7bee27","line":83,"range":{"start_line":83,"start_character":18,"end_line":83,"end_character":25},"updated":"2020-05-20 15:23:25.000000000","message":"my bad - it\u0027s roles.py, not role.py","commit_id":"c3917c6cb59055b3d0f7bd8f7c4215ae9d0fa04b"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"d310348d715b53e83c6cdd86f06873968e16847e","unresolved":false,"context_lines":[{"line_number":80,"context_line":"request handling layer, the resource manager, and the driver."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"For the role backend, the API resource can be found under the `keystone/api`"},{"line_number":83,"context_line":"directory in the `role.py` file, and the manager and driver can be found in"},{"line_number":84,"context_line":"the `keystone/assignment` directory in the `core.py` and `role_backends/sql.py`"},{"line_number":85,"context_line":"files, respectively (currently only the SQL driver is supported)."},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff570b3c_ff57cc56","line":83,"range":{"start_line":83,"start_character":18,"end_line":83,"end_character":25},"in_reply_to":"ff570b3c_2c7bee27","updated":"2020-05-21 05:44:17.000000000","message":"Done","commit_id":"c3917c6cb59055b3d0f7bd8f7c4215ae9d0fa04b"}]}
