)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f69fdf3eb211d370c54bca10aacc84c227f91182","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This the first phase of the bp to split up the current assignment"},{"line_number":10,"context_line":"components into the resource entities plus the actual role"},{"line_number":11,"context_line":"assignmnets themselves."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This first patch only splits up the manager and driver portions."},{"line_number":14,"context_line":"Subsequent patches will:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"5a890539_816513e3","line":11,"updated":"2014-11-11 20:28:48.000000000","message":"assignments","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"2b1b78c249150ccfb8e12d4dca3da7fab43c787b","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This the first phase of the bp to split up the current assignment"},{"line_number":10,"context_line":"components into the resource entities plus the actual role"},{"line_number":11,"context_line":"assignmnets themselves."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This first patch only splits up the manager and driver portions."},{"line_number":14,"context_line":"Subsequent patches will:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"5a890539_b246dfbd","line":11,"in_reply_to":"5a890539_816513e3","updated":"2014-11-11 23:28:07.000000000","message":"Done","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f69fdf3eb211d370c54bca10aacc84c227f91182","unresolved":false,"context_lines":[{"line_number":24,"context_line":"existing code - which have come about due to the complexity of the"},{"line_number":25,"context_line":"current code. With other changes in-flight with regard to the"},{"line_number":26,"context_line":"general list_role_assignments() method, we should consider radically"},{"line_number":27,"context_line":"radionallizing the multiple versions of similar assignment driver"},{"line_number":28,"context_line":"methods."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Partially implements: bp pluggable-assignments"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"5a890539_01a123f8","line":27,"updated":"2014-11-11 20:28:48.000000000","message":"rationalizing*?","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"2b1b78c249150ccfb8e12d4dca3da7fab43c787b","unresolved":false,"context_lines":[{"line_number":24,"context_line":"existing code - which have come about due to the complexity of the"},{"line_number":25,"context_line":"current code. With other changes in-flight with regard to the"},{"line_number":26,"context_line":"general list_role_assignments() method, we should consider radically"},{"line_number":27,"context_line":"radionallizing the multiple versions of similar assignment driver"},{"line_number":28,"context_line":"methods."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Partially implements: bp pluggable-assignments"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"5a890539_9249e3d2","line":27,"in_reply_to":"5a890539_01a123f8","updated":"2014-11-11 23:28:07.000000000","message":"Ha...I made up a new word!  Sounds vaguely dangerous.  Fixed!","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d9dbf6c204f33e6a781bfda1df0b8df2e01427ee","unresolved":false,"context_lines":[{"line_number":25,"context_line":"current code. With other changes in-flight with regard to the"},{"line_number":26,"context_line":"general list_role_assignments() method, we should consider radically"},{"line_number":27,"context_line":"rationalizing the multiple versions of similar assignment driver"},{"line_number":28,"context_line":"methods."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Partially implements: bp pluggable-assignments"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"5a890539_191beaca","line":28,"updated":"2014-11-14 20:41:50.000000000","message":"This paragraph, while interesting, is not super relevant to the changes. Suggest removing (this feels like it\u0027s part of the SPEC not part of the individual commit)","commit_id":"8b893404c00d62aa0a59a2a230d0727e6308fef3"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"53a6225cd52d2738c80356277108fa9ca3cb7032","unresolved":false,"context_lines":[{"line_number":25,"context_line":"current code. With other changes in-flight with regard to the"},{"line_number":26,"context_line":"general list_role_assignments() method, we should consider radically"},{"line_number":27,"context_line":"rationalizing the multiple versions of similar assignment driver"},{"line_number":28,"context_line":"methods."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Partially implements: bp pluggable-assignments"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"5a890539_cfcfd054","line":28,"in_reply_to":"5a890539_191beaca","updated":"2014-11-14 22:03:34.000000000","message":"agreed","commit_id":"8b893404c00d62aa0a59a2a230d0727e6308fef3"},{"author":{"_account_id":8533,"name":"Marcos Fermín Lobo","email":"lobo@lukos.org","username":"mlobo"},"change_message_id":"54ffd88a943d1d5c442ab2f6d00b99ecec5d934a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Henry Nash \u003chenryn@linux.vnet.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-01-06 05:18:04 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make unit tests call the new reource manager."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is the part of the more comprehensive split of"},{"line_number":10,"context_line":"assignments, which rationalizes both the backend and controllers."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":38,"id":"3a961159_0b9c84bf","line":7,"updated":"2015-01-06 10:45:30.000000000","message":"\"resource\" instead of \"reource\"","commit_id":"b4028def135366b90ce0e88c5917e314f5ded7a0"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"6c24130b292eb85d2373c9a0ec3916c95ba92784","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Henry Nash \u003chenryn@linux.vnet.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-01-13 08:19:11 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make unit tests call the new reource manager."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is the part of the more comprehensive split of"},{"line_number":10,"context_line":"assignments, which rationalizes both the backend and controllers."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":41,"id":"3a961159_0adbe521","line":7,"updated":"2015-01-13 13:07:18.000000000","message":"typo, s/reource/resource","commit_id":"c2e8a6e6608ed6038a4d170f62bc852fd10ffa93"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bf7164d8f76c64a3d74ae3f5ea3696411c5551a7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Henry Nash \u003chenryn@linux.vnet.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-01-13 08:19:11 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make unit tests call the new reource manager."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is the part of the more comprehensive split of"},{"line_number":10,"context_line":"assignments, which rationalizes both the backend and controllers."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":41,"id":"3a961159_168ce7d6","line":7,"in_reply_to":"3a961159_0adbe521","updated":"2015-01-21 18:25:41.000000000","message":"Done","commit_id":"c2e8a6e6608ed6038a4d170f62bc852fd10ffa93"}],"doc/source/configuration.rst":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"e2c47b3efcf3645e172937a8ae8ea91fc1664c93","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        The resource system has a separate ``cache_time`` configuration option,"},{"line_number":457,"context_line":"        that can be set to a value above or below the global ``expiration_time``"},{"line_number":458,"context_line":"        default, allowing for different caching behavior from the other systems in"},{"line_number":459,"context_line":"        ``Keystone``.  This option is set in the ``[assignment]`` section of the"},{"line_number":460,"context_line":"        configuration file."},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        Currently ``resource`` has caching for ``project``, ``domain``, and ``role``"}],"source_content_type":"text/x-rst","patch_set":14,"id":"5a890539_eae2d02d","line":459,"updated":"2014-11-14 11:58:07.000000000","message":"s/assignment/resource","commit_id":"cfe22ffca04755066aa198f4de3f56285759a43f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"472058ae6e3642f6ed271ba0407575ef45853d07","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        The resource system has a separate ``cache_time`` configuration option,"},{"line_number":457,"context_line":"        that can be set to a value above or below the global ``expiration_time``"},{"line_number":458,"context_line":"        default, allowing for different caching behavior from the other systems in"},{"line_number":459,"context_line":"        ``Keystone``.  This option is set in the ``[assignment]`` section of the"},{"line_number":460,"context_line":"        configuration file."},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        Currently ``resource`` has caching for ``project``, ``domain``, and ``role``"}],"source_content_type":"text/x-rst","patch_set":14,"id":"5a890539_c8b7dc38","line":459,"in_reply_to":"5a890539_eae2d02d","updated":"2014-11-14 12:10:20.000000000","message":"oops, yes!","commit_id":"cfe22ffca04755066aa198f4de3f56285759a43f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c819d25282929c2d9bf535736c999be2d1c368ec","unresolved":false,"context_lines":[{"line_number":1502,"context_line":"while resource and assignment related information will be provided by the"},{"line_number":1503,"context_line":"SQL backend. Also note that if there is an LDAP Identity, and no resource"},{"line_number":1504,"context_line":"backend is specified, the resource backend will default to LDAP. Likewise if"},{"line_number":1505,"context_line":"there is no assignment backend is specified, it will default to the same"},{"line_number":1506,"context_line":"as resource. Although this may seem counterintuitive, it is provided for"},{"line_number":1507,"context_line":"backwards compatibility. Nonetheless, the explicit option will always override"},{"line_number":1508,"context_line":"the implicit option, so specifying the options as shown above will always be"}],"source_content_type":"text/x-rst","patch_set":22,"id":"5a890539_03757e97","line":1505,"updated":"2014-11-21 01:17:57.000000000","message":"change \"there is no assignment backend is\" to \"no assignment backend is\" (remove \"there is\")","commit_id":"8ae1364fd804b80972a8191e0b021a09610180dd"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6e3c91eb0a11d3fcbb88a18495b6c80ae534780c","unresolved":false,"context_lines":[{"line_number":1502,"context_line":"while resource and assignment related information will be provided by the"},{"line_number":1503,"context_line":"SQL backend. Also note that if there is an LDAP Identity, and no resource"},{"line_number":1504,"context_line":"backend is specified, the resource backend will default to LDAP. Likewise if"},{"line_number":1505,"context_line":"there is no assignment backend is specified, it will default to the same"},{"line_number":1506,"context_line":"as resource. Although this may seem counterintuitive, it is provided for"},{"line_number":1507,"context_line":"backwards compatibility. Nonetheless, the explicit option will always override"},{"line_number":1508,"context_line":"the implicit option, so specifying the options as shown above will always be"}],"source_content_type":"text/x-rst","patch_set":22,"id":"5a890539_68b236e6","line":1505,"in_reply_to":"5a890539_03757e97","updated":"2014-11-25 14:21:58.000000000","message":"Done","commit_id":"8ae1364fd804b80972a8191e0b021a09610180dd"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"50580fb9699a56da624b053bee5c9b267b4177cf","unresolved":false,"context_lines":[{"line_number":1503,"context_line":""},{"line_number":1504,"context_line":"  [role]"},{"line_number":1505,"context_line":"  driver \u003d keystone.assignment.role_backends.sql.Role"},{"line_number":1506,"context_line":" "},{"line_number":1507,"context_line":"  [assignment]"},{"line_number":1508,"context_line":"  driver \u003d keystone.assignment.backends.sql.Assignment"},{"line_number":1509,"context_line":""}],"source_content_type":"text/x-rst","patch_set":33,"id":"3a961159_dea3984d","line":1506,"updated":"2014-12-16 11:48:45.000000000","message":"blank space","commit_id":"1d4885d64dfeb50917d54b45b2ad9a0362a6863d"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6de731050131ebfb7db3277a3c7ee850e7163e9f","unresolved":false,"context_lines":[{"line_number":1503,"context_line":""},{"line_number":1504,"context_line":"  [role]"},{"line_number":1505,"context_line":"  driver \u003d keystone.assignment.role_backends.sql.Role"},{"line_number":1506,"context_line":" "},{"line_number":1507,"context_line":"  [assignment]"},{"line_number":1508,"context_line":"  driver \u003d keystone.assignment.backends.sql.Assignment"},{"line_number":1509,"context_line":""}],"source_content_type":"text/x-rst","patch_set":33,"id":"3a961159_708f2c76","line":1506,"in_reply_to":"3a961159_dea3984d","updated":"2014-12-16 14:12:58.000000000","message":"Done","commit_id":"1d4885d64dfeb50917d54b45b2ad9a0362a6863d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"561763289424829e677ba12bb0e01876bdd72e06","unresolved":false,"context_lines":[{"line_number":109,"context_line":"* ``[os_inherit]`` - Inherited role assignment extension"},{"line_number":110,"context_line":"* ``[paste_deploy]`` - Pointer to the PasteDeploy configuration file"},{"line_number":111,"context_line":"* ``[policy]`` - Policy system driver configuration for RBAC"},{"line_number":112,"context_line":"* ``[resource]`` - Resource system driver configuration"},{"line_number":113,"context_line":"* ``[revoke]`` - Revocation system driver configuration"},{"line_number":114,"context_line":"* ``[role]`` - Role system driver configuration"},{"line_number":115,"context_line":"* ``[saml]`` - SAML configuration options"}],"source_content_type":"text/x-rst","patch_set":35,"id":"3a961159_ef35a746","line":112,"updated":"2014-12-18 16:51:48.000000000","message":"I think calling the backend \"resource\" is going to be too confusing, since everything in a REST API is a resource. Maybe add a prefix to differentiate it... \"assignment_resource\"","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a5bbcd5be8925f16ffcab786eabb4a7235ff8812","unresolved":false,"context_lines":[{"line_number":109,"context_line":"* ``[os_inherit]`` - Inherited role assignment extension"},{"line_number":110,"context_line":"* ``[paste_deploy]`` - Pointer to the PasteDeploy configuration file"},{"line_number":111,"context_line":"* ``[policy]`` - Policy system driver configuration for RBAC"},{"line_number":112,"context_line":"* ``[resource]`` - Resource system driver configuration"},{"line_number":113,"context_line":"* ``[revoke]`` - Revocation system driver configuration"},{"line_number":114,"context_line":"* ``[role]`` - Role system driver configuration"},{"line_number":115,"context_line":"* ``[saml]`` - SAML configuration options"}],"source_content_type":"text/x-rst","patch_set":35,"id":"3a961159_ab94508b","line":112,"in_reply_to":"3a961159_ef35a746","updated":"2014-12-19 20:07:18.000000000","message":"so we had a long discussion about that...and agreed on \u0027resource\" as part of the approval of the spec for this.  If people really object, we can discuss again...but that would make it the 3rd time we\u0027ve changed this!","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"561763289424829e677ba12bb0e01876bdd72e06","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            To disable caching specifically on ``resource``, in the ``[resource]``"},{"line_number":508,"context_line":"            section of the configuration set ``caching`` to ``False``."},{"line_number":509,"context_line":"    * ``role``"},{"line_number":510,"context_line":"        The role system has a separate ``cache_time`` configuration option,"},{"line_number":511,"context_line":"        that can be set to a value above or below the global ``expiration_time``"},{"line_number":512,"context_line":"        default, allowing for different caching behavior from the other systems in"},{"line_number":513,"context_line":"        ``Keystone``.  This option is set in the ``[role]`` section of the"}],"source_content_type":"text/x-rst","patch_set":35,"id":"3a961159_cf154b9c","line":510,"updated":"2014-12-18 16:51:48.000000000","message":"(nit) remove the ,","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a5bbcd5be8925f16ffcab786eabb4a7235ff8812","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            To disable caching specifically on ``resource``, in the ``[resource]``"},{"line_number":508,"context_line":"            section of the configuration set ``caching`` to ``False``."},{"line_number":509,"context_line":"    * ``role``"},{"line_number":510,"context_line":"        The role system has a separate ``cache_time`` configuration option,"},{"line_number":511,"context_line":"        that can be set to a value above or below the global ``expiration_time``"},{"line_number":512,"context_line":"        default, allowing for different caching behavior from the other systems in"},{"line_number":513,"context_line":"        ``Keystone``.  This option is set in the ``[role]`` section of the"}],"source_content_type":"text/x-rst","patch_set":35,"id":"3a961159_eb8ad862","line":510,"in_reply_to":"3a961159_cf154b9c","updated":"2014-12-19 20:07:18.000000000","message":"Done","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"561763289424829e677ba12bb0e01876bdd72e06","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        The role system has a separate ``cache_time`` configuration option,"},{"line_number":511,"context_line":"        that can be set to a value above or below the global ``expiration_time``"},{"line_number":512,"context_line":"        default, allowing for different caching behavior from the other systems in"},{"line_number":513,"context_line":"        ``Keystone``.  This option is set in the ``[role]`` section of the"},{"line_number":514,"context_line":"        configuration file."},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"For more information about the different backends (and configuration options):"}],"source_content_type":"text/x-rst","patch_set":35,"id":"3a961159_0f1033a7","line":513,"updated":"2014-12-18 16:51:48.000000000","message":"(nit) remove `` from Keystone.","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a5bbcd5be8925f16ffcab786eabb4a7235ff8812","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        The role system has a separate ``cache_time`` configuration option,"},{"line_number":511,"context_line":"        that can be set to a value above or below the global ``expiration_time``"},{"line_number":512,"context_line":"        default, allowing for different caching behavior from the other systems in"},{"line_number":513,"context_line":"        ``Keystone``.  This option is set in the ``[role]`` section of the"},{"line_number":514,"context_line":"        configuration file."},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"For more information about the different backends (and configuration options):"}],"source_content_type":"text/x-rst","patch_set":35,"id":"3a961159_6bf6e8fa","line":513,"in_reply_to":"3a961159_0f1033a7","updated":"2014-12-19 20:07:18.000000000","message":"Done","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"561763289424829e677ba12bb0e01876bdd72e06","unresolved":false,"context_lines":[{"line_number":1489,"context_line":"directories can be easily integrated as it now enables its identity"},{"line_number":1490,"context_line":"entities (which comprises users, groups, and group memberships) to be"},{"line_number":1491,"context_line":"served out of directories while resources (which comprises projects and"},{"line_number":1492,"context_line":"domains), roles and assignments are to be served from a different Keystone"},{"line_number":1493,"context_line":"backends (i.e. SQL). To enable this option, you must have the following"},{"line_number":1494,"context_line":"``keystone.conf`` options set:"},{"line_number":1495,"context_line":""}],"source_content_type":"text/x-rst","patch_set":35,"id":"3a961159_cf638b3f","line":1492,"updated":"2014-12-18 16:51:48.000000000","message":"change \"a different\" to \"different\"","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a5bbcd5be8925f16ffcab786eabb4a7235ff8812","unresolved":false,"context_lines":[{"line_number":1489,"context_line":"directories can be easily integrated as it now enables its identity"},{"line_number":1490,"context_line":"entities (which comprises users, groups, and group memberships) to be"},{"line_number":1491,"context_line":"served out of directories while resources (which comprises projects and"},{"line_number":1492,"context_line":"domains), roles and assignments are to be served from a different Keystone"},{"line_number":1493,"context_line":"backends (i.e. SQL). To enable this option, you must have the following"},{"line_number":1494,"context_line":"``keystone.conf`` options set:"},{"line_number":1495,"context_line":""}],"source_content_type":"text/x-rst","patch_set":35,"id":"3a961159_ebe1f82a","line":1492,"in_reply_to":"3a961159_cf638b3f","updated":"2014-12-19 20:07:18.000000000","message":"Done","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"}],"etc/keystone.conf.sample":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"57ed8493136b59fd13cd2be6aae54e05ca86bd1a","unresolved":false,"context_lines":[{"line_number":1330,"context_line":"# caching is enabled. (boolean value)"},{"line_number":1331,"context_line":"#caching\u003dtrue"},{"line_number":1332,"context_line":""},{"line_number":1333,"context_line":"# TTL (in seconds) to cache assignment data. This has no"},{"line_number":1334,"context_line":"# effect unless global caching is enabled. (integer value)"},{"line_number":1335,"context_line":"#cache_time\u003d\u003cNone\u003e"},{"line_number":1336,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":9,"id":"7a8c0949_2af43af1","line":1333,"updated":"2014-11-02 08:43:56.000000000","message":"s/assignment/resource","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"43d564277ec38706330a2a612134bac8e6311e87","unresolved":false,"context_lines":[{"line_number":1330,"context_line":"# caching is enabled. (boolean value)"},{"line_number":1331,"context_line":"#caching\u003dtrue"},{"line_number":1332,"context_line":""},{"line_number":1333,"context_line":"# TTL (in seconds) to cache assignment data. This has no"},{"line_number":1334,"context_line":"# effect unless global caching is enabled. (integer value)"},{"line_number":1335,"context_line":"#cache_time\u003d\u003cNone\u003e"},{"line_number":1336,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":9,"id":"7a8c0949_eaeeb28a","line":1333,"in_reply_to":"7a8c0949_2af43af1","updated":"2014-11-02 11:48:38.000000000","message":"Done","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c819d25282929c2d9bf535736c999be2d1c368ec","unresolved":false,"context_lines":[{"line_number":458,"context_line":"# Assignment backend driver. (string value)"},{"line_number":459,"context_line":"#driver\u003d\u003cNone\u003e"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"# Toggle for resource. This has no effect unless global"},{"line_number":462,"context_line":"# caching is enabled. This option is deprecated in favor of"},{"line_number":463,"context_line":"# the equivalent option in the resource config group. (boolean"},{"line_number":464,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":22,"id":"5a890539_929ff95e","line":461,"updated":"2014-11-21 01:17:57.000000000","message":"the toggle for resource is below, in the [resource] section","commit_id":"8ae1364fd804b80972a8191e0b021a09610180dd"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"68297754860d89d7e37ada4648649378abbb2159","unresolved":false,"context_lines":[{"line_number":458,"context_line":"# Assignment backend driver. (string value)"},{"line_number":459,"context_line":"#driver\u003d\u003cNone\u003e"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"# Toggle for resource. This has no effect unless global"},{"line_number":462,"context_line":"# caching is enabled. This option is deprecated in favor of"},{"line_number":463,"context_line":"# the equivalent option in the resource config group. (boolean"},{"line_number":464,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":22,"id":"5a890539_12e869b3","line":461,"in_reply_to":"5a890539_929ff95e","updated":"2014-11-21 01:22:51.000000000","message":"oh, I see this is for backwards compat...","commit_id":"8ae1364fd804b80972a8191e0b021a09610180dd"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1dca7de1042652a47973cb0bc5b93443f28438a6","unresolved":false,"context_lines":[{"line_number":422,"context_line":"# From keystone"},{"line_number":423,"context_line":"#"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"# Assignment backend driver. (string value)"},{"line_number":426,"context_line":"#driver \u003d \u003cNone\u003e"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":38,"id":"3a961159_17d90c57","line":425,"updated":"2015-01-06 05:38:42.000000000","message":"there should be no changes here with this patch...something has gone awry with the new ordering of the keystone.conf.sample...will re-generate..","commit_id":"b4028def135366b90ce0e88c5917e314f5ded7a0"}],"keystone/assignment/backends/ldap.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"57ed8493136b59fd13cd2be6aae54e05ca86bd1a","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self.suffix \u003d CONF.ldap.suffix"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        # These are the only deep dependency from assignment back"},{"line_number":42,"context_line":"        # to base and identity.  The assumption is that if you are using"},{"line_number":43,"context_line":"        # LDAP for assignments, you are using it for base and Id as well."},{"line_number":44,"context_line":"        self.user \u003d ldap_identity.UserApi(CONF)"},{"line_number":45,"context_line":"        self.group \u003d ldap_identity.GroupApi(CONF)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_aa558ac7","line":42,"updated":"2014-11-02 08:43:56.000000000","message":"s/base/resource","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"43d564277ec38706330a2a612134bac8e6311e87","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self.suffix \u003d CONF.ldap.suffix"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        # These are the only deep dependency from assignment back"},{"line_number":42,"context_line":"        # to base and identity.  The assumption is that if you are using"},{"line_number":43,"context_line":"        # LDAP for assignments, you are using it for base and Id as well."},{"line_number":44,"context_line":"        self.user \u003d ldap_identity.UserApi(CONF)"},{"line_number":45,"context_line":"        self.group \u003d ldap_identity.GroupApi(CONF)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_0af4de59","line":42,"in_reply_to":"7a8c0949_aa558ac7","updated":"2014-11-02 11:48:38.000000000","message":"Done","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"57ed8493136b59fd13cd2be6aae54e05ca86bd1a","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        # These are the only deep dependency from assignment back"},{"line_number":42,"context_line":"        # to base and identity.  The assumption is that if you are using"},{"line_number":43,"context_line":"        # LDAP for assignments, you are using it for base and Id as well."},{"line_number":44,"context_line":"        self.user \u003d ldap_identity.UserApi(CONF)"},{"line_number":45,"context_line":"        self.group \u003d ldap_identity.GroupApi(CONF)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_ca52d6dc","line":43,"updated":"2014-11-02 08:43:56.000000000","message":"Same here ...","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"43d564277ec38706330a2a612134bac8e6311e87","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        # These are the only deep dependency from assignment back"},{"line_number":42,"context_line":"        # to base and identity.  The assumption is that if you are using"},{"line_number":43,"context_line":"        # LDAP for assignments, you are using it for base and Id as well."},{"line_number":44,"context_line":"        self.user \u003d ldap_identity.UserApi(CONF)"},{"line_number":45,"context_line":"        self.group \u003d ldap_identity.GroupApi(CONF)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_2ae99a80","line":43,"in_reply_to":"7a8c0949_ca52d6dc","updated":"2014-11-02 11:48:38.000000000","message":"Done","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"57ed8493136b59fd13cd2be6aae54e05ca86bd1a","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                                     self.group._id_to_dn(group_id), role_id)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"# Bulk actions on User From identity"},{"line_number":167,"context_line":"    def delete_user(self, user_id):"},{"line_number":168,"context_line":"        user_dn \u003d self.user._id_to_dn(user_id)"},{"line_number":169,"context_line":"        for ref in self.role.list_global_roles_for_user(user_dn):"},{"line_number":170,"context_line":"            self.role.delete_user(ref.role_dn, ref.user_dn,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_6af9e2c7","line":167,"updated":"2014-11-02 08:43:56.000000000","message":"Rename this method to have a more meaningful name (delete_user_assignments)\nAs suggested by you on the backend sql (lines 366-368).","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"43d564277ec38706330a2a612134bac8e6311e87","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                                     self.group._id_to_dn(group_id), role_id)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"# Bulk actions on User From identity"},{"line_number":167,"context_line":"    def delete_user(self, user_id):"},{"line_number":168,"context_line":"        user_dn \u003d self.user._id_to_dn(user_id)"},{"line_number":169,"context_line":"        for ref in self.role.list_global_roles_for_user(user_dn):"},{"line_number":170,"context_line":"            self.role.delete_user(ref.role_dn, ref.user_dn,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_aafcaa3f","line":167,"in_reply_to":"7a8c0949_6af9e2c7","updated":"2014-11-02 11:48:38.000000000","message":"I\u0027m trying to change as little as possible in one go. Agree these would be changed here if we change the sql ones...so have moved my comment from sql into core. I\u0027ll be putting up a series of follow-on patches that rationalise these calls once the basic change is in.","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4311a2afe52be9ed57dd852b56317ffb9280f61f","unresolved":false,"context_lines":[{"line_number":443,"context_line":"            data[\u0027id\u0027] \u003d uuid.uuid4().hex"},{"line_number":444,"context_line":"        return super(ProjectApi, self).create(data)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def get_user_projects(self, user_dn, associations):"},{"line_number":447,"context_line":"        \"\"\"Returns list of tenants a user has access to"},{"line_number":448,"context_line":"        \"\"\""},{"line_number":449,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5a890539_341656f2","side":"PARENT","line":446,"updated":"2014-11-12 08:27:32.000000000","message":"i would think this stays?","commit_id":"8ab267bbf0ba7d49c780cf3eaa8bc8a4176bfc30"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f78f4f0308cc44f062ab4529d9cdfcc55629c687","unresolved":false,"context_lines":[{"line_number":443,"context_line":"            data[\u0027id\u0027] \u003d uuid.uuid4().hex"},{"line_number":444,"context_line":"        return super(ProjectApi, self).create(data)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def get_user_projects(self, user_dn, associations):"},{"line_number":447,"context_line":"        \"\"\"Returns list of tenants a user has access to"},{"line_number":448,"context_line":"        \"\"\""},{"line_number":449,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5a890539_931c7779","side":"PARENT","line":446,"in_reply_to":"5a890539_341656f2","updated":"2014-11-12 13:55:07.000000000","message":"No, I don\u0027t think this needed anymore - since it was call from list_projects_for_user() in the Driver above...which now has become list_project_ids_for_user()...which no longer has to get the project ref.","commit_id":"8ab267bbf0ba7d49c780cf3eaa8bc8a4176bfc30"},{"author":{"_account_id":8533,"name":"Marcos Fermín Lobo","email":"lobo@lukos.org","username":"mlobo"},"change_message_id":"c2a30fd134c172ed8f578d117ae18cace8493a2b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        role_list \u003d [self.role._dn_to_id(role_assignment.role_dn)"},{"line_number":55,"context_line":"                     for role_assignment in self.role.get_role_assignments"},{"line_number":56,"context_line":"                     (self.project._id_to_dn(project_id))"},{"line_number":57,"context_line":"                     if role_assignment.user_dn.upper() in group_dns]"},{"line_number":58,"context_line":"        # NOTE(morganfainberg): Does not support OS-INHERIT as domain"},{"line_number":59,"context_line":"        # metadata/roles are not supported by LDAP backend. Skip OS-INHERIT"},{"line_number":60,"context_line":"        # logic."}],"source_content_type":"text/x-python","patch_set":23,"id":"5a890539_8d007867","line":57,"updated":"2014-11-24 13:43:19.000000000","message":"I did some tests with this function and I\u0027ve realized that (role_assignment.user_dn.upper() in group_dns) is always FALSE. Example with 1 group granted into a project: \n\n(Pdb) role_assignment.user_dn.upper()\nu\u0027CN\u003dEE3AC9191CD9467A977679B31315BA9C,OU\u003dUSERGROUPS,CN\u003dEXAMPLE,CN\u003dCOM\u0027\n\n(Pdb) group_dns[0]\nu\u0027cn\u003dee3ac9191cd9467a977679b31315ba9c,ou\u003dUserGroups,cn\u003dexample,cn\u003dcom\u0027\n\nSo, the data is right but the problem is the upper() function. Not matching because uppercase.\n\nI propose to change the first line to: \n\ngroup_dns \u003d [self.group._id_to_dn(group_id).upper() for group_id in groups]","commit_id":"4c6c861a9e6f8a1a3ee387ce9fd963caecd0b035"},{"author":{"_account_id":8533,"name":"Marcos Fermín Lobo","email":"lobo@lukos.org","username":"mlobo"},"change_message_id":"5699bd0d9e4d67f0c65b44739709b7273fb4c36c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        role_list \u003d [self.role._dn_to_id(role_assignment.role_dn)"},{"line_number":55,"context_line":"                     for role_assignment in self.role.get_role_assignments"},{"line_number":56,"context_line":"                     (self.project._id_to_dn(project_id))"},{"line_number":57,"context_line":"                     if role_assignment.user_dn.upper() in group_dns]"},{"line_number":58,"context_line":"        # NOTE(morganfainberg): Does not support OS-INHERIT as domain"},{"line_number":59,"context_line":"        # metadata/roles are not supported by LDAP backend. Skip OS-INHERIT"},{"line_number":60,"context_line":"        # logic."}],"source_content_type":"text/x-python","patch_set":23,"id":"5a890539_893e91b6","line":57,"in_reply_to":"5a890539_8d007867","updated":"2014-11-25 08:01:09.000000000","message":"You can check the result test here: http://logs.openstack.org/44/102244/15/check/gate-keystone-python27/370258a/console.html#_2014-11-24_14_48_22_907","commit_id":"4c6c861a9e6f8a1a3ee387ce9fd963caecd0b035"},{"author":{"_account_id":8533,"name":"Marcos Fermín Lobo","email":"lobo@lukos.org","username":"mlobo"},"change_message_id":"b18aafeea00153db044e99a38f7978e0fad79007","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def list_role_ids_for_groups_on_project(self, groups, project_id,"},{"line_number":52,"context_line":"                                            project_domain_id):"},{"line_number":53,"context_line":"        group_dns \u003d [self.group._id_to_dn(group_id) for group_id in groups]"},{"line_number":54,"context_line":"        role_list \u003d [self.role._dn_to_id(role_assignment.role_dn)"},{"line_number":55,"context_line":"                     for role_assignment in self.role.get_role_assignments"},{"line_number":56,"context_line":"                     (self.project._id_to_dn(project_id))"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_29bc86db","line":53,"updated":"2014-11-26 13:38:33.000000000","message":"I did some tests (https://review.openstack.org/#/c/102244/15/keystone/tests/test_backend_ldap.py line 1813) with this function and I\u0027ve realized that (role_assignment.user_dn.upper() in group_dns) is always FALSE. Example with 1 group granted into a project:\n\n(Pdb) role_assignment.user_dn.upper() u\u0027CN\u003dEE3AC9191CD9467A977679B31315BA9C,OU\u003dUSERGROUPS,CN\u003dEXAMPLE,CN\u003dCOM\u0027\n\n(Pdb) group_dns[0] u\u0027cn\u003dee3ac9191cd9467a977679b31315ba9c,ou\u003dUserGroups,cn\u003dexample,cn\u003dcom\u0027\n\nYou can check the result test here: http://logs.openstack.org/44/102244/15/check/gate-keystone-python27/370258a/console.html#_2014-11-24_14_48_22_907\n\nSo, the data is right but the problem is the upper() function. Not matching because uppercase.\n\nI propose to change the this line to:\n\ngroup_dns \u003d [self.group._id_to_dn(group_id).upper() for group_id in groups]","commit_id":"6d7eac6186a9b1763b2d11d64da9e220377a935c"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"37d5afe960d08223a220e230a71c72a544e2741c","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def list_role_ids_for_groups_on_project(self, groups, project_id,"},{"line_number":52,"context_line":"                                            project_domain_id):"},{"line_number":53,"context_line":"        group_dns \u003d [self.group._id_to_dn(group_id) for group_id in groups]"},{"line_number":54,"context_line":"        role_list \u003d [self.role._dn_to_id(role_assignment.role_dn)"},{"line_number":55,"context_line":"                     for role_assignment in self.role.get_role_assignments"},{"line_number":56,"context_line":"                     (self.project._id_to_dn(project_id))"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_dfe2d49e","line":53,"in_reply_to":"5a890539_29bc86db","updated":"2014-11-26 14:48:46.000000000","message":"HI Marcos,\n\nSince this line has not been modified by this patch, you have to submit a separate bug.","commit_id":"6d7eac6186a9b1763b2d11d64da9e220377a935c"},{"author":{"_account_id":8533,"name":"Marcos Fermín Lobo","email":"lobo@lukos.org","username":"mlobo"},"change_message_id":"8230bea0b2ef7a5f937924fc0f050b1183904b20","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def list_role_ids_for_groups_on_project(self, groups, project_id,"},{"line_number":52,"context_line":"                                            project_domain_id):"},{"line_number":53,"context_line":"        group_dns \u003d [self.group._id_to_dn(group_id) for group_id in groups]"},{"line_number":54,"context_line":"        role_list \u003d [self.role._dn_to_id(role_assignment.role_dn)"},{"line_number":55,"context_line":"                     for role_assignment in self.role.get_role_assignments"},{"line_number":56,"context_line":"                     (self.project._id_to_dn(project_id))"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_0a18811d","line":53,"in_reply_to":"5a890539_dfe2d49e","updated":"2014-11-27 07:49:09.000000000","message":"Hi Samuel,\n\nOk, no problem. What do you think if I change that line in my patch https://review.openstack.org/#/c/102244/ that depends on this one?","commit_id":"6d7eac6186a9b1763b2d11d64da9e220377a935c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"561763289424829e677ba12bb0e01876bdd72e06","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.role \u003d RoleApi(CONF, self.user)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def default_role_driver(self):"},{"line_number":52,"context_line":"        return \"keystone.assignment.role_backends.ldap.Role\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def list_role_ids_for_groups_on_project("},{"line_number":55,"context_line":"            self, groups, project_id, project_domain_id, project_parents):"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_4f723be4","line":52,"updated":"2014-12-18 16:51:48.000000000","message":"use \u0027 for strings.","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a5bbcd5be8925f16ffcab786eabb4a7235ff8812","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.role \u003d RoleApi(CONF, self.user)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def default_role_driver(self):"},{"line_number":52,"context_line":"        return \"keystone.assignment.role_backends.ldap.Role\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def list_role_ids_for_groups_on_project("},{"line_number":55,"context_line":"            self, groups, project_id, project_domain_id, project_parents):"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_abc29082","line":52,"in_reply_to":"3a961159_4f723be4","updated":"2014-12-19 20:07:18.000000000","message":"Done","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"561763289424829e677ba12bb0e01876bdd72e06","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        return {\u0027roles\u0027: [self._role_to_dict(r, False) for r in metadata_ref]}"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def list_project_ids_for_user(self, user_id, group_ids, hints,"},{"line_number":103,"context_line":"                                  inherited\u003dFalse):"},{"line_number":104,"context_line":"        user_dn \u003d self.user._id_to_dn(user_id)"},{"line_number":105,"context_line":"        associations \u003d (self.role.list_project_roles_for_user"},{"line_number":106,"context_line":"                        (user_dn, self.project.tree_dn))"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_cf1b8b7e","line":103,"updated":"2014-12-18 16:51:48.000000000","message":"inherited isn\u0027t used.","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a5bbcd5be8925f16ffcab786eabb4a7235ff8812","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        return {\u0027roles\u0027: [self._role_to_dict(r, False) for r in metadata_ref]}"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def list_project_ids_for_user(self, user_id, group_ids, hints,"},{"line_number":103,"context_line":"                                  inherited\u003dFalse):"},{"line_number":104,"context_line":"        user_dn \u003d self.user._id_to_dn(user_id)"},{"line_number":105,"context_line":"        associations \u003d (self.role.list_project_roles_for_user"},{"line_number":106,"context_line":"                        (user_dn, self.project.tree_dn))"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_4b0dace7","line":103,"in_reply_to":"3a961159_cf1b8b7e","updated":"2014-12-19 20:07:18.000000000","message":"It is in the sql version of this method. The ldap driver doesn\u0027t really differentiate between inherited and non-inheried roles - i.e. it doesn\u0027t really support project-\u003eproject inheritance. It should - I\u0027ve raised a separate bug and added a comment referencing that.","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"561763289424829e677ba12bb0e01876bdd72e06","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                    group_dn, self.project.tree_dn):"},{"line_number":112,"context_line":"                associations.append(group_role)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        return list(set("},{"line_number":115,"context_line":"            [self.project._dn_to_id(x.project_dn) for x in associations]))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def list_role_ids_for_groups_on_domain(self, groups, domain_id):"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_6162abd9","line":114,"updated":"2014-12-18 16:51:48.000000000","message":"why does this need to list(set()) now? Is this fixing another bug?","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a5bbcd5be8925f16ffcab786eabb4a7235ff8812","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                    group_dn, self.project.tree_dn):"},{"line_number":112,"context_line":"                associations.append(group_role)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        return list(set("},{"line_number":115,"context_line":"            [self.project._dn_to_id(x.project_dn) for x in associations]))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def list_role_ids_for_groups_on_domain(self, groups, domain_id):"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_ce31aaee","line":114,"in_reply_to":"3a961159_6162abd9","updated":"2014-12-19 20:07:18.000000000","message":"So the old code ended up using sets (and hence stripping out duplicates) when it made the call to self.project.get_user_projects().  Since we don\u0027t do that here, to keep the same semantics, we need to do that here.","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"561763289424829e677ba12bb0e01876bdd72e06","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            metadata_ref[\u0027roles\u0027] \u003d self.add_role_to_user_and_project("},{"line_number":212,"context_line":"                user_id, project_id, role_id)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def check_grant_role_id(self, role_id, user_id\u003dNone, group_id\u003dNone,"},{"line_number":215,"context_line":"                            domain_id\u003dNone, project_id\u003dNone,"},{"line_number":216,"context_line":"                            inherited_to_projects\u003dFalse):"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_61038bb8","line":214,"updated":"2014-12-18 16:51:48.000000000","message":"why is the name changing?","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a5bbcd5be8925f16ffcab786eabb4a7235ff8812","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            metadata_ref[\u0027roles\u0027] \u003d self.add_role_to_user_and_project("},{"line_number":212,"context_line":"                user_id, project_id, role_id)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def check_grant_role_id(self, role_id, user_id\u003dNone, group_id\u003dNone,"},{"line_number":215,"context_line":"                            domain_id\u003dNone, project_id\u003dNone,"},{"line_number":216,"context_line":"                            inherited_to_projects\u003dFalse):"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_6b9c285e","line":214,"in_reply_to":"3a961159_61038bb8","updated":"2014-12-19 20:07:18.000000000","message":"..because the method no longer returns the ref..","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"561763289424829e677ba12bb0e01876bdd72e06","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        self.role.roles_delete_subtree_by_project(tenant_dn)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":283,"context_line":"        raise exception.NotImplemented()"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def delete_role_assignments(self, role_id):"},{"line_number":286,"context_line":"        self.role.roles_delete_subtree_by_role(role_id, self.project.tree_dn)"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_619f0b60","line":283,"updated":"2014-12-18 16:51:48.000000000","message":"add a comment why this isn\u0027t implemented.","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a5bbcd5be8925f16ffcab786eabb4a7235ff8812","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        self.role.roles_delete_subtree_by_project(tenant_dn)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":283,"context_line":"        raise exception.NotImplemented()"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def delete_role_assignments(self, role_id):"},{"line_number":286,"context_line":"        self.role.roles_delete_subtree_by_role(role_id, self.project.tree_dn)"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_abc8d055","line":283,"in_reply_to":"3a961159_619f0b60","updated":"2014-12-19 20:07:18.000000000","message":"Done (and in fact changed this to just pass, since we want this to go through silently).","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"561763289424829e677ba12bb0e01876bdd72e06","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        super(ProjectApi, self).__init__(conf)"},{"line_number":313,"context_line":"        self.member_attribute \u003d (getattr(conf.ldap, \u0027project_member_attribute\u0027)"},{"line_number":314,"context_line":"                                 or self.DEFAULT_MEMBER_ATTRIBUTE)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    def get_user_dns(self, tenant_id, rolegrants, role_dn\u003dNone):"},{"line_number":317,"context_line":"        tenant \u003d self._ldap_get(tenant_id)"},{"line_number":318,"context_line":"        res \u003d set()"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_0102c76e","line":315,"updated":"2014-12-18 16:51:48.000000000","message":"I have no idea why this is being removed.","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a5bbcd5be8925f16ffcab786eabb4a7235ff8812","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        super(ProjectApi, self).__init__(conf)"},{"line_number":313,"context_line":"        self.member_attribute \u003d (getattr(conf.ldap, \u0027project_member_attribute\u0027)"},{"line_number":314,"context_line":"                                 or self.DEFAULT_MEMBER_ATTRIBUTE)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    def get_user_dns(self, tenant_id, rolegrants, role_dn\u003dNone):"},{"line_number":317,"context_line":"        tenant \u003d self._ldap_get(tenant_id)"},{"line_number":318,"context_line":"        res \u003d set()"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_2bbdc0b7","line":315,"in_reply_to":"3a961159_0102c76e","updated":"2014-12-19 20:07:18.000000000","message":"because the management of roles is part of the role backend, not the assignment backend","commit_id":"1ab29a801f386c6db013fc68c4355f5f365d4eb7"}],"keystone/assignment/backends/sql.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4311a2afe52be9ed57dd852b56317ffb9280f61f","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                group_sql_conditions).distinct()"},{"line_number":266,"context_line":"        return [x.target_id for x in query.all()]"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def list_domain_ids_for_groups(self, group_ids, inherited\u003dFalse):"},{"line_number":269,"context_line":"        group_sql_conditions \u003d sqlalchemy.and_("},{"line_number":270,"context_line":"            RoleAssignment.type \u003d\u003d AssignmentType.GROUP_DOMAIN,"},{"line_number":271,"context_line":"            RoleAssignment.inherited \u003d\u003d inherited,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a890539_54892225","line":268,"updated":"2014-11-12 08:27:32.000000000","message":"i\u0027m digging the normalized function names.","commit_id":"e10ad1441f34f5d5a706a530e41caaaba05b6b8f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f78f4f0308cc44f062ab4529d9cdfcc55629c687","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                group_sql_conditions).distinct()"},{"line_number":266,"context_line":"        return [x.target_id for x in query.all()]"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def list_domain_ids_for_groups(self, group_ids, inherited\u003dFalse):"},{"line_number":269,"context_line":"        group_sql_conditions \u003d sqlalchemy.and_("},{"line_number":270,"context_line":"            RoleAssignment.type \u003d\u003d AssignmentType.GROUP_DOMAIN,"},{"line_number":271,"context_line":"            RoleAssignment.inherited \u003d\u003d inherited,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a890539_13008600","line":268,"in_reply_to":"5a890539_54892225","updated":"2014-11-12 13:55:07.000000000","message":":-)","commit_id":"e10ad1441f34f5d5a706a530e41caaaba05b6b8f"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"e2c47b3efcf3645e172937a8ae8ea91fc1664c93","unresolved":false,"context_lines":[{"line_number":346,"context_line":"            q \u003d session.query(RoleAssignment)"},{"line_number":347,"context_line":"            q \u003d q.filter_by(role_id\u003drole_id)"},{"line_number":348,"context_line":"            q.delete(False)"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def delete_user(self, user_id):"},{"line_number":351,"context_line":"        with sql.transaction() as session:"},{"line_number":352,"context_line":"            q \u003d session.query(RoleAssignment)"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a890539_8a0eac39","line":349,"updated":"2014-11-14 11:58:07.000000000","message":"Why not keep this (from patch set 1) ? :-)\n\n # TODO(henry-nash): Rename the following two methods to match the more \t\t\n # meaningfully names ones above.","commit_id":"cfe22ffca04755066aa198f4de3f56285759a43f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"472058ae6e3642f6ed271ba0407575ef45853d07","unresolved":false,"context_lines":[{"line_number":346,"context_line":"            q \u003d session.query(RoleAssignment)"},{"line_number":347,"context_line":"            q \u003d q.filter_by(role_id\u003drole_id)"},{"line_number":348,"context_line":"            q.delete(False)"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def delete_user(self, user_id):"},{"line_number":351,"context_line":"        with sql.transaction() as session:"},{"line_number":352,"context_line":"            q \u003d session.query(RoleAssignment)"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a890539_c88efc78","line":349,"in_reply_to":"5a890539_8a0eac39","updated":"2014-11-14 12:10:20.000000000","message":"I moved it up to the core/assignment driver section - since this is equally valid across all backends.","commit_id":"cfe22ffca04755066aa198f4de3f56285759a43f"}],"keystone/assignment/core.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"57ed8493136b59fd13cd2be6aae54e05ca86bd1a","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    See :mod:`keystone.common.manager.Manager` for more details on how this"},{"line_number":43,"context_line":"    dynamically calls the backend."},{"line_number":44,"context_line":"    assignment.Manager() and resource.Manager() have a circular dependency."},{"line_number":45,"context_line":"    The late import works around this.  The if block prevents creation of the"},{"line_number":46,"context_line":"    api object by both managers."},{"line_number":47,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_ca1736ec","line":44,"updated":"2014-11-02 08:43:56.000000000","message":"Actually, we have no more any circular dependency.\nNow Resource and Identity backend are completly independent from each other, and the Assignment backend depends on both.","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"43d564277ec38706330a2a612134bac8e6311e87","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    See :mod:`keystone.common.manager.Manager` for more details on how this"},{"line_number":43,"context_line":"    dynamically calls the backend."},{"line_number":44,"context_line":"    assignment.Manager() and resource.Manager() have a circular dependency."},{"line_number":45,"context_line":"    The late import works around this.  The if block prevents creation of the"},{"line_number":46,"context_line":"    api object by both managers."},{"line_number":47,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_4aa50652","line":44,"in_reply_to":"7a8c0949_ca1736ec","updated":"2014-11-02 11:48:38.000000000","message":"Done","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f69fdf3eb211d370c54bca10aacc84c227f91182","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        # list here and pass it in. The rest of the detailed logic of listing"},{"line_number":270,"context_line":"        # projects for a user is pushed down into the driver to enable"},{"line_number":271,"context_line":"        # optimization with the various backend technologies (SQL, LDAP etc.)."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        group_ids \u003d self._get_group_ids_for_user_id(user_id)"},{"line_number":274,"context_line":"        domain_ids \u003d self.driver.list_domain_ids_for_user("},{"line_number":275,"context_line":"            user_id, group_ids, hints or driver_hints.Hints())"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_21cb7fa6","line":272,"updated":"2014-11-11 20:28:48.000000000","message":"unrelated whitespace change?","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"2b1b78c249150ccfb8e12d4dca3da7fab43c787b","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        # list here and pass it in. The rest of the detailed logic of listing"},{"line_number":270,"context_line":"        # projects for a user is pushed down into the driver to enable"},{"line_number":271,"context_line":"        # optimization with the various backend technologies (SQL, LDAP etc.)."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        group_ids \u003d self._get_group_ids_for_user_id(user_id)"},{"line_number":274,"context_line":"        domain_ids \u003d self.driver.list_domain_ids_for_user("},{"line_number":275,"context_line":"            user_id, group_ids, hints or driver_hints.Hints())"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_d2d36b36","line":272,"in_reply_to":"5a890539_21cb7fa6","updated":"2014-11-11 23:28:07.000000000","message":"Done","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f69fdf3eb211d370c54bca10aacc84c227f91182","unresolved":false,"context_lines":[{"line_number":770,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":"    # TODO(henry-nash): Rename the following two methods to match the more"},{"line_number":773,"context_line":"    # meaningfully names ones above."},{"line_number":774,"context_line":""},{"line_number":775,"context_line":"# TODO(ayoung): determine what else these two functions raise"},{"line_number":776,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_a155afc7","line":773,"updated":"2014-11-11 20:28:48.000000000","message":"named*","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"2b1b78c249150ccfb8e12d4dca3da7fab43c787b","unresolved":false,"context_lines":[{"line_number":770,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":"    # TODO(henry-nash): Rename the following two methods to match the more"},{"line_number":773,"context_line":"    # meaningfully names ones above."},{"line_number":774,"context_line":""},{"line_number":775,"context_line":"# TODO(ayoung): determine what else these two functions raise"},{"line_number":776,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_72e4770d","line":773,"in_reply_to":"5a890539_a155afc7","updated":"2014-11-11 23:28:07.000000000","message":"Done","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"ffcd4fd3245036a065826ea7df70c44254eb0f09","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        return self.resource_api.list_roles_from_ids(role_ids)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def add_user_to_project(self, tenant_id, user_id):"},{"line_number":179,"context_line":"        \"\"\"Add user to a tenant by creating a default role relationship."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        :raises: keystone.exception.ProjectNotFound,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a890539_8df2a298","line":178,"updated":"2014-11-12 00:25:40.000000000","message":"following the pattern in the method bellow, this method would be: add_default_role_to_user_and_project()","commit_id":"e10ad1441f34f5d5a706a530e41caaaba05b6b8f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ee7677c3a130ef2130a301c5174cc65ef837b586","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        return self.resource_api.list_roles_from_ids(role_ids)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def add_user_to_project(self, tenant_id, user_id):"},{"line_number":179,"context_line":"        \"\"\"Add user to a tenant by creating a default role relationship."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        :raises: keystone.exception.ProjectNotFound,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a890539_0d5b1288","line":178,"in_reply_to":"5a890539_8df2a298","updated":"2014-11-12 00:37:43.000000000","message":"I agree...however, I\u0027m trying to only change the minimum in this first patch.  I plan some subsequent follow-on patches to to more rationalization.","commit_id":"e10ad1441f34f5d5a706a530e41caaaba05b6b8f"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"ffcd4fd3245036a065826ea7df70c44254eb0f09","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        return self.resource_api.list_roles_from_ids(role_ids)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def add_user_to_project(self, tenant_id, user_id):"},{"line_number":179,"context_line":"        \"\"\"Add user to a tenant by creating a default role relationship."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        :raises: keystone.exception.ProjectNotFound,"},{"line_number":182,"context_line":"                 keystone.exception.UserNotFound"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a890539_cd04aa80","line":179,"updated":"2014-11-12 00:25:40.000000000","message":"Not related to this patch, but I think it\u0027s odd to have the method name updated and the docstring still using \"tenant\".","commit_id":"e10ad1441f34f5d5a706a530e41caaaba05b6b8f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ee7677c3a130ef2130a301c5174cc65ef837b586","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        return self.resource_api.list_roles_from_ids(role_ids)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def add_user_to_project(self, tenant_id, user_id):"},{"line_number":179,"context_line":"        \"\"\"Add user to a tenant by creating a default role relationship."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        :raises: keystone.exception.ProjectNotFound,"},{"line_number":182,"context_line":"                 keystone.exception.UserNotFound"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a890539_6d51f661","line":179,"in_reply_to":"5a890539_cd04aa80","updated":"2014-11-12 00:37:43.000000000","message":"agreed.  I\u0027ll add it to the clean up list.","commit_id":"e10ad1441f34f5d5a706a530e41caaaba05b6b8f"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d9dbf6c204f33e6a781bfda1df0b8df2e01427ee","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                x in self.identity_api.list_groups_for_user(user_id)]"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @notifications.created(_PROJECT)"},{"line_number":83,"context_line":"    def create_project(self, tenant_id, tenant):"},{"line_number":84,"context_line":"        tenant \u003d tenant.copy()"},{"line_number":85,"context_line":"        tenant.setdefault(\u0027enabled\u0027, True)"},{"line_number":86,"context_line":"        tenant[\u0027enabled\u0027] \u003d clean.project_enabled(tenant[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a890539_19e04a95","side":"PARENT","line":83,"updated":"2014-11-14 20:41:50.000000000","message":"We are probably going to need proxy methods that go:\n\nassignment_api-\u003eresource_api \n\nThese methods will need @deprecated decorator(s). this is to ensure that third party code still continues to work and not need to guess where our methods went.\n\nThis applies to all the methods being moved.","commit_id":"d357b26868df035bcd27576568e044853ca9bb53"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"c7d66f8e8f40c2611ab7852afa63130675ff56f0","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                x in self.identity_api.list_groups_for_user(user_id)]"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @notifications.created(_PROJECT)"},{"line_number":83,"context_line":"    def create_project(self, tenant_id, tenant):"},{"line_number":84,"context_line":"        tenant \u003d tenant.copy()"},{"line_number":85,"context_line":"        tenant.setdefault(\u0027enabled\u0027, True)"},{"line_number":86,"context_line":"        tenant[\u0027enabled\u0027] \u003d clean.project_enabled(tenant[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a890539_99151a4b","side":"PARENT","line":83,"in_reply_to":"5a890539_19e04a95","updated":"2014-11-14 20:44:26.000000000","message":"Ah i see you moved to the bottom of the file - strike this comment.","commit_id":"d357b26868df035bcd27576568e044853ca9bb53"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6557ed5e8092df6b4603cd65f4b194be1becdd54","unresolved":false,"context_lines":[{"line_number":472,"context_line":"    # calls direct to resource."},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    def create_project(self, project_id, project):"},{"line_number":475,"context_line":"        return self.resource_api.create_project(project_id, project)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    def get_project_by_name(self, tenant_name, domain_id):"},{"line_number":478,"context_line":"        return self.resource_api.get_project_by_name(tenant_name, domain_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a890539_f41aa56d","line":475,"updated":"2014-11-14 20:45:20.000000000","message":"These need the @deprecated decorator.","commit_id":"8b893404c00d62aa0a59a2a230d0727e6308fef3"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"53a6225cd52d2738c80356277108fa9ca3cb7032","unresolved":false,"context_lines":[{"line_number":472,"context_line":"    # calls direct to resource."},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    def create_project(self, project_id, project):"},{"line_number":475,"context_line":"        return self.resource_api.create_project(project_id, project)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    def get_project_by_name(self, tenant_name, domain_id):"},{"line_number":478,"context_line":"        return self.resource_api.get_project_by_name(tenant_name, domain_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a890539_0fd638f1","line":475,"in_reply_to":"5a890539_f41aa56d","updated":"2014-11-14 22:03:34.000000000","message":"agreed.","commit_id":"8b893404c00d62aa0a59a2a230d0727e6308fef3"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"50580fb9699a56da624b053bee5c9b267b4177cf","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            # from a parent project. There is no need to support it on"},{"line_number":117,"context_line":"            # other backend because get_roles_for_user_and_project will"},{"line_number":118,"context_line":"            # be replaced by list_role_assignments filtered by user and"},{"line_number":119,"context_line":"            # user in effective mode."},{"line_number":120,"context_line":"            return self.driver.list_role_ids_for_groups_on_project("},{"line_number":121,"context_line":"                group_ids,"},{"line_number":122,"context_line":"                project_ref[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":33,"id":"3a961159_b956e604","line":119,"updated":"2014-12-16 11:48:45.000000000","message":"this seems to be an error in the rebase, we do not have this comment: https://github.com/openstack/keystone/blob/master/keystone/assignment/core.py#L240","commit_id":"1d4885d64dfeb50917d54b45b2ad9a0362a6863d"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6de731050131ebfb7db3277a3c7ee850e7163e9f","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            # from a parent project. There is no need to support it on"},{"line_number":117,"context_line":"            # other backend because get_roles_for_user_and_project will"},{"line_number":118,"context_line":"            # be replaced by list_role_assignments filtered by user and"},{"line_number":119,"context_line":"            # user in effective mode."},{"line_number":120,"context_line":"            return self.driver.list_role_ids_for_groups_on_project("},{"line_number":121,"context_line":"                group_ids,"},{"line_number":122,"context_line":"                project_ref[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":33,"id":"3a961159_70b80c2b","line":119,"in_reply_to":"3a961159_b956e604","updated":"2014-12-16 14:12:58.000000000","message":"yes, my mistake - there used to be this comment in a previous rebase...and I mistakenly left it in there thinking I was \"pulling it up\" from the sql.py file.  Will remove.","commit_id":"1d4885d64dfeb50917d54b45b2ad9a0362a6863d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"50580fb9699a56da624b053bee5c9b267b4177cf","unresolved":false,"context_lines":[{"line_number":520,"context_line":"    # NOTE(henry-nash): In Kilo we moved a number of methods from the"},{"line_number":521,"context_line":"    # assignment manager to create the resource manager. For backward"},{"line_number":522,"context_line":"    # compatibility, we provide deprecated cross-manager calls to those"},{"line_number":523,"context_line":"    # methods. These are marked for deprecation in Kilo + 2."},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"    @deprecated_to_resource"},{"line_number":526,"context_line":"    def create_project(self, project_id, project):"}],"source_content_type":"text/x-python","patch_set":33,"id":"3a961159_7981de4c","line":523,"updated":"2014-12-16 11:48:45.000000000","message":"Nice","commit_id":"1d4885d64dfeb50917d54b45b2ad9a0362a6863d"}],"keystone/backends.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"e2c47b3efcf3645e172937a8ae8ea91fc1664c93","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # Ensure that the identity driver is created before the resource manager,"},{"line_number":33,"context_line":"    # and that the resource driver is created before the assignment manager."},{"line_number":34,"context_line":"    # The default drivers of assignment depends on resource, which in turn"},{"line_number":35,"context_line":"    # depends on identity - hence we need to ensure the chain is available."},{"line_number":36,"context_line":"    _IDENTITY_API \u003d identity.Manager()"},{"line_number":37,"context_line":"    _RESOURCE_API \u003d resource.Manager()"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a890539_0d7736a1","line":35,"updated":"2014-11-14 11:58:07.000000000","message":"Great explanation! :)","commit_id":"cfe22ffca04755066aa198f4de3f56285759a43f"}],"keystone/common/config.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"57ed8493136b59fd13cd2be6aae54e05ca86bd1a","unresolved":false,"context_lines":[{"line_number":450,"context_line":"                    help\u003d\u0027Toggle for resource. This has no effect \u0027"},{"line_number":451,"context_line":"                         \u0027unless global caching is enabled.\u0027),"},{"line_number":452,"context_line":"        cfg.IntOpt(\u0027cache_time\u0027,"},{"line_number":453,"context_line":"                   help\u003d\u0027TTL (in seconds) to cache assignment data. This has \u0027"},{"line_number":454,"context_line":"                        \u0027no effect unless global caching is enabled.\u0027),"},{"line_number":455,"context_line":"        cfg.IntOpt(\u0027list_limit\u0027,"},{"line_number":456,"context_line":"                   help\u003d\u0027Maximum number of entities that will be returned \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_0ad93e57","line":453,"updated":"2014-11-02 08:43:56.000000000","message":"s/assignment/resource","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"43d564277ec38706330a2a612134bac8e6311e87","unresolved":false,"context_lines":[{"line_number":450,"context_line":"                    help\u003d\u0027Toggle for resource. This has no effect \u0027"},{"line_number":451,"context_line":"                         \u0027unless global caching is enabled.\u0027),"},{"line_number":452,"context_line":"        cfg.IntOpt(\u0027cache_time\u0027,"},{"line_number":453,"context_line":"                   help\u003d\u0027TTL (in seconds) to cache assignment data. This has \u0027"},{"line_number":454,"context_line":"                        \u0027no effect unless global caching is enabled.\u0027),"},{"line_number":455,"context_line":"        cfg.IntOpt(\u0027list_limit\u0027,"},{"line_number":456,"context_line":"                   help\u003d\u0027Maximum number of entities that will be returned \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_6a89e2c9","line":453,"in_reply_to":"7a8c0949_0ad93e57","updated":"2014-11-02 11:48:38.000000000","message":"Done","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4311a2afe52be9ed57dd852b56317ffb9280f61f","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"},{"line_number":432,"context_line":"                   help\u003d\u0027Assignment backend driver.\u0027),"},{"line_number":433,"context_line":"        cfg.IntOpt(\u0027list_limit\u0027,"},{"line_number":434,"context_line":"                   help\u003d\u0027Maximum number of entities that will be returned \u0027"},{"line_number":435,"context_line":"                        \u0027in an assignment collection.\u0027),"},{"line_number":436,"context_line":"    ],"},{"line_number":437,"context_line":"    \u0027resource\u0027: ["}],"source_content_type":"text/x-python","patch_set":13,"id":"5a890539_545f62e5","line":434,"updated":"2014-11-12 08:27:32.000000000","message":"can this also be removed?","commit_id":"e10ad1441f34f5d5a706a530e41caaaba05b6b8f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f78f4f0308cc44f062ab4529d9cdfcc55629c687","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"},{"line_number":432,"context_line":"                   help\u003d\u0027Assignment backend driver.\u0027),"},{"line_number":433,"context_line":"        cfg.IntOpt(\u0027list_limit\u0027,"},{"line_number":434,"context_line":"                   help\u003d\u0027Maximum number of entities that will be returned \u0027"},{"line_number":435,"context_line":"                        \u0027in an assignment collection.\u0027),"},{"line_number":436,"context_line":"    ],"},{"line_number":437,"context_line":"    \u0027resource\u0027: ["}],"source_content_type":"text/x-python","patch_set":13,"id":"5a890539_93c47693","line":434,"in_reply_to":"5a890539_545f62e5","updated":"2014-11-12 13:55:07.000000000","message":"Yep, you\u0027re right - we don\u0027t currently truncate any of the manager methods that remain in assignment.","commit_id":"e10ad1441f34f5d5a706a530e41caaaba05b6b8f"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d9dbf6c204f33e6a781bfda1df0b8df2e01427ee","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"},{"line_number":439,"context_line":"                   help\u003d\u0027Resource backend driver.\u0027),"},{"line_number":440,"context_line":"        cfg.BoolOpt(\u0027caching\u0027, default\u003dTrue,"},{"line_number":441,"context_line":"                    help\u003d\u0027Toggle for resource. This has no effect \u0027"},{"line_number":442,"context_line":"                         \u0027unless global caching is enabled.\u0027),"},{"line_number":443,"context_line":"        cfg.IntOpt(\u0027cache_time\u0027,"},{"line_number":444,"context_line":"                   help\u003d\u0027TTL (in seconds) to cache resource data. This has \u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a890539_19720a11","line":441,"updated":"2014-11-14 20:41:50.000000000","message":"These need to include the now deprecated assignment options. OR we need a way that the assignment options \n(when/if added) would populate these values.","commit_id":"8b893404c00d62aa0a59a2a230d0727e6308fef3"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"53a6225cd52d2738c80356277108fa9ca3cb7032","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"},{"line_number":439,"context_line":"                   help\u003d\u0027Resource backend driver.\u0027),"},{"line_number":440,"context_line":"        cfg.BoolOpt(\u0027caching\u0027, default\u003dTrue,"},{"line_number":441,"context_line":"                    help\u003d\u0027Toggle for resource. This has no effect \u0027"},{"line_number":442,"context_line":"                         \u0027unless global caching is enabled.\u0027),"},{"line_number":443,"context_line":"        cfg.IntOpt(\u0027cache_time\u0027,"},{"line_number":444,"context_line":"                   help\u003d\u0027TTL (in seconds) to cache resource data. This has \u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a890539_2f069486","line":441,"in_reply_to":"5a890539_19720a11","updated":"2014-11-14 22:03:34.000000000","message":"oh...yeah, nice catch...had not thought of that.","commit_id":"8b893404c00d62aa0a59a2a230d0727e6308fef3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0f0bbc91badbe4684d9829571b6f14c2b3b6c30","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        # the resource default of True."},{"line_number":464,"context_line":"        cfg.BoolOpt(\u0027caching\u0027, default\u003dTrue,"},{"line_number":465,"context_line":"                    help\u003d\u0027Toggle for resource. This has no effect \u0027"},{"line_number":466,"context_line":"                         \u0027unless global caching is enabled.\u0027),"},{"line_number":467,"context_line":"        cfg.IntOpt(\u0027cache_time\u0027,"},{"line_number":468,"context_line":"                   help\u003d\u0027TTL (in seconds) to cache resource data. This has \u0027"},{"line_number":469,"context_line":"                        \u0027no effect unless global caching is enabled.\u0027),"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a890539_3202c56f","line":466,"updated":"2014-11-21 02:44:16.000000000","message":"oslo.config already supports deprecated options, deprecated_name and deprecated_group should be used instead.","commit_id":"8ae1364fd804b80972a8191e0b021a09610180dd"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"fe1eef967251eb65e0e7a893ab2aac98740a0f02","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        # the resource default of True."},{"line_number":464,"context_line":"        cfg.BoolOpt(\u0027caching\u0027, default\u003dTrue,"},{"line_number":465,"context_line":"                    help\u003d\u0027Toggle for resource. This has no effect \u0027"},{"line_number":466,"context_line":"                         \u0027unless global caching is enabled.\u0027),"},{"line_number":467,"context_line":"        cfg.IntOpt(\u0027cache_time\u0027,"},{"line_number":468,"context_line":"                   help\u003d\u0027TTL (in seconds) to cache resource data. This has \u0027"},{"line_number":469,"context_line":"                        \u0027no effect unless global caching is enabled.\u0027),"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a890539_c6445fb9","line":466,"in_reply_to":"5a890539_3202c56f","updated":"2014-11-21 05:04:56.000000000","message":"++ ah yeah, we should do that, it will simplify the logic further down in the resource_api manager.","commit_id":"8ae1364fd804b80972a8191e0b021a09610180dd"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6e3c91eb0a11d3fcbb88a18495b6c80ae534780c","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        # the resource default of True."},{"line_number":464,"context_line":"        cfg.BoolOpt(\u0027caching\u0027, default\u003dTrue,"},{"line_number":465,"context_line":"                    help\u003d\u0027Toggle for resource. This has no effect \u0027"},{"line_number":466,"context_line":"                         \u0027unless global caching is enabled.\u0027),"},{"line_number":467,"context_line":"        cfg.IntOpt(\u0027cache_time\u0027,"},{"line_number":468,"context_line":"                   help\u003d\u0027TTL (in seconds) to cache resource data. This has \u0027"},{"line_number":469,"context_line":"                        \u0027no effect unless global caching is enabled.\u0027),"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a890539_639df865","line":466,"in_reply_to":"5a890539_c6445fb9","updated":"2014-11-25 14:21:58.000000000","message":"very cool...had no idea this existed!  Done.","commit_id":"8ae1364fd804b80972a8191e0b021a09610180dd"}],"keystone/identity/backends/ldap.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"57ed8493136b59fd13cd2be6aae54e05ca86bd1a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.user \u003d UserApi(conf)"},{"line_number":41,"context_line":"        self.group \u003d GroupApi(conf)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def default_resource_driver(self):"},{"line_number":44,"context_line":"        return \"keystone.resource.backends.ldap.Resource\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def is_domain_aware(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_2adefa3f","line":43,"updated":"2014-11-02 08:43:56.000000000","message":"Why does Identity need to know that Resource backend even exists?\nI guess it\u0027s because we have user inside a domain.\n\nBut what about removing this dependency here?\nWe could have a special assignment to an entity from Identity on a resource from Resource with a role \u0027owned_by\u0027.\n\nThis way, potential advantages are:\n1) We have no dependency between Identity and Resource; \n2) We could even have user/group owned by projects (reseller ?);\n3) We could have a user/group with multiple parents (actor inside different projects, domains).","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"43d564277ec38706330a2a612134bac8e6311e87","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.user \u003d UserApi(conf)"},{"line_number":41,"context_line":"        self.group \u003d GroupApi(conf)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def default_resource_driver(self):"},{"line_number":44,"context_line":"        return \"keystone.resource.backends.ldap.Resource\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def is_domain_aware(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_8a860eb8","line":43,"in_reply_to":"7a8c0949_2adefa3f","updated":"2014-11-02 11:48:38.000000000","message":"So this is just so that for installations that user an all LDAP configuration, they don\u0027t need to specific the driver type for resource (and assignment) explicitly.  This method is only referenced from the init of resources/core.py. It is provided for backward compatibility only.","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"}],"keystone/identity/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0f0bbc91badbe4684d9829571b6f14c2b3b6c30","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"@dependency.provider(\u0027identity_api\u0027)"},{"line_number":228,"context_line":"@dependency.optional(\u0027revoke_api\u0027)"},{"line_number":229,"context_line":"@dependency.requires(\u0027resource_api\u0027, \u0027assignment_api\u0027, \u0027credential_api\u0027,"},{"line_number":230,"context_line":"                     \u0027id_mapping_api\u0027)"},{"line_number":231,"context_line":"class Manager(manager.Manager):"},{"line_number":232,"context_line":"    \"\"\"Default pivot point for the Identity backend."}],"source_content_type":"text/x-python","patch_set":22,"id":"5a890539_b21b15c9","line":229,"updated":"2014-11-21 02:44:16.000000000","message":"these should be in alphabetical order.","commit_id":"8ae1364fd804b80972a8191e0b021a09610180dd"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6e3c91eb0a11d3fcbb88a18495b6c80ae534780c","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"@dependency.provider(\u0027identity_api\u0027)"},{"line_number":228,"context_line":"@dependency.optional(\u0027revoke_api\u0027)"},{"line_number":229,"context_line":"@dependency.requires(\u0027resource_api\u0027, \u0027assignment_api\u0027, \u0027credential_api\u0027,"},{"line_number":230,"context_line":"                     \u0027id_mapping_api\u0027)"},{"line_number":231,"context_line":"class Manager(manager.Manager):"},{"line_number":232,"context_line":"    \"\"\"Default pivot point for the Identity backend."}],"source_content_type":"text/x-python","patch_set":22,"id":"5a890539_a38a8018","line":229,"in_reply_to":"5a890539_b21b15c9","updated":"2014-11-25 14:21:58.000000000","message":"Done","commit_id":"8ae1364fd804b80972a8191e0b021a09610180dd"}],"keystone/resource/__init__.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"e2c47b3efcf3645e172937a8ae8ea91fc1664c93","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a890539_6d135a0d","line":1,"updated":"2014-11-14 11:58:07.000000000","message":"s/2013/2014 ?\nThe year of publication of this work :-)","commit_id":"cfe22ffca04755066aa198f4de3f56285759a43f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"472058ae6e3642f6ed271ba0407575ef45853d07","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a890539_c8e51c39","line":1,"in_reply_to":"5a890539_6d135a0d","updated":"2014-11-14 12:10:20.000000000","message":"I should remove this entirely.","commit_id":"cfe22ffca04755066aa198f4de3f56285759a43f"}],"keystone/resource/backends/ldap.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f69fdf3eb211d370c54bca10aacc84c227f91182","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012-2013 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_6172e77d","line":1,"updated":"2014-11-11 20:28:48.000000000","message":"Remove copyrights?","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"2b1b78c249150ccfb8e12d4dca3da7fab43c787b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012-2013 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_52ce9b84","line":1,"in_reply_to":"5a890539_6172e77d","updated":"2014-11-11 23:28:07.000000000","message":"Done","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f69fdf3eb211d370c54bca10aacc84c227f91182","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        # This is the only deep dependency from resource back"},{"line_number":47,"context_line":"        # to identity.  The assumption is that if you are using"},{"line_number":48,"context_line":"        # LDAP for resource, you are using it for Id as well."},{"line_number":49,"context_line":"        self.user \u003d ldap_identity.UserApi(CONF)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        self.project \u003d ProjectApi(CONF)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_4115ebef","line":48,"updated":"2014-11-11 20:28:48.000000000","message":"s/Id/Identity/","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"2b1b78c249150ccfb8e12d4dca3da7fab43c787b","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        # This is the only deep dependency from resource back"},{"line_number":47,"context_line":"        # to identity.  The assumption is that if you are using"},{"line_number":48,"context_line":"        # LDAP for resource, you are using it for Id as well."},{"line_number":49,"context_line":"        self.user \u003d ldap_identity.UserApi(CONF)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        self.project \u003d ProjectApi(CONF)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_5295bb3e","line":48,"in_reply_to":"5a890539_4115ebef","updated":"2014-11-11 23:28:07.000000000","message":"Done","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"}],"keystone/resource/backends/sql.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f69fdf3eb211d370c54bca10aacc84c227f91182","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    # CRUD"},{"line_number":85,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":86,"context_line":"    def create_project(self, tenant_id, tenant):"},{"line_number":87,"context_line":"        tenant[\u0027name\u0027] \u003d clean.project_name(tenant[\u0027name\u0027])"},{"line_number":88,"context_line":"        with sql.transaction() as session:"},{"line_number":89,"context_line":"            tenant_ref \u003d Project.from_dict(tenant)"},{"line_number":90,"context_line":"            session.add(tenant_ref)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_21de1f40","line":87,"updated":"2014-11-11 20:28:48.000000000","message":"resource validation should probably live in the Manager layer so that it effects all backends consistently","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"2b1b78c249150ccfb8e12d4dca3da7fab43c787b","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    # CRUD"},{"line_number":85,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":86,"context_line":"    def create_project(self, tenant_id, tenant):"},{"line_number":87,"context_line":"        tenant[\u0027name\u0027] \u003d clean.project_name(tenant[\u0027name\u0027])"},{"line_number":88,"context_line":"        with sql.transaction() as session:"},{"line_number":89,"context_line":"            tenant_ref \u003d Project.from_dict(tenant)"},{"line_number":90,"context_line":"            session.add(tenant_ref)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_92dba31a","line":87,"in_reply_to":"5a890539_21de1f40","updated":"2014-11-11 23:28:07.000000000","message":"I agree with you - although was trying to make the minimum changes in this patch.  I\u0027ve raised this as bug #1391682 and will create a follow-on patch.","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"faba355b2658d43764843e14483b3677e2ad7c46","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    # CRUD"},{"line_number":85,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":86,"context_line":"    def create_project(self, tenant_id, tenant):"},{"line_number":87,"context_line":"        tenant[\u0027name\u0027] \u003d clean.project_name(tenant[\u0027name\u0027])"},{"line_number":88,"context_line":"        with sql.transaction() as session:"},{"line_number":89,"context_line":"            tenant_ref \u003d Project.from_dict(tenant)"},{"line_number":90,"context_line":"            session.add(tenant_ref)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_9b80b7f8","line":87,"in_reply_to":"5a890539_92dba31a","updated":"2014-11-14 16:30:58.000000000","message":"Update with a NOTE saying that this will be fixed by bug #1391682 ?","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f69fdf3eb211d370c54bca10aacc84c227f91182","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":94,"context_line":"    def update_project(self, tenant_id, tenant):"},{"line_number":95,"context_line":"        if \u0027name\u0027 in tenant:"},{"line_number":96,"context_line":"            tenant[\u0027name\u0027] \u003d clean.project_name(tenant[\u0027name\u0027])"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        with sql.transaction() as session:"},{"line_number":99,"context_line":"            tenant_ref \u003d self._get_project(session, tenant_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_41e32b07","line":96,"updated":"2014-11-11 20:28:48.000000000","message":"same comment here","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"2b1b78c249150ccfb8e12d4dca3da7fab43c787b","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":94,"context_line":"    def update_project(self, tenant_id, tenant):"},{"line_number":95,"context_line":"        if \u0027name\u0027 in tenant:"},{"line_number":96,"context_line":"            tenant[\u0027name\u0027] \u003d clean.project_name(tenant[\u0027name\u0027])"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        with sql.transaction() as session:"},{"line_number":99,"context_line":"            tenant_ref \u003d self._get_project(session, tenant_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_b2d89f1e","line":96,"in_reply_to":"5a890539_41e32b07","updated":"2014-11-11 23:28:07.000000000","message":"as above.","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"faba355b2658d43764843e14483b3677e2ad7c46","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":94,"context_line":"    def update_project(self, tenant_id, tenant):"},{"line_number":95,"context_line":"        if \u0027name\u0027 in tenant:"},{"line_number":96,"context_line":"            tenant[\u0027name\u0027] \u003d clean.project_name(tenant[\u0027name\u0027])"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        with sql.transaction() as session:"},{"line_number":99,"context_line":"            tenant_ref \u003d self._get_project(session, tenant_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_db7ddf1d","line":96,"in_reply_to":"5a890539_b2d89f1e","updated":"2014-11-14 16:30:58.000000000","message":"Same as above","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"64ca5d1994b6e0fe949376392e666fd544647242","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    # CRUD"},{"line_number":83,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":84,"context_line":"    def create_project(self, tenant_id, tenant):"},{"line_number":85,"context_line":"        tenant[\u0027name\u0027] \u003d clean.project_name(tenant[\u0027name\u0027])"},{"line_number":86,"context_line":"        with sql.transaction() as session:"},{"line_number":87,"context_line":"            tenant_ref \u003d Project.from_dict(tenant)"},{"line_number":88,"context_line":"            session.add(tenant_ref)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_fbcffb53","line":85,"updated":"2014-11-14 16:32:53.000000000","message":"This should have a note to the open bug if we are not going to fix it in this patch.","commit_id":"0f85d91a680f5289217d863924374ecbfa4f3115"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e6b4f403972f250ead97f446e79a3c8d3484e9e7","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    # CRUD"},{"line_number":83,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":84,"context_line":"    def create_project(self, tenant_id, tenant):"},{"line_number":85,"context_line":"        tenant[\u0027name\u0027] \u003d clean.project_name(tenant[\u0027name\u0027])"},{"line_number":86,"context_line":"        with sql.transaction() as session:"},{"line_number":87,"context_line":"            tenant_ref \u003d Project.from_dict(tenant)"},{"line_number":88,"context_line":"            session.add(tenant_ref)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_1b2da7a8","line":85,"in_reply_to":"5a890539_fbcffb53","updated":"2014-11-14 16:43:52.000000000","message":"Done","commit_id":"0f85d91a680f5289217d863924374ecbfa4f3115"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"64ca5d1994b6e0fe949376392e666fd544647242","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":92,"context_line":"    def update_project(self, tenant_id, tenant):"},{"line_number":93,"context_line":"        if \u0027name\u0027 in tenant:"},{"line_number":94,"context_line":"            tenant[\u0027name\u0027] \u003d clean.project_name(tenant[\u0027name\u0027])"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        with sql.transaction() as session:"},{"line_number":97,"context_line":"            tenant_ref \u003d self._get_project(session, tenant_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_1bd92722","line":94,"updated":"2014-11-14 16:32:53.000000000","message":"Same comment here.","commit_id":"0f85d91a680f5289217d863924374ecbfa4f3115"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e6b4f403972f250ead97f446e79a3c8d3484e9e7","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":92,"context_line":"    def update_project(self, tenant_id, tenant):"},{"line_number":93,"context_line":"        if \u0027name\u0027 in tenant:"},{"line_number":94,"context_line":"            tenant[\u0027name\u0027] \u003d clean.project_name(tenant[\u0027name\u0027])"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        with sql.transaction() as session:"},{"line_number":97,"context_line":"            tenant_ref \u003d self._get_project(session, tenant_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_5b1acf7d","line":94,"in_reply_to":"5a890539_1bd92722","updated":"2014-11-14 16:43:52.000000000","message":"Done","commit_id":"0f85d91a680f5289217d863924374ecbfa4f3115"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d4b795b2dd8bf336413c51b21e9d1fbb450dc8da","unresolved":false,"context_lines":[{"line_number":260,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027domain_id\u0027, \u0027name\u0027), {})"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"class Role(sql.ModelBase, sql.DictBase):"},{"line_number":264,"context_line":"    __tablename__ \u003d \u0027role\u0027"},{"line_number":265,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027name\u0027]"},{"line_number":266,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a890539_f7d4d948","line":263,"updated":"2014-11-20 02:38:54.000000000","message":"What makes role end up in \"resource\" vs following the RoleAssignment backend. I\u0027m not sure why Roles are a resource independent of the assignment backend.\n\nIt looks like if you\u0027re implementing your own assignment backend, you likely are going to track roles your own way as well.","commit_id":"3a69449bbdbfb49550761eec80035a5090c9a54c"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"fe1eef967251eb65e0e7a893ab2aac98740a0f02","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":267,"context_line":"    name \u003d sql.Column(sql.String(255), unique\u003dTrue, nullable\u003dFalse)"},{"line_number":268,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":269,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027name\u0027), {})"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a890539_265b6388","line":269,"updated":"2014-11-21 05:04:56.000000000","message":"So, the more I am thinking about this the more that I am concerned that the RoleAsssignment backend is going to be overly complex (for a custom one) to handle Role -\u003e Actor,Resource mappings.\n\nThis works well for a SQL-system, but in the case of an ABAC type system (as role assignment), you\u0027re now needing to support a grouping of Action,Resource(project|domain) that resolves to a Role and then map that role to the Resource(role) that everything expects to be able to act on.\n\nThis feels like it\u0027s going to be a really bad UX.\n\nI need some clarification on how Role being (even as you said in a previous comment) the lingua franca makes the assignment backend better / easier to develop for vs. letting the assignment backend control the resulting Role as well. Alternatively, the Assignment backend may ignore the role(s) and produce something else, which in itself has some level of dissonance.","commit_id":"8ae1364fd804b80972a8191e0b021a09610180dd"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b42ba05886de3e68a432784eee5171616e7107fa","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":267,"context_line":"    name \u003d sql.Column(sql.String(255), unique\u003dTrue, nullable\u003dFalse)"},{"line_number":268,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":269,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027name\u0027), {})"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a890539_4caca9ed","line":269,"in_reply_to":"5a890539_265b6388","updated":"2014-11-25 14:41:23.000000000","message":"So these are all valid questions...and I have posted some information to the dev mailing list (see: http://lists.openstack.org/pipermail/openstack-dev/2014-November/051481.html).\n\nI guess at some level we have to decide which concepts are \"global\" and which are part of \"multi-tenant\" support in its broadest terms.  E.g.  Do we want individual domains to be able to build abstractions that are meaningful to them? (yes).  Do we want flexibility to support different assignments models? (yes). However, we might consider \"base roles\" are really on a trajectory to become \"the list of capabilities of supported services\", to which we will want to provide support for access control.  If roles really become service capabilities, then it doesn\u0027t feel to me that they should be (effectively) definable by anything that is \"multi tenant pluggable\"...they are system-wide (or, perhaps more correctly, service-wide).","commit_id":"8ae1364fd804b80972a8191e0b021a09610180dd"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"038b46b6c141cc7ad1736c7ba8f1e46bf4e31838","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":267,"context_line":"    name \u003d sql.Column(sql.String(255), unique\u003dTrue, nullable\u003dFalse)"},{"line_number":268,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":269,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027name\u0027), {})"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a890539_f7e8c2b4","line":269,"in_reply_to":"5a890539_4caca9ed","updated":"2014-11-25 15:11:12.000000000","message":"One additional comment: For token generation, the assignments manager/driver is, today, not responsible for mapping the role_id into the role entity (so that name can go in the token).  The token provider actually does this bit - so the key manager APIs for this speak ids, not role references.\n\nThe only proviso to the above is that the new code for federation (where we want roles for a set of groups) appears to expect the assignment manager to do this task...so this is the only case when we do this.  Which ever way we go, we should make this consistent.","commit_id":"8ae1364fd804b80972a8191e0b021a09610180dd"}],"keystone/resource/core.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"57ed8493136b59fd13cd2be6aae54e05ca86bd1a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        super(Manager, self).__init__(resource_driver)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @notifications.created(_PROJECT)"},{"line_number":74,"context_line":"    def create_project(self, tenant_id, tenant):"},{"line_number":75,"context_line":"        tenant \u003d tenant.copy()"},{"line_number":76,"context_line":"        tenant.setdefault(\u0027enabled\u0027, True)"},{"line_number":77,"context_line":"        tenant[\u0027enabled\u0027] \u003d clean.project_enabled(tenant[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_6a7c8221","line":74,"updated":"2014-11-02 08:43:56.000000000","message":"Maybe it\u0027s a good time to remove \u0027tenant\u0027 from this backend?","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"43d564277ec38706330a2a612134bac8e6311e87","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        super(Manager, self).__init__(resource_driver)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @notifications.created(_PROJECT)"},{"line_number":74,"context_line":"    def create_project(self, tenant_id, tenant):"},{"line_number":75,"context_line":"        tenant \u003d tenant.copy()"},{"line_number":76,"context_line":"        tenant.setdefault(\u0027enabled\u0027, True)"},{"line_number":77,"context_line":"        tenant[\u0027enabled\u0027] \u003d clean.project_enabled(tenant[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_ca9016ef","line":74,"in_reply_to":"7a8c0949_6a7c8221","updated":"2014-11-02 11:48:38.000000000","message":"Agreed....although in this first patch I am trying to change as little as possible...I\u0027ll make that part of one of my follow-up patches.","commit_id":"3f6031375c1e384b5052c1f8b5deeb32f7f490ad"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6872804e9460d711dcc7e4fb7ad6f2b76eac2608","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        if (CONF.resource.list_limit is None and"},{"line_number":100,"context_line":"                CONF.assignment.list_limit is not None):"},{"line_number":101,"context_line":"            CONF.resource.list_limit \u003d CONF.assignment.list_limit"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        super(Manager, self).__init__(resource_driver)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @notifications.created(_PROJECT)"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a890539_37708a71","line":102,"updated":"2014-11-17 16:06:33.000000000","message":"I\u0027m not the above method of setting CONF values is allowed (the class doesn\u0027t support __setattr__ etc. Need to re-write this bit...","commit_id":"55b4c84a9a68de3fff851c5e8b153c0a59e6745d"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f7c52aae9866d6a5befe3fe108be9be5a6091b48","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        # specifically set for resource and they have been for assignment,"},{"line_number":86,"context_line":"        # then for backward compatibility reasons use the assignment values."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        global SHOULD_CACHE, EXPIRATION_TIME, LIST_LIMIT"},{"line_number":89,"context_line":"        if (CONF.resource.caching and CONF.assignment.caching is not None and"},{"line_number":90,"context_line":"                not CONF.assignment.caching):"},{"line_number":91,"context_line":"            # The only time we need to override this is when the assignment"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a890539_5670af71","line":88,"updated":"2014-11-17 20:58:17.000000000","message":"I\u0027d be interested in people\u0027s views on how I\u0027ve done this....it doesn\u0027t feel very pretty or pythonic....but given how we use these config values (and that you can\u0027t SET a config value), I struggled for a better way.","commit_id":"5153f829469044378496696a0376a2870e662217"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d4b795b2dd8bf336413c51b21e9d1fbb450dc8da","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        global SHOULD_CACHE, EXPIRATION_TIME, LIST_LIMIT"},{"line_number":89,"context_line":"        if (CONF.resource.caching and CONF.assignment.caching is not None and"},{"line_number":90,"context_line":"                not CONF.assignment.caching):"},{"line_number":91,"context_line":"            # The only time we need to override this is when the assignment"},{"line_number":92,"context_line":"            # option has been set to False, while resource has it as the"},{"line_number":93,"context_line":"            # default option of True."}],"source_content_type":"text/x-python","patch_set":21,"id":"5a890539_97bd5505","line":90,"updated":"2014-11-20 02:38:54.000000000","message":"I am not a real fan of this. Unfortunately the original design lacks a clear way to fall through. I\u0027m thinking we probably want to clean this up in a way that we make SHOULD_CACHE, EXPIRATION_TIME, and LIST_LIMIT smart enough to pull from the right locations.","commit_id":"3a69449bbdbfb49550761eec80035a5090c9a54c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"8ff1ccfe1ee8fb755dde62907a3a0ae8af3813b2","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        global SHOULD_CACHE, EXPIRATION_TIME, LIST_LIMIT"},{"line_number":89,"context_line":"        if (CONF.resource.caching and CONF.assignment.caching is not None and"},{"line_number":90,"context_line":"                not CONF.assignment.caching):"},{"line_number":91,"context_line":"            # The only time we need to override this is when the assignment"},{"line_number":92,"context_line":"            # option has been set to False, while resource has it as the"},{"line_number":93,"context_line":"            # default option of True."}],"source_content_type":"text/x-python","patch_set":21,"id":"5a890539_27bd38d8","line":90,"in_reply_to":"5a890539_97bd5505","updated":"2014-11-20 15:46:10.000000000","message":"Agreed.  I was also trying to balance changing the minimum amount of things in one patch. I\u0027d be happy to come back in a follow-in patch to change the way this works.","commit_id":"3a69449bbdbfb49550761eec80035a5090c9a54c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0f0bbc91badbe4684d9829571b6f14c2b3b6c30","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            # The only time we need to override this is when the assignment"},{"line_number":92,"context_line":"            # option has been set to False, while resource has it as the"},{"line_number":93,"context_line":"            # default option of True."},{"line_number":94,"context_line":"            SHOULD_CACHE \u003d cache.should_cache_fn(\u0027assignment\u0027)"},{"line_number":95,"context_line":"        if (CONF.resource.cache_time is None and"},{"line_number":96,"context_line":"                CONF.assignment.cache_time is not None):"},{"line_number":97,"context_line":"            EXPIRATION_TIME \u003d lambda: CONF.assignment.cache_time"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a890539_7268cd21","line":94,"updated":"2014-11-21 02:44:16.000000000","message":"resource?","commit_id":"8ae1364fd804b80972a8191e0b021a09610180dd"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"fe1eef967251eb65e0e7a893ab2aac98740a0f02","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            # The only time we need to override this is when the assignment"},{"line_number":92,"context_line":"            # option has been set to False, while resource has it as the"},{"line_number":93,"context_line":"            # default option of True."},{"line_number":94,"context_line":"            SHOULD_CACHE \u003d cache.should_cache_fn(\u0027assignment\u0027)"},{"line_number":95,"context_line":"        if (CONF.resource.cache_time is None and"},{"line_number":96,"context_line":"                CONF.assignment.cache_time is not None):"},{"line_number":97,"context_line":"            EXPIRATION_TIME \u003d lambda: CONF.assignment.cache_time"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a890539_a64913d2","line":94,"in_reply_to":"5a890539_7268cd21","updated":"2014-11-21 05:04:56.000000000","message":"If we move to the \"deprecateD\" slo.config opt this whole set of logic can go away.","commit_id":"8ae1364fd804b80972a8191e0b021a09610180dd"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6e3c91eb0a11d3fcbb88a18495b6c80ae534780c","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            # The only time we need to override this is when the assignment"},{"line_number":92,"context_line":"            # option has been set to False, while resource has it as the"},{"line_number":93,"context_line":"            # default option of True."},{"line_number":94,"context_line":"            SHOULD_CACHE \u003d cache.should_cache_fn(\u0027assignment\u0027)"},{"line_number":95,"context_line":"        if (CONF.resource.cache_time is None and"},{"line_number":96,"context_line":"                CONF.assignment.cache_time is not None):"},{"line_number":97,"context_line":"            EXPIRATION_TIME \u003d lambda: CONF.assignment.cache_time"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a890539_03e994b6","line":94,"in_reply_to":"5a890539_a64913d2","updated":"2014-11-25 14:21:58.000000000","message":"Done","commit_id":"8ae1364fd804b80972a8191e0b021a09610180dd"}],"keystone/tests/core.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        # TODO(termie): doing something from json, probably based on Django\u0027s"},{"line_number":494,"context_line":"        #               loaddata will be much preferred."},{"line_number":495,"context_line":"        if hasattr(self, \u0027identity_api\u0027) and hasattr(self, \u0027assignment_api\u0027):"},{"line_number":496,"context_line":"            for domain in fixtures.DOMAINS:"},{"line_number":497,"context_line":"                try:"},{"line_number":498,"context_line":"                    rv \u003d self.assignment_api.create_domain(domain[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_95d80d55","side":"PARENT","line":495,"updated":"2015-01-21 17:21:42.000000000","message":"We need to add and hasattr(self, \u0027resource_api\u0027) here as well.\n\nIt\u0027s working now because if we have assignment, we have resource, since by default, assignment is loaded by resource. Or simply both driver were specified :)","commit_id":"77768e13a085270964f42a31c11ab524c6249bd1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        # TODO(termie): doing something from json, probably based on Django\u0027s"},{"line_number":494,"context_line":"        #               loaddata will be much preferred."},{"line_number":495,"context_line":"        if hasattr(self, \u0027identity_api\u0027) and hasattr(self, \u0027assignment_api\u0027):"},{"line_number":496,"context_line":"            for domain in fixtures.DOMAINS:"},{"line_number":497,"context_line":"                try:"},{"line_number":498,"context_line":"                    rv \u003d self.assignment_api.create_domain(domain[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_062fe7f7","side":"PARENT","line":495,"in_reply_to":"1a930d6b_95d80d55","updated":"2015-01-27 07:33:40.000000000","message":"nice catch!","commit_id":"77768e13a085270964f42a31c11ab524c6249bd1"}],"keystone/tests/test_backend.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":3187,"context_line":"        self.assertDictContainsSubset("},{"line_number":3188,"context_line":"            updated_project,"},{"line_number":3189,"context_line":"            self.resource_api.get_project(project_id))"},{"line_number":3190,"context_line":"        # Update project using the assignment_api manager back to original"},{"line_number":3191,"context_line":"        self.resource_api.update_project(project[\u0027id\u0027], project)"},{"line_number":3192,"context_line":"        # Verify get_project returns the original project_ref"},{"line_number":3193,"context_line":"        self.assertDictContainsSubset("}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_306cc79c","line":3190,"updated":"2015-01-21 17:21:42.000000000","message":"s/assignment_api/resource_api","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":3187,"context_line":"        self.assertDictContainsSubset("},{"line_number":3188,"context_line":"            updated_project,"},{"line_number":3189,"context_line":"            self.resource_api.get_project(project_id))"},{"line_number":3190,"context_line":"        # Update project using the assignment_api manager back to original"},{"line_number":3191,"context_line":"        self.resource_api.update_project(project[\u0027id\u0027], project)"},{"line_number":3192,"context_line":"        # Verify get_project returns the original project_ref"},{"line_number":3193,"context_line":"        self.assertDictContainsSubset("}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_665d0b79","line":3190,"in_reply_to":"1a930d6b_306cc79c","updated":"2015-01-27 07:33:40.000000000","message":"Done","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"}],"keystone/tests/test_backend_ldap.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f69fdf3eb211d370c54bca10aacc84c227f91182","unresolved":false,"context_lines":[{"line_number":1028,"context_line":"        # cache population."},{"line_number":1029,"context_line":"        self.resource_api.get_role.invalidate(self.resource_api,"},{"line_number":1030,"context_line":"                                              self.role_member[\u0027id\u0027])"},{"line_number":1031,"context_line":"        role_ref \u003d self.assignment_api.get_role(self.role_member[\u0027id\u0027])"},{"line_number":1032,"context_line":"        self.assertEqual(self.role_member[\u0027id\u0027], role_ref[\u0027id\u0027])"},{"line_number":1033,"context_line":"        self.assertEqual(self.role_member[\u0027name\u0027], role_ref[\u0027name\u0027])"},{"line_number":1034,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_a1c84f75","line":1031,"updated":"2014-11-11 20:28:48.000000000","message":"why not use the resource_api here too?","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"2b1b78c249150ccfb8e12d4dca3da7fab43c787b","unresolved":false,"context_lines":[{"line_number":1028,"context_line":"        # cache population."},{"line_number":1029,"context_line":"        self.resource_api.get_role.invalidate(self.resource_api,"},{"line_number":1030,"context_line":"                                              self.role_member[\u0027id\u0027])"},{"line_number":1031,"context_line":"        role_ref \u003d self.assignment_api.get_role(self.role_member[\u0027id\u0027])"},{"line_number":1032,"context_line":"        self.assertEqual(self.role_member[\u0027id\u0027], role_ref[\u0027id\u0027])"},{"line_number":1033,"context_line":"        self.assertEqual(self.role_member[\u0027name\u0027], role_ref[\u0027name\u0027])"},{"line_number":1034,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_723c7730","line":1031,"in_reply_to":"5a890539_a1c84f75","updated":"2014-11-11 23:28:07.000000000","message":"I was trying to make the minimum of changes...as the commit comment says, I\u0027ll be coming back in with a subsequent patch to update all the tests.","commit_id":"9a4920bb9db0cdd1d88b8ac7f5bf5211402ddeb5"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":996,"context_line":"        # could affect what the drivers would return up to the manager.  This"},{"line_number":997,"context_line":"        # solves this assumption when working with aggressive (on-create)"},{"line_number":998,"context_line":"        # cache population."},{"line_number":999,"context_line":"        self.role_api.get_role.invalidate(self.assignment_api,"},{"line_number":1000,"context_line":"                                          self.role_member[\u0027id\u0027])"},{"line_number":1001,"context_line":"        self.role_api.get_role(self.role_member[\u0027id\u0027])"},{"line_number":1002,"context_line":"        self.resource_api.get_project.invalidate(self.resource_api,"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_7079effb","line":999,"updated":"2015-01-21 17:21:42.000000000","message":"I know it\u0027s unrelated to this patch, but ...\n\nShoudn\u0027t self.assignment_api be self.role_api ?","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":996,"context_line":"        # could affect what the drivers would return up to the manager.  This"},{"line_number":997,"context_line":"        # solves this assumption when working with aggressive (on-create)"},{"line_number":998,"context_line":"        # cache population."},{"line_number":999,"context_line":"        self.role_api.get_role.invalidate(self.assignment_api,"},{"line_number":1000,"context_line":"                                          self.role_member[\u0027id\u0027])"},{"line_number":1001,"context_line":"        self.role_api.get_role(self.role_member[\u0027id\u0027])"},{"line_number":1002,"context_line":"        self.resource_api.get_project.invalidate(self.resource_api,"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_269ce30e","line":999,"in_reply_to":"1a930d6b_7079effb","updated":"2015-01-27 07:33:40.000000000","message":"yes, I think you\u0027re right...since the patch that introduced that is now merged, I\u0027ll raise a new defect for that","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":1017,"context_line":"        # the expectation that it is safe to change config values in tests that"},{"line_number":1018,"context_line":"        # could affect what the drivers would return up to the manager.  This"},{"line_number":1019,"context_line":"        # solves this assumption when working with aggressive (on-create)"},{"line_number":1020,"context_line":"        # cache population."},{"line_number":1021,"context_line":"        self.role_api.get_role.invalidate(self.assignment_api,"},{"line_number":1022,"context_line":"                                          self.role_member[\u0027id\u0027])"},{"line_number":1023,"context_line":"        self.assertRaises(exception.RoleNotFound,"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_b08357cb","line":1020,"updated":"2015-01-21 17:21:42.000000000","message":"Here as well...","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":1017,"context_line":"        # the expectation that it is safe to change config values in tests that"},{"line_number":1018,"context_line":"        # could affect what the drivers would return up to the manager.  This"},{"line_number":1019,"context_line":"        # solves this assumption when working with aggressive (on-create)"},{"line_number":1020,"context_line":"        # cache population."},{"line_number":1021,"context_line":"        self.role_api.get_role.invalidate(self.assignment_api,"},{"line_number":1022,"context_line":"                                          self.role_member[\u0027id\u0027])"},{"line_number":1023,"context_line":"        self.assertRaises(exception.RoleNotFound,"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_868cb7db","line":1020,"in_reply_to":"1a930d6b_b08357cb","updated":"2015-01-27 07:33:40.000000000","message":"ditto","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":1549,"context_line":""},{"line_number":1550,"context_line":"        self.resource_api.delete_project(project[\u0027id\u0027])"},{"line_number":1551,"context_line":"        self.assertRaises(exception.ProjectNotFound,"},{"line_number":1552,"context_line":"                          self.assignment_api.get_project,"},{"line_number":1553,"context_line":"                          project[\u0027id\u0027])"},{"line_number":1554,"context_line":""},{"line_number":1555,"context_line":"    @tests.skip_if_cache_disabled(\u0027assignment\u0027)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_70600f36","line":1552,"updated":"2015-01-21 17:21:42.000000000","message":"You missed this one...","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":1549,"context_line":""},{"line_number":1550,"context_line":"        self.resource_api.delete_project(project[\u0027id\u0027])"},{"line_number":1551,"context_line":"        self.assertRaises(exception.ProjectNotFound,"},{"line_number":1552,"context_line":"                          self.assignment_api.get_project,"},{"line_number":1553,"context_line":"                          project[\u0027id\u0027])"},{"line_number":1554,"context_line":""},{"line_number":1555,"context_line":"    @tests.skip_if_cache_disabled(\u0027assignment\u0027)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_21892d75","line":1552,"in_reply_to":"1a930d6b_70600f36","updated":"2015-01-27 07:33:40.000000000","message":"Done","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":1579,"context_line":"        self.assertDictContainsSubset("},{"line_number":1580,"context_line":"            updated_project,"},{"line_number":1581,"context_line":"            self.resource_api.get_project(project_id))"},{"line_number":1582,"context_line":"        # Update project using the assignment_api manager back to original"},{"line_number":1583,"context_line":"        self.resource_api.update_project(project[\u0027id\u0027], project)"},{"line_number":1584,"context_line":"        # Verify get_project returns the original project_ref"},{"line_number":1585,"context_line":"        self.assertDictContainsSubset("}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_d0d623c5","line":1582,"updated":"2015-01-21 17:21:42.000000000","message":"s/assignment_api/resource_api","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":1579,"context_line":"        self.assertDictContainsSubset("},{"line_number":1580,"context_line":"            updated_project,"},{"line_number":1581,"context_line":"            self.resource_api.get_project(project_id))"},{"line_number":1582,"context_line":"        # Update project using the assignment_api manager back to original"},{"line_number":1583,"context_line":"        self.resource_api.update_project(project[\u0027id\u0027], project)"},{"line_number":1584,"context_line":"        # Verify get_project returns the original project_ref"},{"line_number":1585,"context_line":"        self.assertDictContainsSubset("}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_c18f8973","line":1582,"in_reply_to":"1a930d6b_d0d623c5","updated":"2015-01-27 07:33:40.000000000","message":"Done","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":2911,"context_line":"        # Now try and manually load a 2nd sql specific driver, for domain2,"},{"line_number":2912,"context_line":"        # which should fail."},{"line_number":2913,"context_line":"        self.assertRaises(exception.MultipleSQLDriversInConfig,"},{"line_number":2914,"context_line":"                          self.identity_api.domain_configs._load_config,"},{"line_number":2915,"context_line":"                          self.identity_api.assignment_api,"},{"line_number":2916,"context_line":"                          [tests.TESTCONF + \u0027/domain_configs_one_extra_sql/\u0027 +"},{"line_number":2917,"context_line":"                           \u0027keystone.domain2.conf\u0027],"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_507eb3af","line":2914,"updated":"2015-01-21 17:21:42.000000000","message":"resource_api should be used here in order to load a 2nd driver for domain2, shouldnt?","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":2911,"context_line":"        # Now try and manually load a 2nd sql specific driver, for domain2,"},{"line_number":2912,"context_line":"        # which should fail."},{"line_number":2913,"context_line":"        self.assertRaises(exception.MultipleSQLDriversInConfig,"},{"line_number":2914,"context_line":"                          self.identity_api.domain_configs._load_config,"},{"line_number":2915,"context_line":"                          self.identity_api.assignment_api,"},{"line_number":2916,"context_line":"                          [tests.TESTCONF + \u0027/domain_configs_one_extra_sql/\u0027 +"},{"line_number":2917,"context_line":"                           \u0027keystone.domain2.conf\u0027],"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_a170bd72","line":2914,"in_reply_to":"1a930d6b_507eb3af","updated":"2015-01-27 07:33:40.000000000","message":"nice catch!","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"}],"keystone/tests/test_backend_sql.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        session.close()"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def test_list_domains_for_user(self):"},{"line_number":316,"context_line":"        domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":317,"context_line":"        self.assignment_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":318,"context_line":"        user \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":319,"context_line":"                \u0027domain_id\u0027: domain[\u0027id\u0027], \u0027enabled\u0027: True}"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_a3aa2e6e","line":316,"updated":"2015-01-21 17:21:42.000000000","message":"Missed this one ...","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        session.close()"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def test_list_domains_for_user(self):"},{"line_number":316,"context_line":"        domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":317,"context_line":"        self.assignment_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":318,"context_line":"        user \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":319,"context_line":"                \u0027domain_id\u0027: domain[\u0027id\u0027], \u0027enabled\u0027: True}"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_e1456543","line":316,"in_reply_to":"1a930d6b_a3aa2e6e","updated":"2015-01-27 07:33:40.000000000","message":"Done","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        user \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":319,"context_line":"                \u0027domain_id\u0027: domain[\u0027id\u0027], \u0027enabled\u0027: True}"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        test_domain1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":322,"context_line":"        self.assignment_api.create_domain(test_domain1[\u0027id\u0027], test_domain1)"},{"line_number":323,"context_line":"        test_domain2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":324,"context_line":"        self.assignment_api.create_domain(test_domain2[\u0027id\u0027], test_domain2)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_83c45241","line":321,"updated":"2015-01-21 17:21:42.000000000","message":"Idem","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        user \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":319,"context_line":"                \u0027domain_id\u0027: domain[\u0027id\u0027], \u0027enabled\u0027: True}"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        test_domain1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":322,"context_line":"        self.assignment_api.create_domain(test_domain1[\u0027id\u0027], test_domain1)"},{"line_number":323,"context_line":"        test_domain2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":324,"context_line":"        self.assignment_api.create_domain(test_domain2[\u0027id\u0027], test_domain2)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_0178b18e","line":321,"in_reply_to":"1a930d6b_83c45241","updated":"2015-01-27 07:33:40.000000000","message":"Done","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        test_domain1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":322,"context_line":"        self.assignment_api.create_domain(test_domain1[\u0027id\u0027], test_domain1)"},{"line_number":323,"context_line":"        test_domain2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":324,"context_line":"        self.assignment_api.create_domain(test_domain2[\u0027id\u0027], test_domain2)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        user \u003d self.identity_api.create_user(user)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_a3c14e30","line":323,"updated":"2015-01-21 17:21:42.000000000","message":"Idem","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        test_domain1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":322,"context_line":"        self.assignment_api.create_domain(test_domain1[\u0027id\u0027], test_domain1)"},{"line_number":323,"context_line":"        test_domain2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":324,"context_line":"        self.assignment_api.create_domain(test_domain2[\u0027id\u0027], test_domain2)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        user \u003d self.identity_api.create_user(user)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_217bed8c","line":323,"in_reply_to":"1a930d6b_a3c14e30","updated":"2015-01-27 07:33:40.000000000","message":"Done","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        # Create two groups each with a role on a different domain, and"},{"line_number":340,"context_line":"        # make user1 a member of both groups.  Both these new domains"},{"line_number":341,"context_line":"        # should now be included, along with any direct user grants."},{"line_number":342,"context_line":"        domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":343,"context_line":"        self.assignment_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":344,"context_line":"        user \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":345,"context_line":"                \u0027domain_id\u0027: domain[\u0027id\u0027], \u0027enabled\u0027: True}"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_23ed5ec4","line":342,"updated":"2015-01-21 17:21:42.000000000","message":"Missed this one ...","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        # Create two groups each with a role on a different domain, and"},{"line_number":340,"context_line":"        # make user1 a member of both groups.  Both these new domains"},{"line_number":341,"context_line":"        # should now be included, along with any direct user grants."},{"line_number":342,"context_line":"        domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":343,"context_line":"        self.assignment_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":344,"context_line":"        user \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":345,"context_line":"                \u0027domain_id\u0027: domain[\u0027id\u0027], \u0027enabled\u0027: True}"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_617175a7","line":342,"in_reply_to":"1a930d6b_23ed5ec4","updated":"2015-01-27 07:33:40.000000000","message":"Done","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        group2 \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: domain[\u0027id\u0027]}"},{"line_number":350,"context_line":"        group2 \u003d self.identity_api.create_group(group2)"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        test_domain1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":353,"context_line":"        self.assignment_api.create_domain(test_domain1[\u0027id\u0027], test_domain1)"},{"line_number":354,"context_line":"        test_domain2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":355,"context_line":"        self.assignment_api.create_domain(test_domain2[\u0027id\u0027], test_domain2)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_83db721a","line":352,"updated":"2015-01-21 17:21:42.000000000","message":"Idem","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        group2 \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: domain[\u0027id\u0027]}"},{"line_number":350,"context_line":"        group2 \u003d self.identity_api.create_group(group2)"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        test_domain1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":353,"context_line":"        self.assignment_api.create_domain(test_domain1[\u0027id\u0027], test_domain1)"},{"line_number":354,"context_line":"        test_domain2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":355,"context_line":"        self.assignment_api.create_domain(test_domain2[\u0027id\u0027], test_domain2)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_a166fdea","line":352,"in_reply_to":"1a930d6b_83db721a","updated":"2015-01-27 07:33:40.000000000","message":"Done","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        test_domain1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":353,"context_line":"        self.assignment_api.create_domain(test_domain1[\u0027id\u0027], test_domain1)"},{"line_number":354,"context_line":"        test_domain2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":355,"context_line":"        self.assignment_api.create_domain(test_domain2[\u0027id\u0027], test_domain2)"},{"line_number":356,"context_line":"        test_domain3 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":357,"context_line":"        self.assignment_api.create_domain(test_domain3[\u0027id\u0027], test_domain3)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_e3099696","line":354,"updated":"2015-01-21 17:21:42.000000000","message":"Idem","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        test_domain1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":353,"context_line":"        self.assignment_api.create_domain(test_domain1[\u0027id\u0027], test_domain1)"},{"line_number":354,"context_line":"        test_domain2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":355,"context_line":"        self.assignment_api.create_domain(test_domain2[\u0027id\u0027], test_domain2)"},{"line_number":356,"context_line":"        test_domain3 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":357,"context_line":"        self.assignment_api.create_domain(test_domain3[\u0027id\u0027], test_domain3)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_c16149d4","line":354,"in_reply_to":"1a930d6b_e3099696","updated":"2015-01-27 07:33:40.000000000","message":"Done","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        self.assignment_api.create_domain(test_domain1[\u0027id\u0027], test_domain1)"},{"line_number":354,"context_line":"        test_domain2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":355,"context_line":"        self.assignment_api.create_domain(test_domain2[\u0027id\u0027], test_domain2)"},{"line_number":356,"context_line":"        test_domain3 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":357,"context_line":"        self.assignment_api.create_domain(test_domain3[\u0027id\u0027], test_domain3)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        self.identity_api.add_user_to_group(user[\u0027id\u0027], group1[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_03ff8268","line":356,"updated":"2015-01-21 17:21:42.000000000","message":"Idem","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        self.assignment_api.create_domain(test_domain1[\u0027id\u0027], test_domain1)"},{"line_number":354,"context_line":"        test_domain2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":355,"context_line":"        self.assignment_api.create_domain(test_domain2[\u0027id\u0027], test_domain2)"},{"line_number":356,"context_line":"        test_domain3 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":357,"context_line":"        self.assignment_api.create_domain(test_domain3[\u0027id\u0027], test_domain3)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        self.identity_api.add_user_to_group(user[\u0027id\u0027], group1[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_e15c851b","line":356,"in_reply_to":"1a930d6b_03ff8268","updated":"2015-01-27 07:33:40.000000000","message":"Done","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        - When listing domains for user, neither domain should be returned"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        \"\"\""},{"line_number":386,"context_line":"        domain1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":387,"context_line":"        domain1 \u003d self.assignment_api.create_domain(domain1[\u0027id\u0027], domain1)"},{"line_number":388,"context_line":"        domain2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":389,"context_line":"        domain2 \u003d self.assignment_api.create_domain(domain2[\u0027id\u0027], domain2)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_233b9e3b","line":386,"updated":"2015-01-21 17:21:42.000000000","message":"Need to be updated here as well..","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        - When listing domains for user, neither domain should be returned"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        \"\"\""},{"line_number":386,"context_line":"        domain1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":387,"context_line":"        domain1 \u003d self.assignment_api.create_domain(domain1[\u0027id\u0027], domain1)"},{"line_number":388,"context_line":"        domain2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":389,"context_line":"        domain2 \u003d self.assignment_api.create_domain(domain2[\u0027id\u0027], domain2)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_019fd1b5","line":386,"in_reply_to":"1a930d6b_233b9e3b","updated":"2015-01-27 07:33:40.000000000","message":"Done","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        \"\"\""},{"line_number":386,"context_line":"        domain1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":387,"context_line":"        domain1 \u003d self.assignment_api.create_domain(domain1[\u0027id\u0027], domain1)"},{"line_number":388,"context_line":"        domain2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":389,"context_line":"        domain2 \u003d self.assignment_api.create_domain(domain2[\u0027id\u0027], domain2)"},{"line_number":390,"context_line":"        user \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":391,"context_line":"                \u0027domain_id\u0027: domain1[\u0027id\u0027], \u0027enabled\u0027: True}"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_433fca25","line":388,"updated":"2015-01-21 17:21:42.000000000","message":"Idem","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        \"\"\""},{"line_number":386,"context_line":"        domain1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":387,"context_line":"        domain1 \u003d self.assignment_api.create_domain(domain1[\u0027id\u0027], domain1)"},{"line_number":388,"context_line":"        domain2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":389,"context_line":"        domain2 \u003d self.assignment_api.create_domain(domain2[\u0027id\u0027], domain2)"},{"line_number":390,"context_line":"        user \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":391,"context_line":"                \u0027domain_id\u0027: domain1[\u0027id\u0027], \u0027enabled\u0027: True}"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_21a20dfd","line":388,"in_reply_to":"1a930d6b_433fca25","updated":"2015-01-27 07:33:40.000000000","message":"Done","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":797,"context_line":"        # which should work due to the cross manager deprecated calls."},{"line_number":798,"context_line":"        role_ref \u003d {"},{"line_number":799,"context_line":"            \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":800,"context_line":"            \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":801,"context_line":"        self.assignment_api.create_role(role_ref[\u0027id\u0027], role_ref)"},{"line_number":802,"context_line":"        self.role_api.get_role(role_ref[\u0027id\u0027])"},{"line_number":803,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_030dc290","line":800,"updated":"2015-01-21 17:21:42.000000000","message":"Even if not related to this patch, this one should be role_api.","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":797,"context_line":"        # which should work due to the cross manager deprecated calls."},{"line_number":798,"context_line":"        role_ref \u003d {"},{"line_number":799,"context_line":"            \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":800,"context_line":"            \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":801,"context_line":"        self.assignment_api.create_role(role_ref[\u0027id\u0027], role_ref)"},{"line_number":802,"context_line":"        self.role_api.get_role(role_ref[\u0027id\u0027])"},{"line_number":803,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_4109d92a","line":800,"in_reply_to":"1a930d6b_030dc290","updated":"2015-01-27 07:33:40.000000000","message":"I\u0027ll include that in the bug report on role calling","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":807,"context_line":"        role_ref \u003d {"},{"line_number":808,"context_line":"            \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":809,"context_line":"            \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":810,"context_line":"        self.assertRaises(logging.DeprecatedConfig,"},{"line_number":811,"context_line":"                          self.assignment_api.create_role,"},{"line_number":812,"context_line":"                          role_ref[\u0027id\u0027], role_ref)"},{"line_number":813,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_2312beb1","line":810,"updated":"2015-01-21 17:21:42.000000000","message":"Idem","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":807,"context_line":"        role_ref \u003d {"},{"line_number":808,"context_line":"            \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":809,"context_line":"            \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":810,"context_line":"        self.assertRaises(logging.DeprecatedConfig,"},{"line_number":811,"context_line":"                          self.assignment_api.create_role,"},{"line_number":812,"context_line":"                          role_ref[\u0027id\u0027], role_ref)"},{"line_number":813,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_8144a14a","line":810,"in_reply_to":"1a930d6b_2312beb1","updated":"2015-01-27 07:33:40.000000000","message":"ditto","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":828,"context_line":"        project_ref \u003d {"},{"line_number":829,"context_line":"            \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":830,"context_line":"            \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":831,"context_line":"            \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"},{"line_number":832,"context_line":"        self.assignment_api.create_project(project_ref[\u0027id\u0027], project_ref)"},{"line_number":833,"context_line":"        self.resource_api.get_project(project_ref[\u0027id\u0027])"},{"line_number":834,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_6323e605","line":831,"updated":"2015-01-21 17:21:42.000000000","message":"Needs to be resource_api","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":828,"context_line":"        project_ref \u003d {"},{"line_number":829,"context_line":"            \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":830,"context_line":"            \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":831,"context_line":"            \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"},{"line_number":832,"context_line":"        self.assignment_api.create_project(project_ref[\u0027id\u0027], project_ref)"},{"line_number":833,"context_line":"        self.resource_api.get_project(project_ref[\u0027id\u0027])"},{"line_number":834,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_a13fddb2","line":831,"in_reply_to":"1a930d6b_6323e605","updated":"2015-01-27 07:33:40.000000000","message":"Done","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"9f017bf21fde9958936a1b15c91159ae5223515c","unresolved":false,"context_lines":[{"line_number":839,"context_line":"            \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":840,"context_line":"            \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":841,"context_line":"            \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"},{"line_number":842,"context_line":"        self.assertRaises(logging.DeprecatedConfig,"},{"line_number":843,"context_line":"                          self.assignment_api.create_project,"},{"line_number":844,"context_line":"                          project_ref[\u0027id\u0027], project_ref)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_8320d2f8","line":842,"updated":"2015-01-21 17:21:42.000000000","message":"Idem","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"52a2d400c37c6ced28e1a17c70571b32b2e31d35","unresolved":false,"context_lines":[{"line_number":839,"context_line":"            \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":840,"context_line":"            \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":841,"context_line":"            \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"},{"line_number":842,"context_line":"        self.assertRaises(logging.DeprecatedConfig,"},{"line_number":843,"context_line":"                          self.assignment_api.create_project,"},{"line_number":844,"context_line":"                          project_ref[\u0027id\u0027], project_ref)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_c14a2954","line":842,"in_reply_to":"1a930d6b_8320d2f8","updated":"2015-01-27 07:33:40.000000000","message":"Actually, no - this is meant to be assignment_api - since it is checking that we raise a deprecated error!","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"ef2f95e6149f71fd5f29b27a798b9b9ca35805cd","unresolved":false,"context_lines":[{"line_number":839,"context_line":"            \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":840,"context_line":"            \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":841,"context_line":"            \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"},{"line_number":842,"context_line":"        self.assertRaises(logging.DeprecatedConfig,"},{"line_number":843,"context_line":"                          self.assignment_api.create_project,"},{"line_number":844,"context_line":"                          project_ref[\u0027id\u0027], project_ref)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a930d6b_df8119fc","line":842,"in_reply_to":"1a930d6b_c14a2954","updated":"2015-01-27 10:48:53.000000000","message":"oh sure :)","commit_id":"b1180f25d53242deeb2942b0a7458bb6fcd19bce"}]}
