)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Implement filter support in driver backends"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently filtering is only done at the controller level, leading to"},{"line_number":10,"context_line":"performanse issues since we are not using native filtering capabilities"},{"line_number":11,"context_line":"of any of the underlying backends (e.g. SQL, LDAP). This patch enables"},{"line_number":12,"context_line":"such support."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"AAAASn%2F%2Fh4I%3D","line":10,"updated":"2013-09-03 20:01:14.000000000","message":"change \"performanse\" to \"performance\"","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Implement filter support in driver backends"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently filtering is only done at the controller level, leading to"},{"line_number":10,"context_line":"performanse issues since we are not using native filtering capabilities"},{"line_number":11,"context_line":"of any of the underlying backends (e.g. SQL, LDAP). This patch enables"},{"line_number":12,"context_line":"such support."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"AAAASn%2F%2FgnE%3D","line":10,"in_reply_to":"AAAASn%2F%2Fh4I%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":12,"context_line":"such support."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch also creates the foundation for implementing truncation of"},{"line_number":15,"context_line":"lists to size set by the cloud provider as well as provding pagination"},{"line_number":16,"context_line":"support.  However, both these capabilities are implemented as separate"},{"line_number":17,"context_line":"patches."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"AAAASn%2F%2Fh4A%3D","line":15,"updated":"2013-09-03 20:01:14.000000000","message":"change \"provding\" to \"providing\"","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"such support."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch also creates the foundation for implementing truncation of"},{"line_number":15,"context_line":"lists to size set by the cloud provider as well as provding pagination"},{"line_number":16,"context_line":"support.  However, both these capabilities are implemented as separate"},{"line_number":17,"context_line":"patches."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"AAAASn%2F%2FgnA%3D","line":15,"in_reply_to":"AAAASn%2F%2Fh4A%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"603af675bbbb8f3c1e07d5b1877a21fc52f18d3d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"This patch also creates the foundation for implementing truncation of"},{"line_number":15,"context_line":"lists to size set by the cloud provider as well as providing pagination"},{"line_number":16,"context_line":"support.  However, both these capabilities are implemented as separate"},{"line_number":17,"context_line":"patches."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Limitations:"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":50,"id":"AAAAUH%2F%2B8OU%3D","line":17,"updated":"2014-01-20 17:31:15.000000000","message":"commit message shouldn\u0027t reference things in other commits-- especially ones that may never land!","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":14,"context_line":"This patch also creates the foundation for implementing truncation of"},{"line_number":15,"context_line":"lists to size set by the cloud provider as well as providing pagination"},{"line_number":16,"context_line":"support.  However, both these capabilities are implemented as separate"},{"line_number":17,"context_line":"patches."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Limitations:"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":50,"id":"AAAAUH%2F%2B6Tg%3D","line":17,"in_reply_to":"AAAAUH%2F%2B8OU%3D","updated":"2014-01-20 20:30:47.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4409319d6b576598dddd265d08aad063dc0acc28","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Limitations:"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"- The LDAP backend does not yet support for filtering, leaving it to the"},{"line_number":22,"context_line":"  controller level.  LDAP support will be added in a separate patch"},{"line_number":23,"context_line":"- Filtering for service, endpoint and policy is left at the controller"},{"line_number":24,"context_line":"  level, since these operations are not considered performance issues."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":50,"id":"AAAAUH%2F%2B6jM%3D","line":21,"updated":"2014-01-20 20:41:20.000000000","message":"(nit) remove \"for\"","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"28acae28b370d9fd2e09cc016d8b82f8fd5768b8","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Limitations:"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"- The LDAP backend does not yet support for filtering, leaving it to the"},{"line_number":22,"context_line":"  controller level.  LDAP support will be added in a separate patch"},{"line_number":23,"context_line":"- Filtering for service, endpoint and policy is left at the controller"},{"line_number":24,"context_line":"  level, since these operations are not considered performance issues."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":50,"id":"AAAAUH%2F%2B6DA%3D","line":21,"in_reply_to":"AAAAUH%2F%2B6jM%3D","updated":"2014-01-20 21:20:14.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"}],"doc/source/configuration.rst":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":568,"context_line":"--------------------------------------------------------"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"Keystone provides a method of setting a limit to the number of entities"},{"line_number":571,"context_line":"returned in a collection, which is useful to prevent overly lomg response"},{"line_number":572,"context_line":"times for list queries that have not specified a sufficently narrow filter."},{"line_number":573,"context_line":"This limit can be set globally by setting ``list_limit`` in the main section"},{"line_number":574,"context_line":"of ``keystone.conf``, with no limt set by default.  Individual driver"}],"source_content_type":"text/x-rst","patch_set":19,"id":"AAAASn%2F%2F7bM%3D","line":571,"updated":"2013-08-27 22:13:53.000000000","message":"change \"lomg\" to \"long\"","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":568,"context_line":"--------------------------------------------------------"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"Keystone provides a method of setting a limit to the number of entities"},{"line_number":571,"context_line":"returned in a collection, which is useful to prevent overly lomg response"},{"line_number":572,"context_line":"times for list queries that have not specified a sufficently narrow filter."},{"line_number":573,"context_line":"This limit can be set globally by setting ``list_limit`` in the main section"},{"line_number":574,"context_line":"of ``keystone.conf``, with no limt set by default.  Individual driver"}],"source_content_type":"text/x-rst","patch_set":19,"id":"AAAASn%2F%2F7A4%3D","line":571,"in_reply_to":"AAAASn%2F%2F7bM%3D","updated":"2013-08-28 00:30:00.000000000","message":"Done","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":571,"context_line":"returned in a collection, which is useful to prevent overly lomg response"},{"line_number":572,"context_line":"times for list queries that have not specified a sufficently narrow filter."},{"line_number":573,"context_line":"This limit can be set globally by setting ``list_limit`` in the main section"},{"line_number":574,"context_line":"of ``keystone.conf``, with no limt set by default.  Individual driver"},{"line_number":575,"context_line":"sections may override this global value with a specific limit, for example:"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"    [assignment]"}],"source_content_type":"text/x-rst","patch_set":19,"id":"AAAASn%2F%2F7bI%3D","line":574,"updated":"2013-08-27 22:13:53.000000000","message":"change \"limt\" to \"limit\"","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":571,"context_line":"returned in a collection, which is useful to prevent overly lomg response"},{"line_number":572,"context_line":"times for list queries that have not specified a sufficently narrow filter."},{"line_number":573,"context_line":"This limit can be set globally by setting ``list_limit`` in the main section"},{"line_number":574,"context_line":"of ``keystone.conf``, with no limt set by default.  Individual driver"},{"line_number":575,"context_line":"sections may override this global value with a specific limit, for example:"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"    [assignment]"}],"source_content_type":"text/x-rst","patch_set":19,"id":"AAAASn%2F%2F7A0%3D","line":574,"in_reply_to":"AAAASn%2F%2F7bI%3D","updated":"2013-08-28 00:30:00.000000000","message":"Done","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"33e04f6a2540b84f0dd9d415d2e8c6fe559ab97b","unresolved":false,"context_lines":[{"line_number":649,"context_line":"sections may override this global value with a specific limit, for example:"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"    [assignment]"},{"line_number":652,"context_line":"    list_limit \u003d 100"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"Sample Configuration Files"}],"source_content_type":"text/x-rst","patch_set":24,"id":"AAAASn%2F%2Fxoo%3D","line":652,"updated":"2013-08-29 20:39:14.000000000","message":"Recommend warning that the list truncation doesn\u0027t notify the client that results have been limited.","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4ebbb8b23a7d392c7212d03d8b1bfa226f6b5ea2","unresolved":false,"context_lines":[{"line_number":649,"context_line":"sections may override this global value with a specific limit, for example:"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"    [assignment]"},{"line_number":652,"context_line":"    list_limit \u003d 100"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"Sample Configuration Files"}],"source_content_type":"text/x-rst","patch_set":24,"id":"AAAASn%2F%2FwZQ%3D","line":652,"in_reply_to":"AAAASn%2F%2Fxoo%3D","updated":"2013-08-30 00:54:55.000000000","message":"Done","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"19602cf32e82c9b0e905611d6370283a2bca1831","unresolved":false,"context_lines":[{"line_number":649,"context_line":"times for list queries that have not specified a sufficently narrow filter."},{"line_number":650,"context_line":"This limit can be set globally by setting ``list_limit`` in the main section"},{"line_number":651,"context_line":"of ``keystone.conf``, with no limit set by default.  Individual driver"},{"line_number":652,"context_line":"sections may override this global value with a specific limit, for example:"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"    [assignment]"},{"line_number":655,"context_line":"    list_limit \u003d 100"}],"source_content_type":"text/x-rst","patch_set":25,"id":"AAAASn%2F%2FuRw%3D","line":652,"updated":"2013-08-30 13:10:15.000000000","message":"RST: double colon","commit_id":"48535c93712fc19c5236ef074579d6c1f706ad28"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9c98c8176fd667c4a8bf48af61dcc0c318a82de5","unresolved":false,"context_lines":[{"line_number":649,"context_line":"times for list queries that have not specified a sufficently narrow filter."},{"line_number":650,"context_line":"This limit can be set globally by setting ``list_limit`` in the main section"},{"line_number":651,"context_line":"of ``keystone.conf``, with no limit set by default.  Individual driver"},{"line_number":652,"context_line":"sections may override this global value with a specific limit, for example:"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"    [assignment]"},{"line_number":655,"context_line":"    list_limit \u003d 100"}],"source_content_type":"text/x-rst","patch_set":25,"id":"AAAASn%2F%2FuH0%3D","line":652,"in_reply_to":"AAAASn%2F%2FuRw%3D","updated":"2013-08-30 13:55:25.000000000","message":"Done","commit_id":"48535c93712fc19c5236ef074579d6c1f706ad28"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"19602cf32e82c9b0e905611d6370283a2bca1831","unresolved":false,"context_lines":[{"line_number":654,"context_line":"    [assignment]"},{"line_number":655,"context_line":"    list_limit \u003d 100"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"No indication is given to the client that the list has been limited."},{"line_number":658,"context_line":""},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"Sample Configuration Files"}],"source_content_type":"text/x-rst","patch_set":25,"id":"AAAASn%2F%2FuRo%3D","line":657,"updated":"2013-08-30 13:10:15.000000000","message":"has been \"truncated\" ?","commit_id":"48535c93712fc19c5236ef074579d6c1f706ad28"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9c98c8176fd667c4a8bf48af61dcc0c318a82de5","unresolved":false,"context_lines":[{"line_number":654,"context_line":"    [assignment]"},{"line_number":655,"context_line":"    list_limit \u003d 100"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"No indication is given to the client that the list has been limited."},{"line_number":658,"context_line":""},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"Sample Configuration Files"}],"source_content_type":"text/x-rst","patch_set":25,"id":"AAAASn%2F%2FuHw%3D","line":657,"in_reply_to":"AAAASn%2F%2FuRo%3D","updated":"2013-08-30 13:55:25.000000000","message":"Done","commit_id":"48535c93712fc19c5236ef074579d6c1f706ad28"}],"doc/source/developing.rst":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    $ tools/with_venv.sh keystone --token ADMIN --endpoint http://127.0.0.1:35357/v2.0/ user-list"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"Filtering responsibilities between controllers and drivers in keystone"},{"line_number":123,"context_line":"----------------------------------------------------------------------"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Keystone supports the specification of filtering on list queries. By default"}],"source_content_type":"text/x-rst","patch_set":19,"id":"AAAASn%2F%2F7a8%3D","line":122,"updated":"2013-08-27 22:13:53.000000000","message":"capitalize \"Keystone\", or just remove it since it\u0027s implied.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    $ tools/with_venv.sh keystone --token ADMIN --endpoint http://127.0.0.1:35357/v2.0/ user-list"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"Filtering responsibilities between controllers and drivers in keystone"},{"line_number":123,"context_line":"----------------------------------------------------------------------"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Keystone supports the specification of filtering on list queries. By default"}],"source_content_type":"text/x-rst","patch_set":19,"id":"AAAASn%2F%2F6%2Fo%3D","line":122,"in_reply_to":"AAAASn%2F%2F7a8%3D","updated":"2013-08-28 00:30:00.000000000","message":"Done","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":132,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":133,"context_line":"the passing of a copy of a dict containing the specified query string elements."},{"line_number":134,"context_line":"A driver that implements a filter should remove the satisfied query from the"},{"line_number":135,"context_line":"query_dict so that when it is returned all the way back up to the V3Controlle"},{"line_number":136,"context_line":"level, it can know to execute any un-satisfied filters."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"AAAASn%2F%2F7aU%3D","line":135,"updated":"2013-08-27 22:13:53.000000000","message":"suggest remove \"all the way back up\"\n\nchange \"V3Controlle\" to \"V3Controller\" (add r)\n\nalso, doesn\u0027t this apply to V2?","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":132,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":133,"context_line":"the passing of a copy of a dict containing the specified query string elements."},{"line_number":134,"context_line":"A driver that implements a filter should remove the satisfied query from the"},{"line_number":135,"context_line":"query_dict so that when it is returned all the way back up to the V3Controlle"},{"line_number":136,"context_line":"level, it can know to execute any un-satisfied filters."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"AAAASn%2F%2F6%2FY%3D","line":135,"in_reply_to":"AAAASn%2F%2F7aU%3D","updated":"2013-08-28 00:30:00.000000000","message":"done\n\nThe V2Controllers didn\u0027t support filtering.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0607f8164c89c67f4bbb99717773ef40e736edc6","unresolved":false,"context_lines":[{"line_number":130,"context_line":"statements to generate the list)."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":133,"context_line":"the passing of a copy of a dict containing the specified query string elements."},{"line_number":134,"context_line":"A driver that implements a filter should remove the satisfied query from the"},{"line_number":135,"context_line":"query_dict so that when it is returned back to the V3Controller level, it"},{"line_number":136,"context_line":"can know to execute any un-satisfied filters."}],"source_content_type":"text/x-rst","patch_set":20,"id":"AAAASn%2F%2F3II%3D","line":133,"updated":"2013-08-28 19:01:11.000000000","message":"change \"a copy of a dict\" to \"a reference to a dict\" since it\u0027s not copied.","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"257cf5a3b3f22131d68fcb047d1bc076d5342a66","unresolved":false,"context_lines":[{"line_number":130,"context_line":"statements to generate the list)."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":133,"context_line":"the passing of a copy of a dict containing the specified query string elements."},{"line_number":134,"context_line":"A driver that implements a filter should remove the satisfied query from the"},{"line_number":135,"context_line":"query_dict so that when it is returned back to the V3Controller level, it"},{"line_number":136,"context_line":"can know to execute any un-satisfied filters."}],"source_content_type":"text/x-rst","patch_set":20,"id":"AAAASn%2F%2F20Q%3D","line":133,"in_reply_to":"AAAASn%2F%2F3II%3D","updated":"2013-08-28 19:19:07.000000000","message":"Done","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0607f8164c89c67f4bbb99717773ef40e736edc6","unresolved":false,"context_lines":[{"line_number":133,"context_line":"the passing of a copy of a dict containing the specified query string elements."},{"line_number":134,"context_line":"A driver that implements a filter should remove the satisfied query from the"},{"line_number":135,"context_line":"query_dict so that when it is returned back to the V3Controller level, it"},{"line_number":136,"context_line":"can know to execute any un-satisfied filters."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"Running Tests"}],"source_content_type":"text/x-rst","patch_set":20,"id":"AAAASn%2F%2F3H0%3D","line":136,"updated":"2013-08-28 19:01:11.000000000","message":"change \"un-satisfied\" to \"unsatisfied\"","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"257cf5a3b3f22131d68fcb047d1bc076d5342a66","unresolved":false,"context_lines":[{"line_number":133,"context_line":"the passing of a copy of a dict containing the specified query string elements."},{"line_number":134,"context_line":"A driver that implements a filter should remove the satisfied query from the"},{"line_number":135,"context_line":"query_dict so that when it is returned back to the V3Controller level, it"},{"line_number":136,"context_line":"can know to execute any un-satisfied filters."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"Running Tests"}],"source_content_type":"text/x-rst","patch_set":20,"id":"AAAASn%2F%2F20M%3D","line":136,"in_reply_to":"AAAASn%2F%2F3H0%3D","updated":"2013-08-28 19:19:07.000000000","message":"Done","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"490f8da82a8062187ac032f2f71a98d566011152","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":133,"context_line":"the passing of a reference a dict containing the specified query string"},{"line_number":134,"context_line":"elements. A driver that implements a filter should remove the satisfied query"},{"line_number":135,"context_line":"from the query_dict so that when it is returned back to the V3Controller level,"},{"line_number":136,"context_line":"it can know to execute any unsatisfied filters."},{"line_number":137,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"AAAASn%2F%2F2Ik%3D","line":134,"updated":"2013-08-28 21:46:44.000000000","message":"replace \"a filter should remove\" with \"a filter must remove\"?","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"174498fe98b6d62b75608b4f4f62293388f19159","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":133,"context_line":"the passing of a reference a dict containing the specified query string"},{"line_number":134,"context_line":"elements. A driver that implements a filter should remove the satisfied query"},{"line_number":135,"context_line":"from the query_dict so that when it is returned back to the V3Controller level,"},{"line_number":136,"context_line":"it can know to execute any unsatisfied filters."},{"line_number":137,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"AAAASn%2F%2F11Y%3D","line":134,"in_reply_to":"AAAASn%2F%2F2Ik%3D","updated":"2013-08-28 23:12:46.000000000","message":"Done","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"19602cf32e82c9b0e905611d6370283a2bca1831","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"Keystone supports the specification of filtering on list queries. By default"},{"line_number":125,"context_line":"these queries are satisfied in the V3Controller class when a controller calls"},{"line_number":126,"context_line":"the wrap_collection method at the end of a list_{entity} method.  However, to"},{"line_number":127,"context_line":"enable optimum performance, any driver can implement some or all of the"},{"line_number":128,"context_line":"specified filters (for example, by adding filtering to the generated SQL"},{"line_number":129,"context_line":"statements to generate the list)."}],"source_content_type":"text/x-rst","patch_set":25,"id":"AAAASn%2F%2FuRk%3D","line":126,"updated":"2013-08-30 13:10:15.000000000","message":"``list_{entity}``","commit_id":"48535c93712fc19c5236ef074579d6c1f706ad28"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9c98c8176fd667c4a8bf48af61dcc0c318a82de5","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"Keystone supports the specification of filtering on list queries. By default"},{"line_number":125,"context_line":"these queries are satisfied in the V3Controller class when a controller calls"},{"line_number":126,"context_line":"the wrap_collection method at the end of a list_{entity} method.  However, to"},{"line_number":127,"context_line":"enable optimum performance, any driver can implement some or all of the"},{"line_number":128,"context_line":"specified filters (for example, by adding filtering to the generated SQL"},{"line_number":129,"context_line":"statements to generate the list)."}],"source_content_type":"text/x-rst","patch_set":25,"id":"AAAASn%2F%2FuHU%3D","line":126,"in_reply_to":"AAAASn%2F%2FuRk%3D","updated":"2013-08-30 13:55:25.000000000","message":"Done","commit_id":"48535c93712fc19c5236ef074579d6c1f706ad28"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"19602cf32e82c9b0e905611d6370283a2bca1831","unresolved":false,"context_lines":[{"line_number":131,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":132,"context_line":"the passing of a reference a dict containing the specified query string"},{"line_number":133,"context_line":"elements. A driver that implements a filter must remove the satisfied query"},{"line_number":134,"context_line":"from the query_dict so that when it is returned back to the V3Controller level,"},{"line_number":135,"context_line":"it can know to execute any unsatisfied filters."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"AAAASn%2F%2FuRU%3D","line":134,"updated":"2013-08-30 13:10:15.000000000","message":"this is super specific and likely to become outdated / unmaintained","commit_id":"48535c93712fc19c5236ef074579d6c1f706ad28"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9c98c8176fd667c4a8bf48af61dcc0c318a82de5","unresolved":false,"context_lines":[{"line_number":131,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":132,"context_line":"the passing of a reference a dict containing the specified query string"},{"line_number":133,"context_line":"elements. A driver that implements a filter must remove the satisfied query"},{"line_number":134,"context_line":"from the query_dict so that when it is returned back to the V3Controller level,"},{"line_number":135,"context_line":"it can know to execute any unsatisfied filters."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"AAAASn%2F%2FuHQ%3D","line":134,"in_reply_to":"AAAASn%2F%2FuRU%3D","updated":"2013-08-30 13:55:25.000000000","message":"Done","commit_id":"48535c93712fc19c5236ef074579d6c1f706ad28"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"186ce2b0af1897f7d4648937642c769c2879351a","unresolved":false,"context_lines":[{"line_number":129,"context_line":"filtering to the generated SQL statements to generate the list)."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":132,"context_line":"the passing of a reference to a ListDirective object containing the specified"},{"line_number":133,"context_line":"query string elements. A driver that implements a filter must mark the filter"},{"line_number":134,"context_line":"satisfied in the ListDirective object so that when it is returned back to the"},{"line_number":135,"context_line":"controller level, it can know to execute any unsatisfied filters."}],"source_content_type":"text/x-rst","patch_set":35,"id":"AAAASn%2F%2Fb%2Bo%3D","line":132,"updated":"2013-09-04 19:05:54.000000000","message":"revise","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":129,"context_line":"filtering to the generated SQL statements to generate the list)."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":132,"context_line":"the passing of a reference to a ListDirective object containing the specified"},{"line_number":133,"context_line":"query string elements. A driver that implements a filter must mark the filter"},{"line_number":134,"context_line":"satisfied in the ListDirective object so that when it is returned back to the"},{"line_number":135,"context_line":"controller level, it can know to execute any unsatisfied filters."}],"source_content_type":"text/x-rst","patch_set":35,"id":"AAAASn%2F%2Fbus%3D","line":132,"in_reply_to":"AAAASn%2F%2Fb%2Bo%3D","updated":"2013-09-04 22:58:56.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"186ce2b0af1897f7d4648937642c769c2879351a","unresolved":false,"context_lines":[{"line_number":131,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":132,"context_line":"the passing of a reference to a ListDirective object containing the specified"},{"line_number":133,"context_line":"query string elements. A driver that implements a filter must mark the filter"},{"line_number":134,"context_line":"satisfied in the ListDirective object so that when it is returned back to the"},{"line_number":135,"context_line":"controller level, it can know to execute any unsatisfied filters."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"The contract for a driver for ``list_{entity}`` methods is therefore::"}],"source_content_type":"text/x-rst","patch_set":35,"id":"AAAASn%2F%2Fb%2Bk%3D","line":134,"updated":"2013-09-04 19:05:54.000000000","message":"revise","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":131,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":132,"context_line":"the passing of a reference to a ListDirective object containing the specified"},{"line_number":133,"context_line":"query string elements. A driver that implements a filter must mark the filter"},{"line_number":134,"context_line":"satisfied in the ListDirective object so that when it is returned back to the"},{"line_number":135,"context_line":"controller level, it can know to execute any unsatisfied filters."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"The contract for a driver for ``list_{entity}`` methods is therefore::"}],"source_content_type":"text/x-rst","patch_set":35,"id":"AAAASn%2F%2Fbuk%3D","line":134,"in_reply_to":"AAAASn%2F%2Fb%2Bk%3D","updated":"2013-09-04 22:58:56.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"186ce2b0af1897f7d4648937642c769c2879351a","unresolved":false,"context_lines":[{"line_number":134,"context_line":"satisfied in the ListDirective object so that when it is returned back to the"},{"line_number":135,"context_line":"controller level, it can know to execute any unsatisfied filters."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"The contract for a driver for ``list_{entity}`` methods is therefore::"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"* It MUST return a list of entities of the specified type"},{"line_number":140,"context_line":"* It MAY either just return all such entities, or alternatively reduce the"}],"source_content_type":"text/x-rst","patch_set":35,"id":"AAAASn%2F%2Fb%2BY%3D","line":137,"updated":"2013-09-04 19:05:54.000000000","message":"i don\u0027t think you need a double ampersand before a bulleted list (actually, that\u0027s probably a syntax error?)","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":134,"context_line":"satisfied in the ListDirective object so that when it is returned back to the"},{"line_number":135,"context_line":"controller level, it can know to execute any unsatisfied filters."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"The contract for a driver for ``list_{entity}`` methods is therefore::"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"* It MUST return a list of entities of the specified type"},{"line_number":140,"context_line":"* It MAY either just return all such entities, or alternatively reduce the"}],"source_content_type":"text/x-rst","patch_set":35,"id":"AAAASn%2F%2Fbug%3D","line":137,"in_reply_to":"AAAASn%2F%2Fb%2BY%3D","updated":"2013-09-04 22:58:56.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"186ce2b0af1897f7d4648937642c769c2879351a","unresolved":false,"context_lines":[{"line_number":139,"context_line":"* It MUST return a list of entities of the specified type"},{"line_number":140,"context_line":"* It MAY either just return all such entities, or alternatively reduce the"},{"line_number":141,"context_line":"  list by filtering for one or more of the specified filters in the passed"},{"line_number":142,"context_line":"  ListDirective reference, and marking any such filters satisfied."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Running Tests"}],"source_content_type":"text/x-rst","patch_set":35,"id":"AAAASn%2F%2Fb%2Bw%3D","line":142,"updated":"2013-09-04 19:05:54.000000000","message":"revise","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":139,"context_line":"* It MUST return a list of entities of the specified type"},{"line_number":140,"context_line":"* It MAY either just return all such entities, or alternatively reduce the"},{"line_number":141,"context_line":"  list by filtering for one or more of the specified filters in the passed"},{"line_number":142,"context_line":"  ListDirective reference, and marking any such filters satisfied."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Running Tests"}],"source_content_type":"text/x-rst","patch_set":35,"id":"AAAASn%2F%2FbuY%3D","line":142,"in_reply_to":"AAAASn%2F%2Fb%2Bw%3D","updated":"2013-09-04 22:58:56.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"92d7898910ffda1bc2bdf3458ae06138b2ed10ec","unresolved":false,"context_lines":[{"line_number":129,"context_line":"filtering to the generated SQL statements to generate the list)."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":132,"context_line":"the passing of a reference to a Hints object containing, which is a list"},{"line_number":133,"context_line":"dicts describing the filters. A driver that implements a filter must mark the"},{"line_number":134,"context_line":"filter satisfied in the Hints object so that when it is returned back to the"},{"line_number":135,"context_line":"controller level, it can know to execute any unsatisfied filters."}],"source_content_type":"text/x-rst","patch_set":37,"id":"AAAASn%2F%2FauM%3D","line":132,"updated":"2013-09-04 23:45:22.000000000","message":"(NIT) \"list of dicts\"","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":129,"context_line":"filtering to the generated SQL statements to generate the list)."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":132,"context_line":"the passing of a reference to a Hints object containing, which is a list"},{"line_number":133,"context_line":"dicts describing the filters. A driver that implements a filter must mark the"},{"line_number":134,"context_line":"filter satisfied in the Hints object so that when it is returned back to the"},{"line_number":135,"context_line":"controller level, it can know to execute any unsatisfied filters."}],"source_content_type":"text/x-rst","patch_set":37,"id":"AAAASn%2F%2Favo%3D","line":132,"updated":"2013-09-05 00:42:46.000000000","message":"extra \"containing\" here","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":129,"context_line":"filtering to the generated SQL statements to generate the list)."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":132,"context_line":"the passing of a reference to a Hints object containing, which is a list"},{"line_number":133,"context_line":"dicts describing the filters. A driver that implements a filter must mark the"},{"line_number":134,"context_line":"filter satisfied in the Hints object so that when it is returned back to the"},{"line_number":135,"context_line":"controller level, it can know to execute any unsatisfied filters."}],"source_content_type":"text/x-rst","patch_set":37,"id":"AAAAUH%2F%2FKoI%3D","line":132,"in_reply_to":"AAAASn%2F%2FaZo%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"51f6d94a1af4b15113413c2a5cccce6240036b25","unresolved":false,"context_lines":[{"line_number":129,"context_line":"filtering to the generated SQL statements to generate the list)."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":132,"context_line":"the passing of a reference to a Hints object containing, which is a list"},{"line_number":133,"context_line":"dicts describing the filters. A driver that implements a filter must mark the"},{"line_number":134,"context_line":"filter satisfied in the Hints object so that when it is returned back to the"},{"line_number":135,"context_line":"controller level, it can know to execute any unsatisfied filters."}],"source_content_type":"text/x-rst","patch_set":37,"id":"AAAASn%2F%2Famk%3D","line":132,"in_reply_to":"AAAASn%2F%2FauM%3D","updated":"2013-09-04 23:47:36.000000000","message":"Happy to fix that as a follow-up","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d7db058d4f2242865f09bb3f8b34f53509511b24","unresolved":false,"context_lines":[{"line_number":129,"context_line":"filtering to the generated SQL statements to generate the list)."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":132,"context_line":"the passing of a reference to a Hints object containing, which is a list"},{"line_number":133,"context_line":"dicts describing the filters. A driver that implements a filter must mark the"},{"line_number":134,"context_line":"filter satisfied in the Hints object so that when it is returned back to the"},{"line_number":135,"context_line":"controller level, it can know to execute any unsatisfied filters."}],"source_content_type":"text/x-rst","patch_set":37,"id":"AAAASn%2F%2FaZo%3D","line":132,"in_reply_to":"AAAASn%2F%2Favo%3D","updated":"2013-09-05 01:14:35.000000000","message":"looking back on this sentence, it implies that \u0027hints\u0027 is the only thing passed to drivers","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":132,"context_line":"the passing of a reference to a Hints object containing, which is a list"},{"line_number":133,"context_line":"dicts describing the filters. A driver that implements a filter must mark the"},{"line_number":134,"context_line":"filter satisfied in the Hints object so that when it is returned back to the"},{"line_number":135,"context_line":"controller level, it can know to execute any unsatisfied filters."},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":37,"id":"AAAASn%2F%2Favc%3D","line":133,"updated":"2013-09-05 00:42:46.000000000","message":"suggest change \"implements\" to \"satisfies\" (satisfies is used at line 142)","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":132,"context_line":"the passing of a reference to a Hints object containing, which is a list"},{"line_number":133,"context_line":"dicts describing the filters. A driver that implements a filter must mark the"},{"line_number":134,"context_line":"filter satisfied in the Hints object so that when it is returned back to the"},{"line_number":135,"context_line":"controller level, it can know to execute any unsatisfied filters."},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":37,"id":"AAAAUH%2F%2FKoM%3D","line":133,"in_reply_to":"AAAASn%2F%2FaZw%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d7db058d4f2242865f09bb3f8b34f53509511b24","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"The communication between the controller level and its drivers is handled by"},{"line_number":132,"context_line":"the passing of a reference to a Hints object containing, which is a list"},{"line_number":133,"context_line":"dicts describing the filters. A driver that implements a filter must mark the"},{"line_number":134,"context_line":"filter satisfied in the Hints object so that when it is returned back to the"},{"line_number":135,"context_line":"controller level, it can know to execute any unsatisfied filters."},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":37,"id":"AAAASn%2F%2FaZw%3D","line":133,"in_reply_to":"AAAASn%2F%2Favc%3D","updated":"2013-09-05 01:14:35.000000000","message":"++\n\nreplace \u0027mark the filter satisfied\u0027 with \u0027deleting the filter from the list of hints\u0027","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d7db058d4f2242865f09bb3f8b34f53509511b24","unresolved":false,"context_lines":[{"line_number":139,"context_line":"* It MUST return a list of entities of the specified type"},{"line_number":140,"context_line":"* It MAY either just return all such entities, or alternatively reduce the"},{"line_number":141,"context_line":"  list by filtering for one or more of the specified filters in the passed"},{"line_number":142,"context_line":"  Hints reference, and marking any such filters satisfied."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Running Tests"}],"source_content_type":"text/x-rst","patch_set":37,"id":"AAAASn%2F%2FaVE%3D","line":142,"updated":"2013-09-05 01:14:35.000000000","message":"same","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":139,"context_line":"* It MUST return a list of entities of the specified type"},{"line_number":140,"context_line":"* It MAY either just return all such entities, or alternatively reduce the"},{"line_number":141,"context_line":"  list by filtering for one or more of the specified filters in the passed"},{"line_number":142,"context_line":"  Hints reference, and marking any such filters satisfied."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Running Tests"}],"source_content_type":"text/x-rst","patch_set":37,"id":"AAAAUH%2F%2FKn4%3D","line":142,"in_reply_to":"AAAASn%2F%2FaVE%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"f8a241e9da3dbf4eac116457a518447f731c8312","unresolved":false,"context_lines":[{"line_number":132,"context_line":"filtering to the generated SQL statements to generate the list)."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"The communication of the filter details between the controller level and its"},{"line_number":135,"context_line":"drivers is handled by the passing of a reference to a Hints object containing,"},{"line_number":136,"context_line":"which is a list dicts describing the filters. A driver that satisfies a filter"},{"line_number":137,"context_line":"must delete the filter from the Hints object so that when it is returned"},{"line_number":138,"context_line":"back to the controller level, it can know to only execute any unsatisfied"}],"source_content_type":"text/x-rst","patch_set":45,"id":"AAAAUH%2F%2FFtc%3D","line":135,"updated":"2014-01-17 18:24:11.000000000","message":"Draft saved at 5:44 PM\n\nThere is a typo or something wrong with this sentence. It doesnt make sense","commit_id":"97b28c2f5ca0b37cb0f947c41e3e4ae4fd14a4b0"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f17ddc90a5f3d6023c3dc38d84801c8068271141","unresolved":false,"context_lines":[{"line_number":132,"context_line":"filtering to the generated SQL statements to generate the list)."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"The communication of the filter details between the controller level and its"},{"line_number":135,"context_line":"drivers is handled by the passing of a reference to a Hints object containing,"},{"line_number":136,"context_line":"which is a list dicts describing the filters. A driver that satisfies a filter"},{"line_number":137,"context_line":"must delete the filter from the Hints object so that when it is returned"},{"line_number":138,"context_line":"back to the controller level, it can know to only execute any unsatisfied"}],"source_content_type":"text/x-rst","patch_set":45,"id":"AAAAUH%2F%2FDzg%3D","line":135,"in_reply_to":"AAAAUH%2F%2FFtc%3D","updated":"2014-01-17 20:34:04.000000000","message":"Done","commit_id":"97b28c2f5ca0b37cb0f947c41e3e4ae4fd14a4b0"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"f8a241e9da3dbf4eac116457a518447f731c8312","unresolved":false,"context_lines":[{"line_number":143,"context_line":"* It MUST return a list of entities of the specified type"},{"line_number":144,"context_line":"* It MAY either just return all such entities, or alternatively reduce the"},{"line_number":145,"context_line":"  list by filtering for one or more of the specified filters in the passed"},{"line_number":146,"context_line":"  Hints reference, and marking removing any such satisfied filters."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Running Tests"}],"source_content_type":"text/x-rst","patch_set":45,"id":"AAAAUH%2F%2FFtU%3D","line":146,"updated":"2014-01-17 18:24:11.000000000","message":"Do you ever state somewhere how to reduce the list via filtering?","commit_id":"97b28c2f5ca0b37cb0f947c41e3e4ae4fd14a4b0"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f17ddc90a5f3d6023c3dc38d84801c8068271141","unresolved":false,"context_lines":[{"line_number":143,"context_line":"* It MUST return a list of entities of the specified type"},{"line_number":144,"context_line":"* It MAY either just return all such entities, or alternatively reduce the"},{"line_number":145,"context_line":"  list by filtering for one or more of the specified filters in the passed"},{"line_number":146,"context_line":"  Hints reference, and marking removing any such satisfied filters."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Running Tests"}],"source_content_type":"text/x-rst","patch_set":45,"id":"AAAAUH%2F%2FDzI%3D","line":146,"in_reply_to":"AAAAUH%2F%2FFtU%3D","updated":"2014-01-17 20:34:04.000000000","message":"Well, the supported filters are specified in the identity API against each list call","commit_id":"97b28c2f5ca0b37cb0f947c41e3e4ae4fd14a4b0"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4409319d6b576598dddd265d08aad063dc0acc28","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    $ tools/with_venv.sh keystone --os-token ADMIN --os-endpoint http://127.0.0.1:35357/v2.0/ user-list"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"Filtering responsibilities between controllers and drivers"},{"line_number":125,"context_line":"----------------------------------------------------------"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Keystone supports the specification of filtering on list queries as part of the"}],"source_content_type":"text/x-rst","patch_set":50,"id":"AAAAUH%2F%2B6go%3D","line":124,"updated":"2014-01-20 20:41:20.000000000","message":"we also have an \"architecture\" page where this might be more appropriate: http://docs.openstack.org/developer/keystone/architecture.html\n\n(I\u0027m fine with it here... can reorganize later)","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"28acae28b370d9fd2e09cc016d8b82f8fd5768b8","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    $ tools/with_venv.sh keystone --os-token ADMIN --os-endpoint http://127.0.0.1:35357/v2.0/ user-list"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"Filtering responsibilities between controllers and drivers"},{"line_number":125,"context_line":"----------------------------------------------------------"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Keystone supports the specification of filtering on list queries as part of the"}],"source_content_type":"text/x-rst","patch_set":50,"id":"AAAAUH%2F%2B6Ow%3D","line":124,"in_reply_to":"AAAAUH%2F%2B6go%3D","updated":"2014-01-20 21:20:14.000000000","message":"Yeah. might be an idea - I\u0027ll come back in and look at that","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"603af675bbbb8f3c1e07d5b1877a21fc52f18d3d","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Keystone supports the specification of filtering on list queries as part of the"},{"line_number":128,"context_line":"v3 identity API. By default these queries are satisfied in the controller"},{"line_number":129,"context_line":"class when a controller calls the wrap_collection method at the end of a"},{"line_number":130,"context_line":"``list_{entity}`` method.  However, to enable optimum performance, any driver"},{"line_number":131,"context_line":"can implement some or all of the specified filters (for example, by adding"},{"line_number":132,"context_line":"filtering to the generated SQL statements to generate the list)."}],"source_content_type":"text/x-rst","patch_set":50,"id":"AAAAUH%2F%2B8MI%3D","line":129,"updated":"2014-01-20 17:31:15.000000000","message":"``double backticks`` on literals\n\n  ``wrap_collection()`` method","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Keystone supports the specification of filtering on list queries as part of the"},{"line_number":128,"context_line":"v3 identity API. By default these queries are satisfied in the controller"},{"line_number":129,"context_line":"class when a controller calls the wrap_collection method at the end of a"},{"line_number":130,"context_line":"``list_{entity}`` method.  However, to enable optimum performance, any driver"},{"line_number":131,"context_line":"can implement some or all of the specified filters (for example, by adding"},{"line_number":132,"context_line":"filtering to the generated SQL statements to generate the list)."}],"source_content_type":"text/x-rst","patch_set":50,"id":"AAAAUH%2F%2B62I%3D","line":129,"in_reply_to":"AAAAUH%2F%2B8MI%3D","updated":"2014-01-20 20:30:47.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4409319d6b576598dddd265d08aad063dc0acc28","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"The communication of the filter details between the controller level and its"},{"line_number":135,"context_line":"drivers is handled by the passing of a reference to a Hints object,"},{"line_number":136,"context_line":"which is a list dicts describing the filters. A driver that satisfies a filter"},{"line_number":137,"context_line":"must delete the filter from the Hints object so that when it is returned"},{"line_number":138,"context_line":"back to the controller level, it can know to only execute any unsatisfied"},{"line_number":139,"context_line":"filters."}],"source_content_type":"text/x-rst","patch_set":50,"id":"AAAAUH%2F%2B6ho%3D","line":136,"updated":"2014-01-20 20:41:20.000000000","message":"change \"list dicts\" to \"list of dicts\"","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"28acae28b370d9fd2e09cc016d8b82f8fd5768b8","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"The communication of the filter details between the controller level and its"},{"line_number":135,"context_line":"drivers is handled by the passing of a reference to a Hints object,"},{"line_number":136,"context_line":"which is a list dicts describing the filters. A driver that satisfies a filter"},{"line_number":137,"context_line":"must delete the filter from the Hints object so that when it is returned"},{"line_number":138,"context_line":"back to the controller level, it can know to only execute any unsatisfied"},{"line_number":139,"context_line":"filters."}],"source_content_type":"text/x-rst","patch_set":50,"id":"AAAAUH%2F%2B6N8%3D","line":136,"in_reply_to":"AAAAUH%2F%2B6ho%3D","updated":"2014-01-20 21:20:14.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4409319d6b576598dddd265d08aad063dc0acc28","unresolved":false,"context_lines":[{"line_number":135,"context_line":"drivers is handled by the passing of a reference to a Hints object,"},{"line_number":136,"context_line":"which is a list dicts describing the filters. A driver that satisfies a filter"},{"line_number":137,"context_line":"must delete the filter from the Hints object so that when it is returned"},{"line_number":138,"context_line":"back to the controller level, it can know to only execute any unsatisfied"},{"line_number":139,"context_line":"filters."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"The contract for a driver for ``list_{entity}`` methods is therefore:"}],"source_content_type":"text/x-rst","patch_set":50,"id":"AAAAUH%2F%2B6hc%3D","line":138,"updated":"2014-01-20 20:41:20.000000000","message":"change \"can know\" to \"knows\"","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"28acae28b370d9fd2e09cc016d8b82f8fd5768b8","unresolved":false,"context_lines":[{"line_number":135,"context_line":"drivers is handled by the passing of a reference to a Hints object,"},{"line_number":136,"context_line":"which is a list dicts describing the filters. A driver that satisfies a filter"},{"line_number":137,"context_line":"must delete the filter from the Hints object so that when it is returned"},{"line_number":138,"context_line":"back to the controller level, it can know to only execute any unsatisfied"},{"line_number":139,"context_line":"filters."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"The contract for a driver for ``list_{entity}`` methods is therefore:"}],"source_content_type":"text/x-rst","patch_set":50,"id":"AAAAUH%2F%2B6Ng%3D","line":138,"in_reply_to":"AAAAUH%2F%2B6hc%3D","updated":"2014-01-20 21:20:14.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"603af675bbbb8f3c1e07d5b1877a21fc52f18d3d","unresolved":false,"context_lines":[{"line_number":145,"context_line":"  list by filtering for one or more of the specified filters in the passed"},{"line_number":146,"context_line":"  Hints reference, and removing any such satisfied filters."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Testing"},{"line_number":150,"context_line":"-------"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-rst","patch_set":50,"id":"AAAAUH%2F%2B8Lc%3D","line":148,"updated":"2014-01-20 17:31:15.000000000","message":"remove extra whitespace","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":145,"context_line":"  list by filtering for one or more of the specified filters in the passed"},{"line_number":146,"context_line":"  Hints reference, and removing any such satisfied filters."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Testing"},{"line_number":150,"context_line":"-------"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-rst","patch_set":50,"id":"AAAAUH%2F%2B610%3D","line":148,"in_reply_to":"AAAAUH%2F%2B8Lc%3D","updated":"2014-01-20 20:30:47.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"}],"etc/keystone.conf.sample":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"e9330611c733d7972ab9a56b35449eba8834f6a8","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"# list_limit allows you to limit the number of entities that will be returned"},{"line_number":86,"context_line":"# in a collection"},{"line_number":87,"context_line":"# list_limit \u003d 100"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"[sql]"},{"line_number":90,"context_line":"# The SQLAlchemy connection string used to connect to the database"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAASX%2F%2F%2BsM%3D","line":87,"updated":"2013-08-22 23:30:17.000000000","message":"Should it be driver-specific?","commit_id":"5d8c0835bf4754e82dc34aaae8345f68da168847"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"8f66059d1628b39a9b6233177874f745f6b28e99","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"# list_limit allows you to limit the number of entities that will be returned"},{"line_number":86,"context_line":"# in a collection"},{"line_number":87,"context_line":"# list_limit \u003d 100"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"[sql]"},{"line_number":90,"context_line":"# The SQLAlchemy connection string used to connect to the database"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAASX%2F%2F91I%3D","line":87,"in_reply_to":"AAAASX%2F%2F%2BcI%3D","updated":"2013-08-23 04:57:04.000000000","message":"OK, let me look at this.","commit_id":"5d8c0835bf4754e82dc34aaae8345f68da168847"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"67da3af79c9f0e25ac4c96d82f304d4f40954d06","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"# list_limit allows you to limit the number of entities that will be returned"},{"line_number":86,"context_line":"# in a collection"},{"line_number":87,"context_line":"# list_limit \u003d 100"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"[sql]"},{"line_number":90,"context_line":"# The SQLAlchemy connection string used to connect to the database"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAASX%2F%2F%2BcI%3D","line":87,"in_reply_to":"AAAASX%2F%2F%2BsM%3D","updated":"2013-08-23 01:10:45.000000000","message":"++ that makes sense, but i would say the right implementation is likely \"global default\" with each driver able to override the global default as-needed, but if not defined in the config, rely on the global.","commit_id":"5d8c0835bf4754e82dc34aaae8345f68da168847"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b1b81ffdaf399c06289584ed38d8f8333489c805","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"# list_limit allows you to limit the number of entities that will be returned"},{"line_number":86,"context_line":"# in a collection"},{"line_number":87,"context_line":"# list_limit \u003d 100"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"[sql]"},{"line_number":90,"context_line":"# The SQLAlchemy connection string used to connect to the database"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAASX%2F%2F6jU%3D","line":87,"in_reply_to":"AAAASX%2F%2F91I%3D","updated":"2013-08-23 19:39:31.000000000","message":"Done","commit_id":"5d8c0835bf4754e82dc34aaae8345f68da168847"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b76ddcabc48a47a951582f823ceaf7f6fdca7bb0","unresolved":false,"context_lines":[{"line_number":86,"context_line":"# identity or assignment drivers can be set with list_limit, with no limit set"},{"line_number":87,"context_line":"# by default.  If list_limit is specified in the general section it will apply"},{"line_number":88,"context_line":"# to both drivers, alternatively this may also be specified separately for each"},{"line_number":89,"context_line":"# driver in the [identity] or [assignment] sections."},{"line_number":90,"context_line":"# list_limit \u003d None"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"[sql]"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAASX%2F%2Fz8I%3D","line":89,"updated":"2013-08-26 22:35:58.000000000","message":"there\u0027s an example in [identity] but not in [assignment]. Should list_limit also be in assignment?","commit_id":"2fe54f29a424f2d8046e40f68dd554f5a212d6c5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a87f5048ae9242212992892fc90cd09c6cbdbdbb","unresolved":false,"context_lines":[{"line_number":86,"context_line":"# identity or assignment drivers can be set with list_limit, with no limit set"},{"line_number":87,"context_line":"# by default.  If list_limit is specified in the general section it will apply"},{"line_number":88,"context_line":"# to both drivers, alternatively this may also be specified separately for each"},{"line_number":89,"context_line":"# driver in the [identity] or [assignment] sections."},{"line_number":90,"context_line":"# list_limit \u003d None"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"[sql]"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAASn%2F%2F%2FKs%3D","line":89,"in_reply_to":"AAAASX%2F%2Fz8I%3D","updated":"2013-08-27 07:12:46.000000000","message":"I think I\u0027ll leave this here, and remove it from [identity[ below and document the act of configuringt he individual drover section is configuration.rst as guang-yee suggested","commit_id":"2fe54f29a424f2d8046e40f68dd554f5a212d6c5"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"d21a5cc6d80efe761c212080005b72380ffb7e5f","unresolved":false,"context_lines":[{"line_number":86,"context_line":"# identity or assignment drivers can be set with list_limit, with no limit set"},{"line_number":87,"context_line":"# by default.  If list_limit is specified in the general section it will apply"},{"line_number":88,"context_line":"# to both drivers, alternatively this may also be specified separately for each"},{"line_number":89,"context_line":"# driver in the [identity] or [assignment] sections."},{"line_number":90,"context_line":"# list_limit \u003d None"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"[sql]"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAASn%2F%2F%2FW0%3D","line":89,"in_reply_to":"AAAASX%2F%2Fz8I%3D","updated":"2013-08-27 06:07:58.000000000","message":"This should be the Keystone global limit, applicable to all the drivers. But drivers themselves can choose to use this one or have their own. I am guessing in most cases drivers would want to use their own.","commit_id":"2fe54f29a424f2d8046e40f68dd554f5a212d6c5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a87f5048ae9242212992892fc90cd09c6cbdbdbb","unresolved":false,"context_lines":[{"line_number":86,"context_line":"# identity or assignment drivers can be set with list_limit, with no limit set"},{"line_number":87,"context_line":"# by default.  If list_limit is specified in the general section it will apply"},{"line_number":88,"context_line":"# to both drivers, alternatively this may also be specified separately for each"},{"line_number":89,"context_line":"# driver in the [identity] or [assignment] sections."},{"line_number":90,"context_line":"# list_limit \u003d None"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"[sql]"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAASn%2F%2F%2FK4%3D","line":89,"in_reply_to":"AAAASn%2F%2F%2FW0%3D","updated":"2013-08-27 07:12:46.000000000","message":"Agreed.","commit_id":"2fe54f29a424f2d8046e40f68dd554f5a212d6c5"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"d21a5cc6d80efe761c212080005b72380ffb7e5f","unresolved":false,"context_lines":[{"line_number":109,"context_line":"#"},{"line_number":110,"context_line":"# list_limit allows you to limit the number of entities that will be returned"},{"line_number":111,"context_line":"# in a collection from the identity driver, with no limit set by default."},{"line_number":112,"context_line":"# list_limit \u003d None"},{"line_number":113,"context_line":"#"},{"line_number":114,"context_line":"# A subset (or all) of domains can have their own identity driver, each with"},{"line_number":115,"context_line":"# their own partial configuration file in a domain configuration directory."}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAASn%2F%2F%2FWo%3D","line":112,"updated":"2013-08-27 06:07:58.000000000","message":"May want to just document this in configuration.rst instead.","commit_id":"2fe54f29a424f2d8046e40f68dd554f5a212d6c5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a87f5048ae9242212992892fc90cd09c6cbdbdbb","unresolved":false,"context_lines":[{"line_number":109,"context_line":"#"},{"line_number":110,"context_line":"# list_limit allows you to limit the number of entities that will be returned"},{"line_number":111,"context_line":"# in a collection from the identity driver, with no limit set by default."},{"line_number":112,"context_line":"# list_limit \u003d None"},{"line_number":113,"context_line":"#"},{"line_number":114,"context_line":"# A subset (or all) of domains can have their own identity driver, each with"},{"line_number":115,"context_line":"# their own partial configuration file in a domain configuration directory."}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAASn%2F%2F%2FIA%3D","line":112,"in_reply_to":"AAAASn%2F%2F%2FWo%3D","updated":"2013-08-27 07:12:46.000000000","message":"Done","commit_id":"2fe54f29a424f2d8046e40f68dd554f5a212d6c5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":86,"context_line":"# set with list_limit, with no limit set by default.  This global limit may be"},{"line_number":87,"context_line":"# then overridden for a specific driver, by specifying a list_limit in the"},{"line_number":88,"context_line":"# appropriate section (e.g. [assignment])"},{"line_number":89,"context_line":"# list_limit \u003d None"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"[sql]"},{"line_number":92,"context_line":"# The SQLAlchemy connection string used to connect to the database"}],"source_content_type":"application/octet-stream","patch_set":19,"id":"AAAASn%2F%2F7aI%3D","line":89,"updated":"2013-08-27 22:13:53.000000000","message":"suggest remove \"None\" and leave it blank.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":86,"context_line":"# set with list_limit, with no limit set by default.  This global limit may be"},{"line_number":87,"context_line":"# then overridden for a specific driver, by specifying a list_limit in the"},{"line_number":88,"context_line":"# appropriate section (e.g. [assignment])"},{"line_number":89,"context_line":"# list_limit \u003d None"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"[sql]"},{"line_number":92,"context_line":"# The SQLAlchemy connection string used to connect to the database"}],"source_content_type":"application/octet-stream","patch_set":19,"id":"AAAASn%2F%2F6%2B0%3D","line":89,"in_reply_to":"AAAASn%2F%2F7aI%3D","updated":"2013-08-28 00:30:00.000000000","message":"Done","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"}],"keystone/assignment/backends/kvs.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        except exception.NotFound:"},{"line_number":36,"context_line":"            raise exception.ProjectNotFound(project_id\u003dtenant_id)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def list_projects(self, query_dict\u003dNone, valid_filters\u003dNone):"},{"line_number":39,"context_line":"        project_keys \u003d filter(lambda x: x.startswith(\"tenant-\"),"},{"line_number":40,"context_line":"                              self.db.keys())"},{"line_number":41,"context_line":"        project_refs \u003d [self.db.get(key) for key in project_keys]"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F7Zg%3D","line":38,"updated":"2013-08-27 22:13:53.000000000","message":"query_dict should be called \"query_dict_in_out\" because it\u0027s modified.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        except exception.NotFound:"},{"line_number":36,"context_line":"            raise exception.ProjectNotFound(project_id\u003dtenant_id)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def list_projects(self, query_dict\u003dNone, valid_filters\u003dNone):"},{"line_number":39,"context_line":"        project_keys \u003d filter(lambda x: x.startswith(\"tenant-\"),"},{"line_number":40,"context_line":"                              self.db.keys())"},{"line_number":41,"context_line":"        project_refs \u003d [self.db.get(key) for key in project_keys]"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F6rk%3D","line":38,"in_reply_to":"AAAASn%2F%2F7Zg%3D","updated":"2013-08-28 00:30:00.000000000","message":"Done","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"490f8da82a8062187ac032f2f71a98d566011152","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        except exception.NotFound:"},{"line_number":36,"context_line":"            raise exception.ProjectNotFound(project_id\u003dtenant_id)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def list_projects(self, query_dict_in_out\u003dNone, valid_filters\u003dNone):"},{"line_number":39,"context_line":"        project_keys \u003d filter(lambda x: x.startswith(\"tenant-\"),"},{"line_number":40,"context_line":"                              self.db.keys())"},{"line_number":41,"context_line":"        project_refs \u003d [self.db.get(key) for key in project_keys]"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F2Gg%3D","line":38,"updated":"2013-08-28 21:46:44.000000000","message":"Some reason query_dict_in_out sounds weird. Maybe query_params? it\u0027s really query parameters. Anyway, I don\u0027t have a strong opinion on this one.","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"174498fe98b6d62b75608b4f4f62293388f19159","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        except exception.NotFound:"},{"line_number":36,"context_line":"            raise exception.ProjectNotFound(project_id\u003dtenant_id)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def list_projects(self, query_dict_in_out\u003dNone, valid_filters\u003dNone):"},{"line_number":39,"context_line":"        project_keys \u003d filter(lambda x: x.startswith(\"tenant-\"),"},{"line_number":40,"context_line":"                              self.db.keys())"},{"line_number":41,"context_line":"        project_refs \u003d [self.db.get(key) for key in project_keys]"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F10c%3D","line":38,"in_reply_to":"AAAASn%2F%2F2Gg%3D","updated":"2013-08-28 23:12:46.000000000","message":"The view of some of the reviewers was to make it obvious that this gets modified...is it the \"in_out\" bit you don\u0027t like or the query_dict bit?","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ee3e89a0163cab31f1f9d2120aa8177cdd7e7362","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                              self.db.keys())"},{"line_number":41,"context_line":"        project_refs \u003d [self.db.get(key) for key in project_keys]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        if list_directives is not None:"},{"line_number":44,"context_line":"            fkey, domain_filter \u003d ("},{"line_number":45,"context_line":"                list_directives.get_exact_filter_by_name(\u0027domain_id\u0027))"},{"line_number":46,"context_line":"            if domain_filter:"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fgjo%3D","line":43,"updated":"2013-09-04 00:20:15.000000000","message":"why should this kwarg default to None, thereby forcing the callee to be defensive about handling it? no one should be calling this besides the manager, and if the manager isn\u0027t calling it correctly, then it\u0027s broken","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1702bf36903aded8134fa4d349b218c4e69301a9","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                              self.db.keys())"},{"line_number":41,"context_line":"        project_refs \u003d [self.db.get(key) for key in project_keys]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        if list_directives is not None:"},{"line_number":44,"context_line":"            fkey, domain_filter \u003d ("},{"line_number":45,"context_line":"                list_directives.get_exact_filter_by_name(\u0027domain_id\u0027))"},{"line_number":46,"context_line":"            if domain_filter:"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fey8%3D","line":43,"in_reply_to":"AAAASn%2F%2Fgjo%3D","updated":"2013-09-04 10:30:50.000000000","message":"Done","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"186ce2b0af1897f7d4648937642c769c2879351a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                              self.db.keys())"},{"line_number":41,"context_line":"        project_refs \u003d [self.db.get(key) for key in project_keys]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        domain_filter \u003d ("},{"line_number":44,"context_line":"            hints.get_exact_filter_by_name(\u0027domain_id\u0027))"},{"line_number":45,"context_line":"        if domain_filter:"},{"line_number":46,"context_line":"            domain_id \u003d domain_filter[\u0027value\u0027]"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb%2BI%3D","line":43,"updated":"2013-09-04 19:05:54.000000000","message":"is the line wrap necessary?","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                              self.db.keys())"},{"line_number":41,"context_line":"        project_refs \u003d [self.db.get(key) for key in project_keys]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        domain_filter \u003d ("},{"line_number":44,"context_line":"            hints.get_exact_filter_by_name(\u0027domain_id\u0027))"},{"line_number":45,"context_line":"        if domain_filter:"},{"line_number":46,"context_line":"            domain_id \u003d domain_filter[\u0027value\u0027]"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fbqs%3D","line":43,"in_reply_to":"AAAASn%2F%2Fb%2BI%3D","updated":"2013-09-04 22:58:56.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def list_projects(self, hints):"},{"line_number":39,"context_line":"        project_keys \u003d filter(lambda x: x.startswith(\"tenant-\"),"},{"line_number":40,"context_line":"                              self.db.keys())"},{"line_number":41,"context_line":"        project_refs \u003d [self.db.get(key) for key in project_keys]"},{"line_number":42,"context_line":"        return project_refs"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def list_projects_in_domain(self, domain_id, hints):"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FavE%3D","line":41,"updated":"2013-09-05 00:42:46.000000000","message":"suggest remove the duplication here by not copy-pasting.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def list_projects(self, hints):"},{"line_number":39,"context_line":"        project_keys \u003d filter(lambda x: x.startswith(\"tenant-\"),"},{"line_number":40,"context_line":"                              self.db.keys())"},{"line_number":41,"context_line":"        project_refs \u003d [self.db.get(key) for key in project_keys]"},{"line_number":42,"context_line":"        return project_refs"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def list_projects_in_domain(self, domain_id, hints):"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKmM%3D","line":41,"in_reply_to":"AAAASn%2F%2FavE%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d7db058d4f2242865f09bb3f8b34f53509511b24","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                              self.db.keys())"},{"line_number":47,"context_line":"        project_refs \u003d [self.db.get(key) for key in project_keys]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if domain_id:"},{"line_number":50,"context_line":"            self.get_domain(domain_id)"},{"line_number":51,"context_line":"            project_refs \u003d filter(lambda x: domain_id in x[\u0027domain_id\u0027],"},{"line_number":52,"context_line":"                                  project_refs)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FaaA%3D","line":49,"updated":"2013-09-05 01:14:35.000000000","message":"a domain_id is guaranteed now... not conditional","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                              self.db.keys())"},{"line_number":47,"context_line":"        project_refs \u003d [self.db.get(key) for key in project_keys]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if domain_id:"},{"line_number":50,"context_line":"            self.get_domain(domain_id)"},{"line_number":51,"context_line":"            project_refs \u003d filter(lambda x: domain_id in x[\u0027domain_id\u0027],"},{"line_number":52,"context_line":"                                  project_refs)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKmw%3D","line":49,"in_reply_to":"AAAASn%2F%2FaaA%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4409319d6b576598dddd265d08aad063dc0acc28","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def list_projects(self, hints):"},{"line_number":43,"context_line":"        return self._build_project_refs()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def list_projects_in_domain(self, domain_id):"},{"line_number":46,"context_line":"        project_refs \u003d self._build_project_refs()"},{"line_number":47,"context_line":"        self.get_domain(domain_id)"},{"line_number":48,"context_line":"        project_refs \u003d filter(lambda x: domain_id in x[\u0027domain_id\u0027],"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6P8%3D","line":45,"updated":"2014-01-20 20:41:20.000000000","message":"the change from list_projects to list_projects \u0026 list_projects_in_domain is a candidate for splitting out into its own review.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"28acae28b370d9fd2e09cc016d8b82f8fd5768b8","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def list_projects(self, hints):"},{"line_number":43,"context_line":"        return self._build_project_refs()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def list_projects_in_domain(self, domain_id):"},{"line_number":46,"context_line":"        project_refs \u003d self._build_project_refs()"},{"line_number":47,"context_line":"        self.get_domain(domain_id)"},{"line_number":48,"context_line":"        project_refs \u003d filter(lambda x: domain_id in x[\u0027domain_id\u0027],"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6Mc%3D","line":45,"in_reply_to":"AAAAUH%2F%2B6P8%3D","updated":"2014-01-20 21:20:14.000000000","message":"I agree we could break it out - the reason I did it here was due to the fact that now we have \"optional\" filtering at the driver level, we need to distinguish between that in \"required filtering\" (which is always for internal call only)….and this distinction would not be required if jt were not for this patch.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"}],"keystone/assignment/backends/ldap.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def list_projects(self, hints):"},{"line_number":66,"context_line":"        # We don\u0027t support multiple domains within this driver, so ignore"},{"line_number":67,"context_line":"        # any domain passed in hints"},{"line_number":68,"context_line":"        return self._set_default_domain(self.project.get_all())"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def list_projects_in_domain(self, domain_id, hints):"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Fats%3D","line":67,"updated":"2013-09-05 00:42:46.000000000","message":"does this still apply? why would domain be passed in hints rather than calling list_projects_in_domain","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def list_projects(self, hints):"},{"line_number":66,"context_line":"        # We don\u0027t support multiple domains within this driver, so ignore"},{"line_number":67,"context_line":"        # any domain passed in hints"},{"line_number":68,"context_line":"        return self._set_default_domain(self.project.get_all())"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def list_projects_in_domain(self, domain_id, hints):"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKk4%3D","line":67,"in_reply_to":"AAAASn%2F%2FaZk%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d7db058d4f2242865f09bb3f8b34f53509511b24","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def list_projects(self, hints):"},{"line_number":66,"context_line":"        # We don\u0027t support multiple domains within this driver, so ignore"},{"line_number":67,"context_line":"        # any domain passed in hints"},{"line_number":68,"context_line":"        return self._set_default_domain(self.project.get_all())"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def list_projects_in_domain(self, domain_id, hints):"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FaZk%3D","line":67,"in_reply_to":"AAAASn%2F%2Fats%3D","updated":"2013-09-05 01:14:35.000000000","message":"++","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"603af675bbbb8f3c1e07d5b1877a21fc52f18d3d","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    def list_projects(self, hints):"},{"line_number":60,"context_line":"        return self._set_default_domain(self.project.get_all())"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def list_projects_in_domain(self, domain_id):"},{"line_number":63,"context_line":"        # We don\u0027t support multiple domains within this driver, so ignore"},{"line_number":64,"context_line":"        # any domain specified"},{"line_number":65,"context_line":"        return self.list_projects(driver_hints.Hints())"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B73E%3D","line":62,"updated":"2014-01-20 17:31:15.000000000","message":"shouldn\u0027t hints be passed in here, and then passed through to list_projects()?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    def list_projects(self, hints):"},{"line_number":60,"context_line":"        return self._set_default_domain(self.project.get_all())"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def list_projects_in_domain(self, domain_id):"},{"line_number":63,"context_line":"        # We don\u0027t support multiple domains within this driver, so ignore"},{"line_number":64,"context_line":"        # any domain specified"},{"line_number":65,"context_line":"        return self.list_projects(driver_hints.Hints())"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B60M%3D","line":62,"in_reply_to":"AAAAUH%2F%2B73E%3D","updated":"2014-01-20 20:30:47.000000000","message":"No, I don\u0027t think so…this is an internal method and not exposed via the API (see comment in assignment/core.py)","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f54ba340af990482e7c58becb133a1a1fd1a68","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        raise exception.Forbidden(\u0027Domains are read-only against LDAP\u0027)"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def list_domains(self, hints):"},{"line_number":261,"context_line":"        return [assignment.DEFAULT_DOMAIN]"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"#Bulk actions on User From identity"},{"line_number":264,"context_line":"    def delete_user(self, user_id):"}],"source_content_type":"text/x-python","patch_set":55,"id":"AAAAUH%2F%2BjB8%3D","line":261,"updated":"2014-01-24 15:35:24.000000000","message":"there wasn\u0027t much of a conflict here, but brant updated L261 to evaluate the default domain at runtime","commit_id":"395531d4300c8466d2ed433564ee378ecd1067b9"}],"keystone/assignment/backends/sql.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"e9330611c733d7972ab9a56b35449eba8834f6a8","unresolved":false,"context_lines":[{"line_number":465,"context_line":"            session.flush()"},{"line_number":466,"context_line":"        return ref.to_dict()"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    def list_domains(self, query_string\u003dNone, filters\u003dNone):"},{"line_number":469,"context_line":"        session \u003d self.get_session()"},{"line_number":470,"context_line":"        refs \u003d session.query(Domain)"},{"line_number":471,"context_line":"        refs \u003d self.filter_and_paginate("}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F%2Bxo%3D","line":468,"updated":"2013-08-22 23:30:17.000000000","message":"What\u0027s the difference between query_string and filters? Aren\u0027t they the same thing? Perhaps something like\n\ndef list_domains(self, **filters):\n\nThat way, controller simply need to pass the query string.","commit_id":"5d8c0835bf4754e82dc34aaae8345f68da168847"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"8f66059d1628b39a9b6233177874f745f6b28e99","unresolved":false,"context_lines":[{"line_number":465,"context_line":"            session.flush()"},{"line_number":466,"context_line":"        return ref.to_dict()"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    def list_domains(self, query_string\u003dNone, filters\u003dNone):"},{"line_number":469,"context_line":"        session \u003d self.get_session()"},{"line_number":470,"context_line":"        refs \u003d session.query(Domain)"},{"line_number":471,"context_line":"        refs \u003d self.filter_and_paginate("}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F91Q%3D","line":468,"in_reply_to":"AAAASX%2F%2F%2Bxo%3D","updated":"2013-08-23 04:57:04.000000000","message":"So I agree the names aren\u0027t quiet right.  query_string is the query string form context that contains, actually a dict of the filter requests.  filters is a list of valid filter keys that we support for this api.  Let me change the names to make this clearer","commit_id":"5d8c0835bf4754e82dc34aaae8345f68da168847"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b76ddcabc48a47a951582f823ceaf7f6fdca7bb0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        migration.db_sync(version\u003dversion)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _get_list_limit(self):"},{"line_number":37,"context_line":"        if CONF.identity.list_limit is None:"},{"line_number":38,"context_line":"            return CONF.list_limit"},{"line_number":39,"context_line":"        else:"},{"line_number":40,"context_line":"            return CONF.assignment.list_limit"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAASX%2F%2Fz7Q%3D","line":37,"updated":"2013-08-26 22:35:58.000000000","message":"I assume this should be assignment here and not identity.","commit_id":"2fe54f29a424f2d8046e40f68dd554f5a212d6c5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a87f5048ae9242212992892fc90cd09c6cbdbdbb","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        migration.db_sync(version\u003dversion)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _get_list_limit(self):"},{"line_number":37,"context_line":"        if CONF.identity.list_limit is None:"},{"line_number":38,"context_line":"            return CONF.list_limit"},{"line_number":39,"context_line":"        else:"},{"line_number":40,"context_line":"            return CONF.assignment.list_limit"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAASn%2F%2F%2FNM%3D","line":37,"in_reply_to":"AAAASX%2F%2Fz7Q%3D","updated":"2013-08-27 07:12:46.000000000","message":"Ooops, nice catch.","commit_id":"2fe54f29a424f2d8046e40f68dd554f5a212d6c5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0607f8164c89c67f4bbb99717773ef40e736edc6","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystone.common import dependency"},{"line_number":20,"context_line":"from keystone.common import sql"},{"line_number":21,"context_line":"from keystone.common.sql import migration"},{"line_number":22,"context_line":"from keystone import config"},{"line_number":23,"context_line":"from keystone import exception"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F3Go%3D","line":22,"updated":"2013-08-28 19:01:11.000000000","message":"this isn\u0027t used as far as I can tell, so remove it.","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"257cf5a3b3f22131d68fcb047d1bc076d5342a66","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystone.common import dependency"},{"line_number":20,"context_line":"from keystone.common import sql"},{"line_number":21,"context_line":"from keystone.common.sql import migration"},{"line_number":22,"context_line":"from keystone import config"},{"line_number":23,"context_line":"from keystone import exception"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F2zY%3D","line":22,"in_reply_to":"AAAASn%2F%2F3Go%3D","updated":"2013-08-28 19:19:07.000000000","message":"Done","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0607f8164c89c67f4bbb99717773ef40e736edc6","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from keystone import exception"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"CONF \u003d config.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@dependency.requires(\u0027identity_api\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F3Gw%3D","line":26,"updated":"2013-08-28 19:01:11.000000000","message":"this isn\u0027t used as far as I can tell, so remove it.","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"257cf5a3b3f22131d68fcb047d1bc076d5342a66","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from keystone import exception"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"CONF \u003d config.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@dependency.requires(\u0027identity_api\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F2zc%3D","line":26,"in_reply_to":"AAAASn%2F%2F3Gw%3D","updated":"2013-08-28 19:19:07.000000000","message":"Done","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"19602cf32e82c9b0e905611d6370283a2bca1831","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            self._update_metadata(user_id, project_id, metadata_ref,"},{"line_number":209,"context_line":"                                  domain_id, group_id)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def list_projects(self, query_dict_in_out\u003dNone, valid_filters\u003dNone):"},{"line_number":212,"context_line":"        session \u003d self.get_session()"},{"line_number":213,"context_line":"        query \u003d session.query(Project)"},{"line_number":214,"context_line":"        project_refs \u003d self.filter_and_paginate("}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAASn%2F%2FuOo%3D","line":211,"updated":"2013-08-30 13:10:15.000000000","message":"i see this particular change as a giant red flag that this change is only half-baked\n\nyou\u0027re changing the contract with the drivers in such a way that you\u0027re mixing (and obfuscating) A) the contract that the driver MUST implement with B) the optional hints that the driver MAY implement.\n\nit\u0027s now super unclear what this method does\n\nand \u0027query_dict_in_out\u0027 has to be one of the worst variable names i\u0027ve ever seen. and i thought \u0027valid_filters\u0027 was bad","commit_id":"48535c93712fc19c5236ef074579d6c1f706ad28"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9c98c8176fd667c4a8bf48af61dcc0c318a82de5","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            self._update_metadata(user_id, project_id, metadata_ref,"},{"line_number":209,"context_line":"                                  domain_id, group_id)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def list_projects(self, query_dict_in_out\u003dNone, valid_filters\u003dNone):"},{"line_number":212,"context_line":"        session \u003d self.get_session()"},{"line_number":213,"context_line":"        query \u003d session.query(Project)"},{"line_number":214,"context_line":"        project_refs \u003d self.filter_and_paginate("}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAASn%2F%2FuE4%3D","line":211,"in_reply_to":"AAAASn%2F%2FuOo%3D","updated":"2013-08-30 13:55:25.000000000","message":"So I have now tried to clarify this in developing.rst as well as provide doc sting info here.\n\nAre you concerned about the principle of passing down the filters specified, or the way I am doing it?\n\nIn terms of query_dict_in_out - I was responding to other core reviews who felt it was important to indicate explicitly that this the data references buy this parameter may be modified.","commit_id":"48535c93712fc19c5236ef074579d6c1f706ad28"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        query \u003d session.query(Project)"},{"line_number":214,"context_line":"        project_refs \u003d self.filter_and_paginate("},{"line_number":215,"context_line":"            Project, query, list_directives)"},{"line_number":216,"context_line":"        print([project_ref.to_dict() for project_ref in project_refs])"},{"line_number":217,"context_line":"        return [project_ref.to_dict() for project_ref in project_refs]"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def get_projects_for_user(self, user_id):"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fh1c%3D","line":216,"updated":"2013-09-03 20:01:14.000000000","message":"remove debug code.","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        query \u003d session.query(Project)"},{"line_number":214,"context_line":"        project_refs \u003d self.filter_and_paginate("},{"line_number":215,"context_line":"            Project, query, list_directives)"},{"line_number":216,"context_line":"        print([project_ref.to_dict() for project_ref in project_refs])"},{"line_number":217,"context_line":"        return [project_ref.to_dict() for project_ref in project_refs]"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def get_projects_for_user(self, user_id):"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhJk%3D","line":216,"in_reply_to":"AAAASn%2F%2Fh1c%3D","updated":"2013-09-03 23:06:52.000000000","message":"oops, sorry!","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ee3e89a0163cab31f1f9d2120aa8177cdd7e7362","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        session \u003d self.get_session()"},{"line_number":213,"context_line":"        query \u003d session.query(Project)"},{"line_number":214,"context_line":"        project_refs \u003d self.filter_and_paginate("},{"line_number":215,"context_line":"            Project, query, list_directives)"},{"line_number":216,"context_line":"        return [project_ref.to_dict() for project_ref in project_refs]"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def get_projects_for_user(self, user_id):"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FgjA%3D","line":215,"updated":"2013-09-04 00:20:15.000000000","message":"why do you have to pass in a resource reference when the query is already selecting on that resource?","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4032a8b1103488234a6686a8822d8a160d4fdd56","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        session \u003d self.get_session()"},{"line_number":213,"context_line":"        query \u003d session.query(Project)"},{"line_number":214,"context_line":"        project_refs \u003d self.filter_and_paginate("},{"line_number":215,"context_line":"            Project, query, list_directives)"},{"line_number":216,"context_line":"        return [project_ref.to_dict() for project_ref in project_refs]"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def get_projects_for_user(self, user_id):"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FdlI%3D","line":215,"in_reply_to":"AAAASn%2F%2FepU%3D","updated":"2013-09-04 14:16:37.000000000","message":"\u003e partially built query\n\nit\u0027s a perfectly valid query already.\n\nthe sqlalchemy docs show how to introspect the data that a query will select:\n\n  http://docs.sqlalchemy.org/ru/latest/orm/query.html#sqlalchemy.orm.query.Query.column_descriptions\n\ni\u0027m not sure either approach would work for joined queries?","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1702bf36903aded8134fa4d349b218c4e69301a9","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        session \u003d self.get_session()"},{"line_number":213,"context_line":"        query \u003d session.query(Project)"},{"line_number":214,"context_line":"        project_refs \u003d self.filter_and_paginate("},{"line_number":215,"context_line":"            Project, query, list_directives)"},{"line_number":216,"context_line":"        return [project_ref.to_dict() for project_ref in project_refs]"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def get_projects_for_user(self, user_id):"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FepU%3D","line":215,"in_reply_to":"AAAASn%2F%2FgjA%3D","updated":"2013-09-04 10:30:50.000000000","message":"So 2 reasons....1. it is how the other projects did it (!), and 2) we need the model in inside core/sql...and the query might already have something applied to it (so can\u0027t star the query inside core/sql)...but wasn\u0027t sure of the correct way of extracting the model from a partially built query","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            self._update_metadata(user_id, project_id, metadata_ref,"},{"line_number":209,"context_line":"                                  domain_id, group_id)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def list_projects(self, hints):"},{"line_number":212,"context_line":"        session \u003d self.get_session()"},{"line_number":213,"context_line":"        query \u003d session.query(Project)"},{"line_number":214,"context_line":"        project_refs \u003d self.filter(Project, query, hints)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb88%3D","line":211,"updated":"2013-09-04 19:40:08.000000000","message":"i don\u0027t think the domain bit should be optional, which means splitting the method according to the responsibilities it currently has:\n\n  def list_projects(self, hints):\n\n  def list_projects_in_domain(self, domain_id, hints):","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            self._update_metadata(user_id, project_id, metadata_ref,"},{"line_number":209,"context_line":"                                  domain_id, group_id)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def list_projects(self, hints):"},{"line_number":212,"context_line":"        session \u003d self.get_session()"},{"line_number":213,"context_line":"        query \u003d session.query(Project)"},{"line_number":214,"context_line":"        project_refs \u003d self.filter(Project, query, hints)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fbl8%3D","line":211,"in_reply_to":"AAAASn%2F%2Fb88%3D","updated":"2013-09-04 22:58:56.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        query \u003d session.query(Project)"},{"line_number":221,"context_line":"        query \u003d query.filter_by(domain_id\u003ddomain_id)"},{"line_number":222,"context_line":"        project_refs \u003d self.filter(Project, query, hints)"},{"line_number":223,"context_line":"        return [project_ref.to_dict() for project_ref in project_refs]"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def get_projects_for_user(self, user_id):"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FatE%3D","line":223,"updated":"2013-09-05 00:42:46.000000000","message":"suggest consolidate duplicated code in list_projects and list_projects_in_domain","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        query \u003d session.query(Project)"},{"line_number":221,"context_line":"        query \u003d query.filter_by(domain_id\u003ddomain_id)"},{"line_number":222,"context_line":"        project_refs \u003d self.filter(Project, query, hints)"},{"line_number":223,"context_line":"        return [project_ref.to_dict() for project_ref in project_refs]"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def get_projects_for_user(self, user_id):"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKj0%3D","line":223,"in_reply_to":"AAAASn%2F%2FatE%3D","updated":"2014-01-16 22:36:39.000000000","message":"With the later changes, the advantage of this seem more minimal","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4409319d6b576598dddd265d08aad063dc0acc28","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            return [project_ref.to_dict() for project_ref in project_refs]"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def list_projects_in_domain(self, domain_id):"},{"line_number":218,"context_line":"        with self.transaction() as session:"},{"line_number":219,"context_line":"            self._get_domain(session, domain_id)"},{"line_number":220,"context_line":"            query \u003d session.query(Project)"},{"line_number":221,"context_line":"            project_refs \u003d query.filter_by(domain_id\u003ddomain_id)"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6ak%3D","line":218,"updated":"2014-01-20 20:41:20.000000000","message":"could create a hints and then call list_projects(self, domain_hints) to re-use code.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"28acae28b370d9fd2e09cc016d8b82f8fd5768b8","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            return [project_ref.to_dict() for project_ref in project_refs]"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def list_projects_in_domain(self, domain_id):"},{"line_number":218,"context_line":"        with self.transaction() as session:"},{"line_number":219,"context_line":"            self._get_domain(session, domain_id)"},{"line_number":220,"context_line":"            query \u003d session.query(Project)"},{"line_number":221,"context_line":"            project_refs \u003d query.filter_by(domain_id\u003ddomain_id)"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6MU%3D","line":218,"in_reply_to":"AAAAUH%2F%2B6ak%3D","updated":"2014-01-20 21:20:14.000000000","message":"We could….but I was kind of keeping the optional vs mandatory filtering separate (although I agree that within a driver you could enforce this)","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"}],"keystone/assignment/controllers.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":356,"context_line":"        hints \u003d DomainV3.build_driver_hints(context, filters)"},{"line_number":357,"context_line":"        refs \u003d self.assignment_api.list_domains(hints\u003dhints)"},{"line_number":358,"context_line":"        return DomainV3.wrap_collection(context, refs,"},{"line_number":359,"context_line":"                                        hints\u003dhints)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    @controller.protected()"},{"line_number":362,"context_line":"    def get_domain(self, context, domain_id):"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B8Hg%3D","line":359,"updated":"2014-01-20 16:59:34.000000000","message":"Can this be put up a line?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":356,"context_line":"        hints \u003d DomainV3.build_driver_hints(context, filters)"},{"line_number":357,"context_line":"        refs \u003d self.assignment_api.list_domains(hints\u003dhints)"},{"line_number":358,"context_line":"        return DomainV3.wrap_collection(context, refs,"},{"line_number":359,"context_line":"                                        hints\u003dhints)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    @controller.protected()"},{"line_number":362,"context_line":"    def get_domain(self, context, domain_id):"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7bA%3D","line":359,"in_reply_to":"AAAAUH%2F%2B8Hg%3D","updated":"2014-01-20 20:30:47.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":397,"context_line":"        hints \u003d ProjectV3.build_driver_hints(context, filters)"},{"line_number":398,"context_line":"        refs \u003d self.assignment_api.list_projects(hints\u003dhints)"},{"line_number":399,"context_line":"        return ProjectV3.wrap_collection(context, refs,"},{"line_number":400,"context_line":"                                         hints\u003dhints)"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    @controller.filterprotected(\u0027enabled\u0027, \u0027name\u0027)"},{"line_number":403,"context_line":"    def list_user_projects(self, context, filters, user_id):"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7a4%3D","line":400,"updated":"2014-01-20 20:30:47.000000000","message":"…and this one too","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"}],"keystone/assignment/core.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"e9330611c733d7972ab9a56b35449eba8834f6a8","unresolved":false,"context_lines":[{"line_number":367,"context_line":"        \"\"\""},{"line_number":368,"context_line":"        raise exception.NotImplemented()"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def list_domains(self, query_string\u003dNone, filters\u003dNone):"},{"line_number":371,"context_line":"        \"\"\"List domains in the system."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        If any entry in \u0027filters\u0027 is specified in \u0027query_string\u0027, then"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F%2BsA%3D","line":370,"updated":"2013-08-22 23:30:17.000000000","message":"def list_domains(self, **filters):","commit_id":"5d8c0835bf4754e82dc34aaae8345f68da168847"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"8f66059d1628b39a9b6233177874f745f6b28e99","unresolved":false,"context_lines":[{"line_number":367,"context_line":"        \"\"\""},{"line_number":368,"context_line":"        raise exception.NotImplemented()"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def list_domains(self, query_string\u003dNone, filters\u003dNone):"},{"line_number":371,"context_line":"        \"\"\"List domains in the system."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        If any entry in \u0027filters\u0027 is specified in \u0027query_string\u0027, then"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F91A%3D","line":370,"in_reply_to":"AAAASX%2F%2F%2BsA%3D","updated":"2013-08-23 04:57:04.000000000","message":"See me previous comment backend/sql","commit_id":"5d8c0835bf4754e82dc34aaae8345f68da168847"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"67da3af79c9f0e25ac4c96d82f304d4f40954d06","unresolved":false,"context_lines":[{"line_number":367,"context_line":"        \"\"\""},{"line_number":368,"context_line":"        raise exception.NotImplemented()"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def list_domains(self, query_string\u003dNone, filters\u003dNone):"},{"line_number":371,"context_line":"        \"\"\"List domains in the system."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        If any entry in \u0027filters\u0027 is specified in \u0027query_string\u0027, then"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F%2Bak%3D","line":370,"in_reply_to":"AAAASX%2F%2F%2BsA%3D","updated":"2013-08-23 01:10:45.000000000","message":"This starts getting sticky depending on where we end up doing the caching (directly in assignment or...).  I would prefer to avoid **kwargs-style interfacing in the manager layer  unless it\u0027s really needed.\n\nAs it stands, filtered interfaces (when filtering is applied) likely will need to be explicitly deemed as \"un-cacheable\", I am unsure at this point what the invalidations will look like under those circumstances.","commit_id":"5d8c0835bf4754e82dc34aaae8345f68da168847"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            self.remove_role_from_user_and_project(user_id, tenant_id, role_id)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def list_projects(self, query_dict\u003dNone, valid_filters\u003dNone):"},{"line_number":209,"context_line":"        ref_list \u003d self.driver.list_projects(query_dict, valid_filters)"},{"line_number":210,"context_line":"        list_limit \u003d self.driver._get_list_limit()"},{"line_number":211,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":212,"context_line":"            return ref_list[:list_limit]"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F7YM%3D","line":209,"updated":"2013-08-27 22:13:53.000000000","message":"use named arguments for named parameters. (query_dict\u003dquery_dict, valid_filters\u003dvalid_filters). This applies throughout this file.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            self.remove_role_from_user_and_project(user_id, tenant_id, role_id)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def list_projects(self, query_dict\u003dNone, valid_filters\u003dNone):"},{"line_number":209,"context_line":"        ref_list \u003d self.driver.list_projects(query_dict, valid_filters)"},{"line_number":210,"context_line":"        list_limit \u003d self.driver._get_list_limit()"},{"line_number":211,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":212,"context_line":"            return ref_list[:list_limit]"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F6%2BA%3D","line":209,"in_reply_to":"AAAASn%2F%2F7YM%3D","updated":"2013-08-28 00:30:00.000000000","message":"Done","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        ref_list \u003d self.driver.list_projects(query_dict, valid_filters)"},{"line_number":210,"context_line":"        list_limit \u003d self.driver._get_list_limit()"},{"line_number":211,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":212,"context_line":"            return ref_list[:list_limit]"},{"line_number":213,"context_line":"        else:"},{"line_number":214,"context_line":"            return ref_list"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F7Y4%3D","line":212,"updated":"2013-08-27 22:13:53.000000000","message":"the server needs to indicate to the client that the list limit was hit somehow.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        ref_list \u003d self.driver.list_projects(query_dict, valid_filters)"},{"line_number":210,"context_line":"        list_limit \u003d self.driver._get_list_limit()"},{"line_number":211,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":212,"context_line":"            return ref_list[:list_limit]"},{"line_number":213,"context_line":"        else:"},{"line_number":214,"context_line":"            return ref_list"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F6%2BE%3D","line":212,"in_reply_to":"AAAASn%2F%2F7Y4%3D","updated":"2013-08-28 00:30:00.000000000","message":"So agreed in principle, but there doesn\u0027t seem a good way of doing it that won\u0027t break existing clients.  The best I could come up with was to return 206 (Partial Content)....but I am sure that would still break things....","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":228,"context_line":"            return ref_list[:list_limit]"},{"line_number":229,"context_line":"        else:"},{"line_number":230,"context_line":"            return ref_list"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"class Driver(object):"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F7Xg%3D","line":230,"updated":"2013-08-27 22:13:53.000000000","message":"there\u0027s a lot of copy-paste code here, suggest consolidate.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":228,"context_line":"            return ref_list[:list_limit]"},{"line_number":229,"context_line":"        else:"},{"line_number":230,"context_line":"            return ref_list"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"class Driver(object):"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F69w%3D","line":230,"in_reply_to":"AAAASn%2F%2F7Xg%3D","updated":"2013-08-28 00:30:00.000000000","message":"Done","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"736a9b7f7713167f91e07613bd4bc471866eb353","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def _trim_to_limit(self, ref_list):"},{"line_number":209,"context_line":"        list_limit \u003d self.driver._get_list_limit()"},{"line_number":210,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":211,"context_line":"            return ref_list[:list_limit]"},{"line_number":212,"context_line":"        else:"},{"line_number":213,"context_line":"            return ref_list"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F2R4%3D","line":210,"updated":"2013-08-28 21:05:48.000000000","message":"Recommend debug log when trimming the list (aid in troubleshooting)","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"174498fe98b6d62b75608b4f4f62293388f19159","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def _trim_to_limit(self, ref_list):"},{"line_number":209,"context_line":"        list_limit \u003d self.driver._get_list_limit()"},{"line_number":210,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":211,"context_line":"            return ref_list[:list_limit]"},{"line_number":212,"context_line":"        else:"},{"line_number":213,"context_line":"            return ref_list"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F1zE%3D","line":210,"in_reply_to":"AAAASn%2F%2F2R4%3D","updated":"2013-08-28 23:12:46.000000000","message":"So we could do that.  Only issue is that if the \"trimming\" happened in the underlying backend (e.g. SQL) then we won\u0027t know if it got trimmed there.  So is it worth logging these ones (which will only happen for backends that don\u0027t support limiting)?","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6e776e2425a99ee48b3190289b3ba4f8fee0014f","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                hints\u003ddriver_hints.Hints())"},{"line_number":268,"context_line":"        else:"},{"line_number":269,"context_line":"            return self.driver.list_domains("},{"line_number":270,"context_line":"                hints\u003dhints)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def update_domain(self, domain_id, domain):"},{"line_number":273,"context_line":"        ret \u003d self.driver.update_domain(domain_id, domain)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fbk0%3D","line":270,"updated":"2013-09-04 20:27:50.000000000","message":"suggest combine these to remove duplication.\n\n hints \u003d hints or driver_hints.Hints()","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                hints\u003ddriver_hints.Hints())"},{"line_number":268,"context_line":"        else:"},{"line_number":269,"context_line":"            return self.driver.list_domains("},{"line_number":270,"context_line":"                hints\u003dhints)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def update_domain(self, domain_id, domain):"},{"line_number":273,"context_line":"        ret \u003d self.driver.update_domain(domain_id, domain)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb8o%3D","line":270,"updated":"2013-09-04 19:40:08.000000000","message":"unnecessary line break","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                hints\u003ddriver_hints.Hints())"},{"line_number":268,"context_line":"        else:"},{"line_number":269,"context_line":"            return self.driver.list_domains("},{"line_number":270,"context_line":"                hints\u003dhints)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def update_domain(self, domain_id, domain):"},{"line_number":273,"context_line":"        ret \u003d self.driver.update_domain(domain_id, domain)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fblo%3D","line":270,"in_reply_to":"AAAASn%2F%2Fb8o%3D","updated":"2013-09-04 22:58:56.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6e776e2425a99ee48b3190289b3ba4f8fee0014f","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                hints\u003ddriver_hints.Hints())"},{"line_number":288,"context_line":"        else:"},{"line_number":289,"context_line":"            return self.driver.list_projects("},{"line_number":290,"context_line":"                hints\u003dhints)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def list_user_projects(self, user_id, hints\u003dNone):"},{"line_number":293,"context_line":"        if hints is None:"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fbkc%3D","line":290,"updated":"2013-09-04 20:27:50.000000000","message":"same comment here, to avoid duplication.","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                hints\u003ddriver_hints.Hints())"},{"line_number":288,"context_line":"        else:"},{"line_number":289,"context_line":"            return self.driver.list_projects("},{"line_number":290,"context_line":"                hints\u003dhints)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def list_user_projects(self, user_id, hints\u003dNone):"},{"line_number":293,"context_line":"        if hints is None:"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb8g%3D","line":290,"updated":"2013-09-04 19:40:08.000000000","message":"you\u0027ve copy/pasted yourself into needing another decorator\n\n  @default_hints\n\nor just use a real list and then it\u0027s a one liner\n\n  hints \u003d hints or []","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                hints\u003ddriver_hints.Hints())"},{"line_number":288,"context_line":"        else:"},{"line_number":289,"context_line":"            return self.driver.list_projects("},{"line_number":290,"context_line":"                hints\u003dhints)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def list_user_projects(self, user_id, hints\u003dNone):"},{"line_number":293,"context_line":"        if hints is None:"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fblc%3D","line":290,"in_reply_to":"AAAASn%2F%2Fb8g%3D","updated":"2013-09-04 22:58:56.000000000","message":"nice...you da python king :-)","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6e776e2425a99ee48b3190289b3ba4f8fee0014f","unresolved":false,"context_lines":[{"line_number":373,"context_line":"        return [dict(r) for r in role_set]"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    def _get_list_limit(self):"},{"line_number":376,"context_line":"        return CONF.assignment.list_limit or CONF.list_limit"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def get_project_by_name(self, tenant_name, domain_id):"},{"line_number":379,"context_line":"        \"\"\"Get a tenant by name."}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FbkQ%3D","line":376,"updated":"2013-09-04 20:27:50.000000000","message":"list limit changes don\u0027t belong with filtering.","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6e776e2425a99ee48b3190289b3ba4f8fee0014f","unresolved":false,"context_lines":[{"line_number":504,"context_line":"        \"\"\"List domains in the system."},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"        :param hints: filter hints which the driver should"},{"line_number":507,"context_line":"                      implement if at all possible."},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        :returns: a list of domain_refs or an empty list."},{"line_number":510,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fbjs%3D","line":507,"updated":"2013-09-04 20:27:50.000000000","message":"suggest remove \"if at all possible\" from these comments.\n\nsuggest change \"implement\" to \"heed\" ? I don\u0027t think drivers implement hints.","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6e776e2425a99ee48b3190289b3ba4f8fee0014f","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        \"\"\""},{"line_number":567,"context_line":"        raise exception.NotImplemented()"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    def list_user_projects(self, user_id, hints\u003dNone):"},{"line_number":570,"context_line":"        \"\"\"List projects associated with a given user."},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"        :param user_id : the user in question"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fbjk%3D","line":569,"updated":"2013-09-04 20:27:50.000000000","message":"remove \u003dNone here? the other methods don\u0027t have hints\u003dNone.","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        raise exception.NotImplemented()"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"    def list_projects_in_domain(self, domain_id, hints):"},{"line_number":552,"context_line":"        \"\"\"List projects in the system."},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"        :param domain_id: the driver MUST only return projects"},{"line_number":555,"context_line":"                          within this domain."}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Fars%3D","line":552,"updated":"2013-09-05 00:42:46.000000000","message":"suggest change \"in the system\" to \"in the domain\"","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        raise exception.NotImplemented()"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"    def list_projects_in_domain(self, domain_id, hints):"},{"line_number":552,"context_line":"        \"\"\"List projects in the system."},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"        :param domain_id: the driver MUST only return projects"},{"line_number":555,"context_line":"                          within this domain."}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKjQ%3D","line":552,"in_reply_to":"AAAASn%2F%2Fars%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":555,"context_line":"                          within this domain."},{"line_number":556,"context_line":"        :param hints: filter hints which the driver should"},{"line_number":557,"context_line":"                      implement if at all possible."},{"line_number":558,"context_line":""},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"        :returns: a list of project_refs or an empty list."},{"line_number":561,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FarY%3D","line":558,"updated":"2013-09-05 00:42:46.000000000","message":"remove extra blank line","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":555,"context_line":"                          within this domain."},{"line_number":556,"context_line":"        :param hints: filter hints which the driver should"},{"line_number":557,"context_line":"                      implement if at all possible."},{"line_number":558,"context_line":""},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"        :returns: a list of project_refs or an empty list."},{"line_number":561,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKjU%3D","line":558,"in_reply_to":"AAAASn%2F%2FarY%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"}],"keystone/catalog/controllers.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ee3e89a0163cab31f1f9d2120aa8177cdd7e7362","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from keystone.common import controller"},{"line_number":21,"context_line":"from keystone.common import dependency"},{"line_number":22,"context_line":"from keystone.common import listdirectives"},{"line_number":23,"context_line":"from keystone import exception"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fgd0%3D","line":22,"updated":"2013-09-04 00:20:15.000000000","message":"whythehardtoreadmodulename?","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4032a8b1103488234a6686a8822d8a160d4fdd56","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from keystone.common import controller"},{"line_number":21,"context_line":"from keystone.common import dependency"},{"line_number":22,"context_line":"from keystone.common import listdirectives"},{"line_number":23,"context_line":"from keystone import exception"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FduA%3D","line":22,"in_reply_to":"AAAASn%2F%2FeyU%3D","updated":"2013-09-04 14:16:37.000000000","message":"i\u0027m not convinced that you need the module at all... the one useful method probably belongs as a class method on the base V3Controller, as different API\u0027s would implement it differently","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1702bf36903aded8134fa4d349b218c4e69301a9","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from keystone.common import controller"},{"line_number":21,"context_line":"from keystone.common import dependency"},{"line_number":22,"context_line":"from keystone.common import listdirectives"},{"line_number":23,"context_line":"from keystone import exception"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FeyU%3D","line":22,"in_reply_to":"AAAASn%2F%2Fgd0%3D","updated":"2013-09-04 10:30:50.000000000","message":"OK, agree in principle...only problem is that I have now used list_directives as the parameter name everywhere, so changing this to the logical name would be a bit painful....","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ee3e89a0163cab31f1f9d2120aa8177cdd7e7362","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def list_services(self, context, filters):"},{"line_number":146,"context_line":"        directives \u003d listdirectives.ListDirectives("},{"line_number":147,"context_line":"            query_dict\u003dcontext[\u0027query_string\u0027],"},{"line_number":148,"context_line":"            valid_filters\u003dfilters)"},{"line_number":149,"context_line":"        refs \u003d self.catalog_api.list_services()"},{"line_number":150,"context_line":"        return ServiceV3.wrap_collection(context, refs,"},{"line_number":151,"context_line":"                                         list_directives\u003ddirectives)"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fgbs%3D","line":148,"updated":"2013-09-04 00:20:15.000000000","message":"what makes these filters suddenly valid? is there a reason to have \u0027filters\u0027 outside of context?","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4032a8b1103488234a6686a8822d8a160d4fdd56","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def list_services(self, context, filters):"},{"line_number":146,"context_line":"        directives \u003d listdirectives.ListDirectives("},{"line_number":147,"context_line":"            query_dict\u003dcontext[\u0027query_string\u0027],"},{"line_number":148,"context_line":"            valid_filters\u003dfilters)"},{"line_number":149,"context_line":"        refs \u003d self.catalog_api.list_services()"},{"line_number":150,"context_line":"        return ServiceV3.wrap_collection(context, refs,"},{"line_number":151,"context_line":"                                         list_directives\u003ddirectives)"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fdtg%3D","line":148,"in_reply_to":"AAAASn%2F%2FfA4%3D","updated":"2013-09-04 14:16:37.000000000","message":"renaming it doesn\u0027t solve the problem that the prefix is unjustified","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1702bf36903aded8134fa4d349b218c4e69301a9","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def list_services(self, context, filters):"},{"line_number":146,"context_line":"        directives \u003d listdirectives.ListDirectives("},{"line_number":147,"context_line":"            query_dict\u003dcontext[\u0027query_string\u0027],"},{"line_number":148,"context_line":"            valid_filters\u003dfilters)"},{"line_number":149,"context_line":"        refs \u003d self.catalog_api.list_services()"},{"line_number":150,"context_line":"        return ServiceV3.wrap_collection(context, refs,"},{"line_number":151,"context_line":"                                         list_directives\u003ddirectives)"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FfA4%3D","line":148,"in_reply_to":"AAAASn%2F%2Fgbs%3D","updated":"2013-09-04 10:30:50.000000000","message":"so context contains the filters specified by the caller, valid_filters is meant to be the set of filters we actually support.  The word \u0027valid\u0027 is clearly creating confusion - I\u0027ll rename to something more illuminating - \u0027supported_filters\u0027?","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    @controller.filterprotected(\u0027type\u0027)"},{"line_number":145,"context_line":"    def list_services(self, context, filters):"},{"line_number":146,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":147,"context_line":"            query_dict\u003dcontext[\u0027query_string\u0027],"},{"line_number":148,"context_line":"            supported_filters\u003dfilters)"},{"line_number":149,"context_line":"        refs \u003d self.catalog_api.list_services()"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb7s%3D","line":146,"updated":"2013-09-04 19:40:08.000000000","message":"hints \u003d controller.V3Controller.build_driver_hints(context)","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6e776e2425a99ee48b3190289b3ba4f8fee0014f","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    @controller.filterprotected(\u0027type\u0027)"},{"line_number":145,"context_line":"    def list_services(self, context, filters):"},{"line_number":146,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":147,"context_line":"            query_dict\u003dcontext[\u0027query_string\u0027],"},{"line_number":148,"context_line":"            supported_filters\u003dfilters)"},{"line_number":149,"context_line":"        refs \u003d self.catalog_api.list_services()"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fbjc%3D","line":146,"in_reply_to":"AAAASn%2F%2Fb7s%3D","updated":"2013-09-04 20:27:50.000000000","message":"nice +1.","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            supported_filters\u003dfilters)"},{"line_number":149,"context_line":"        refs \u003d self.catalog_api.list_services()"},{"line_number":150,"context_line":"        return ServiceV3.wrap_collection(context, refs,"},{"line_number":151,"context_line":"                                         hints\u003dhints)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    @controller.protected()"},{"line_number":154,"context_line":"    def get_service(self, context, service_id):"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb8A%3D","line":151,"updated":"2013-09-04 19:40:08.000000000","message":"unnecessary line break","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            supported_filters\u003dfilters)"},{"line_number":149,"context_line":"        refs \u003d self.catalog_api.list_services()"},{"line_number":150,"context_line":"        return ServiceV3.wrap_collection(context, refs,"},{"line_number":151,"context_line":"                                         hints\u003dhints)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    @controller.protected()"},{"line_number":154,"context_line":"    def get_service(self, context, service_id):"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FbiU%3D","line":151,"in_reply_to":"AAAASn%2F%2Fb8A%3D","updated":"2013-09-04 22:58:56.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"}],"keystone/catalog/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":110,"context_line":"            return ref_list[:list_limit]"},{"line_number":111,"context_line":"        else:"},{"line_number":112,"context_line":"            return ref_list"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def get_catalog(self, user_id, tenant_id, metadata\u003dNone):"},{"line_number":115,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F7W8%3D","line":112,"updated":"2013-08-27 22:13:53.000000000","message":"copy-paste code should be consolidated.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":110,"context_line":"            return ref_list[:list_limit]"},{"line_number":111,"context_line":"        else:"},{"line_number":112,"context_line":"            return ref_list"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def get_catalog(self, user_id, tenant_id, metadata\u003dNone):"},{"line_number":115,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F650%3D","line":112,"in_reply_to":"AAAASn%2F%2F7W8%3D","updated":"2013-08-28 00:30:00.000000000","message":"Done","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"490f8da82a8062187ac032f2f71a98d566011152","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        except exception.NotFound:"},{"line_number":77,"context_line":"            raise exception.ServiceNotFound(service_id\u003dservice_id)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _trim_to_limit(self, ref_list):"},{"line_number":80,"context_line":"        list_limit \u003d self.driver._get_list_limit()"},{"line_number":81,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":82,"context_line":"            return ref_list[:list_limit]"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F2Aw%3D","line":79,"updated":"2013-08-28 21:46:44.000000000","message":"seem like _trim_to_limit() is implemented in multiple places. Should it belong to wrap_collection()? Or at least move it to common utils.","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"174498fe98b6d62b75608b4f4f62293388f19159","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        except exception.NotFound:"},{"line_number":77,"context_line":"            raise exception.ServiceNotFound(service_id\u003dservice_id)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _trim_to_limit(self, ref_list):"},{"line_number":80,"context_line":"        list_limit \u003d self.driver._get_list_limit()"},{"line_number":81,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":82,"context_line":"            return ref_list[:list_limit]"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F1yw%3D","line":79,"in_reply_to":"AAAASn%2F%2F2Aw%3D","updated":"2013-08-28 23:12:46.000000000","message":"Good point - moved it the the Manger super class","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"736a9b7f7713167f91e07613bd4bc471866eb353","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    def _trim_to_limit(self, ref_list):"},{"line_number":80,"context_line":"        list_limit \u003d self.driver._get_list_limit()"},{"line_number":81,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":82,"context_line":"            return ref_list[:list_limit]"},{"line_number":83,"context_line":"        else:"},{"line_number":84,"context_line":"            return ref_list"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F2RU%3D","line":82,"updated":"2013-08-28 21:05:48.000000000","message":"Recommend debug log if trimming occurs. (aid in debugging/analyzing results if needed)","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"174498fe98b6d62b75608b4f4f62293388f19159","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    def _trim_to_limit(self, ref_list):"},{"line_number":80,"context_line":"        list_limit \u003d self.driver._get_list_limit()"},{"line_number":81,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":82,"context_line":"            return ref_list[:list_limit]"},{"line_number":83,"context_line":"        else:"},{"line_number":84,"context_line":"            return ref_list"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F1y4%3D","line":82,"in_reply_to":"AAAASn%2F%2F2RU%3D","updated":"2013-08-28 23:12:46.000000000","message":"See previous comment in assignments.","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"19602cf32e82c9b0e905611d6370283a2bca1831","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def list_services(self):"},{"line_number":80,"context_line":"        ref_list \u003d self.driver.list_services()"},{"line_number":81,"context_line":"        return self._trim_to_limit(ref_list)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def create_endpoint(self, endpoint_id, endpoint_ref):"},{"line_number":84,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAASn%2F%2FuQk%3D","line":81,"updated":"2013-08-30 13:10:15.000000000","message":"decorator?\n\n  @truncate_list(\u0027catalog\u0027)","commit_id":"48535c93712fc19c5236ef074579d6c1f706ad28"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9c98c8176fd667c4a8bf48af61dcc0c318a82de5","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def list_services(self):"},{"line_number":80,"context_line":"        ref_list \u003d self.driver.list_services()"},{"line_number":81,"context_line":"        return self._trim_to_limit(ref_list)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def create_endpoint(self, endpoint_id, endpoint_ref):"},{"line_number":84,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAASn%2F%2FuE0%3D","line":81,"in_reply_to":"AAAASn%2F%2FuQk%3D","updated":"2013-08-30 13:55:25.000000000","message":"let me look at that idea","commit_id":"48535c93712fc19c5236ef074579d6c1f706ad28"}],"keystone/common/config.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"490f8da82a8062187ac032f2f71a98d566011152","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    \u0027credential\u0027: ["},{"line_number":138,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"},{"line_number":139,"context_line":"                   default\u003d(\u0027keystone.credential.backends\u0027"},{"line_number":140,"context_line":"                            \u0027.sql.Credential\u0027))],"},{"line_number":141,"context_line":"    \u0027oauth1\u0027: ["},{"line_number":142,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"},{"line_number":143,"context_line":"                   default\u003d\u0027keystone.contrib.oauth1.backends.sql.OAuth1\u0027),"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F2AY%3D","line":140,"updated":"2013-08-28 21:46:44.000000000","message":"list_limit not applicable to credential?","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"174498fe98b6d62b75608b4f4f62293388f19159","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    \u0027credential\u0027: ["},{"line_number":138,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"},{"line_number":139,"context_line":"                   default\u003d(\u0027keystone.credential.backends\u0027"},{"line_number":140,"context_line":"                            \u0027.sql.Credential\u0027))],"},{"line_number":141,"context_line":"    \u0027oauth1\u0027: ["},{"line_number":142,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"},{"line_number":143,"context_line":"                   default\u003d\u0027keystone.contrib.oauth1.backends.sql.OAuth1\u0027),"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F1ys%3D","line":140,"in_reply_to":"AAAASn%2F%2F2AY%3D","updated":"2013-08-28 23:12:46.000000000","message":"missed that one - added.","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"}],"keystone/common/controller.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"d21a5cc6d80efe761c212080005b72380ffb7e5f","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        # any filters that it supported from \u0027query_string\u0027, so we now check"},{"line_number":266,"context_line":"        # if there are any that it did not handle.  The driver will not have"},{"line_number":267,"context_line":"        # paginated or limited the output if it found there were filters it"},{"line_number":268,"context_line":"        # was unable to handle."},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        if query_string is None:"},{"line_number":271,"context_line":"            query_string \u003d context[\u0027query_string\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAASn%2F%2F%2FUk%3D","line":268,"updated":"2013-08-27 06:07:58.000000000","message":"May want to doc this somewhere, like developing.rst.","commit_id":"2fe54f29a424f2d8046e40f68dd554f5a212d6c5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a87f5048ae9242212992892fc90cd09c6cbdbdbb","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        # any filters that it supported from \u0027query_string\u0027, so we now check"},{"line_number":266,"context_line":"        # if there are any that it did not handle.  The driver will not have"},{"line_number":267,"context_line":"        # paginated or limited the output if it found there were filters it"},{"line_number":268,"context_line":"        # was unable to handle."},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        if query_string is None:"},{"line_number":271,"context_line":"            query_string \u003d context[\u0027query_string\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAASn%2F%2F%2FLc%3D","line":268,"in_reply_to":"AAAASn%2F%2F%2FUk%3D","updated":"2013-08-27 07:12:46.000000000","message":"Done","commit_id":"2fe54f29a424f2d8046e40f68dd554f5a212d6c5"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"8dbceb27da947c05eedbcb42e2cea90a2cbcdbf8","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        # FIXME(dolph, henry-nash): client needs to support pagination first,"},{"line_number":291,"context_line":"        # for now we just see if we need to limit."},{"line_number":292,"context_line":"        if CONF.list_limit and len(refs) \u003e CONF.list_limit:"},{"line_number":293,"context_line":"            return refs[:CONF.list_limit]"},{"line_number":294,"context_line":"        else:"},{"line_number":295,"context_line":"            return refs"},{"line_number":296,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAASn%2F%2F%2Fus%3D","line":293,"updated":"2013-08-27 06:24:54.000000000","message":"Out of curiosity, is there a way we notify the client that we\u0027ve eliminated some results with the list_limit?","commit_id":"2fe54f29a424f2d8046e40f68dd554f5a212d6c5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a87f5048ae9242212992892fc90cd09c6cbdbdbb","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        # FIXME(dolph, henry-nash): client needs to support pagination first,"},{"line_number":291,"context_line":"        # for now we just see if we need to limit."},{"line_number":292,"context_line":"        if CONF.list_limit and len(refs) \u003e CONF.list_limit:"},{"line_number":293,"context_line":"            return refs[:CONF.list_limit]"},{"line_number":294,"context_line":"        else:"},{"line_number":295,"context_line":"            return refs"},{"line_number":296,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAASn%2F%2F%2FMI%3D","line":293,"in_reply_to":"AAAASn%2F%2F%2Fus%3D","updated":"2013-08-27 07:12:46.000000000","message":"So there are mixed views on that.  Some systems return something like error 206 (Partial Content), which is probably the closest return code to match this scenario (although not a perfect match).  The problem is that this would probably confuse a much of existing clients for keystone who aren\u0027t expecting it.  I\u0027m open to ideas on was we could indicate this, however.","commit_id":"2fe54f29a424f2d8046e40f68dd554f5a212d6c5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        # any filters that it supported from \u0027query_string\u0027, so we now check"},{"line_number":266,"context_line":"        # if there are any that it did not handle.  The driver will not have"},{"line_number":267,"context_line":"        # paginated or limited the output if it found there were filters it"},{"line_number":268,"context_line":"        # was unable to handle."},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        if query_string is None:"},{"line_number":271,"context_line":"            query_string \u003d context[\u0027query_string\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F7WQ%3D","line":268,"updated":"2013-08-27 22:13:53.000000000","message":"remove this comment since it\u0027s a copy of 255-257.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        # any filters that it supported from \u0027query_string\u0027, so we now check"},{"line_number":266,"context_line":"        # if there are any that it did not handle.  The driver will not have"},{"line_number":267,"context_line":"        # paginated or limited the output if it found there were filters it"},{"line_number":268,"context_line":"        # was unable to handle."},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        if query_string is None:"},{"line_number":271,"context_line":"            query_string \u003d context[\u0027query_string\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F6wI%3D","line":268,"in_reply_to":"AAAASn%2F%2F7WQ%3D","updated":"2013-08-28 00:30:00.000000000","message":"Done","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":334,"context_line":"            key, value \u003d item.split(\u0027__\u0027, 1)"},{"line_number":335,"context_line":"            if value not in utils.INEXACT_FILTERS_SUPPORTED:"},{"line_number":336,"context_line":"                msg \u003d _(\u0027Unsupported inexact string filter: %s\u0027) % item"},{"line_number":337,"context_line":"                raise exception.ValidationError(msg)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"            if key in ref:"},{"line_number":340,"context_line":"                if value \u003d\u003d \u0027contains\u0027:"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F7Vg%3D","line":337,"updated":"2013-08-27 22:13:53.000000000","message":"suggest log something and just ignore the filter. This will be better for forwards/backwards compatibility.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":334,"context_line":"            key, value \u003d item.split(\u0027__\u0027, 1)"},{"line_number":335,"context_line":"            if value not in utils.INEXACT_FILTERS_SUPPORTED:"},{"line_number":336,"context_line":"                msg \u003d _(\u0027Unsupported inexact string filter: %s\u0027) % item"},{"line_number":337,"context_line":"                raise exception.ValidationError(msg)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"            if key in ref:"},{"line_number":340,"context_line":"                if value \u003d\u003d \u0027contains\u0027:"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F6x8%3D","line":337,"in_reply_to":"AAAASn%2F%2F7Vg%3D","updated":"2013-08-28 00:30:00.000000000","message":"see my comment in core sql on the same issue","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                    return ref[key].lower().endswith(item_value.lower())"},{"line_number":352,"context_line":"                else:"},{"line_number":353,"context_line":"                    msg \u003d (_(\u0027Missing code for inexact filter: %s\u0027) % item)"},{"line_number":354,"context_line":"                    LOG.debug(msg)"},{"line_number":355,"context_line":"            return False"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        if attr in query_string:"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F7VM%3D","line":354,"updated":"2013-08-27 22:13:53.000000000","message":"suggest return True to ignore the filter.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                    return ref[key].lower().endswith(item_value.lower())"},{"line_number":352,"context_line":"                else:"},{"line_number":353,"context_line":"                    msg \u003d (_(\u0027Missing code for inexact filter: %s\u0027) % item)"},{"line_number":354,"context_line":"                    LOG.debug(msg)"},{"line_number":355,"context_line":"            return False"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        if attr in query_string:"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F6xo%3D","line":354,"in_reply_to":"AAAASn%2F%2F7VM%3D","updated":"2013-08-28 00:30:00.000000000","message":"Done","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"736a9b7f7713167f91e07613bd4bc471866eb353","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        # FIXME(dolph, henry-nash): client needs to support pagination first,"},{"line_number":285,"context_line":"        # for now we just see if we need to limit."},{"line_number":286,"context_line":"        if CONF.list_limit and len(refs) \u003e CONF.list_limit:"},{"line_number":287,"context_line":"            return refs[:CONF.list_limit]"},{"line_number":288,"context_line":"        else:"},{"line_number":289,"context_line":"            return refs"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F2RE%3D","line":287,"updated":"2013-08-28 21:05:48.000000000","message":"Recommend Debug log line if limiting return.","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"174498fe98b6d62b75608b4f4f62293388f19159","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        # FIXME(dolph, henry-nash): client needs to support pagination first,"},{"line_number":285,"context_line":"        # for now we just see if we need to limit."},{"line_number":286,"context_line":"        if CONF.list_limit and len(refs) \u003e CONF.list_limit:"},{"line_number":287,"context_line":"            return refs[:CONF.list_limit]"},{"line_number":288,"context_line":"        else:"},{"line_number":289,"context_line":"            return refs"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F1xo%3D","line":287,"in_reply_to":"AAAASn%2F%2F2RE%3D","updated":"2013-08-28 23:12:46.000000000","message":"see previous comments on this topic","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"736a9b7f7713167f91e07613bd4bc471866eb353","unresolved":false,"context_lines":[{"line_number":333,"context_line":"            if key in ref:"},{"line_number":334,"context_line":"                if value \u003d\u003d \u0027contains\u0027:"},{"line_number":335,"context_line":"                    return (item_value in ref[key])"},{"line_number":336,"context_line":"                if value \u003d\u003d \u0027icontains\u0027:"},{"line_number":337,"context_line":"                    return (item_value.lower() in ref[key].lower())"},{"line_number":338,"context_line":"                elif value \u003d\u003d \u0027startswith\u0027:"},{"line_number":339,"context_line":"                    return ref[key].startswith(item_value)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F2Q4%3D","line":336,"updated":"2013-08-28 21:05:48.000000000","message":"Should this be elif (consistency, not because it changes the logic flow)?","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"174498fe98b6d62b75608b4f4f62293388f19159","unresolved":false,"context_lines":[{"line_number":333,"context_line":"            if key in ref:"},{"line_number":334,"context_line":"                if value \u003d\u003d \u0027contains\u0027:"},{"line_number":335,"context_line":"                    return (item_value in ref[key])"},{"line_number":336,"context_line":"                if value \u003d\u003d \u0027icontains\u0027:"},{"line_number":337,"context_line":"                    return (item_value.lower() in ref[key].lower())"},{"line_number":338,"context_line":"                elif value \u003d\u003d \u0027startswith\u0027:"},{"line_number":339,"context_line":"                    return ref[key].startswith(item_value)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F1xg%3D","line":336,"in_reply_to":"AAAASn%2F%2F2Q4%3D","updated":"2013-08-28 23:12:46.000000000","message":"Done","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"3e9dd0e45ba0fce02f1f4cf5545251bd2cc36ab0","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            return refs"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        page \u003d context[\u0027query_string\u0027].get(\u0027page\u0027, 1)"},{"line_number":322,"context_line":"        per_page \u003d context[\u0027query_string\u0027].get(\u0027per_page\u0027, 30)"},{"line_number":323,"context_line":"        return refs[per_page * (page - 1):per_page * page]"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2Fx3k%3D","line":322,"updated":"2013-08-29 18:00:19.000000000","message":"30 -\u003e CONF.list_limit?\n\nAlso, line 321-323 seem like unreachable code.","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d95726f9d1848137992fface585ea24422551a1f","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            return refs"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        page \u003d context[\u0027query_string\u0027].get(\u0027page\u0027, 1)"},{"line_number":322,"context_line":"        per_page \u003d context[\u0027query_string\u0027].get(\u0027per_page\u0027, 30)"},{"line_number":323,"context_line":"        return refs[per_page * (page - 1):per_page * page]"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2Fxt0%3D","line":322,"in_reply_to":"AAAASn%2F%2Fx3k%3D","updated":"2013-08-29 18:25:33.000000000","message":"It is unreachable....and it was unreachable before (so unchanged functionality).  It\u0027s the separate pagination patch that changes this.\n\nAlso, it should 30 (since this is the page size, not the maximum list size)","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4ebbb8b23a7d392c7212d03d8b1bfa226f6b5ea2","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            return refs"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        page \u003d context[\u0027query_string\u0027].get(\u0027page\u0027, 1)"},{"line_number":322,"context_line":"        per_page \u003d context[\u0027query_string\u0027].get(\u0027per_page\u0027, 30)"},{"line_number":323,"context_line":"        return refs[per_page * (page - 1):per_page * page]"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FwZI%3D","line":322,"in_reply_to":"AAAASn%2F%2FxJE%3D","updated":"2013-08-30 00:54:55.000000000","message":"Yep, agreed.","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"5231291a3d02057b7aa30cc0fea0e5de5c053f17","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            return refs"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        page \u003d context[\u0027query_string\u0027].get(\u0027page\u0027, 1)"},{"line_number":322,"context_line":"        per_page \u003d context[\u0027query_string\u0027].get(\u0027per_page\u0027, 30)"},{"line_number":323,"context_line":"        return refs[per_page * (page - 1):per_page * page]"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FxJE%3D","line":322,"in_reply_to":"AAAASn%2F%2Fxt0%3D","updated":"2013-08-29 20:50:41.000000000","message":"yeah, you\u0027re right, they are separate properties. That\u0027s why we should punt pagination to IceHouse and just do filtering for now. :)","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"3e9dd0e45ba0fce02f1f4cf5545251bd2cc36ab0","unresolved":false,"context_lines":[{"line_number":345,"context_line":"            else:"},{"line_number":346,"context_line":"                return (ref_attr \u003d\u003d val_attr)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        def _inexact_attr_match(item, item_value, ref):"},{"line_number":349,"context_line":"            \"\"\"Applies an inexact filter to a result dict."},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"            :param item: the filter in question"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2Fx2w%3D","line":348,"updated":"2013-08-29 18:00:19.000000000","message":"good stuff, but are they documented anywhere?","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d95726f9d1848137992fface585ea24422551a1f","unresolved":false,"context_lines":[{"line_number":345,"context_line":"            else:"},{"line_number":346,"context_line":"                return (ref_attr \u003d\u003d val_attr)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        def _inexact_attr_match(item, item_value, ref):"},{"line_number":349,"context_line":"            \"\"\"Applies an inexact filter to a result dict."},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"            :param item: the filter in question"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FxsY%3D","line":348,"in_reply_to":"AAAASn%2F%2Fx2w%3D","updated":"2013-08-29 18:25:33.000000000","message":"So they are disabled for Havana (but ready to turn on early in IceHouse as soon as the api-review is accepted (see: https://review.openstack.org/#/c/43900)","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"5231291a3d02057b7aa30cc0fea0e5de5c053f17","unresolved":false,"context_lines":[{"line_number":345,"context_line":"            else:"},{"line_number":346,"context_line":"                return (ref_attr \u003d\u003d val_attr)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        def _inexact_attr_match(item, item_value, ref):"},{"line_number":349,"context_line":"            \"\"\"Applies an inexact filter to a result dict."},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"            :param item: the filter in question"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FxIo%3D","line":348,"in_reply_to":"AAAASn%2F%2FxsY%3D","updated":"2013-08-29 20:50:41.000000000","message":"oic, sounds good","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        :param context: the current context, containing the original url path"},{"line_number":299,"context_line":"                        and query string"},{"line_number":300,"context_line":"        :param refs: the list of members of the collection"},{"line_number":301,"context_line":"        :param filters: list of valid keys to apply filtering to"},{"line_number":302,"context_line":"        :param query_string: modified query string that has any filters already"},{"line_number":303,"context_line":"                             handled removed. If this is not present, this"},{"line_number":304,"context_line":"                             implies no filtering has yet been done."}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fh0M%3D","line":301,"updated":"2013-09-03 20:01:14.000000000","message":"there\u0027s no filters parameter.","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        :param context: the current context, containing the original url path"},{"line_number":299,"context_line":"                        and query string"},{"line_number":300,"context_line":"        :param refs: the list of members of the collection"},{"line_number":301,"context_line":"        :param filters: list of valid keys to apply filtering to"},{"line_number":302,"context_line":"        :param query_string: modified query string that has any filters already"},{"line_number":303,"context_line":"                             handled removed. If this is not present, this"},{"line_number":304,"context_line":"                             implies no filtering has yet been done."}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhIU%3D","line":301,"in_reply_to":"AAAASn%2F%2Fh0M%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                        and query string"},{"line_number":300,"context_line":"        :param refs: the list of members of the collection"},{"line_number":301,"context_line":"        :param filters: list of valid keys to apply filtering to"},{"line_number":302,"context_line":"        :param query_string: modified query string that has any filters already"},{"line_number":303,"context_line":"                             handled removed. If this is not present, this"},{"line_number":304,"context_line":"                             implies no filtering has yet been done."},{"line_number":305,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fh0A%3D","line":302,"updated":"2013-09-03 20:01:14.000000000","message":"there\u0027s no query_string parameter","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                        and query string"},{"line_number":300,"context_line":"        :param refs: the list of members of the collection"},{"line_number":301,"context_line":"        :param filters: list of valid keys to apply filtering to"},{"line_number":302,"context_line":"        :param query_string: modified query string that has any filters already"},{"line_number":303,"context_line":"                             handled removed. If this is not present, this"},{"line_number":304,"context_line":"                             implies no filtering has yet been done."},{"line_number":305,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhIQ%3D","line":302,"in_reply_to":"AAAASn%2F%2Fh0A%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":304,"context_line":"                             implies no filtering has yet been done."},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        \"\"\""},{"line_number":307,"context_line":"        # Check if there are any filters that were not handled by the drivers."},{"line_number":308,"context_line":"        # The driver will not have paginated or limited the output if it found"},{"line_number":309,"context_line":"        # there were filters it was unable to handle."},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fhz4%3D","line":307,"updated":"2013-09-03 20:01:14.000000000","message":"change \"filters\" to \"list directives\"?","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":304,"context_line":"                             implies no filtering has yet been done."},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        \"\"\""},{"line_number":307,"context_line":"        # Check if there are any filters that were not handled by the drivers."},{"line_number":308,"context_line":"        # The driver will not have paginated or limited the output if it found"},{"line_number":309,"context_line":"        # there were filters it was unable to handle."},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhH0%3D","line":307,"in_reply_to":"AAAASn%2F%2Fhz4%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":328,"context_line":"    @classmethod"},{"line_number":329,"context_line":"    def paginate(cls, context, refs):"},{"line_number":330,"context_line":"        \"\"\"Paginates a list of references by page \u0026 per_page query strings.\"\"\""},{"line_number":331,"context_line":"        # FIXME(dolph): client needs to support pagination first,"},{"line_number":332,"context_line":"        return refs"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        page \u003d context[\u0027query_string\u0027].get(\u0027page\u0027, 1)"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fhzs%3D","line":331,"updated":"2013-09-03 20:01:14.000000000","message":"revert this change to add ,","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":328,"context_line":"    @classmethod"},{"line_number":329,"context_line":"    def paginate(cls, context, refs):"},{"line_number":330,"context_line":"        \"\"\"Paginates a list of references by page \u0026 per_page query strings.\"\"\""},{"line_number":331,"context_line":"        # FIXME(dolph): client needs to support pagination first,"},{"line_number":332,"context_line":"        return refs"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        page \u003d context[\u0027query_string\u0027].get(\u0027page\u0027, 1)"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhHo%3D","line":331,"in_reply_to":"AAAASn%2F%2Fhzs%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ee3e89a0163cab31f1f9d2120aa8177cdd7e7362","unresolved":false,"context_lines":[{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        if list_directives is None:"},{"line_number":312,"context_line":"            list_directives \u003d listdirectives.ListDirectives("},{"line_number":313,"context_line":"                query_dict\u003dcontext[\u0027query_string\u0027])"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        refs \u003d cls.filter_by_attributes(refs, list_directives)"},{"line_number":316,"context_line":"        refs \u003d cls.paginate(context, refs)"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FgdI%3D","line":313,"updated":"2013-09-04 00:20:15.000000000","message":"if you can build this here, why bother allowing the caller to provide it?","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1702bf36903aded8134fa4d349b218c4e69301a9","unresolved":false,"context_lines":[{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        if list_directives is None:"},{"line_number":312,"context_line":"            list_directives \u003d listdirectives.ListDirectives("},{"line_number":313,"context_line":"                query_dict\u003dcontext[\u0027query_string\u0027])"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        refs \u003d cls.filter_by_attributes(refs, list_directives)"},{"line_number":316,"context_line":"        refs \u003d cls.paginate(context, refs)"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fe%2F0%3D","line":313,"in_reply_to":"AAAASn%2F%2FgdI%3D","updated":"2013-09-04 10:30:50.000000000","message":"I did it this way so that controllers that are happy for this class to handle  all the filtering (as opposed to asking their driver to do it) could remain unchanged...i.e. wouldn\u0027t have to build a list_directive before calling wrap_collection.  I\u0027ve added a comment to make that clearer.  If you prefer to make all controllers build it, then let me know, and I\u0027ll modify accordingly","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ee3e89a0163cab31f1f9d2120aa8177cdd7e7362","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"            \"\"\""},{"line_number":350,"context_line":"            if type(ref_attr) is bool:"},{"line_number":351,"context_line":"                return (ref_attr \u003d\u003d utils.attr_as_boolean(val_attr))"},{"line_number":352,"context_line":"            else:"},{"line_number":353,"context_line":"                return (ref_attr \u003d\u003d val_attr)"},{"line_number":354,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fgcw%3D","line":351,"updated":"2013-09-04 00:20:15.000000000","message":"(the outer parens are unnecessary)","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1702bf36903aded8134fa4d349b218c4e69301a9","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"            \"\"\""},{"line_number":350,"context_line":"            if type(ref_attr) is bool:"},{"line_number":351,"context_line":"                return (ref_attr \u003d\u003d utils.attr_as_boolean(val_attr))"},{"line_number":352,"context_line":"            else:"},{"line_number":353,"context_line":"                return (ref_attr \u003d\u003d val_attr)"},{"line_number":354,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FfAg%3D","line":351,"in_reply_to":"AAAASn%2F%2Fgcw%3D","updated":"2013-09-04 10:30:50.000000000","message":"Done","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6e776e2425a99ee48b3190289b3ba4f8fee0014f","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                        and query string"},{"line_number":300,"context_line":"        :param refs: the list of members of the collection"},{"line_number":301,"context_line":"        :param hints: list hints, containing any relevant"},{"line_number":302,"context_line":"                                filters. Any filters satisfied already applied"},{"line_number":303,"context_line":"                                by drivers will have been marked as satisfied,"},{"line_number":304,"context_line":"                                any remaining must be applied here."},{"line_number":305,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FbjI%3D","line":302,"updated":"2013-09-04 20:27:50.000000000","message":"suggest reformat these lines so they line up with \"list\" in previous line.","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9ff8cd2b65cca16689184c9d86ed904546c6a4b6","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                        and query string"},{"line_number":300,"context_line":"        :param refs: the list of members of the collection"},{"line_number":301,"context_line":"        :param hints: list hints, containing any relevant"},{"line_number":302,"context_line":"                                filters. Any filters satisfied already applied"},{"line_number":303,"context_line":"                                by drivers will have been marked as satisfied,"},{"line_number":304,"context_line":"                                any remaining must be applied here."},{"line_number":305,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FapQ%3D","line":302,"in_reply_to":"AAAASn%2F%2FbjI%3D","updated":"2013-09-04 23:37:33.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                else:"},{"line_number":385,"context_line":"                    msg \u003d (_(\u0027Unsupported inexact filter, ignoring: %s\u0027) % key)"},{"line_number":386,"context_line":"                    LOG.debug(msg)"},{"line_number":387,"context_line":"                    return True"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"            return False"},{"line_number":390,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb7I%3D","line":387,"updated":"2013-09-04 19:40:08.000000000","message":"this is a validation error somewhere else, why is it ignored here?","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                else:"},{"line_number":385,"context_line":"                    msg \u003d (_(\u0027Unsupported inexact filter, ignoring: %s\u0027) % key)"},{"line_number":386,"context_line":"                    LOG.debug(msg)"},{"line_number":387,"context_line":"                    return True"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"            return False"},{"line_number":390,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FbhY%3D","line":387,"in_reply_to":"AAAASn%2F%2Fb7I%3D","updated":"2013-09-04 22:58:56.000000000","message":"So we raise a validation error when we build the Hints from the query string if it\u0027s an inexact filter we don\u0027t support.  If it gets through to here then either someone has added something to the Hint manually or we have a code error.  So we log it for debug, ignore the filter but don\u0027t fail the query","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e391d38c39ec85047bc19ad4b78d09aaf09fe836","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if hints is None:"},{"line_number":316,"context_line":"            hints \u003d driver_hints.Hints("},{"line_number":317,"context_line":"                query_dict\u003dcontext[\u0027query_string\u0027])"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        refs \u003d cls.filter_by_attributes(refs, hints)"},{"line_number":320,"context_line":"        refs \u003d cls.paginate(context, refs)"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2Fa9o%3D","line":317,"updated":"2013-09-04 22:25:42.000000000","message":"should be calling ControllerV3.build_driver_hints","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"020fff62981f4743262605a1c80f17e58351b394","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if hints is None:"},{"line_number":316,"context_line":"            hints \u003d driver_hints.Hints("},{"line_number":317,"context_line":"                query_dict\u003dcontext[\u0027query_string\u0027])"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        refs \u003d cls.filter_by_attributes(refs, hints)"},{"line_number":320,"context_line":"        refs \u003d cls.paginate(context, refs)"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2Faqw%3D","line":317,"in_reply_to":"AAAASn%2F%2Fa9o%3D","updated":"2013-09-04 23:32:35.000000000","message":"Done","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                        and query string"},{"line_number":300,"context_line":"        :param refs: the list of members of the collection"},{"line_number":301,"context_line":"        :param hints: list hints, containing any relevant"},{"line_number":302,"context_line":"                      filters. Any filters satisfied already applied"},{"line_number":303,"context_line":"                      by drivers will have been marked as satisfied,"},{"line_number":304,"context_line":"                      any remaining must be applied here."},{"line_number":305,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FarA%3D","line":302,"updated":"2013-09-05 00:42:46.000000000","message":"remove \"already applied\" or \"satisfied\"","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                        and query string"},{"line_number":300,"context_line":"        :param refs: the list of members of the collection"},{"line_number":301,"context_line":"        :param hints: list hints, containing any relevant"},{"line_number":302,"context_line":"                      filters. Any filters satisfied already applied"},{"line_number":303,"context_line":"                      by drivers will have been marked as satisfied,"},{"line_number":304,"context_line":"                      any remaining must be applied here."},{"line_number":305,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FUoo%3D","line":302,"in_reply_to":"AAAASn%2F%2FaYo%3D","updated":"2014-01-16 22:36:39.000000000","message":"that has now changed, so keeping with the \"mark satisfied\u0027 throughout","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                        and query string"},{"line_number":300,"context_line":"        :param refs: the list of members of the collection"},{"line_number":301,"context_line":"        :param hints: list hints, containing any relevant"},{"line_number":302,"context_line":"                      filters. Any filters satisfied already applied"},{"line_number":303,"context_line":"                      by drivers will have been marked as satisfied,"},{"line_number":304,"context_line":"                      any remaining must be applied here."},{"line_number":305,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FUpI%3D","line":302,"in_reply_to":"AAAASn%2F%2FarA%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d7db058d4f2242865f09bb3f8b34f53509511b24","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                        and query string"},{"line_number":300,"context_line":"        :param refs: the list of members of the collection"},{"line_number":301,"context_line":"        :param hints: list hints, containing any relevant"},{"line_number":302,"context_line":"                      filters. Any filters satisfied already applied"},{"line_number":303,"context_line":"                      by drivers will have been marked as satisfied,"},{"line_number":304,"context_line":"                      any remaining must be applied here."},{"line_number":305,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FaYo%3D","line":302,"in_reply_to":"AAAASn%2F%2FarA%3D","updated":"2013-09-05 01:14:35.000000000","message":"this also applies that there\u0027s some differentiation between \u0027satisfied\u0027 filters and \u0027unsatisfied\u0027 filters, when in fact the \u0027satisfied\u0027 filters have simply been removed","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        :param hints: list hints, containing any relevant"},{"line_number":302,"context_line":"                      filters. Any filters satisfied already applied"},{"line_number":303,"context_line":"                      by drivers will have been marked as satisfied,"},{"line_number":304,"context_line":"                      any remaining must be applied here."},{"line_number":305,"context_line":"        \"\"\""},{"line_number":306,"context_line":"        # Check if there are any filters in hints that were not"},{"line_number":307,"context_line":"        # handled by the drivers. The driver will not have paginated or"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Faq8%3D","line":304,"updated":"2013-09-05 00:42:46.000000000","message":"change \"must\" to \"will\"","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        :param hints: list hints, containing any relevant"},{"line_number":302,"context_line":"                      filters. Any filters satisfied already applied"},{"line_number":303,"context_line":"                      by drivers will have been marked as satisfied,"},{"line_number":304,"context_line":"                      any remaining must be applied here."},{"line_number":305,"context_line":"        \"\"\""},{"line_number":306,"context_line":"        # Check if there are any filters in hints that were not"},{"line_number":307,"context_line":"        # handled by the drivers. The driver will not have paginated or"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FUog%3D","line":304,"in_reply_to":"AAAASn%2F%2Faq8%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        # limited the output if it found there were filters it was unable to"},{"line_number":309,"context_line":"        # handle."},{"line_number":310,"context_line":"        #"},{"line_number":311,"context_line":"        # If hints is None, then this means that the controller has"},{"line_number":312,"context_line":"        # doesn\u0027t want any filtering done."},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        if hints is not None:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Faq0%3D","line":311,"updated":"2013-09-05 00:42:46.000000000","message":"remove \"has\"","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        # limited the output if it found there were filters it was unable to"},{"line_number":309,"context_line":"        # handle."},{"line_number":310,"context_line":"        #"},{"line_number":311,"context_line":"        # If hints is None, then this means that the controller has"},{"line_number":312,"context_line":"        # doesn\u0027t want any filtering done."},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        if hints is not None:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FUoY%3D","line":311,"in_reply_to":"AAAASn%2F%2Faq0%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        # handle."},{"line_number":310,"context_line":"        #"},{"line_number":311,"context_line":"        # If hints is None, then this means that the controller has"},{"line_number":312,"context_line":"        # doesn\u0027t want any filtering done."},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        if hints is not None:"},{"line_number":315,"context_line":"            refs \u003d cls.filter_by_attributes(refs, hints)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Faqo%3D","line":312,"updated":"2013-09-05 00:42:46.000000000","message":"this comment doesn\u0027t make sense.\n\nWhy isn\u0027t this comment about hints up in the docstring?","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        # handle."},{"line_number":310,"context_line":"        #"},{"line_number":311,"context_line":"        # If hints is None, then this means that the controller has"},{"line_number":312,"context_line":"        # doesn\u0027t want any filtering done."},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        if hints is not None:"},{"line_number":315,"context_line":"            refs \u003d cls.filter_by_attributes(refs, hints)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FUoc%3D","line":312,"in_reply_to":"AAAASn%2F%2Faqo%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":370,"context_line":"                ref_value \u003d ref[key]"},{"line_number":371,"context_line":"                if not filter[\u0027case_sensitive\u0027]:"},{"line_number":372,"context_line":"                    filter_value \u003d filter_value.lower()"},{"line_number":373,"context_line":"                    ref_value \u003d ref_value.lower()"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"                if comparator \u003d\u003d \u0027contains\u0027:"},{"line_number":376,"context_line":"                    return (filter_value in ref_value)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Fapo%3D","line":373,"updated":"2013-09-05 00:42:46.000000000","message":"how do you know ref_value and filter_value are strings and can be lowercased?","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d7db058d4f2242865f09bb3f8b34f53509511b24","unresolved":false,"context_lines":[{"line_number":370,"context_line":"                ref_value \u003d ref[key]"},{"line_number":371,"context_line":"                if not filter[\u0027case_sensitive\u0027]:"},{"line_number":372,"context_line":"                    filter_value \u003d filter_value.lower()"},{"line_number":373,"context_line":"                    ref_value \u003d ref_value.lower()"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"                if comparator \u003d\u003d \u0027contains\u0027:"},{"line_number":376,"context_line":"                    return (filter_value in ref_value)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FaXU%3D","line":373,"in_reply_to":"AAAASn%2F%2Fapo%3D","updated":"2013-09-05 01:14:35.000000000","message":"i suspect one of them should not be, but i can\u0027t tell which based on the variable names","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":370,"context_line":"                ref_value \u003d ref[key]"},{"line_number":371,"context_line":"                if not filter[\u0027case_sensitive\u0027]:"},{"line_number":372,"context_line":"                    filter_value \u003d filter_value.lower()"},{"line_number":373,"context_line":"                    ref_value \u003d ref_value.lower()"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"                if comparator \u003d\u003d \u0027contains\u0027:"},{"line_number":376,"context_line":"                    return (filter_value in ref_value)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKco%3D","line":373,"in_reply_to":"AAAASn%2F%2Fapo%3D","updated":"2014-01-16 22:36:39.000000000","message":"so added comment that we only support inexact filters on strings. Was that the issue, or that there are some languages for which lower() is not guaranteed to work?","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":372,"context_line":"                    filter_value \u003d filter_value.lower()"},{"line_number":373,"context_line":"                    ref_value \u003d ref_value.lower()"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"                if comparator \u003d\u003d \u0027contains\u0027:"},{"line_number":376,"context_line":"                    return (filter_value in ref_value)"},{"line_number":377,"context_line":"                elif comparator \u003d\u003d \u0027startswith\u0027:"},{"line_number":378,"context_line":"                    return ref_value.startswith(filter_value)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Fap0%3D","line":375,"updated":"2013-09-05 00:42:46.000000000","message":"suggest use a dict of comparator_name to comparator_function rather than long if / elif","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":372,"context_line":"                    filter_value \u003d filter_value.lower()"},{"line_number":373,"context_line":"                    ref_value \u003d ref_value.lower()"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"                if comparator \u003d\u003d \u0027contains\u0027:"},{"line_number":376,"context_line":"                    return (filter_value in ref_value)"},{"line_number":377,"context_line":"                elif comparator \u003d\u003d \u0027startswith\u0027:"},{"line_number":378,"context_line":"                    return ref_value.startswith(filter_value)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKfM%3D","line":375,"in_reply_to":"AAAASn%2F%2Fap0%3D","updated":"2014-01-16 22:36:39.000000000","message":"Could do…just wonder that with just three options, this is OK","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                elif comparator \u003d\u003d \u0027endswith\u0027:"},{"line_number":380,"context_line":"                    return ref_value.endswith(filter_value)"},{"line_number":381,"context_line":"                else:"},{"line_number":382,"context_line":"                    msg \u003d (_(\u0027Unsupported inexact filter, ignoring: %s\u0027) % key)"},{"line_number":383,"context_line":"                    LOG.debug(msg)"},{"line_number":384,"context_line":"                    return True"},{"line_number":385,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FapA%3D","line":382,"updated":"2013-09-05 00:42:46.000000000","message":"remove () here, also should add the comparator that was invalid.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                elif comparator \u003d\u003d \u0027endswith\u0027:"},{"line_number":380,"context_line":"                    return ref_value.endswith(filter_value)"},{"line_number":381,"context_line":"                else:"},{"line_number":382,"context_line":"                    msg \u003d (_(\u0027Unsupported inexact filter, ignoring: %s\u0027) % key)"},{"line_number":383,"context_line":"                    LOG.debug(msg)"},{"line_number":384,"context_line":"                    return True"},{"line_number":385,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FUiQ%3D","line":382,"in_reply_to":"AAAASn%2F%2FapA%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":397,"context_line":"            else:"},{"line_number":398,"context_line":"                # It might be an inexact filter"},{"line_number":399,"context_line":"                refs \u003d [r for r in refs if _inexact_attr_match("},{"line_number":400,"context_line":"                    filter, r)]"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        return refs"},{"line_number":403,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FaoE%3D","line":400,"updated":"2013-09-05 00:42:46.000000000","message":"does the ref (r) need to be flattened like at line 396?","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":429,"context_line":"                # inexact suffix added.  If it doesn\u0027t match, then that just"},{"line_number":430,"context_line":"                # means that there is no inexact filter for that key in this"},{"line_number":431,"context_line":"                # query."},{"line_number":432,"context_line":"                if key.startswith(valid_key + \u0027__\u0027):"},{"line_number":433,"context_line":"                    base_key, inexact \u003d key.split(\u0027__\u0027, 1)"},{"line_number":434,"context_line":"                    if (inexact not in"},{"line_number":435,"context_line":"                            driver_hints.INEXACT_QUERY_FILTERS_SUPPORTED):"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Fams%3D","line":432,"updated":"2013-09-05 00:42:46.000000000","message":"suggest use if not and continue so don\u0027t have to indent so much, or move the code to another function.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":429,"context_line":"                # inexact suffix added.  If it doesn\u0027t match, then that just"},{"line_number":430,"context_line":"                # means that there is no inexact filter for that key in this"},{"line_number":431,"context_line":"                # query."},{"line_number":432,"context_line":"                if key.startswith(valid_key + \u0027__\u0027):"},{"line_number":433,"context_line":"                    base_key, inexact \u003d key.split(\u0027__\u0027, 1)"},{"line_number":434,"context_line":"                    if (inexact not in"},{"line_number":435,"context_line":"                            driver_hints.INEXACT_QUERY_FILTERS_SUPPORTED):"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FUkM%3D","line":432,"in_reply_to":"AAAASn%2F%2Fams%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                    #"},{"line_number":442,"context_line":"                    # {\u0027email_contains\u0027, \u0027myISP\u0027}"},{"line_number":443,"context_line":"                    #"},{"line_number":444,"context_line":"                    # into a list directive add filter call parameters of:"},{"line_number":445,"context_line":"                    #"},{"line_number":446,"context_line":"                    # name \u003d \u0027email\u0027"},{"line_number":447,"context_line":"                    # value \u003d \u0027myISP\u0027"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Fal4%3D","line":444,"updated":"2013-09-05 00:42:46.000000000","message":"this isn\u0027t a sentence and doesn\u0027t make sense to me.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                    #"},{"line_number":442,"context_line":"                    # {\u0027email_contains\u0027, \u0027myISP\u0027}"},{"line_number":443,"context_line":"                    #"},{"line_number":444,"context_line":"                    # into a list directive add filter call parameters of:"},{"line_number":445,"context_line":"                    #"},{"line_number":446,"context_line":"                    # name \u003d \u0027email\u0027"},{"line_number":447,"context_line":"                    # value \u003d \u0027myISP\u0027"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FUkk%3D","line":444,"in_reply_to":"AAAASn%2F%2Fal4%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":359,"context_line":"                filter_value \u003d filter[\u0027value\u0027]"},{"line_number":360,"context_line":"                target_value \u003d ref[key]"},{"line_number":361,"context_line":"                if not filter[\u0027case_sensitive\u0027]:"},{"line_number":362,"context_line":"                    # We only support inexact filters on strings so"},{"line_number":363,"context_line":"                    # it\u0027s OK to use lower()"},{"line_number":364,"context_line":"                    filter_value \u003d filter_value.lower()"},{"line_number":365,"context_line":"                    target_value \u003d target_value.lower()"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B8Bw%3D","line":362,"updated":"2014-01-20 16:59:34.000000000","message":"Is this enforced somewhere or will the user get a 500 if they try to filter a numeric value with an inexact match?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":371,"context_line":"                elif comparator \u003d\u003d \u0027endswith\u0027:"},{"line_number":372,"context_line":"                    return target_value.endswith(filter_value)"},{"line_number":373,"context_line":"                else:"},{"line_number":374,"context_line":"                    msg \u003d (_(\u0027Unsupported comparator in inexact filter, \u0027"},{"line_number":375,"context_line":"                             \u0027ignoring: %s\u0027) % key)"},{"line_number":376,"context_line":"                    LOG.debug(msg)"},{"line_number":377,"context_line":"                    return True"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B8Ac%3D","line":374,"updated":"2014-01-20 16:59:34.000000000","message":"Can you remove the wrapping parens there and also % key?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":371,"context_line":"                elif comparator \u003d\u003d \u0027endswith\u0027:"},{"line_number":372,"context_line":"                    return target_value.endswith(filter_value)"},{"line_number":373,"context_line":"                else:"},{"line_number":374,"context_line":"                    msg \u003d (_(\u0027Unsupported comparator in inexact filter, \u0027"},{"line_number":375,"context_line":"                             \u0027ignoring: %s\u0027) % key)"},{"line_number":376,"context_line":"                    LOG.debug(msg)"},{"line_number":377,"context_line":"                    return True"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6bA%3D","line":374,"in_reply_to":"AAAAUH%2F%2B8Ac%3D","updated":"2014-01-20 20:30:47.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":373,"context_line":"                else:"},{"line_number":374,"context_line":"                    msg \u003d (_(\u0027Unsupported comparator in inexact filter, \u0027"},{"line_number":375,"context_line":"                             \u0027ignoring: %s\u0027) % key)"},{"line_number":376,"context_line":"                    LOG.debug(msg)"},{"line_number":377,"context_line":"                    return True"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B8AY%3D","line":376,"updated":"2014-01-20 16:59:34.000000000","message":"Rewrite as \u0027LOG.debug(msg, key)\u0027\n\nWould it be more user friendly to return a 4XX error letting the user know that they messed up the query?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":373,"context_line":"                else:"},{"line_number":374,"context_line":"                    msg \u003d (_(\u0027Unsupported comparator in inexact filter, \u0027"},{"line_number":375,"context_line":"                             \u0027ignoring: %s\u0027) % key)"},{"line_number":376,"context_line":"                    LOG.debug(msg)"},{"line_number":377,"context_line":"                    return True"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6bU%3D","line":376,"in_reply_to":"AAAAUH%2F%2B7WY%3D","updated":"2014-01-20 20:30:47.000000000","message":"I agree..","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4409319d6b576598dddd265d08aad063dc0acc28","unresolved":false,"context_lines":[{"line_number":373,"context_line":"                else:"},{"line_number":374,"context_line":"                    msg \u003d (_(\u0027Unsupported comparator in inexact filter, \u0027"},{"line_number":375,"context_line":"                             \u0027ignoring: %s\u0027) % key)"},{"line_number":376,"context_line":"                    LOG.debug(msg)"},{"line_number":377,"context_line":"                    return True"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6TI%3D","line":376,"in_reply_to":"AAAAUH%2F%2B7WY%3D","updated":"2014-01-20 20:41:20.000000000","message":"I\u0027d like to see a log so that when someone asks why their comparator it will be obvious from the log that they mistyped it.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":373,"context_line":"                else:"},{"line_number":374,"context_line":"                    msg \u003d (_(\u0027Unsupported comparator in inexact filter, \u0027"},{"line_number":375,"context_line":"                             \u0027ignoring: %s\u0027) % key)"},{"line_number":376,"context_line":"                    LOG.debug(msg)"},{"line_number":377,"context_line":"                    return True"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6bE%3D","line":376,"in_reply_to":"AAAAUH%2F%2B8AY%3D","updated":"2014-01-20 20:30:47.000000000","message":"We kind of discussed this last time - and thought that we didn\u0027t want to fail any calls if the operators were not recognised..","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"603af675bbbb8f3c1e07d5b1877a21fc52f18d3d","unresolved":false,"context_lines":[{"line_number":373,"context_line":"                else:"},{"line_number":374,"context_line":"                    msg \u003d (_(\u0027Unsupported comparator in inexact filter, \u0027"},{"line_number":375,"context_line":"                             \u0027ignoring: %s\u0027) % key)"},{"line_number":376,"context_line":"                    LOG.debug(msg)"},{"line_number":377,"context_line":"                    return True"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7WY%3D","line":376,"in_reply_to":"AAAAUH%2F%2B8AY%3D","updated":"2014-01-20 17:31:15.000000000","message":"regarding unsupported \"comparators\" ... i just assume ignore them and not log anything.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            return False"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        if not hasattr(hints, \u0027filters\u0027):"},{"line_number":382,"context_line":"            return refs"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        for filter in hints.filters():"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7%2Fo%3D","line":381,"updated":"2014-01-20 16:59:34.000000000","message":"Couldn\u0027t we just check if hints is None?  Will we ever pass a truthy value that doesn\u0027t have a filters method?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            return False"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        if not hasattr(hints, \u0027filters\u0027):"},{"line_number":382,"context_line":"            return refs"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        for filter in hints.filters():"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6ao%3D","line":381,"in_reply_to":"AAAAUH%2F%2B7%2Fo%3D","updated":"2014-01-20 20:30:47.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        return refs"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    @classmethod"},{"line_number":398,"context_line":"    def build_driver_hints(cls, context, supported_filters):"},{"line_number":399,"context_line":"        \"\"\"Build list hints based on the context query string."},{"line_number":400,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7vU%3D","line":397,"updated":"2014-01-20 16:59:34.000000000","message":"Since `cls` is not actually used should this be a staticmethod?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"28acae28b370d9fd2e09cc016d8b82f8fd5768b8","unresolved":false,"context_lines":[{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        return refs"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    @classmethod"},{"line_number":398,"context_line":"    def build_driver_hints(cls, context, supported_filters):"},{"line_number":399,"context_line":"        \"\"\"Build list hints based on the context query string."},{"line_number":400,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6Iw%3D","line":397,"in_reply_to":"AAAAUH%2F%2B6Xc%3D","updated":"2014-01-20 21:20:14.000000000","message":"So i get what you are asking.  In fact, this is how I used to have it very similar to that - see versions 36 of this patch, where I had an __init__ method in Hints that was, essentially:\n\ndef __init__(self, context\u003dNone, supported_filters\u003dNone):\n\nHowever, others objected to this - and wanted it in the controller - I think it was to keep knowledge of context within the controller class.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4409319d6b576598dddd265d08aad063dc0acc28","unresolved":false,"context_lines":[{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        return refs"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    @classmethod"},{"line_number":398,"context_line":"    def build_driver_hints(cls, context, supported_filters):"},{"line_number":399,"context_line":"        \"\"\"Build list hints based on the context query string."},{"line_number":400,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6Xc%3D","line":397,"in_reply_to":"AAAAUH%2F%2B7vU%3D","updated":"2014-01-20 20:41:20.000000000","message":"probably would best fit into Hints, since that\u0027s what it\u0027s constructing. Add a static method to Hints or a function in driver_hints:\n\n driver_hints.Hints.build_from_context(context, support_filters)","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        return refs"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    @classmethod"},{"line_number":398,"context_line":"    def build_driver_hints(cls, context, supported_filters):"},{"line_number":399,"context_line":"        \"\"\"Build list hints based on the context query string."},{"line_number":400,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6Yo%3D","line":397,"in_reply_to":"AAAAUH%2F%2B7vU%3D","updated":"2014-01-20 20:30:47.000000000","message":"so what\u0027s the advantage…we call this as, say, DomainV3.build_driver_hints()","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":417,"context_line":"                continue"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"            # Check if it is an inexact filter"},{"line_number":420,"context_line":"            for valid_key in supported_filters:"},{"line_number":421,"context_line":"                # See if this entry in query_dict matches a known key with an"},{"line_number":422,"context_line":"                # inexact suffix added.  If it doesn\u0027t match, then that just"},{"line_number":423,"context_line":"                # means that there is no inexact filter for that key in this"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B76Y%3D","line":420,"updated":"2014-01-20 16:59:34.000000000","message":"This seems inefficient because I think we alway iterate through the entire list.  Can this be converted to an \u0027in\u0027 check?  If this were a set instead of a list of cost of the check would be even less.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":417,"context_line":"                continue"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"            # Check if it is an inexact filter"},{"line_number":420,"context_line":"            for valid_key in supported_filters:"},{"line_number":421,"context_line":"                # See if this entry in query_dict matches a known key with an"},{"line_number":422,"context_line":"                # inexact suffix added.  If it doesn\u0027t match, then that just"},{"line_number":423,"context_line":"                # means that there is no inexact filter for that key in this"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6Xs%3D","line":420,"in_reply_to":"AAAAUH%2F%2B76Y%3D","updated":"2014-01-20 20:30:47.000000000","message":"I\u0027d be OK to come back in and look at the efficiency of this if we think it will be a problem…..typically the list of supported filters is very small.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":425,"context_line":"                if not key.startswith(valid_key + \u0027__\u0027):"},{"line_number":426,"context_line":"                    continue"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"                base_key, inexact \u003d key.split(\u0027__\u0027, 1)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"                # We map the query-style inexact of, for example:"},{"line_number":431,"context_line":"                #"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B78M%3D","line":428,"updated":"2014-01-20 16:59:34.000000000","message":"If you rename \u0027inexact\u0027 here to \u0027comparator\u0027 it will simplify the rest of this method...","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":425,"context_line":"                if not key.startswith(valid_key + \u0027__\u0027):"},{"line_number":426,"context_line":"                    continue"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"                base_key, inexact \u003d key.split(\u0027__\u0027, 1)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"                # We map the query-style inexact of, for example:"},{"line_number":431,"context_line":"                #"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6YE%3D","line":428,"in_reply_to":"AAAAUH%2F%2B78M%3D","updated":"2014-01-20 20:30:47.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                # case_sensitive \u003d True"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"                case_sensitive \u003d True"},{"line_number":442,"context_line":"                comparator \u003d inexact"},{"line_number":443,"context_line":"                if inexact.startswith(\u0027i\u0027):"},{"line_number":444,"context_line":"                    case_sensitive \u003d False"},{"line_number":445,"context_line":"                    comparator \u003d inexact[1:]"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B770%3D","line":442,"updated":"2014-01-20 16:59:34.000000000","message":"This can be removed if you do the above.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                # case_sensitive \u003d True"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"                case_sensitive \u003d True"},{"line_number":442,"context_line":"                comparator \u003d inexact"},{"line_number":443,"context_line":"                if inexact.startswith(\u0027i\u0027):"},{"line_number":444,"context_line":"                    case_sensitive \u003d False"},{"line_number":445,"context_line":"                    comparator \u003d inexact[1:]"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6YI%3D","line":442,"in_reply_to":"AAAAUH%2F%2B770%3D","updated":"2014-01-20 20:30:47.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"}],"keystone/common/driver_hints.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"186ce2b0af1897f7d4648937642c769c2879351a","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    \"\"\""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def __init__(self, query_dict\u003dNone, supported_filters\u003dNone):"},{"line_number":56,"context_line":"        \"\"\"Initialize the hints, optionally filling with query."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        :param query_dict: a controller style dict of queries of the form"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FcIU%3D","line":55,"updated":"2013-09-04 19:05:54.000000000","message":"this bit is still wrong -- the functionality of __init__ here belongs in ControllerV3. you\u0027re passing this object to the driver!","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"186ce2b0af1897f7d4648937642c769c2879351a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        # a paginators dict."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def add_filter(self, name, value, comparator\u003d\u0027equals\u0027,"},{"line_number":114,"context_line":"                   case_sensitive\u003dFalse):"},{"line_number":115,"context_line":"        self.append({\u0027name\u0027: name, \u0027value\u0027: value, \u0027comparator\u0027: comparator,"},{"line_number":116,"context_line":"                     \u0027case_sensitive\u0027: case_sensitive, \u0027type\u0027: \u0027filter\u0027})"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FcLw%3D","line":114,"updated":"2013-09-04 19:05:54.000000000","message":"conflicts with comparator\u003d\u0027equals\u0027","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        # a paginators dict."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def add_filter(self, name, value, comparator\u003d\u0027equals\u0027,"},{"line_number":114,"context_line":"                   case_sensitive\u003dFalse):"},{"line_number":115,"context_line":"        self.append({\u0027name\u0027: name, \u0027value\u0027: value, \u0027comparator\u0027: comparator,"},{"line_number":116,"context_line":"                     \u0027case_sensitive\u0027: case_sensitive, \u0027type\u0027: \u0027filter\u0027})"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FbfE%3D","line":114,"in_reply_to":"AAAASn%2F%2FcLw%3D","updated":"2013-09-04 22:58:56.000000000","message":"not sure I understand....","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"186ce2b0af1897f7d4648937642c769c2879351a","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        type: will always be \u0027filter\u0027"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        \"\"\""},{"line_number":132,"context_line":"        return [x for x in self if x[\u0027type\u0027] \u003d\u003d \u0027filter\u0027]"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def get_exact_filter_by_name(self, name):"},{"line_number":135,"context_line":"        \"\"\"Return a filter key and value if exact filter exists for name.\"\"\""}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FcKw%3D","line":132,"updated":"2013-09-04 19:05:54.000000000","message":"do you really mean to build a new list? i suspect this should be a generator but then your \u0027mark_filter_satisfied()\u0027 will break things as-is","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"186ce2b0af1897f7d4648937642c769c2879351a","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def get_exact_filter_by_name(self, name):"},{"line_number":135,"context_line":"        \"\"\"Return a filter key and value if exact filter exists for name.\"\"\""},{"line_number":136,"context_line":"        for filter in self.filters():"},{"line_number":137,"context_line":"            if filter[\u0027name\u0027] \u003d\u003d name and filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027:"},{"line_number":138,"context_line":"                return filter"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FcJ4%3D","line":136,"updated":"2013-09-04 19:05:54.000000000","message":"this method contains two for-loops for not much benefit?","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def get_exact_filter_by_name(self, name):"},{"line_number":135,"context_line":"        \"\"\"Return a filter key and value if exact filter exists for name.\"\"\""},{"line_number":136,"context_line":"        for filter in self.filters():"},{"line_number":137,"context_line":"            if filter[\u0027name\u0027] \u003d\u003d name and filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027:"},{"line_number":138,"context_line":"                return filter"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fbgw%3D","line":136,"in_reply_to":"AAAASn%2F%2FcJ4%3D","updated":"2013-09-04 22:58:56.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"186ce2b0af1897f7d4648937642c769c2879351a","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                return filter"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def mark_filter_satisfied(self, filter):"},{"line_number":141,"context_line":"        self.remove(filter)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb9s%3D","line":141,"updated":"2013-09-04 19:05:54.000000000","message":"why not initialize every hint with satisfied\u003dFalse and just set it to True?\n\ni\u0027m still lost on what a driver is supposed to do if it can only partially satisfy a hint (my example earlier was contrived and i guess your response didn\u0027t consider custom drivers or any evolution to \u0027hints\u0027)","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                return filter"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def mark_filter_satisfied(self, filter):"},{"line_number":141,"context_line":"        self.remove(filter)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fbd0%3D","line":141,"in_reply_to":"AAAASn%2F%2Fb9s%3D","updated":"2013-09-04 22:58:56.000000000","message":"So could do that, maybe existing functionality is Ok as start?  Since it is contained within this class","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"24c6e097b6aee43a0d08525100c28be07fe2e5bd","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    \"\"\""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def __init__(self, query_dict\u003dNone, supported_filters\u003dNone):"},{"line_number":56,"context_line":"        \"\"\"Initialize the hints, optionally filling with query."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        :param query_dict: a controller style dict of queries of the form"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2Fa%2FY%3D","line":55,"updated":"2013-09-04 22:15:53.000000000","message":"duped in https://review.openstack.org/#/c/43257/36/keystone/common/controller.py","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"020fff62981f4743262605a1c80f17e58351b394","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    \"\"\""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def __init__(self, query_dict\u003dNone, supported_filters\u003dNone):"},{"line_number":56,"context_line":"        \"\"\"Initialize the hints, optionally filling with query."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        :param query_dict: a controller style dict of queries of the form"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2Faqs%3D","line":55,"in_reply_to":"AAAASn%2F%2Fa%2FY%3D","updated":"2013-09-04 23:32:35.000000000","message":"Done","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":16,"context_line":"# under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"# TODO(henry-nash) Include the supported inexact filters in this array to"},{"line_number":20,"context_line":"# trigger support in the code, once the appropriate api reviews are complete"},{"line_number":21,"context_line":"# for IceHouse.  Inexact filters (as part of the query statement), currently"},{"line_number":22,"context_line":"# planned for support are:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Fak8%3D","line":19,"updated":"2013-09-05 00:42:46.000000000","message":"add : after TODO(henry-nash) to match the normal format.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":16,"context_line":"# under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"# TODO(henry-nash) Include the supported inexact filters in this array to"},{"line_number":20,"context_line":"# trigger support in the code, once the appropriate api reviews are complete"},{"line_number":21,"context_line":"# for IceHouse.  Inexact filters (as part of the query statement), currently"},{"line_number":22,"context_line":"# planned for support are:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FXJA%3D","line":19,"in_reply_to":"AAAASn%2F%2Fak8%3D","updated":"2014-01-16 22:36:39.000000000","message":"This whole paragraph has been removed, since we support inexact filters in IceHouse","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"25c7a7efd07c3bdbb8960b0992ea2e351db25734","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.append({\u0027name\u0027: name, \u0027value\u0027: value, \u0027comparator\u0027: comparator,"},{"line_number":50,"context_line":"                     \u0027case_sensitive\u0027: case_sensitive, \u0027type\u0027: \u0027filter\u0027})"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def filters(self):"},{"line_number":53,"context_line":"        \"\"\"Iterate over all unsatisfied filters."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        Each filter terms consist of:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FaeQ%3D","line":52,"updated":"2013-09-05 00:38:20.000000000","message":"Likely this should become an @property in the future.  (you only check hasattr in the code referencing it in sql.core)","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.append({\u0027name\u0027: name, \u0027value\u0027: value, \u0027comparator\u0027: comparator,"},{"line_number":50,"context_line":"                     \u0027case_sensitive\u0027: case_sensitive, \u0027type\u0027: \u0027filter\u0027})"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def filters(self):"},{"line_number":53,"context_line":"        \"\"\"Iterate over all unsatisfied filters."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        Each filter terms consist of:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FXI8%3D","line":52,"in_reply_to":"AAAASn%2F%2FaeQ%3D","updated":"2014-01-16 22:36:39.000000000","message":"Maybe...","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def filters(self):"},{"line_number":53,"context_line":"        \"\"\"Iterate over all unsatisfied filters."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        Each filter terms consist of:"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        name: the name of the attribute being matched"},{"line_number":58,"context_line":"        value: the value against which it is being matched"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Faj4%3D","line":55,"updated":"2013-09-05 00:42:46.000000000","message":"should be \"term consists of\" ?","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def filters(self):"},{"line_number":53,"context_line":"        \"\"\"Iterate over all unsatisfied filters."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        Each filter terms consist of:"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        name: the name of the attribute being matched"},{"line_number":58,"context_line":"        value: the value against which it is being matched"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FXIg%3D","line":55,"in_reply_to":"AAAASn%2F%2Faj4%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        name: the name of the attribute being matched"},{"line_number":58,"context_line":"        value: the value against which it is being matched"},{"line_number":59,"context_line":"        comapartor: the operation, currently only \u0027equals\u0027 is supported,"},{"line_number":60,"context_line":"                    although see INEXACT_FILTERS_SUPPORTED at start of"},{"line_number":61,"context_line":"                    file for future plans."},{"line_number":62,"context_line":"        case_sensitive: whether any comparison should take account of case"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Fajw%3D","line":59,"updated":"2013-09-05 00:42:46.000000000","message":"change \u0027comapartor\u0027 to \u0027comparator\"","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        name: the name of the attribute being matched"},{"line_number":58,"context_line":"        value: the value against which it is being matched"},{"line_number":59,"context_line":"        comapartor: the operation, currently only \u0027equals\u0027 is supported,"},{"line_number":60,"context_line":"                    although see INEXACT_FILTERS_SUPPORTED at start of"},{"line_number":61,"context_line":"                    file for future plans."},{"line_number":62,"context_line":"        case_sensitive: whether any comparison should take account of case"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FXIc%3D","line":59,"in_reply_to":"AAAASn%2F%2Fajw%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        \"\"\""},{"line_number":66,"context_line":"        return [x for x in self if x[\u0027type\u0027] \u003d\u003d \u0027filter\u0027]"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def get_exact_filter_by_name(self, name):"},{"line_number":69,"context_line":"        \"\"\"Return a filter key and value if exact filter exists for name.\"\"\""},{"line_number":70,"context_line":"        for entry in self:"},{"line_number":71,"context_line":"            if (entry[\u0027type\u0027] \u003d\u003d \u0027filter\u0027 and entry[\u0027name\u0027] \u003d\u003d name and"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FajI%3D","line":68,"updated":"2013-09-05 00:42:46.000000000","message":"I don\u0027t see anyplace this function is used.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        \"\"\""},{"line_number":66,"context_line":"        return [x for x in self if x[\u0027type\u0027] \u003d\u003d \u0027filter\u0027]"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def get_exact_filter_by_name(self, name):"},{"line_number":69,"context_line":"        \"\"\"Return a filter key and value if exact filter exists for name.\"\"\""},{"line_number":70,"context_line":"        for entry in self:"},{"line_number":71,"context_line":"            if (entry[\u0027type\u0027] \u003d\u003d \u0027filter\u0027 and entry[\u0027name\u0027] \u003d\u003d name and"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKYE%3D","line":68,"in_reply_to":"AAAASn%2F%2FajI%3D","updated":"2014-01-16 22:36:39.000000000","message":"used for testing the implementation…is there a better way of doing this?","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d7db058d4f2242865f09bb3f8b34f53509511b24","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                return entry"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def mark_filter_satisfied(self, filter):"},{"line_number":76,"context_line":"        self.remove(filter)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FaUk%3D","line":76,"updated":"2013-09-05 01:14:35.000000000","message":"a one line helper isn\u0027t very helpful","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                return entry"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def mark_filter_satisfied(self, filter):"},{"line_number":76,"context_line":"        self.remove(filter)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FXIo%3D","line":76,"in_reply_to":"AAAASn%2F%2FaUk%3D","updated":"2014-01-16 22:36:39.000000000","message":"nope.  It\u0027s dead, jim","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    return filters."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    \"\"\""},{"line_number":36,"context_line":"    def add_filter(self, name, value, comparator\u003d\u0027equals\u0027,"},{"line_number":37,"context_line":"                   case_sensitive\u003dFalse):"},{"line_number":38,"context_line":"        self.append({\u0027name\u0027: name, \u0027value\u0027: value, \u0027comparator\u0027: comparator,"},{"line_number":39,"context_line":"                     \u0027case_sensitive\u0027: case_sensitive, \u0027type\u0027: \u0027filter\u0027})"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B72Y%3D","line":36,"updated":"2014-01-20 16:59:34.000000000","message":"This could probably be in another patch, but it would be nice to see some constants defined for type and comparator so that we  don\u0027t have to use the strings everywhere.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"28acae28b370d9fd2e09cc016d8b82f8fd5768b8","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    return filters."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    \"\"\""},{"line_number":36,"context_line":"    def add_filter(self, name, value, comparator\u003d\u0027equals\u0027,"},{"line_number":37,"context_line":"                   case_sensitive\u003dFalse):"},{"line_number":38,"context_line":"        self.append({\u0027name\u0027: name, \u0027value\u0027: value, \u0027comparator\u0027: comparator,"},{"line_number":39,"context_line":"                     \u0027case_sensitive\u0027: case_sensitive, \u0027type\u0027: \u0027filter\u0027})"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6II%3D","line":36,"in_reply_to":"AAAAUH%2F%2B6S0%3D","updated":"2014-01-20 21:20:14.000000000","message":"Ok, I get the idea.  Since we are close to the deadline, perhaps I could indeed make this a separate (post I2) patch?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4409319d6b576598dddd265d08aad063dc0acc28","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    return filters."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    \"\"\""},{"line_number":36,"context_line":"    def add_filter(self, name, value, comparator\u003d\u0027equals\u0027,"},{"line_number":37,"context_line":"                   case_sensitive\u003dFalse):"},{"line_number":38,"context_line":"        self.append({\u0027name\u0027: name, \u0027value\u0027: value, \u0027comparator\u0027: comparator,"},{"line_number":39,"context_line":"                     \u0027case_sensitive\u0027: case_sensitive, \u0027type\u0027: \u0027filter\u0027})"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6S0%3D","line":36,"in_reply_to":"AAAAUH%2F%2B6zw%3D","updated":"2014-01-20 20:41:20.000000000","message":"it is entirely pythonic.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    return filters."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    \"\"\""},{"line_number":36,"context_line":"    def add_filter(self, name, value, comparator\u003d\u0027equals\u0027,"},{"line_number":37,"context_line":"                   case_sensitive\u003dFalse):"},{"line_number":38,"context_line":"        self.append({\u0027name\u0027: name, \u0027value\u0027: value, \u0027comparator\u0027: comparator,"},{"line_number":39,"context_line":"                     \u0027case_sensitive\u0027: case_sensitive, \u0027type\u0027: \u0027filter\u0027})"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6zw%3D","line":36,"in_reply_to":"AAAAUH%2F%2B72Y%3D","updated":"2014-01-20 20:30:47.000000000","message":"I\u0027m open to that….but is that very pythonic?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        type: will always be \u0027filter\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        return [x for x in self if x[\u0027type\u0027] \u003d\u003d \u0027filter\u0027]"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def get_exact_filter_by_name(self, name):"},{"line_number":57,"context_line":"        \"\"\"Return a filter key and value if exact filter exists for name.\"\"\""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B70s%3D","line":54,"updated":"2014-01-20 16:59:34.000000000","message":"Do you have plans to store other types of hints in this list?  This function forces us to look over the list twice everytime `hints.filters()` is called.  Once to evaluate the list comprehension and a second time to loop over the result and do something with each one.\n\nI would rather see a filters list that we don\u0027t have to filter.  Or if we really need this shared list structure we can return a generator instead of a list comprehension to limit the looping.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        type: will always be \u0027filter\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        return [x for x in self if x[\u0027type\u0027] \u003d\u003d \u0027filter\u0027]"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def get_exact_filter_by_name(self, name):"},{"line_number":57,"context_line":"        \"\"\"Return a filter key and value if exact filter exists for name.\"\"\""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6y4%3D","line":54,"in_reply_to":"AAAAUH%2F%2B70s%3D","updated":"2014-01-20 20:30:47.000000000","message":"Yes we do, see the patch for list limiting (https://review.openstack.org/#/c/44836/18/keystone/common/driver_hints.py) that is dependant on this one.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"}],"keystone/common/listdirectives.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"968a592b535a0399016628914a3d3007f7f50a1e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        self.filters \u003d {}"},{"line_number":59,"context_line":"        self.paginators \u003d {}"},{"line_number":60,"context_line":"        self.endoflist \u003d False"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        for key in query_dict:"},{"line_number":63,"context_line":"            if valid_filters is None or key in valid_filters:"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAASn%2F%2FiBM%3D","line":60,"updated":"2013-09-03 18:59:41.000000000","message":"self.query_dict \u003d query_dict\n\nI need the original query parameters so I can support filtering extensions.","commit_id":"eadf80068d56b909bec4980b57ee433b17fd6465"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import uuid"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone import exception"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# TODO(henry-nash) Include the supported inexact filters in this array to"},{"line_number":22,"context_line":"# trigger support in the code, once the appropriate api reviews are complete"},{"line_number":23,"context_line":"# for IceHouse.  Inexact filters currently planned for support are:"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fhyo%3D","line":20,"updated":"2013-09-03 20:01:14.000000000","message":"add another blank line here.","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import uuid"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone import exception"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# TODO(henry-nash) Include the supported inexact filters in this array to"},{"line_number":22,"context_line":"# trigger support in the code, once the appropriate api reviews are complete"},{"line_number":23,"context_line":"# for IceHouse.  Inexact filters currently planned for support are:"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhG8%3D","line":20,"in_reply_to":"AAAASn%2F%2Fhyo%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    direction as to what filtering and pagination actions are being requested."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    It is optional for a driver to action some or all of the list directives,"},{"line_number":36,"context_line":"    but any filters that is does satisfy must be marked as such by calling"},{"line_number":37,"context_line":"    markfiltersatisfied()."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    A ListDirective object can be instantiated empty and have filter and"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fhwc%3D","line":36,"updated":"2013-09-03 20:01:14.000000000","message":"change \"that is\" to \"that it\"","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    direction as to what filtering and pagination actions are being requested."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    It is optional for a driver to action some or all of the list directives,"},{"line_number":36,"context_line":"    but any filters that is does satisfy must be marked as such by calling"},{"line_number":37,"context_line":"    markfiltersatisfied()."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    A ListDirective object can be instantiated empty and have filter and"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhG0%3D","line":36,"in_reply_to":"AAAASn%2F%2Fhwc%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        self.filters \u003d {}"},{"line_number":59,"context_line":"        self.paginators \u003d {}"},{"line_number":60,"context_line":"        self.endoflist \u003d False"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        for key in query_dict:"},{"line_number":63,"context_line":"            if valid_filters is None or key in valid_filters:"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fhvc%3D","line":60,"updated":"2013-09-03 20:01:14.000000000","message":"pep 8 : \"Use one leading underscore only for non-public methods and instance variables.\"\n\nsuggest change to _end_of_list.","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        self.filters \u003d {}"},{"line_number":59,"context_line":"        self.paginators \u003d {}"},{"line_number":60,"context_line":"        self.endoflist \u003d False"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        for key in query_dict:"},{"line_number":63,"context_line":"            if valid_filters is None or key in valid_filters:"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhGI%3D","line":60,"in_reply_to":"AAAASn%2F%2Fhvc%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                continue"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"            # Check if it is an inexact filter"},{"line_number":68,"context_line":"            if valid_filters:"},{"line_number":69,"context_line":"                for valid_key in valid_filters:"},{"line_number":70,"context_line":"                    if key.startswith(valid_key + \u0027__\u0027):"},{"line_number":71,"context_line":"                        base_key, inexact \u003d key.split(\u0027__\u0027, 1)"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fhug%3D","line":68,"updated":"2013-09-03 20:01:14.000000000","message":"suggest do \"if not valid_filters: continue\" then don\u0027t have to indent so much.","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                continue"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"            # Check if it is an inexact filter"},{"line_number":68,"context_line":"            if valid_filters:"},{"line_number":69,"context_line":"                for valid_key in valid_filters:"},{"line_number":70,"context_line":"                    if key.startswith(valid_key + \u0027__\u0027):"},{"line_number":71,"context_line":"                        base_key, inexact \u003d key.split(\u0027__\u0027, 1)"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhGE%3D","line":68,"in_reply_to":"AAAASn%2F%2Fhug%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                            comparator \u003d inexact[1:]"},{"line_number":93,"context_line":"                        self.addfilter(base_key, query_dict[key],"},{"line_number":94,"context_line":"                                       comparator\u003dcomparator,"},{"line_number":95,"context_line":"                                       casesensitive\u003dcasesensitive)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"            # TODO(henry-nash) Check for any pagination directives in the"},{"line_number":98,"context_line":"            # query sting and add those in too"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhvA%3D","line":95,"updated":"2013-09-03 20:01:14.000000000","message":"why no else leg? add a comment.","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                            comparator \u003d inexact[1:]"},{"line_number":93,"context_line":"                        self.addfilter(base_key, query_dict[key],"},{"line_number":94,"context_line":"                                       comparator\u003dcomparator,"},{"line_number":95,"context_line":"                                       casesensitive\u003dcasesensitive)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"            # TODO(henry-nash) Check for any pagination directives in the"},{"line_number":98,"context_line":"            # query sting and add those in too"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fg7c%3D","line":95,"in_reply_to":"AAAASn%2F%2FhvA%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            # TODO(henry-nash) Check for any pagination directives in the"},{"line_number":98,"context_line":"            # query sting and add those in too"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def addfilter(self, name, value, comparator\u003d\u0027equals\u0027, casesensitive\u003dFalse):"},{"line_number":101,"context_line":"        new_filter \u003d {\u0027name\u0027: name, \u0027value\u0027: value, \u0027comparator\u0027: comparator,"},{"line_number":102,"context_line":"                      \u0027casesensitive\u0027: casesensitive}"},{"line_number":103,"context_line":"        self.filters[uuid.uuid4().hex] \u003d new_filter"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fhxw%3D","line":100,"updated":"2013-09-03 20:01:14.000000000","message":"use pep8 for method naming, see http://www.python.org/dev/peps/pep-0008/#method-names-and-instance-variables\n\nrename addfilter to add_filter.","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            # TODO(henry-nash) Check for any pagination directives in the"},{"line_number":98,"context_line":"            # query sting and add those in too"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def addfilter(self, name, value, comparator\u003d\u0027equals\u0027, casesensitive\u003dFalse):"},{"line_number":101,"context_line":"        new_filter \u003d {\u0027name\u0027: name, \u0027value\u0027: value, \u0027comparator\u0027: comparator,"},{"line_number":102,"context_line":"                      \u0027casesensitive\u0027: casesensitive}"},{"line_number":103,"context_line":"        self.filters[uuid.uuid4().hex] \u003d new_filter"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhE0%3D","line":100,"in_reply_to":"AAAASn%2F%2Fhxw%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                      \u0027casesensitive\u0027: casesensitive}"},{"line_number":103,"context_line":"        self.filters[uuid.uuid4().hex] \u003d new_filter"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def addpageindex(self, value):"},{"line_number":106,"context_line":"        self.paginators[\u0027page\u0027] \u003d value"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def addpagesize(self, value):"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fhxo%3D","line":105,"updated":"2013-09-03 20:01:14.000000000","message":"rename to add_page_index","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                      \u0027casesensitive\u0027: casesensitive}"},{"line_number":103,"context_line":"        self.filters[uuid.uuid4().hex] \u003d new_filter"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def addpageindex(self, value):"},{"line_number":106,"context_line":"        self.paginators[\u0027page\u0027] \u003d value"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def addpagesize(self, value):"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhEw%3D","line":105,"in_reply_to":"AAAASn%2F%2Fhxo%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    def addpageindex(self, value):"},{"line_number":106,"context_line":"        self.paginators[\u0027page\u0027] \u003d value"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def addpagesize(self, value):"},{"line_number":109,"context_line":"        self.paginators[\u0027pagesize\u0027] \u003d value"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def filteritems(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fhxk%3D","line":108,"updated":"2013-09-03 20:01:14.000000000","message":"rename to add_page_size","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    def addpageindex(self, value):"},{"line_number":106,"context_line":"        self.paginators[\u0027page\u0027] \u003d value"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def addpagesize(self, value):"},{"line_number":109,"context_line":"        self.paginators[\u0027pagesize\u0027] \u003d value"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def filteritems(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fg8A%3D","line":108,"in_reply_to":"AAAASn%2F%2Fhxk%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def addpagesize(self, value):"},{"line_number":109,"context_line":"        self.paginators[\u0027pagesize\u0027] \u003d value"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def filteritems(self):"},{"line_number":112,"context_line":"        \"\"\"Iterate over all unsatisfied filters.\"\"\""},{"line_number":113,"context_line":"        return self.filters.items()"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fhxc%3D","line":111,"updated":"2013-09-03 20:01:14.000000000","message":"rename to filter_items","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def addpagesize(self, value):"},{"line_number":109,"context_line":"        self.paginators[\u0027pagesize\u0027] \u003d value"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def filteritems(self):"},{"line_number":112,"context_line":"        \"\"\"Iterate over all unsatisfied filters.\"\"\""},{"line_number":113,"context_line":"        return self.filters.items()"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fg70%3D","line":111,"in_reply_to":"AAAASn%2F%2Fhxc%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        \"\"\"Iterate over all unsatisfied filters.\"\"\""},{"line_number":113,"context_line":"        return self.filters.items()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def paginatoritems(self):"},{"line_number":116,"context_line":"        return self.paginators.items()"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def getexactfilterbyname(self, name):"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhxU%3D","line":115,"updated":"2013-09-03 20:01:14.000000000","message":"rename to paginator_items","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        \"\"\"Iterate over all unsatisfied filters.\"\"\""},{"line_number":113,"context_line":"        return self.filters.items()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def paginatoritems(self):"},{"line_number":116,"context_line":"        return self.paginators.items()"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def getexactfilterbyname(self, name):"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fg7w%3D","line":115,"in_reply_to":"AAAASn%2F%2FhxU%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    def paginatoritems(self):"},{"line_number":116,"context_line":"        return self.paginators.items()"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def getexactfilterbyname(self, name):"},{"line_number":119,"context_line":"        \"\"\"Return a filter key and value if exact filter exists for name.\"\"\""},{"line_number":120,"context_line":"        for fkey, filter in self.filteritems():"},{"line_number":121,"context_line":"            if filter[\u0027name\u0027] \u003d\u003d name and filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027:"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhxM%3D","line":118,"updated":"2013-09-03 20:01:14.000000000","message":"rename to get_exact_filter_by_name","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    def paginatoritems(self):"},{"line_number":116,"context_line":"        return self.paginators.items()"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def getexactfilterbyname(self, name):"},{"line_number":119,"context_line":"        \"\"\"Return a filter key and value if exact filter exists for name.\"\"\""},{"line_number":120,"context_line":"        for fkey, filter in self.filteritems():"},{"line_number":121,"context_line":"            if filter[\u0027name\u0027] \u003d\u003d name and filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027:"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fg7s%3D","line":118,"in_reply_to":"AAAASn%2F%2FhxM%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                return (fkey, filter)"},{"line_number":123,"context_line":"        return (None, None)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def markfiltersatisfied(self, id):"},{"line_number":126,"context_line":"        self.filters.pop(id, None)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def markendoflist(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhxI%3D","line":125,"updated":"2013-09-03 20:01:14.000000000","message":"rename mark_filter_satisifed","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                return (fkey, filter)"},{"line_number":123,"context_line":"        return (None, None)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def markfiltersatisfied(self, id):"},{"line_number":126,"context_line":"        self.filters.pop(id, None)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def markendoflist(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fg7o%3D","line":125,"in_reply_to":"AAAASn%2F%2FhxI%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    def markfiltersatisfied(self, id):"},{"line_number":126,"context_line":"        self.filters.pop(id, None)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def markendoflist(self):"},{"line_number":129,"context_line":"        self.endoflist \u003d True"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def isendoflist(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhxE%3D","line":128,"updated":"2013-09-03 20:01:14.000000000","message":"rename to mark_end_of_list","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    def markfiltersatisfied(self, id):"},{"line_number":126,"context_line":"        self.filters.pop(id, None)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def markendoflist(self):"},{"line_number":129,"context_line":"        self.endoflist \u003d True"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def isendoflist(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fg7k%3D","line":128,"in_reply_to":"AAAASn%2F%2FhxE%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    def markendoflist(self):"},{"line_number":129,"context_line":"        self.endoflist \u003d True"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def isendoflist(self):"},{"line_number":132,"context_line":"        return self.endoflist"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhxA%3D","line":131,"updated":"2013-09-03 20:01:14.000000000","message":"rename to is_end_of_list","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    def markendoflist(self):"},{"line_number":129,"context_line":"        self.endoflist \u003d True"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def isendoflist(self):"},{"line_number":132,"context_line":"        return self.endoflist"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fg7g%3D","line":131,"in_reply_to":"AAAASn%2F%2FhxA%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"84765faa9a6a61af6c7c6c745bf4a4719d7a672a","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# for IceHouse.  Inexact filters currently planned for support are:"},{"line_number":25,"context_line":"# \u0027contains\u0027, \u0027icontains\u0027, \u0027startswith\u0027, \u0027istartswith\u0027, \u0027endswith\u0027, \u0027iendswith\u0027"},{"line_number":26,"context_line":"INEXACT_FILTERS_SUPPORTED \u003d []"},{"line_number":27,"context_line":"INEXACT_QUERY_FILTERS_SUPPORTED \u003d []"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class ListDirectives(object):"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2FgPQ%3D","line":27,"updated":"2013-09-04 01:22:15.000000000","message":"the comment explains one of these constants, but not both. i don\u0027t know what the other one is for, or what the difference between them is","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"992a23d6a9d04555d211fa5bb4cda41feade378b","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# for IceHouse.  Inexact filters currently planned for support are:"},{"line_number":25,"context_line":"# \u0027contains\u0027, \u0027icontains\u0027, \u0027startswith\u0027, \u0027istartswith\u0027, \u0027endswith\u0027, \u0027iendswith\u0027"},{"line_number":26,"context_line":"INEXACT_FILTERS_SUPPORTED \u003d []"},{"line_number":27,"context_line":"INEXACT_QUERY_FILTERS_SUPPORTED \u003d []"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class ListDirectives(object):"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2Fevw%3D","line":27,"in_reply_to":"AAAASn%2F%2FgPQ%3D","updated":"2013-09-04 10:31:08.000000000","message":"Done","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"b9432d0ec51ac1c6fdb596c76ebeb1d86cbc44bc","unresolved":false,"context_lines":[{"line_number":27,"context_line":"INEXACT_QUERY_FILTERS_SUPPORTED \u003d []"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class ListDirectives(object):"},{"line_number":31,"context_line":"    \"\"\"Encapsulate directives for listing entities."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    List directives are modifiers that affect the return of entities from a"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2FgTg%3D","line":30,"updated":"2013-09-04 00:47:08.000000000","message":"this represents the first case where a driver has to understand not just the interface it\u0027s implementing, but also the complex object it (might) be passed... that\u0027s probably not a good thing?","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"3094790803dc631eb807cb382672a0acba8f0218","unresolved":false,"context_lines":[{"line_number":27,"context_line":"INEXACT_QUERY_FILTERS_SUPPORTED \u003d []"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class ListDirectives(object):"},{"line_number":31,"context_line":"    \"\"\"Encapsulate directives for listing entities."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    List directives are modifiers that affect the return of entities from a"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2Fd7E%3D","line":30,"in_reply_to":"AAAASn%2F%2Fev0%3D","updated":"2013-09-04 13:33:45.000000000","message":"other than the __init__ here, you\u0027re basically just building a list of  dicts, right? (it\u0027s actually a dict of dicts, but you only seem to be complicating things with the outer dict?)\n\nso, why not just refactor the __init__() into a function used by the v3 controllers to build a list of dicts, and pass the list down to the drivers?","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"992a23d6a9d04555d211fa5bb4cda41feade378b","unresolved":false,"context_lines":[{"line_number":27,"context_line":"INEXACT_QUERY_FILTERS_SUPPORTED \u003d []"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class ListDirectives(object):"},{"line_number":31,"context_line":"    \"\"\"Encapsulate directives for listing entities."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    List directives are modifiers that affect the return of entities from a"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2Fev0%3D","line":30,"in_reply_to":"AAAASn%2F%2FgTg%3D","updated":"2013-09-04 10:31:08.000000000","message":"So I\u0027m open to suggestions....obviously trying to satisfy you (valid) issues that we need to formalize the interface and what it passes.","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"b9432d0ec51ac1c6fdb596c76ebeb1d86cbc44bc","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    It is optional for a driver to action some or all of the list directives,"},{"line_number":38,"context_line":"    but any filters that it does satisfy must be marked as such by calling"},{"line_number":39,"context_line":"    mark_filter_satisfied()."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    A ListDirective object can be instantiated empty and have filter and"},{"line_number":42,"context_line":"    pagination directives added one at a time, or alternatively a"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2FgSM%3D","line":39,"updated":"2013-09-04 00:47:08.000000000","message":"this is an interesting design choice, because i think it would be impossible for a driver to properly determine if it satisfied a filter if the parameters of the filter became more advanced over time in a backwards compatible fashion. only the caller can really know if the \"directives\" were satisfied as expected.\n\nfor example, say all filtering is case-sensitive in the first implementation. so, drivers happily mark \u0027satisfied\u0027 when a filter provides a case sensitive comparison.\n\nbut then, the optional directives thing evolves to support case insensitivity... the driver would continue to mark \u0027satisfied\u0027, which i suppose is true because it did some filtering but it\u0027s now returning a superset of the expected results. only the caller can look at the result set and see that filtering needs to be applied to properly satisfy the hints.","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"992a23d6a9d04555d211fa5bb4cda41feade378b","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    It is optional for a driver to action some or all of the list directives,"},{"line_number":38,"context_line":"    but any filters that it does satisfy must be marked as such by calling"},{"line_number":39,"context_line":"    mark_filter_satisfied()."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    A ListDirective object can be instantiated empty and have filter and"},{"line_number":42,"context_line":"    pagination directives added one at a time, or alternatively a"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2Fev8%3D","line":39,"in_reply_to":"AAAASn%2F%2FgSM%3D","updated":"2013-09-04 10:31:08.000000000","message":"So I think the driver should know if it can handle the filter, for instance whether the SQL it emits will be case sensitive or not (in fact, that is the case in code for the inexact filters today, even though they are disabled)","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"b9432d0ec51ac1c6fdb596c76ebeb1d86cbc44bc","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    pagination directives added one at a time, or alternatively a"},{"line_number":43,"context_line":"    controller style context query_string and a set of valid filters may be"},{"line_number":44,"context_line":"    passed at instantiation time, which will cause it to build the appropriate"},{"line_number":45,"context_line":"    list directives ready to be passed to a driver."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2FgTM%3D","line":45,"updated":"2013-09-04 00:47:08.000000000","message":"documentation is very misleading... you\u0027re not building anything to pass to the driver (like a dict)... you\u0027re just passing the driver an instance of this class","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"992a23d6a9d04555d211fa5bb4cda41feade378b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    pagination directives added one at a time, or alternatively a"},{"line_number":43,"context_line":"    controller style context query_string and a set of valid filters may be"},{"line_number":44,"context_line":"    passed at instantiation time, which will cause it to build the appropriate"},{"line_number":45,"context_line":"    list directives ready to be passed to a driver."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2Feuk%3D","line":45,"in_reply_to":"AAAASn%2F%2FgTM%3D","updated":"2013-09-04 10:31:08.000000000","message":"Done","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"b9432d0ec51ac1c6fdb596c76ebeb1d86cbc44bc","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def __init__(self, query_dict\u003dNone, valid_filters\u003dNone):"},{"line_number":50,"context_line":"        \"\"\"Initialize the directives, optionally filling with query."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        :param query_dict: a controller style dict of queries of the form"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2FgUA%3D","line":49,"updated":"2013-09-04 00:47:08.000000000","message":"is there a future use case for invalid_filters or credible_filters?","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"3094790803dc631eb807cb382672a0acba8f0218","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def __init__(self, query_dict\u003dNone, valid_filters\u003dNone):"},{"line_number":50,"context_line":"        \"\"\"Initialize the directives, optionally filling with query."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        :param query_dict: a controller style dict of queries of the form"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2Fd7o%3D","line":49,"in_reply_to":"AAAASn%2F%2Feuo%3D","updated":"2013-09-04 13:33:45.000000000","message":"i just think the prefix_ is silly. you might as well run around and start renaming everything to valid_variable and supported_option","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"992a23d6a9d04555d211fa5bb4cda41feade378b","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def __init__(self, query_dict\u003dNone, valid_filters\u003dNone):"},{"line_number":50,"context_line":"        \"\"\"Initialize the directives, optionally filling with query."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        :param query_dict: a controller style dict of queries of the form"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2Feuo%3D","line":49,"in_reply_to":"AAAASn%2F%2FgUA%3D","updated":"2013-09-04 10:31:08.000000000","message":"Something has to process the url query string and decide whether the attributes passed are indeed things we support filtering on.  That\u0027s the point of valid_filters.  As per a previous comment, maybe this could be better names - \u0027supported_filters\u0027 ?","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"b9432d0ec51ac1c6fdb596c76ebeb1d86cbc44bc","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    def add_filter(self, name, value, comparator\u003d\u0027equals\u0027,"},{"line_number":132,"context_line":"                   casesensitive\u003dFalse):"},{"line_number":133,"context_line":"        new_filter \u003d {\u0027name\u0027: name, \u0027value\u0027: value, \u0027comparator\u0027: comparator,"},{"line_number":134,"context_line":"                      \u0027casesensitive\u0027: casesensitive}"},{"line_number":135,"context_line":"        self._filters[uuid.uuid4().hex] \u003d new_filter"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def add_pageinator(self, name, value):"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2FgR0%3D","line":134,"updated":"2013-09-04 00:47:08.000000000","message":"thisstuffisreallyhardtoread so please_follow_pep8_naming_conventions","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"992a23d6a9d04555d211fa5bb4cda41feade378b","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    def add_filter(self, name, value, comparator\u003d\u0027equals\u0027,"},{"line_number":132,"context_line":"                   casesensitive\u003dFalse):"},{"line_number":133,"context_line":"        new_filter \u003d {\u0027name\u0027: name, \u0027value\u0027: value, \u0027comparator\u0027: comparator,"},{"line_number":134,"context_line":"                      \u0027casesensitive\u0027: casesensitive}"},{"line_number":135,"context_line":"        self._filters[uuid.uuid4().hex] \u003d new_filter"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def add_pageinator(self, name, value):"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2FeyM%3D","line":134,"in_reply_to":"AAAASn%2F%2FgR0%3D","updated":"2013-09-04 10:31:08.000000000","message":"Done","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"84765faa9a6a61af6c7c6c745bf4a4719d7a672a","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                   casesensitive\u003dFalse):"},{"line_number":133,"context_line":"        new_filter \u003d {\u0027name\u0027: name, \u0027value\u0027: value, \u0027comparator\u0027: comparator,"},{"line_number":134,"context_line":"                      \u0027casesensitive\u0027: casesensitive}"},{"line_number":135,"context_line":"        self._filters[uuid.uuid4().hex] \u003d new_filter"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def add_pageinator(self, name, value):"},{"line_number":138,"context_line":"        new_paginator \u003d {\u0027name\u0027: name, \u0027value\u0027: value}"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2FgQ8%3D","line":135,"updated":"2013-09-04 01:22:15.000000000","message":"i don\u0027t see why you\u0027re using random indexes","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"3094790803dc631eb807cb382672a0acba8f0218","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                   casesensitive\u003dFalse):"},{"line_number":133,"context_line":"        new_filter \u003d {\u0027name\u0027: name, \u0027value\u0027: value, \u0027comparator\u0027: comparator,"},{"line_number":134,"context_line":"                      \u0027casesensitive\u0027: casesensitive}"},{"line_number":135,"context_line":"        self._filters[uuid.uuid4().hex] \u003d new_filter"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def add_pageinator(self, name, value):"},{"line_number":138,"context_line":"        new_paginator \u003d {\u0027name\u0027: name, \u0027value\u0027: value}"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2Fd6k%3D","line":135,"in_reply_to":"AAAASn%2F%2FeyE%3D","updated":"2013-09-04 13:33:45.000000000","message":"you\u0027re using the data structure like a list as far as i can tell... so use a list, instead of a dict with useless indexing","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"992a23d6a9d04555d211fa5bb4cda41feade378b","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                   casesensitive\u003dFalse):"},{"line_number":133,"context_line":"        new_filter \u003d {\u0027name\u0027: name, \u0027value\u0027: value, \u0027comparator\u0027: comparator,"},{"line_number":134,"context_line":"                      \u0027casesensitive\u0027: casesensitive}"},{"line_number":135,"context_line":"        self._filters[uuid.uuid4().hex] \u003d new_filter"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def add_pageinator(self, name, value):"},{"line_number":138,"context_line":"        new_paginator \u003d {\u0027name\u0027: name, \u0027value\u0027: value}"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2FeyE%3D","line":135,"in_reply_to":"AAAASn%2F%2FgQ8%3D","updated":"2013-09-04 10:31:08.000000000","message":"just wanted an id....is there something simpler you would prefer?","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"b9432d0ec51ac1c6fdb596c76ebeb1d86cbc44bc","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def add_pageinator(self, name, value):"},{"line_number":138,"context_line":"        new_paginator \u003d {\u0027name\u0027: name, \u0027value\u0027: value}"},{"line_number":139,"context_line":"        self._paginators[uuid.uuid4().hex] \u003d new_paginator"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def add_extra(self, name, value):"},{"line_number":142,"context_line":"        new_extra \u003d {\u0027name\u0027: name, \u0027value\u0027: value}"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2FgSA%3D","line":139,"updated":"2013-09-04 00:47:08.000000000","message":"what\u0027s a paginator and why is this patch concerned with pagination?","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"992a23d6a9d04555d211fa5bb4cda41feade378b","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def add_pageinator(self, name, value):"},{"line_number":138,"context_line":"        new_paginator \u003d {\u0027name\u0027: name, \u0027value\u0027: value}"},{"line_number":139,"context_line":"        self._paginators[uuid.uuid4().hex] \u003d new_paginator"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def add_extra(self, name, value):"},{"line_number":142,"context_line":"        new_extra \u003d {\u0027name\u0027: name, \u0027value\u0027: value}"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2FeyQ%3D","line":139,"in_reply_to":"AAAASn%2F%2FgSA%3D","updated":"2013-09-04 10:31:08.000000000","message":"removed","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"}],"keystone/common/manager.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"3e9dd0e45ba0fce02f1f4cf5545251bd2cc36ab0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        setattr(self, name, _wrapper)"},{"line_number":46,"context_line":"        return _wrapper"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _trim_to_limit(self, ref_list):"},{"line_number":49,"context_line":"        list_limit \u003d self.driver._get_list_limit()"},{"line_number":50,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":51,"context_line":"            return ref_list[:list_limit]"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2Fx2A%3D","line":48,"updated":"2013-08-29 18:00:19.000000000","message":"Nice! Much better.","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d95726f9d1848137992fface585ea24422551a1f","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        setattr(self, name, _wrapper)"},{"line_number":46,"context_line":"        return _wrapper"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _trim_to_limit(self, ref_list):"},{"line_number":49,"context_line":"        list_limit \u003d self.driver._get_list_limit()"},{"line_number":50,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":51,"context_line":"            return ref_list[:list_limit]"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FxsU%3D","line":48,"in_reply_to":"AAAASn%2F%2Fx2A%3D","updated":"2013-08-29 18:25:33.000000000","message":":-)","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"}],"keystone/common/sql/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"35d51671c2f6e5adec47c3dbee24b562ac104ce8","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        :param query: query to apply filters to"},{"line_number":344,"context_line":"        :param request_dict: dictionary of filters"},{"line_number":345,"context_line":"        :param valid_filters: list of keys to apply filtering to"},{"line_number":346,"context_line":"        :param limit: hard limit to apply if no pagination"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        Returns the updated query. If no pagination requested, then apply any"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASX%2F%2F43s%3D","line":345,"updated":"2013-08-24 16:39:29.000000000","message":"valid_filters needs to be removed?","commit_id":"292faf929c767e56c4e3f09f02767dd5261d7141"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c50ae0c8ed9bae3073b17255ccc31f254c3d3e72","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        :param query: query to apply filters to"},{"line_number":344,"context_line":"        :param request_dict: dictionary of filters"},{"line_number":345,"context_line":"        :param valid_filters: list of keys to apply filtering to"},{"line_number":346,"context_line":"        :param limit: hard limit to apply if no pagination"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        Returns the updated query. If no pagination requested, then apply any"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASX%2F%2F4lQ%3D","line":345,"in_reply_to":"AAAASX%2F%2F43s%3D","updated":"2013-08-24 22:52:50.000000000","message":"Done","commit_id":"292faf929c767e56c4e3f09f02767dd5261d7141"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"35d51671c2f6e5adec47c3dbee24b562ac104ce8","unresolved":false,"context_lines":[{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        Returns the updated query.  Modifies request_dict argument"},{"line_number":364,"context_line":"        to remove filters consumed."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        :param query: query to apply filters to"},{"line_number":367,"context_line":"        :param request_dict: dictionary of filters"},{"line_number":368,"context_line":"        :param valid_filters: list of keys to apply filtering to"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASX%2F%2F43w%3D","line":365,"updated":"2013-08-24 16:39:29.000000000","message":"Missing model variable docstring?","commit_id":"292faf929c767e56c4e3f09f02767dd5261d7141"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c50ae0c8ed9bae3073b17255ccc31f254c3d3e72","unresolved":false,"context_lines":[{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        Returns the updated query.  Modifies request_dict argument"},{"line_number":364,"context_line":"        to remove filters consumed."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        :param query: query to apply filters to"},{"line_number":367,"context_line":"        :param request_dict: dictionary of filters"},{"line_number":368,"context_line":"        :param valid_filters: list of keys to apply filtering to"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASX%2F%2F4lM%3D","line":365,"in_reply_to":"AAAASX%2F%2F43w%3D","updated":"2013-08-24 22:52:50.000000000","message":"Done","commit_id":"292faf929c767e56c4e3f09f02767dd5261d7141"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        :param model: the table model in question"},{"line_number":318,"context_line":"        :param query: query to apply filters to"},{"line_number":319,"context_line":"        :param request_dict: dictionary of filters.  This will be modified"},{"line_number":320,"context_line":"                             to remove any filters that have been satisfied."},{"line_number":321,"context_line":"        :param valid_filters: list of keys to apply filtering to"},{"line_number":322,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F7U0%3D","line":319,"updated":"2013-08-27 22:13:53.000000000","message":"suggest change name to request_dict_in_out so that callers know it will be modified.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        :param model: the table model in question"},{"line_number":318,"context_line":"        :param query: query to apply filters to"},{"line_number":319,"context_line":"        :param request_dict: dictionary of filters.  This will be modified"},{"line_number":320,"context_line":"                             to remove any filters that have been satisfied."},{"line_number":321,"context_line":"        :param valid_filters: list of keys to apply filtering to"},{"line_number":322,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F63c%3D","line":319,"in_reply_to":"AAAASn%2F%2F7U0%3D","updated":"2013-08-28 00:30:00.000000000","message":"Done","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":344,"context_line":"                # here, do a (potentially big) un-filtered query, pass it back"},{"line_number":345,"context_line":"                # to the controller and then just fail there."},{"line_number":346,"context_line":"                msg \u003d _(\u0027Unsupported inexact string filter: %s\u0027) % item"},{"line_number":347,"context_line":"                raise exception.ValidationError(msg)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"            # TODO(henry-nash): Sqlalchemy 0.7 defaults to case insensitivity"},{"line_number":350,"context_line":"            # so once we find a way of changing that (maybe on a call-by-call"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F7UY%3D","line":347,"updated":"2013-08-27 22:13:53.000000000","message":"failing here will make it hard to support unexpected inexact filters (for example, if a new filter is added in Icehouse, clients start using it, and then that client is used against a H server it will fail). I think it would be better to ignore unexpected values.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":344,"context_line":"                # here, do a (potentially big) un-filtered query, pass it back"},{"line_number":345,"context_line":"                # to the controller and then just fail there."},{"line_number":346,"context_line":"                msg \u003d _(\u0027Unsupported inexact string filter: %s\u0027) % item"},{"line_number":347,"context_line":"                raise exception.ValidationError(msg)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"            # TODO(henry-nash): Sqlalchemy 0.7 defaults to case insensitivity"},{"line_number":350,"context_line":"            # so once we find a way of changing that (maybe on a call-by-call"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F610%3D","line":347,"in_reply_to":"AAAASn%2F%2F7UY%3D","updated":"2013-08-28 00:30:00.000000000","message":"Difficult one this....is it better to fail, or to let them think they have the correct result? I was thinking the former...but I\u0027m open to be persuaded.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":353,"context_line":"            # be handled at the controller level."},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"            if value \u003d\u003d \u0027icontains\u0027:"},{"line_number":356,"context_line":"                query_term \u003d column_attr.ilike(\u0027%%%s%%\u0027 % request_dict[item])"},{"line_number":357,"context_line":"            elif value \u003d\u003d \u0027istartswith\u0027:"},{"line_number":358,"context_line":"                query_term \u003d column_attr.ilike(\u0027%s%%\u0027 % request_dict[item])"},{"line_number":359,"context_line":"            elif value \u003d\u003d \u0027iendswith\u0027:"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F7T0%3D","line":356,"updated":"2013-08-27 22:13:53.000000000","message":"the value could contain a % or ?, so those special characters should be escaped.\n\nthis comment applies at 358 and 360.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":353,"context_line":"            # be handled at the controller level."},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"            if value \u003d\u003d \u0027icontains\u0027:"},{"line_number":356,"context_line":"                query_term \u003d column_attr.ilike(\u0027%%%s%%\u0027 % request_dict[item])"},{"line_number":357,"context_line":"            elif value \u003d\u003d \u0027istartswith\u0027:"},{"line_number":358,"context_line":"                query_term \u003d column_attr.ilike(\u0027%s%%\u0027 % request_dict[item])"},{"line_number":359,"context_line":"            elif value \u003d\u003d \u0027iendswith\u0027:"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F6yM%3D","line":356,"in_reply_to":"AAAASn%2F%2F7T0%3D","updated":"2013-08-28 00:30:00.000000000","message":"I think sqlalchemy does the escaping for you - I have added a test to ensure this is true.","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":373,"context_line":"                        request_dict.pop(key))"},{"line_number":374,"context_line":"                else:"},{"line_number":375,"context_line":"                    filter_dict[key] \u003d request_dict.pop(key)"},{"line_number":376,"context_line":"            else:"},{"line_number":377,"context_line":"                # Check for inexact filter requests"},{"line_number":378,"context_line":"                for item in request_dict:"},{"line_number":379,"context_line":"                    if item.startswith(key + \u0027__\u0027):"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F7SU%3D","line":376,"updated":"2013-08-27 22:13:53.000000000","message":"suggest \u0027continue\u0027 here, remove the else, and then can drop a level of indentation","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":373,"context_line":"                        request_dict.pop(key))"},{"line_number":374,"context_line":"                else:"},{"line_number":375,"context_line":"                    filter_dict[key] \u003d request_dict.pop(key)"},{"line_number":376,"context_line":"            else:"},{"line_number":377,"context_line":"                # Check for inexact filter requests"},{"line_number":378,"context_line":"                for item in request_dict:"},{"line_number":379,"context_line":"                    if item.startswith(key + \u0027__\u0027):"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F61k%3D","line":376,"in_reply_to":"AAAASn%2F%2F7SU%3D","updated":"2013-08-28 00:30:00.000000000","message":"Done","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":388,"context_line":"                            all_filters_satisifed \u003d False"},{"line_number":389,"context_line":"                        break"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        # Apply any exact filers we built up"},{"line_number":392,"context_line":"        if filter_dict:"},{"line_number":393,"context_line":"            query \u003d query.filter_by(**filter_dict)"},{"line_number":394,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F7S8%3D","line":391,"updated":"2013-08-27 22:13:53.000000000","message":"change \"filers\" to \"filters\"","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":388,"context_line":"                            all_filters_satisifed \u003d False"},{"line_number":389,"context_line":"                        break"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        # Apply any exact filers we built up"},{"line_number":392,"context_line":"        if filter_dict:"},{"line_number":393,"context_line":"            query \u003d query.filter_by(**filter_dict)"},{"line_number":394,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F61s%3D","line":391,"in_reply_to":"AAAASn%2F%2F7S8%3D","updated":"2013-08-28 00:30:00.000000000","message":"Done","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":360,"context_line":"                                       list_directives)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        # Apply any exact filters we built up"},{"line_number":363,"context_line":"        if filter_dict:"},{"line_number":364,"context_line":"            query \u003d query.filter_by(**filter_dict)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        return query"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhtQ%3D","line":363,"updated":"2013-09-03 20:01:14.000000000","message":"is this line needed? I assume that filter_by wouldn\u0027t do anything if passed an empty dict.","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":360,"context_line":"                                       list_directives)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        # Apply any exact filters we built up"},{"line_number":363,"context_line":"        if filter_dict:"},{"line_number":364,"context_line":"            query \u003d query.filter_by(**filter_dict)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        return query"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fg1k%3D","line":363,"in_reply_to":"AAAASn%2F%2FhtQ%3D","updated":"2013-09-03 23:06:52.000000000","message":"I did it mainly to keep the code looking the same as other projects that use this technique.","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        :param query: query to apply filters to"},{"line_number":373,"context_line":"        :param list_directives: containing any relevant filters or pagination"},{"line_number":374,"context_line":"                                directives. Any filters satisfied here will"},{"line_number":375,"context_line":"                                be marked in list_directive so that the"},{"line_number":376,"context_line":"                                caller will know if any filters remain to be"},{"line_number":377,"context_line":"                                satisfied."},{"line_number":378,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fhsk%3D","line":375,"updated":"2013-09-03 20:01:14.000000000","message":"remove \"in list_directive\" since that\u0027s the implied target of anything in the docs for list_directive.","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        :param query: query to apply filters to"},{"line_number":373,"context_line":"        :param list_directives: containing any relevant filters or pagination"},{"line_number":374,"context_line":"                                directives. Any filters satisfied here will"},{"line_number":375,"context_line":"                                be marked in list_directive so that the"},{"line_number":376,"context_line":"                                caller will know if any filters remain to be"},{"line_number":377,"context_line":"                                satisfied."},{"line_number":378,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fg1c%3D","line":375,"in_reply_to":"AAAASn%2F%2Fhsk%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ee3e89a0163cab31f1f9d2120aa8177cdd7e7362","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"            if (filter[\u0027comparator\u0027] not in"},{"line_number":316,"context_line":"                    listdirectives.INEXACT_FILTERS_SUPPORTED):"},{"line_number":317,"context_line":"                        # Better to error out now, rather than fail to match"},{"line_number":318,"context_line":"                        # the filter here, do a (potentially big) un-filtered"},{"line_number":319,"context_line":"                        # query, pass it back to the controller and then just"},{"line_number":320,"context_line":"                        # fail there."}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FgYQ%3D","line":317,"updated":"2013-09-04 00:20:15.000000000","message":"i\u0027m not sure i\u0027ve ever seen indentation like this","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4032a8b1103488234a6686a8822d8a160d4fdd56","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"            if (filter[\u0027comparator\u0027] not in"},{"line_number":316,"context_line":"                    listdirectives.INEXACT_FILTERS_SUPPORTED):"},{"line_number":317,"context_line":"                        # Better to error out now, rather than fail to match"},{"line_number":318,"context_line":"                        # the filter here, do a (potentially big) un-filtered"},{"line_number":319,"context_line":"                        # query, pass it back to the controller and then just"},{"line_number":320,"context_line":"                        # fail there."}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fdvs%3D","line":317,"in_reply_to":"AAAASn%2F%2Fe1Q%3D","updated":"2013-09-04 14:16:37.000000000","message":"ah, i normally see:\n\n  if (some very long expression where\n          this is doubly indented):\n      # and this is normally indented\n\nalternatively, evaluate the conditional expression before you write the if statement\n\n  condition \u003d (\n      some very long expression)\n  if condition:\n      # whatever","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1702bf36903aded8134fa4d349b218c4e69301a9","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"            if (filter[\u0027comparator\u0027] not in"},{"line_number":316,"context_line":"                    listdirectives.INEXACT_FILTERS_SUPPORTED):"},{"line_number":317,"context_line":"                        # Better to error out now, rather than fail to match"},{"line_number":318,"context_line":"                        # the filter here, do a (potentially big) un-filtered"},{"line_number":319,"context_line":"                        # query, pass it back to the controller and then just"},{"line_number":320,"context_line":"                        # fail there."}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fe1Q%3D","line":317,"in_reply_to":"AAAASn%2F%2FgYQ%3D","updated":"2013-09-04 10:30:50.000000000","message":"I always had difficulty getting the indentation right for an if statement that spreads over two lines...flake8 keeps telling me  indent the second line of the if clause more, to differentiate from the statement block...finally worked it out (duh...)","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ee3e89a0163cab31f1f9d2120aa8177cdd7e7362","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        return query"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def filter_and_paginate(self, model, query, list_directives):"},{"line_number":369,"context_line":"        \"\"\"Applies filtering and pagination/limit to a query."},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        :param model: table model"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FgXM%3D","line":368,"updated":"2013-09-04 00:20:15.000000000","message":"we don\u0027t support pagination anymore... this entire method looks pointless","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1702bf36903aded8134fa4d349b218c4e69301a9","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        return query"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def filter_and_paginate(self, model, query, list_directives):"},{"line_number":369,"context_line":"        \"\"\"Applies filtering and pagination/limit to a query."},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        :param model: table model"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fe1g%3D","line":368,"in_reply_to":"AAAASn%2F%2FgXM%3D","updated":"2013-09-04 10:30:50.000000000","message":"Ok, changing name...we want, ideally, a single method that will do filtering (and in the next patch) apply any limit if all the filters have been successfully applied...but agree to remove the pagination word","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"84765faa9a6a61af6c7c6c745bf4a4719d7a672a","unresolved":false,"context_lines":[{"line_number":349,"context_line":"            # TODO(henry-nash) Check if name is valid column, if not skip"},{"line_number":350,"context_line":"            if filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027:"},{"line_number":351,"context_line":"                key \u003d filter[\u0027name\u0027]"},{"line_number":352,"context_line":"                if isinstance(model.__table__.c[key].type,"},{"line_number":353,"context_line":"                              sqlalchemy.types.Boolean):"},{"line_number":354,"context_line":"                    filter_dict[key] \u003d utils.attr_as_boolean(filter[\u0027value\u0027])"},{"line_number":355,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2FgLc%3D","line":352,"updated":"2013-09-04 01:22:15.000000000","message":"this code will break if someone tries to filter on a property from a base class, like `deleted`. something like this should allow you to reach up the inheritance hierarchy-\n\n  getattr(model, key).property.columns[0].type","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"992a23d6a9d04555d211fa5bb4cda41feade378b","unresolved":false,"context_lines":[{"line_number":349,"context_line":"            # TODO(henry-nash) Check if name is valid column, if not skip"},{"line_number":350,"context_line":"            if filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027:"},{"line_number":351,"context_line":"                key \u003d filter[\u0027name\u0027]"},{"line_number":352,"context_line":"                if isinstance(model.__table__.c[key].type,"},{"line_number":353,"context_line":"                              sqlalchemy.types.Boolean):"},{"line_number":354,"context_line":"                    filter_dict[key] \u003d utils.attr_as_boolean(filter[\u0027value\u0027])"},{"line_number":355,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAASn%2F%2Feqw%3D","line":352,"in_reply_to":"AAAASn%2F%2FgLc%3D","updated":"2013-09-04 10:31:08.000000000","message":"Thanks, nice.  Done.","commit_id":"379c934f377df972890faddf7a3a35577a7deca1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        :returns query: query, updated with any filters satisfied"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        \"\"\""},{"line_number":297,"context_line":"        def inexact_filter(model, query, filter, hints):"},{"line_number":298,"context_line":"            \"\"\"Applies an inexact filter to a query."},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb5E%3D","line":296,"updated":"2013-09-04 19:40:08.000000000","message":"does this violate pep8? http://www.python.org/dev/peps/pep-0008/#public-and-internal-interfaces","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        filter_dict \u003d {}"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        for filter in hints.filters():"},{"line_number":340,"context_line":"            # TODO(henry-nash) Check if name is valid column, if not skip"},{"line_number":341,"context_line":"            if filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027:"},{"line_number":342,"context_line":"                key \u003d filter[\u0027name\u0027]"},{"line_number":343,"context_line":"                if isinstance(getattr(model, key).property.columns[0].type,"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb4k%3D","line":340,"updated":"2013-09-04 19:40:08.000000000","message":"if key not in model.attributes:\n    raise ValidationError(\u0027Cannot filter by...\u0027)","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        return query"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    def filter(self, model, query, hints):"},{"line_number":359,"context_line":"        \"\"\"Applies filtering to a query."},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        :param model: table model"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb5Q%3D","line":358,"updated":"2013-09-04 19:40:08.000000000","message":"this method is a useless wrapper","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        :returns updated query"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        \"\"\""},{"line_number":371,"context_line":"        if hints is not None:"},{"line_number":372,"context_line":"            query \u003d self._filter(model, query, hints)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        return query"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb5o%3D","line":371,"updated":"2013-09-04 19:40:08.000000000","message":"why would hints be none? *at least* guarantee to the driver it\u0027ll be an empty list, not None","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        :param model: the table model in question"},{"line_number":287,"context_line":"        :param query: query to apply filters to"},{"line_number":288,"context_line":"        :param hints: list directives, containing any relevant"},{"line_number":289,"context_line":"                                filters. Any filters satisfied here will"},{"line_number":290,"context_line":"                                be marked in list_directive so that the"},{"line_number":291,"context_line":"                                caller will know if any filters remain to be"},{"line_number":292,"context_line":"                                satisfied."}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Fai0%3D","line":289,"updated":"2013-09-05 00:42:46.000000000","message":"fix the formatting.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        :param model: the table model in question"},{"line_number":287,"context_line":"        :param query: query to apply filters to"},{"line_number":288,"context_line":"        :param hints: list directives, containing any relevant"},{"line_number":289,"context_line":"                                filters. Any filters satisfied here will"},{"line_number":290,"context_line":"                                be marked in list_directive so that the"},{"line_number":291,"context_line":"                                caller will know if any filters remain to be"},{"line_number":292,"context_line":"                                satisfied."}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FUqU%3D","line":289,"in_reply_to":"AAAASn%2F%2Fai0%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        :param query: query to apply filters to"},{"line_number":288,"context_line":"        :param hints: list directives, containing any relevant"},{"line_number":289,"context_line":"                                filters. Any filters satisfied here will"},{"line_number":290,"context_line":"                                be marked in list_directive so that the"},{"line_number":291,"context_line":"                                caller will know if any filters remain to be"},{"line_number":292,"context_line":"                                satisfied."},{"line_number":293,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Fais%3D","line":290,"updated":"2013-09-05 00:42:46.000000000","message":"what\u0027s list_directive?","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        :param query: query to apply filters to"},{"line_number":288,"context_line":"        :param hints: list directives, containing any relevant"},{"line_number":289,"context_line":"                                filters. Any filters satisfied here will"},{"line_number":290,"context_line":"                                be marked in list_directive so that the"},{"line_number":291,"context_line":"                                caller will know if any filters remain to be"},{"line_number":292,"context_line":"                                satisfied."},{"line_number":293,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FUqQ%3D","line":290,"in_reply_to":"AAAASn%2F%2Fais%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"            :param model: the table model in question"},{"line_number":301,"context_line":"            :param query: query to apply filters to"},{"line_number":302,"context_line":"            :param key: filter ID in question"},{"line_number":303,"context_line":"            :param filter: the dict that describes this filter"},{"line_number":304,"context_line":"            :param hints: the directives for this list query. If we"},{"line_number":305,"context_line":"                                    satisfy this filter here, we should mark"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Faig%3D","line":302,"updated":"2013-09-05 00:42:46.000000000","message":"key is not a parameter","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"            :param model: the table model in question"},{"line_number":301,"context_line":"            :param query: query to apply filters to"},{"line_number":302,"context_line":"            :param key: filter ID in question"},{"line_number":303,"context_line":"            :param filter: the dict that describes this filter"},{"line_number":304,"context_line":"            :param hints: the directives for this list query. If we"},{"line_number":305,"context_line":"                                    satisfy this filter here, we should mark"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FUqM%3D","line":302,"in_reply_to":"AAAASn%2F%2Faig%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        filter_dict \u003d {}"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        for filter in hints.filters():"},{"line_number":340,"context_line":"            # TODO(henry-nash) Check if name is valid column, if not skip"},{"line_number":341,"context_line":"            if filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027:"},{"line_number":342,"context_line":"                key \u003d filter[\u0027name\u0027]"},{"line_number":343,"context_line":"                if isinstance(getattr(model, key).property.columns[0].type,"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Fah4%3D","line":340,"updated":"2013-09-05 00:42:46.000000000","message":"add : after TODO(henry-nash)","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        filter_dict \u003d {}"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        for filter in hints.filters():"},{"line_number":340,"context_line":"            # TODO(henry-nash) Check if name is valid column, if not skip"},{"line_number":341,"context_line":"            if filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027:"},{"line_number":342,"context_line":"                key \u003d filter[\u0027name\u0027]"},{"line_number":343,"context_line":"                if isinstance(getattr(model, key).property.columns[0].type,"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FUqI%3D","line":340,"in_reply_to":"AAAASn%2F%2Fah4%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                    filter_dict[key] \u003d filter[\u0027value\u0027]"},{"line_number":348,"context_line":"                hints.mark_filter_satisfied(filter)"},{"line_number":349,"context_line":"            else:"},{"line_number":350,"context_line":"                query \u003d inexact_filter(model, query, filter, hints)"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        # Apply any exact filters we built up"},{"line_number":353,"context_line":"        if filter_dict:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FahY%3D","line":350,"updated":"2013-09-05 00:42:46.000000000","message":"would clean up this function if there was an \"exact_filter\" function just like \"inexact_filter\" (used at line 342)","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        # Apply any exact filters we built up"},{"line_number":353,"context_line":"        if filter_dict:"},{"line_number":354,"context_line":"            query \u003d query.filter_by(**filter_dict)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        return query"},{"line_number":357,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FaiY%3D","line":354,"updated":"2013-09-05 00:42:46.000000000","message":"does this handle flattening of attributes (as is done in https://review.openstack.org/#/c/43257/37/keystone/common/controller.py) ?","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"25c7a7efd07c3bdbb8960b0992ea2e351db25734","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        :returns updated query"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        \"\"\""},{"line_number":371,"context_line":"        if hints is not None and hasattr(hints, \u0027filters\u0027):"},{"line_number":372,"context_line":"            query \u003d self._filter(model, query, hints)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        return query"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FadU%3D","line":371,"updated":"2013-09-05 00:38:20.000000000","message":"See the comment about making the hints.filters an @property\n\nRight now you could end up with a custom hints object that has .filters as a property and result in a traceback on line 339.\n\nThis is a hypothetical situation, because the controllers currently do not send anything but the correct formatted hints object","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        :returns updated query"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        \"\"\""},{"line_number":371,"context_line":"        if hints is not None and hasattr(hints, \u0027filters\u0027):"},{"line_number":372,"context_line":"            query \u003d self._filter(model, query, hints)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        return query"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Faaw%3D","line":371,"in_reply_to":"AAAASn%2F%2FadU%3D","updated":"2014-01-16 22:36:39.000000000","message":"Agreed, I\u0027ll be happy to come back in and tidy this up","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":193,"context_line":"            if filter[\u0027case_sensitive\u0027]:"},{"line_number":194,"context_line":"                return query"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"            if filter[\u0027comparator\u0027] \u003d\u003d \u0027contains\u0027:"},{"line_number":197,"context_line":"                query_term \u003d column_attr.ilike(\u0027%%%s%%\u0027 % filter[\u0027value\u0027])"},{"line_number":198,"context_line":"            elif filter[\u0027comparator\u0027] \u003d\u003d \u0027startswith\u0027:"},{"line_number":199,"context_line":"                query_term \u003d column_attr.ilike(\u0027%s%%\u0027 % filter[\u0027value\u0027])"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7gI%3D","line":196,"updated":"2014-01-20 16:59:34.000000000","message":"Is there any reason that you are not using SQLAlchemy\u0027s contains, startswith and endswith column methods?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":193,"context_line":"            if filter[\u0027case_sensitive\u0027]:"},{"line_number":194,"context_line":"                return query"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"            if filter[\u0027comparator\u0027] \u003d\u003d \u0027contains\u0027:"},{"line_number":197,"context_line":"                query_term \u003d column_attr.ilike(\u0027%%%s%%\u0027 % filter[\u0027value\u0027])"},{"line_number":198,"context_line":"            elif filter[\u0027comparator\u0027] \u003d\u003d \u0027startswith\u0027:"},{"line_number":199,"context_line":"                query_term \u003d column_attr.ilike(\u0027%s%%\u0027 % filter[\u0027value\u0027])"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6bo%3D","line":196,"in_reply_to":"AAAAUH%2F%2B7gI%3D","updated":"2014-01-20 20:30:47.000000000","message":"I think it was because I couldn\u0027t see that the contains/startswith and ends with support case sensitive and insensitive operations, while like \u0026 ilike obviously do.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        :returns updated query"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        \"\"\""},{"line_number":260,"context_line":"        if hints is not None and hasattr(hints, \u0027filters\u0027):"},{"line_number":261,"context_line":"            query \u003d self._filter(model, query, hints)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        return query"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7yk%3D","line":260,"updated":"2014-01-20 16:59:34.000000000","message":"Is there any reason that this would be an object that doesn\u0027t have the filters method?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        :returns updated query"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        \"\"\""},{"line_number":260,"context_line":"        if hints is not None and hasattr(hints, \u0027filters\u0027):"},{"line_number":261,"context_line":"            query \u003d self._filter(model, query, hints)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        return query"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6xg%3D","line":260,"in_reply_to":"AAAAUH%2F%2B7yk%3D","updated":"2014-01-20 20:30:47.000000000","message":"ahh, hangover from when it ok to just pass in a naked list here….I don\u0027t really think it\u0027s worth maintaining that, so I\u0027ll remove that check","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"}],"keystone/common/utils.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            val_attr \u003d\u003d \u00270\u0027):"},{"line_number":157,"context_line":"        return False"},{"line_number":158,"context_line":"    else:"},{"line_number":159,"context_line":"        return True"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"# From python 2.7"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F7Rg%3D","line":159,"updated":"2013-08-27 22:13:53.000000000","message":"suggest change 155-159 to\n\n return not (isinstance(val_attr, basestring) and val_attr \u003d\u003d \u00270\u0027)","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            val_attr \u003d\u003d \u00270\u0027):"},{"line_number":157,"context_line":"        return False"},{"line_number":158,"context_line":"    else:"},{"line_number":159,"context_line":"        return True"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"# From python 2.7"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F6vw%3D","line":159,"in_reply_to":"AAAASn%2F%2F7Rg%3D","updated":"2013-08-28 00:30:00.000000000","message":"we could, I think I prefer the slightly more long winded version, since I think it is a little clearer for mixed-ability pythoners :-)","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ee3e89a0163cab31f1f9d2120aa8177cdd7e7362","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"def attr_as_boolean(val_attr):"},{"line_number":143,"context_line":"    \"\"\"Matches attributes allowing for booleans as strings."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    We test explicitly for a value that defines it as \u0027False\u0027,"},{"line_number":146,"context_line":"    which also means that the existence of the attribute with"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FgYE%3D","line":143,"updated":"2013-09-04 00:20:15.000000000","message":"why would you do that?!","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4032a8b1103488234a6686a8822d8a160d4fdd56","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"def attr_as_boolean(val_attr):"},{"line_number":143,"context_line":"    \"\"\"Matches attributes allowing for booleans as strings."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    We test explicitly for a value that defines it as \u0027False\u0027,"},{"line_number":146,"context_line":"    which also means that the existence of the attribute with"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FdwE%3D","line":143,"in_reply_to":"AAAASn%2F%2Fe%2BY%3D","updated":"2013-09-04 14:16:37.000000000","message":"the behavior is crap","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1702bf36903aded8134fa4d349b218c4e69301a9","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"def attr_as_boolean(val_attr):"},{"line_number":143,"context_line":"    \"\"\"Matches attributes allowing for booleans as strings."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    We test explicitly for a value that defines it as \u0027False\u0027,"},{"line_number":146,"context_line":"    which also means that the existence of the attribute with"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fe%2BY%3D","line":143,"in_reply_to":"AAAASn%2F%2FgYE%3D","updated":"2013-09-04 10:30:50.000000000","message":"So this is just the existing code moved here (from the V3Controller class) so that we use a common function when filtering between the controller and driver.  However, I\u0027ll clean up the comments.","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ee3e89a0163cab31f1f9d2120aa8177cdd7e7362","unresolved":false,"context_lines":[{"line_number":142,"context_line":"def attr_as_boolean(val_attr):"},{"line_number":143,"context_line":"    \"\"\"Matches attributes allowing for booleans as strings."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    We test explicitly for a value that defines it as \u0027False\u0027,"},{"line_number":146,"context_line":"    which also means that the existence of the attribute with"},{"line_number":147,"context_line":"    no value implies \u0027True\u0027"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FgXw%3D","line":145,"updated":"2013-09-04 00:20:15.000000000","message":"we test explicitly for a poorly thought out api?","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1702bf36903aded8134fa4d349b218c4e69301a9","unresolved":false,"context_lines":[{"line_number":142,"context_line":"def attr_as_boolean(val_attr):"},{"line_number":143,"context_line":"    \"\"\"Matches attributes allowing for booleans as strings."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    We test explicitly for a value that defines it as \u0027False\u0027,"},{"line_number":146,"context_line":"    which also means that the existence of the attribute with"},{"line_number":147,"context_line":"    no value implies \u0027True\u0027"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fe90%3D","line":145,"in_reply_to":"AAAASn%2F%2FgXw%3D","updated":"2013-09-04 10:30:50.000000000","message":"ditto","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ee3e89a0163cab31f1f9d2120aa8177cdd7e7362","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    We test explicitly for a value that defines it as \u0027False\u0027,"},{"line_number":146,"context_line":"    which also means that the existence of the attribute with"},{"line_number":147,"context_line":"    no value implies \u0027True\u0027"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    \"\"\""},{"line_number":150,"context_line":"    if (isinstance(val_attr, basestring) and"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FgXo%3D","line":147,"updated":"2013-09-04 00:20:15.000000000","message":"be explicit","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1702bf36903aded8134fa4d349b218c4e69301a9","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    We test explicitly for a value that defines it as \u0027False\u0027,"},{"line_number":146,"context_line":"    which also means that the existence of the attribute with"},{"line_number":147,"context_line":"    no value implies \u0027True\u0027"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    \"\"\""},{"line_number":150,"context_line":"    if (isinstance(val_attr, basestring) and"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fe9w%3D","line":147,"in_reply_to":"AAAASn%2F%2FgXo%3D","updated":"2013-09-04 10:30:50.000000000","message":"ditto","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            val_attr \u003d\u003d \u00270\u0027):"},{"line_number":154,"context_line":"        return False"},{"line_number":155,"context_line":"    else:"},{"line_number":156,"context_line":"        return True"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"# From python 2.7"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb4Y%3D","line":156,"updated":"2013-09-04 19:40:08.000000000","message":"this should be a one liner, it\u0027s still an undocumented api...","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            val_attr \u003d\u003d \u00270\u0027):"},{"line_number":154,"context_line":"        return False"},{"line_number":155,"context_line":"    else:"},{"line_number":156,"context_line":"        return True"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"# From python 2.7"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FbXg%3D","line":156,"in_reply_to":"AAAASn%2F%2Fb4Y%3D","updated":"2013-09-04 22:58:56.000000000","message":"Agreed...although this is the current code and fucntionaliy....let\u0027s do that in a separate patch","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"603af675bbbb8f3c1e07d5b1877a21fc52f18d3d","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    return passlib.hash.sha512_crypt.verify(password_utf8, hashed)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"def attr_as_boolean(val_attr):"},{"line_number":144,"context_line":"    \"\"\"Returns the boolean value, decoded from a string."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    We test explicitly for a value \u00270\u0027 which we treat as meaning False."}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B71A%3D","line":143,"updated":"2014-01-20 17:31:15.000000000","message":"this really belongs in the base v3 controller, as it\u0027s not applicable at all to v2 and should only be used by controllers handing query strings","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    return passlib.hash.sha512_crypt.verify(password_utf8, hashed)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"def attr_as_boolean(val_attr):"},{"line_number":144,"context_line":"    \"\"\"Returns the boolean value, decoded from a string."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    We test explicitly for a value \u00270\u0027 which we treat as meaning False."}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6fg%3D","line":143,"in_reply_to":"AAAAUH%2F%2B71A%3D","updated":"2014-01-20 20:30:47.000000000","message":"agree on v2 vs v3, but would it still be accessible from core/sql as well (where it is also used), however?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"603af675bbbb8f3c1e07d5b1877a21fc52f18d3d","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    We test explicitly for a value \u00270\u0027 which we treat as meaning False."},{"line_number":147,"context_line":"    All other string values (including an empty string) are treated as"},{"line_number":148,"context_line":"    meaning True."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    \"\"\""},{"line_number":151,"context_line":"    if (isinstance(val_attr, basestring) and"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B708%3D","line":148,"updated":"2014-01-20 17:31:15.000000000","message":"this is a terrible convention","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    We test explicitly for a value \u00270\u0027 which we treat as meaning False."},{"line_number":147,"context_line":"    All other string values (including an empty string) are treated as"},{"line_number":148,"context_line":"    meaning True."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    \"\"\""},{"line_number":151,"context_line":"    if (isinstance(val_attr, basestring) and"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6fM%3D","line":148,"in_reply_to":"AAAAUH%2F%2B708%3D","updated":"2014-01-20 20:30:47.000000000","message":"that maybe true (!), although it is what we agreed at the time...","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    meaning True."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    \"\"\""},{"line_number":151,"context_line":"    if (isinstance(val_attr, basestring) and"},{"line_number":152,"context_line":"            val_attr \u003d\u003d \u00270\u0027):"},{"line_number":153,"context_line":"        return False"},{"line_number":154,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7x8%3D","line":151,"updated":"2014-01-20 16:59:34.000000000","message":"Is there any value to checking the type if you have going to \"val_attr \u003d\u003d \u00270\u0027\" anyway?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"603af675bbbb8f3c1e07d5b1877a21fc52f18d3d","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            val_attr \u003d\u003d \u00270\u0027):"},{"line_number":153,"context_line":"        return False"},{"line_number":154,"context_line":"    else:"},{"line_number":155,"context_line":"        return True"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"# From python 2.7"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B71M%3D","line":155,"updated":"2014-01-20 17:31:15.000000000","message":"this whole thing should be a one liner\n\n  return not (isinstance(val_attr, basestring) and val_attr \u003d\u003d \u00270\u0027)","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            val_attr \u003d\u003d \u00270\u0027):"},{"line_number":153,"context_line":"        return False"},{"line_number":154,"context_line":"    else:"},{"line_number":155,"context_line":"        return True"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"# From python 2.7"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6fI%3D","line":155,"in_reply_to":"AAAAUH%2F%2B71M%3D","updated":"2014-01-20 20:30:47.000000000","message":"agreed","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"}],"keystone/credential/core.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"19602cf32e82c9b0e905611d6370283a2bca1831","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        if CONF.credential.list_limit is None:"},{"line_number":51,"context_line":"            return CONF.list_limit"},{"line_number":52,"context_line":"        else:"},{"line_number":53,"context_line":"            return CONF.credential.list_limit"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    # credential crud"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAASn%2F%2FuP4%3D","line":53,"updated":"2013-08-30 13:10:15.000000000","message":"this is easier to read as a one liner\n\n  return CONF.credential.list_limit or CONF.list_limit","commit_id":"48535c93712fc19c5236ef074579d6c1f706ad28"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9c98c8176fd667c4a8bf48af61dcc0c318a82de5","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        if CONF.credential.list_limit is None:"},{"line_number":51,"context_line":"            return CONF.list_limit"},{"line_number":52,"context_line":"        else:"},{"line_number":53,"context_line":"            return CONF.credential.list_limit"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    # credential crud"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAASn%2F%2FuEg%3D","line":53,"in_reply_to":"AAAASn%2F%2FuP4%3D","updated":"2013-08-30 13:55:25.000000000","message":"I\u0027ll fix this either individually or as part of @truncate as you suggest","commit_id":"48535c93712fc19c5236ef074579d6c1f706ad28"}],"keystone/identity/backends/kvs.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return identity.filter_user("},{"line_number":61,"context_line":"            self._get_user_by_name(user_name, domain_id))"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def list_users(self, hints\u003dNone):"},{"line_number":64,"context_line":"        user_ids \u003d self.db.get(\u0027user_list\u0027, [])"},{"line_number":65,"context_line":"        return [self.get_user(x) for x in user_ids]"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb34%3D","line":63,"updated":"2013-09-04 19:40:08.000000000","message":"hints is required, and then it\u0027s not, and then it\u0027s required, and then it\u0027s not...\n\nlet drivers expect it, and provide them (at least) an empty list","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return identity.filter_user("},{"line_number":61,"context_line":"            self._get_user_by_name(user_name, domain_id))"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def list_users(self, hints\u003dNone):"},{"line_number":64,"context_line":"        user_ids \u003d self.db.get(\u0027user_list\u0027, [])"},{"line_number":65,"context_line":"        return [self.get_user(x) for x in user_ids]"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FbXY%3D","line":63,"in_reply_to":"AAAASn%2F%2Fb34%3D","updated":"2013-09-04 22:58:56.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"}],"keystone/identity/backends/ldap.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    def check_user_in_group(self, user_id, group_id):"},{"line_number":185,"context_line":"        self.get_user(user_id)"},{"line_number":186,"context_line":"        self.get_group(group_id)"},{"line_number":187,"context_line":"        user_refs \u003d self.list_users_in_group(group_id, [])"},{"line_number":188,"context_line":"        found \u003d False"},{"line_number":189,"context_line":"        for x in user_refs:"},{"line_number":190,"context_line":"            if x[\u0027id\u0027] \u003d\u003d user_id:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FagA%3D","line":187,"updated":"2013-09-05 00:42:46.000000000","message":"suggest give a name to [] magic constant., e.g., \n\n hints\u003d[]\n user_refs \u003d self.list_users_in_group(group_id, hints)","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    def check_user_in_group(self, user_id, group_id):"},{"line_number":185,"context_line":"        self.get_user(user_id)"},{"line_number":186,"context_line":"        self.get_group(group_id)"},{"line_number":187,"context_line":"        user_refs \u003d self.list_users_in_group(group_id, [])"},{"line_number":188,"context_line":"        found \u003d False"},{"line_number":189,"context_line":"        for x in user_refs:"},{"line_number":190,"context_line":"            if x[\u0027id\u0027] \u003d\u003d user_id:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKiw%3D","line":187,"in_reply_to":"AAAASn%2F%2FagA%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    def check_user_in_group(self, user_id, group_id):"},{"line_number":168,"context_line":"        self.get_user(user_id)"},{"line_number":169,"context_line":"        self.get_group(group_id)"},{"line_number":170,"context_line":"        hints \u003d []"},{"line_number":171,"context_line":"        user_refs \u003d self.list_users_in_group(group_id, hints)"},{"line_number":172,"context_line":"        found \u003d False"},{"line_number":173,"context_line":"        for x in user_refs:"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7xo%3D","line":170,"updated":"2014-01-20 16:59:34.000000000","message":"Why is this not None or an empty Hints object?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    def check_user_in_group(self, user_id, group_id):"},{"line_number":168,"context_line":"        self.get_user(user_id)"},{"line_number":169,"context_line":"        self.get_group(group_id)"},{"line_number":170,"context_line":"        hints \u003d []"},{"line_number":171,"context_line":"        user_refs \u003d self.list_users_in_group(group_id, hints)"},{"line_number":172,"context_line":"        found \u003d False"},{"line_number":173,"context_line":"        for x in user_refs:"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6hs%3D","line":170,"in_reply_to":"AAAAUH%2F%2B7xo%3D","updated":"2014-01-20 20:30:47.000000000","message":"It should be….","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"}],"keystone/identity/backends/sql.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"35d51671c2f6e5adec47c3dbee24b562ac104ce8","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        if CONF.identity.list_limit is None:"},{"line_number":80,"context_line":"            return CONF.list_limit"},{"line_number":81,"context_line":"        else:"},{"line_number":82,"context_line":"            return CONF.identity.list_limit"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _check_password(self, password, user_ref):"},{"line_number":85,"context_line":"        \"\"\"Check the specified password against the data store."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASX%2F%2F43g%3D","line":82,"updated":"2013-08-24 16:39:29.000000000","message":"Should we make sure this is documented so that it is recommended that this configuration option is under the identity section?","commit_id":"292faf929c767e56c4e3f09f02767dd5261d7141"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c50ae0c8ed9bae3073b17255ccc31f254c3d3e72","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        if CONF.identity.list_limit is None:"},{"line_number":80,"context_line":"            return CONF.list_limit"},{"line_number":81,"context_line":"        else:"},{"line_number":82,"context_line":"            return CONF.identity.list_limit"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _check_password(self, password, user_ref):"},{"line_number":85,"context_line":"        \"\"\"Check the specified password against the data store."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASX%2F%2F4lI%3D","line":82,"in_reply_to":"AAAASX%2F%2F43g%3D","updated":"2013-08-24 22:52:50.000000000","message":"Done","commit_id":"292faf929c767e56c4e3f09f02767dd5261d7141"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0607f8164c89c67f4bbb99717773ef40e736edc6","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystone.common import sql"},{"line_number":19,"context_line":"from keystone.common.sql import migration"},{"line_number":20,"context_line":"from keystone.common import utils"},{"line_number":21,"context_line":"from keystone import config"},{"line_number":22,"context_line":"from keystone import exception"},{"line_number":23,"context_line":"from keystone import identity"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F3CU%3D","line":21,"updated":"2013-08-28 19:01:11.000000000","message":"this isn\u0027t used so should remove it.","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"257cf5a3b3f22131d68fcb047d1bc076d5342a66","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystone.common import sql"},{"line_number":19,"context_line":"from keystone.common.sql import migration"},{"line_number":20,"context_line":"from keystone.common import utils"},{"line_number":21,"context_line":"from keystone import config"},{"line_number":22,"context_line":"from keystone import exception"},{"line_number":23,"context_line":"from keystone import identity"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F2zU%3D","line":21,"in_reply_to":"AAAASn%2F%2F3CU%3D","updated":"2013-08-28 19:19:07.000000000","message":"Done","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0607f8164c89c67f4bbb99717773ef40e736edc6","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from keystone import identity"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"CONF \u003d config.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class User(sql.ModelBase, sql.DictBase):"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F3Cg%3D","line":26,"updated":"2013-08-28 19:01:11.000000000","message":"this isn\u0027t used so should remove it.","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"257cf5a3b3f22131d68fcb047d1bc076d5342a66","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from keystone import identity"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"CONF \u003d config.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class User(sql.ModelBase, sql.DictBase):"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F2zQ%3D","line":26,"in_reply_to":"AAAASn%2F%2F3Cg%3D","updated":"2013-08-28 19:19:07.000000000","message":"Done","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"25c7a7efd07c3bdbb8960b0992ea2e351db25734","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        # the query below into a join.  However, since it is likely to be a"},{"line_number":205,"context_line":"        # fairly rare occurrence to filter on more than the user_id already"},{"line_number":206,"context_line":"        # being used here, this is left as  future enhancement and until then"},{"line_number":207,"context_line":"        # we leave it for the controller to do for us."},{"line_number":208,"context_line":"        session \u003d self.get_session()"},{"line_number":209,"context_line":"        self.get_user(user_id)"},{"line_number":210,"context_line":"        query \u003d session.query(Group).join(UserGroupMembership)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FaeE%3D","line":207,"updated":"2013-09-05 00:38:20.000000000","message":"(NIT): This comment look superfluous?  It appears to be a join below.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        # the query below into a join.  However, since it is likely to be a"},{"line_number":205,"context_line":"        # fairly rare occurrence to filter on more than the user_id already"},{"line_number":206,"context_line":"        # being used here, this is left as  future enhancement and until then"},{"line_number":207,"context_line":"        # we leave it for the controller to do for us."},{"line_number":208,"context_line":"        session \u003d self.get_session()"},{"line_number":209,"context_line":"        self.get_user(user_id)"},{"line_number":210,"context_line":"        query \u003d session.query(Group).join(UserGroupMembership)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKQI%3D","line":207,"in_reply_to":"AAAASn%2F%2FaeE%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"25c7a7efd07c3bdbb8960b0992ea2e351db25734","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        # the query below into a join.  However, since it is likely to be a"},{"line_number":217,"context_line":"        # fairly rare occurrence to filter on more than the user_id already"},{"line_number":218,"context_line":"        # being used here, this is left as  future enhancement and until then"},{"line_number":219,"context_line":"        # we leave it for the controller to do for us."},{"line_number":220,"context_line":"        session \u003d self.get_session()"},{"line_number":221,"context_line":"        self.get_group(group_id)"},{"line_number":222,"context_line":"        query \u003d session.query(User).join(UserGroupMembership)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Fad8%3D","line":219,"updated":"2013-09-05 00:38:20.000000000","message":"(NIT): This comment look superfluous?  It appears to be a join below.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        # the query below into a join.  However, since it is likely to be a"},{"line_number":217,"context_line":"        # fairly rare occurrence to filter on more than the user_id already"},{"line_number":218,"context_line":"        # being used here, this is left as  future enhancement and until then"},{"line_number":219,"context_line":"        # we leave it for the controller to do for us."},{"line_number":220,"context_line":"        session \u003d self.get_session()"},{"line_number":221,"context_line":"        self.get_group(group_id)"},{"line_number":222,"context_line":"        query \u003d session.query(User).join(UserGroupMembership)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKP4%3D","line":219,"in_reply_to":"AAAASn%2F%2Fad8%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"}],"keystone/identity/controllers.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"67da3af79c9f0e25ac4c96d82f304d4f40954d06","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        query_string \u003d context[\u0027query_string\u0027].copy()"},{"line_number":422,"context_line":"        refs \u003d self.identity_api.list_domains("},{"line_number":423,"context_line":"            query_string\u003dquery_string,"},{"line_number":424,"context_line":"            filters\u003dfilters)"},{"line_number":425,"context_line":"        return DomainV3.wrap_collection(context, refs, filters, query_string)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    @controller.protected"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F%2BY8%3D","line":424,"updated":"2013-08-23 01:10:45.000000000","message":"if called in this manner (named-args) the list_domains becomes uncachable (current implementation).  Likely, if filtering occurs, it shouldn\u0027t be cached, but if no filtering is done, it might make sense to cache.  Open for discussion on this point","commit_id":"5d8c0835bf4754e82dc34aaae8345f68da168847"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"8f66059d1628b39a9b6233177874f745f6b28e99","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        query_string \u003d context[\u0027query_string\u0027].copy()"},{"line_number":422,"context_line":"        refs \u003d self.identity_api.list_domains("},{"line_number":423,"context_line":"            query_string\u003dquery_string,"},{"line_number":424,"context_line":"            filters\u003dfilters)"},{"line_number":425,"context_line":"        return DomainV3.wrap_collection(context, refs, filters, query_string)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    @controller.protected"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F90k%3D","line":424,"in_reply_to":"AAAASX%2F%2F%2BY8%3D","updated":"2013-08-23 04:57:04.000000000","message":"so to help me think about this, at which layer are we planning do the caching?","commit_id":"5d8c0835bf4754e82dc34aaae8345f68da168847"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"ead7cf345e81d68c845a67c0d70877d7de72c570","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        query_string \u003d context[\u0027query_string\u0027].copy()"},{"line_number":422,"context_line":"        refs \u003d self.identity_api.list_domains("},{"line_number":423,"context_line":"            query_string\u003dquery_string,"},{"line_number":424,"context_line":"            filters\u003dfilters)"},{"line_number":425,"context_line":"        return DomainV3.wrap_collection(context, refs, filters, query_string)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    @controller.protected"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F6yc%3D","line":424,"in_reply_to":"AAAASX%2F%2F90k%3D","updated":"2013-08-23 18:55:40.000000000","message":"caching is going to occur at the manager layer.  Methods on the manager do the caching so regardless of the backend we get the ability to cache.\n\nThis also allows us to invalidate cache intelligently based upon update and delete calls that go through the manger.\n\nAs a base (initial example) look at https://review.openstack.org/#/c/43195/ for where the cache gets setup.\n\nthe cache library doesn\u0027t do well with kwargs/uses of named args on invocation of a method (i have an idea how to solve this, but it\u0027s much more involved and harder to test on an initial pass).  Invalidations are the real sticking point.","commit_id":"5d8c0835bf4754e82dc34aaae8345f68da168847"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"67da3af79c9f0e25ac4c96d82f304d4f40954d06","unresolved":false,"context_lines":[{"line_number":627,"context_line":"        refs \u003d self.identity_api.list_users("},{"line_number":628,"context_line":"            domain_scope\u003dself._get_domain_id_for_request(context),"},{"line_number":629,"context_line":"            query_string\u003dquery_string,"},{"line_number":630,"context_line":"            filters\u003dfilters)"},{"line_number":631,"context_line":"        return UserV3.wrap_collection(context, refs, filters, query_string)"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"    @controller.filterprotected(\u0027domain_id\u0027, \u0027email\u0027, \u0027enabled\u0027, \u0027name\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F%2BY4%3D","line":630,"updated":"2013-08-23 01:10:45.000000000","message":"same as above","commit_id":"5d8c0835bf4754e82dc34aaae8345f68da168847"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":1182,"context_line":"                    query_dict\u003d{\u0027domain_id\u0027: domain_id})"},{"line_number":1183,"context_line":"                project_ids \u003d ("},{"line_number":1184,"context_line":"                    [x[\u0027id\u0027] for x in self.assignment_api.list_projects("},{"line_number":1185,"context_line":"                        list_directives\u003ddirectives)])"},{"line_number":1186,"context_line":"                base_entry \u003d copy.deepcopy(r)"},{"line_number":1187,"context_line":"                base_entry[\u0027scope\u0027].pop(\u0027domain\u0027)"},{"line_number":1188,"context_line":"                # For each project, create an equivalent role assignment"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhrA%3D","line":1185,"updated":"2013-09-03 20:01:14.000000000","message":"This function needs to check that the backend did the filtering by domain_id and do it itself if the backend didn\u0027t.","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":1182,"context_line":"                    query_dict\u003d{\u0027domain_id\u0027: domain_id})"},{"line_number":1183,"context_line":"                project_ids \u003d ("},{"line_number":1184,"context_line":"                    [x[\u0027id\u0027] for x in self.assignment_api.list_projects("},{"line_number":1185,"context_line":"                        list_directives\u003ddirectives)])"},{"line_number":1186,"context_line":"                base_entry \u003d copy.deepcopy(r)"},{"line_number":1187,"context_line":"                base_entry[\u0027scope\u0027].pop(\u0027domain\u0027)"},{"line_number":1188,"context_line":"                # For each project, create an equivalent role assignment"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fg0k%3D","line":1185,"in_reply_to":"AAAASn%2F%2FhrA%3D","updated":"2013-09-03 23:06:52.000000000","message":"List projects is guaranteed to do this filter...(independent of whether it is handled by the underlying SQL, LDAP etc.)","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":1270,"context_line":"        formatted_refs \u003d ("},{"line_number":1271,"context_line":"            [self._format_entity(x) for x in refs"},{"line_number":1272,"context_line":"             if self._filter_inherited(x)])"},{"line_number":1273,"context_line":"        for x in formatted_refs:"},{"line_number":1274,"context_line":"            print"},{"line_number":1275,"context_line":"            print (x)"},{"line_number":1276,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhqY%3D","line":1273,"updated":"2013-09-03 20:01:14.000000000","message":"remove debug code","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":1270,"context_line":"        formatted_refs \u003d ("},{"line_number":1271,"context_line":"            [self._format_entity(x) for x in refs"},{"line_number":1272,"context_line":"             if self._filter_inherited(x)])"},{"line_number":1273,"context_line":"        for x in formatted_refs:"},{"line_number":1274,"context_line":"            print"},{"line_number":1275,"context_line":"            print (x)"},{"line_number":1276,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fg0c%3D","line":1273,"in_reply_to":"AAAASn%2F%2FhqY%3D","updated":"2013-09-03 23:06:52.000000000","message":"damn!  sorry.","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack LLC"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb3w%3D","line":1,"updated":"2013-09-04 19:40:08.000000000","message":"\"filters\" should be in context and the copy pasta here can probably go away","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack LLC"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FbXM%3D","line":1,"in_reply_to":"AAAASn%2F%2Fb3w%3D","updated":"2013-09-04 22:58:56.000000000","message":"not sure which line this was for...but other changes should have fixed this","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":1156,"context_line":"                project_ids \u003d ("},{"line_number":1157,"context_line":"                    [x[\u0027id\u0027] for x in"},{"line_number":1158,"context_line":"                     self.assignment_api.list_projects_in_domain("},{"line_number":1159,"context_line":"                         domain_id, driver_hints.Hints())])"},{"line_number":1160,"context_line":"                base_entry \u003d copy.deepcopy(r)"},{"line_number":1161,"context_line":"                base_entry[\u0027scope\u0027].pop(\u0027domain\u0027)"},{"line_number":1162,"context_line":"                # For each project, create an equivalent role assignment"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Faew%3D","line":1159,"updated":"2013-09-05 00:42:46.000000000","message":"why does this one use Hints() but https://review.openstack.org/#/c/43257/37/keystone/identity/backends/ldap.py used [] for no Hints ?","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":1156,"context_line":"                project_ids \u003d ("},{"line_number":1157,"context_line":"                    [x[\u0027id\u0027] for x in"},{"line_number":1158,"context_line":"                     self.assignment_api.list_projects_in_domain("},{"line_number":1159,"context_line":"                         domain_id, driver_hints.Hints())])"},{"line_number":1160,"context_line":"                base_entry \u003d copy.deepcopy(r)"},{"line_number":1161,"context_line":"                base_entry[\u0027scope\u0027].pop(\u0027domain\u0027)"},{"line_number":1162,"context_line":"                # For each project, create an equivalent role assignment"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKNM%3D","line":1159,"in_reply_to":"AAAASn%2F%2FaU0%3D","updated":"2014-01-16 22:36:39.000000000","message":"I don\u0027t it needs to, so removed.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d7db058d4f2242865f09bb3f8b34f53509511b24","unresolved":false,"context_lines":[{"line_number":1156,"context_line":"                project_ids \u003d ("},{"line_number":1157,"context_line":"                    [x[\u0027id\u0027] for x in"},{"line_number":1158,"context_line":"                     self.assignment_api.list_projects_in_domain("},{"line_number":1159,"context_line":"                         domain_id, driver_hints.Hints())])"},{"line_number":1160,"context_line":"                base_entry \u003d copy.deepcopy(r)"},{"line_number":1161,"context_line":"                base_entry[\u0027scope\u0027].pop(\u0027domain\u0027)"},{"line_number":1162,"context_line":"                # For each project, create an equivalent role assignment"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FaU0%3D","line":1159,"in_reply_to":"AAAASn%2F%2Faew%3D","updated":"2013-09-05 01:14:35.000000000","message":"i see it the other way around-- why instantiate anything besides a list if you\u0027re not going to use any of the custom  methods?","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"}],"keystone/identity/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a0760fb1e1637351229b3cf481554e40a2fc3a68","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        if list_limit and len(group_list) \u003e list_limit:"},{"line_number":419,"context_line":"            return group_list[:list_limit]"},{"line_number":420,"context_line":"        else:"},{"line_number":421,"context_line":"            return group_list"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    @domains_configured"},{"line_number":424,"context_line":"    def list_users_in_group(self, group_id, domain_scope\u003dNone,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F7QY%3D","line":421,"updated":"2013-08-27 22:13:53.000000000","message":"consolidate copy/pasted code (e.g., 417-421 is the same as 399-403)","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"275654e7d1e7e87477eba76d655bf1b4206ba598","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        if list_limit and len(group_list) \u003e list_limit:"},{"line_number":419,"context_line":"            return group_list[:list_limit]"},{"line_number":420,"context_line":"        else:"},{"line_number":421,"context_line":"            return group_list"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    @domains_configured"},{"line_number":424,"context_line":"    def list_users_in_group(self, group_id, domain_scope\u003dNone,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2F6vY%3D","line":421,"in_reply_to":"AAAASn%2F%2F7QY%3D","updated":"2013-08-28 00:30:00.000000000","message":"Done","commit_id":"d63ee545fc1d9422a05fe9675a13194325c54fd4"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"3e9dd0e45ba0fce02f1f4cf5545251bd2cc36ab0","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        if not driver.is_domain_aware():"},{"line_number":305,"context_line":"            # We are effectively satisfying any domain_id filter by the above"},{"line_number":306,"context_line":"            # driver selection, so remove any such filter"},{"line_number":307,"context_line":"            self._mark_domain_id_filter_satisfied(query_dict_in_out)"},{"line_number":308,"context_line":"        ref_list \u003d driver.list_users("},{"line_number":309,"context_line":"            query_dict_in_out\u003dquery_dict_in_out, valid_filters\u003dvalid_filters)"},{"line_number":310,"context_line":"        if not driver.is_domain_aware():"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FxzI%3D","line":307,"updated":"2013-08-29 18:00:19.000000000","message":"Wonder if we should just return an empty list instead if domain_id is not the default domain_id. User meant for filtering by domain, and if backend does not support domain, user should get an empty list.","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d95726f9d1848137992fface585ea24422551a1f","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        if not driver.is_domain_aware():"},{"line_number":305,"context_line":"            # We are effectively satisfying any domain_id filter by the above"},{"line_number":306,"context_line":"            # driver selection, so remove any such filter"},{"line_number":307,"context_line":"            self._mark_domain_id_filter_satisfied(query_dict_in_out)"},{"line_number":308,"context_line":"        ref_list \u003d driver.list_users("},{"line_number":309,"context_line":"            query_dict_in_out\u003dquery_dict_in_out, valid_filters\u003dvalid_filters)"},{"line_number":310,"context_line":"        if not driver.is_domain_aware():"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FxuI%3D","line":307,"in_reply_to":"AAAASn%2F%2FxzI%3D","updated":"2013-08-29 18:25:33.000000000","message":"I\u0027m not so sure.  If the request is, say, \"GET /users?domain_id\u003ddomainXYZ\" and domainXYZ is a domain that is being backed by its own LDAP server, then the answer is ALL the users in that domain, not none.  That\u0027s what the code about tries to do.","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        if list_directives:"},{"line_number":252,"context_line":"            for key, filter in list_directives.filteritems():"},{"line_number":253,"context_line":"                if (filter[\u0027name\u0027] \u003d\u003d \u0027domain_id\u0027 and"},{"line_number":254,"context_line":"                        filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027):"},{"line_number":255,"context_line":"                            list_directives.markfiltersatisfied(key)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    # The actual driver calls - these are pre/post processed here as"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fhpc%3D","line":254,"updated":"2013-09-03 20:01:14.000000000","message":"suggest change to not ... and continue so can get rid of this wacky indenting.","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        if list_directives:"},{"line_number":252,"context_line":"            for key, filter in list_directives.filteritems():"},{"line_number":253,"context_line":"                if (filter[\u0027name\u0027] \u003d\u003d \u0027domain_id\u0027 and"},{"line_number":254,"context_line":"                        filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027):"},{"line_number":255,"context_line":"                            list_directives.markfiltersatisfied(key)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    # The actual driver calls - these are pre/post processed here as"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fgyk%3D","line":254,"in_reply_to":"AAAASn%2F%2Fhpc%3D","updated":"2013-09-03 23:06:52.000000000","message":"I know it is a bit yucky, but if you mean\n\nif filter[\u0027name\u0027] !\u003d \u0027domain_id\u0027:\n    continue\nif filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027:\n    list_directives.markfiltersatisfied(key)\n\n..then I personally find this logic a bit harder to follow (although, I agree, better indented!!!)","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            for key, filter in hints.filteritems():"},{"line_number":253,"context_line":"                if (filter[\u0027name\u0027] \u003d\u003d \u0027domain_id\u0027 and"},{"line_number":254,"context_line":"                        filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027):"},{"line_number":255,"context_line":"                            hints.mark_filter_satisfied(key)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    # The actual driver calls - these are pre/post processed here as"},{"line_number":258,"context_line":"    # part of the Manager layer to make sure we:"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb3U%3D","line":255,"updated":"2013-09-04 19:40:08.000000000","message":"wow... this must not be tested","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            for key, filter in hints.filteritems():"},{"line_number":253,"context_line":"                if (filter[\u0027name\u0027] \u003d\u003d \u0027domain_id\u0027 and"},{"line_number":254,"context_line":"                        filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027):"},{"line_number":255,"context_line":"                            hints.mark_filter_satisfied(key)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    # The actual driver calls - these are pre/post processed here as"},{"line_number":258,"context_line":"    # part of the Manager layer to make sure we:"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FbWs%3D","line":255,"in_reply_to":"AAAASn%2F%2Fb3U%3D","updated":"2013-09-04 22:58:56.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":310,"context_line":"            # We are effectively satisfying any domain_id filter by the above"},{"line_number":311,"context_line":"            # driver selection, so remove any such filter"},{"line_number":312,"context_line":"            self._mark_domain_id_filter_satisfied(hints)"},{"line_number":313,"context_line":"        ref_list \u003d driver.list_users(hints or driver_hints.Hints())"},{"line_number":314,"context_line":"        if not driver.is_domain_aware():"},{"line_number":315,"context_line":"            ref_list \u003d self._set_domain_id(ref_list, domain_id)"},{"line_number":316,"context_line":"        return ref_list"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FadI%3D","line":313,"updated":"2013-09-05 00:42:46.000000000","message":"why change name of variable?","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":310,"context_line":"            # We are effectively satisfying any domain_id filter by the above"},{"line_number":311,"context_line":"            # driver selection, so remove any such filter"},{"line_number":312,"context_line":"            self._mark_domain_id_filter_satisfied(hints)"},{"line_number":313,"context_line":"        ref_list \u003d driver.list_users(hints or driver_hints.Hints())"},{"line_number":314,"context_line":"        if not driver.is_domain_aware():"},{"line_number":315,"context_line":"            ref_list \u003d self._set_domain_id(ref_list, domain_id)"},{"line_number":316,"context_line":"        return ref_list"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKMo%3D","line":313,"in_reply_to":"AAAASn%2F%2FadI%3D","updated":"2014-01-16 22:36:39.000000000","message":"no match all the other functions that use \u0027ref\u0027 rather than \u0027user\u0027 as as the internal item being worked on","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":393,"context_line":"        if not driver.is_domain_aware():"},{"line_number":394,"context_line":"            # We are effectively satisfying any domain_id filter by the above"},{"line_number":395,"context_line":"            # driver selection, so remove any such filter"},{"line_number":396,"context_line":"            self._mark_domain_id_filter_satisfied(hints)"},{"line_number":397,"context_line":"        ref_list \u003d driver.list_groups_for_user("},{"line_number":398,"context_line":"            user_id, hints or driver_hints.Hints())"},{"line_number":399,"context_line":"        if not driver.is_domain_aware():"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Fadw%3D","line":396,"updated":"2013-09-05 00:42:46.000000000","message":"suggest move this code into a function (maybe into _get_domain_id_and_driver) rather than copy-pasting.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":393,"context_line":"        if not driver.is_domain_aware():"},{"line_number":394,"context_line":"            # We are effectively satisfying any domain_id filter by the above"},{"line_number":395,"context_line":"            # driver selection, so remove any such filter"},{"line_number":396,"context_line":"            self._mark_domain_id_filter_satisfied(hints)"},{"line_number":397,"context_line":"        ref_list \u003d driver.list_groups_for_user("},{"line_number":398,"context_line":"            user_id, hints or driver_hints.Hints())"},{"line_number":399,"context_line":"        if not driver.is_domain_aware():"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKMA%3D","line":396,"in_reply_to":"AAAASn%2F%2Fadw%3D","updated":"2014-01-16 22:36:39.000000000","message":"so we could do that, although that is called in other places where that code would  not be required.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":495,"context_line":"            # We are effectively satisfying any domain_id filter by the above"},{"line_number":496,"context_line":"            # driver selection, so remove any such filter"},{"line_number":497,"context_line":"            self._mark_domain_id_filter_satisfied(hints)"},{"line_number":498,"context_line":"        ref_list \u003d driver.list_users_in_group(group_id, driver_hints.Hints())"},{"line_number":499,"context_line":"        if not driver.is_domain_aware():"},{"line_number":500,"context_line":"            ref_list \u003d self._set_domain_id(ref_list, domain_id)"},{"line_number":501,"context_line":"        return ref_list"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7tY%3D","line":498,"updated":"2014-01-20 16:59:34.000000000","message":"Should this be \u0027hints or driver_hints.Hints()\u0027?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":495,"context_line":"            # We are effectively satisfying any domain_id filter by the above"},{"line_number":496,"context_line":"            # driver selection, so remove any such filter"},{"line_number":497,"context_line":"            self._mark_domain_id_filter_satisfied(hints)"},{"line_number":498,"context_line":"        ref_list \u003d driver.list_users_in_group(group_id, driver_hints.Hints())"},{"line_number":499,"context_line":"        if not driver.is_domain_aware():"},{"line_number":500,"context_line":"            ref_list \u003d self._set_domain_id(ref_list, domain_id)"},{"line_number":501,"context_line":"        return ref_list"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6nQ%3D","line":498,"in_reply_to":"AAAAUH%2F%2B7tY%3D","updated":"2014-01-20 20:30:47.000000000","message":"Nice catch!!!!","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"}],"keystone/policy/controllers.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"25c7a7efd07c3bdbb8960b0992ea2e351db25734","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    @controller.filterprotected(\u0027type\u0027)"},{"line_number":34,"context_line":"    def list_policies(self, context, filters):"},{"line_number":35,"context_line":"        hints \u003d PolicyV3.build_driver_hints(context, filters)"},{"line_number":36,"context_line":"        refs \u003d self.policy_api.list_policies()"},{"line_number":37,"context_line":"        return PolicyV3.wrap_collection(context, refs, hints\u003dhints)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FadA%3D","line":36,"updated":"2013-09-05 00:38:20.000000000","message":"Hints are not passed to the driver here.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    @controller.filterprotected(\u0027type\u0027)"},{"line_number":34,"context_line":"    def list_policies(self, context, filters):"},{"line_number":35,"context_line":"        hints \u003d PolicyV3.build_driver_hints(context, filters)"},{"line_number":36,"context_line":"        refs \u003d self.policy_api.list_policies()"},{"line_number":37,"context_line":"        return PolicyV3.wrap_collection(context, refs, hints\u003dhints)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FabI%3D","line":36,"in_reply_to":"AAAASn%2F%2FadA%3D","updated":"2014-01-16 22:36:39.000000000","message":"Agreed...as per the commit comment, policy filtering remains at the controller level","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"}],"keystone/policy/core.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"736a9b7f7713167f91e07613bd4bc471866eb353","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        ref_list \u003d self.driver.list_policies()"},{"line_number":57,"context_line":"        list_limit \u003d self.driver._get_list_limit()"},{"line_number":58,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":59,"context_line":"            return ref_list[:list_limit]"},{"line_number":60,"context_line":"        else:"},{"line_number":61,"context_line":"            return ref_list"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F2NA%3D","line":59,"updated":"2013-08-28 21:05:48.000000000","message":"Recommend Debug log if limiting the list.","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"174498fe98b6d62b75608b4f4f62293388f19159","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        ref_list \u003d self.driver.list_policies()"},{"line_number":57,"context_line":"        list_limit \u003d self.driver._get_list_limit()"},{"line_number":58,"context_line":"        if list_limit and len(ref_list) \u003e list_limit:"},{"line_number":59,"context_line":"            return ref_list[:list_limit]"},{"line_number":60,"context_line":"        else:"},{"line_number":61,"context_line":"            return ref_list"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2F1xU%3D","line":59,"in_reply_to":"AAAASn%2F%2F2NA%3D","updated":"2013-08-28 23:12:46.000000000","message":"see previous comments","commit_id":"d0576379d19d2b0ee766d66a303b0ddd5da10f61"}],"keystone/tests/filter_pagination.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0607f8164c89c67f4bbb99717773ef40e736edc6","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    _user_list \u003d []"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def tearDown(self):"},{"line_number":30,"context_line":"        super(FilterPaginationTests, self).tearDown()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def _delete_user_data(self):"},{"line_number":33,"context_line":"        for user in self._user_list:"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F3BI%3D","line":30,"updated":"2013-08-28 19:01:11.000000000","message":"remove this method it\u0027s redundant.","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"257cf5a3b3f22131d68fcb047d1bc076d5342a66","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    _user_list \u003d []"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def tearDown(self):"},{"line_number":30,"context_line":"        super(FilterPaginationTests, self).tearDown()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def _delete_user_data(self):"},{"line_number":33,"context_line":"        for user in self._user_list:"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F2zE%3D","line":30,"in_reply_to":"AAAASn%2F%2F3BI%3D","updated":"2013-08-28 19:19:07.000000000","message":"Done","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"3e9dd0e45ba0fce02f1f4cf5545251bd2cc36ab0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack LLC"},{"line_number":4,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":7,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2Fxyc%3D","line":4,"updated":"2013-08-29 18:00:19.000000000","message":"Please remove this.","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"33e04f6a2540b84f0dd9d415d2e8c6fe559ab97b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack LLC"},{"line_number":4,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":7,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FxFA%3D","line":4,"in_reply_to":"AAAASn%2F%2FxGM%3D","updated":"2013-08-29 20:39:14.000000000","message":"More information on this conversation: https://wiki.openstack.org/wiki/LegalIssuesFAQ#Copyright_Headers","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4ebbb8b23a7d392c7212d03d8b1bfa226f6b5ea2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack LLC"},{"line_number":4,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":7,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FwZE%3D","line":4,"in_reply_to":"AAAASn%2F%2FxHo%3D","updated":"2013-08-30 00:54:55.000000000","message":"I\u0027ll kill it!","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"5231291a3d02057b7aa30cc0fea0e5de5c053f17","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack LLC"},{"line_number":4,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":7,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FxHo%3D","line":4,"in_reply_to":"AAAASn%2F%2Fxr8%3D","updated":"2013-08-29 20:50:41.000000000","message":"I don\u0027t have a strong opinion on this one. As long as it is OK with the OpenStack legal guys I am cool with it.","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"b4491abfbc3e85c8597290b3ffa30464d081aac7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack LLC"},{"line_number":4,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":7,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FxGM%3D","line":4,"in_reply_to":"AAAASn%2F%2Fxr8%3D","updated":"2013-08-29 20:34:00.000000000","message":"there was a bunch of discussion about this recently... my take away was that non OpenStack Foundation copyright notices are effectively meaningless and harmless.\n\nthat said, \"OpenStack LLC\" should be replaced with \"OpenStack Foundation\" because the LLC was a rax entity that no longer exists","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d95726f9d1848137992fface585ea24422551a1f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack LLC"},{"line_number":4,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":7,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2Fxr8%3D","line":4,"in_reply_to":"AAAASn%2F%2Fxyc%3D","updated":"2013-08-29 18:25:33.000000000","message":"I\u0027m ok removing it....although has our policy changed form allowing copyright notices to be added when substantial bodies of code are new (like this whole file is)?","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"3e9dd0e45ba0fce02f1f4cf5545251bd2cc36ab0","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                          default domain. If specified, this gives the"},{"line_number":65,"context_line":"                          domain_id for the second batch"},{"line_number":66,"context_line":"        :param split: the dividing line in terms of numbers that go into batch"},{"line_number":67,"context_line":"                      one or two.  Users above split go into batch two."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        If a second batch was created, return a list of the users in that"},{"line_number":70,"context_line":"        batch, else return a list of all users"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2Fxxc%3D","line":67,"updated":"2013-08-29 18:00:19.000000000","message":"why split? if split is needed, just call _create_user_data() multiple times with different domain_id.","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"5231291a3d02057b7aa30cc0fea0e5de5c053f17","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                          default domain. If specified, this gives the"},{"line_number":65,"context_line":"                          domain_id for the second batch"},{"line_number":66,"context_line":"        :param split: the dividing line in terms of numbers that go into batch"},{"line_number":67,"context_line":"                      one or two.  Users above split go into batch two."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        If a second batch was created, return a list of the users in that"},{"line_number":70,"context_line":"        batch, else return a list of all users"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FxGQ%3D","line":67,"in_reply_to":"AAAASn%2F%2Fxrg%3D","updated":"2013-08-29 20:50:41.000000000","message":"Seem like split adds unnecessary complication.","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d95726f9d1848137992fface585ea24422551a1f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                          default domain. If specified, this gives the"},{"line_number":65,"context_line":"                          domain_id for the second batch"},{"line_number":66,"context_line":"        :param split: the dividing line in terms of numbers that go into batch"},{"line_number":67,"context_line":"                      one or two.  Users above split go into batch two."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        If a second batch was created, return a list of the users in that"},{"line_number":70,"context_line":"        batch, else return a list of all users"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2Fxrg%3D","line":67,"in_reply_to":"AAAASn%2F%2Fxxc%3D","updated":"2013-08-29 18:25:33.000000000","message":"so I did it this way  so that creating a new list would delete the old ones...to make sure one test was\u0027t polluting another...but I agree it is a bit messy.  Let me see how it could be done more cleanly","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":22,"context_line":"DEFAULT_DOMAIN_ID \u003d CONF.identity.default_domain_id"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def nameinfilter(name, hints):"},{"line_number":26,"context_line":"    filter \u003d hints.get_exact_filter_by_name(name)"},{"line_number":27,"context_line":"    return (filter and filter[\u0027name\u0027] \u003d\u003d name and"},{"line_number":28,"context_line":"            filter[\u0027compartor\u0027] \u003d\u003d \u0027equals\u0027)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb2o%3D","line":25,"updated":"2013-09-04 19:40:08.000000000","message":"thisisnotveryreadable","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":22,"context_line":"DEFAULT_DOMAIN_ID \u003d CONF.identity.default_domain_id"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def nameinfilter(name, hints):"},{"line_number":26,"context_line":"    filter \u003d hints.get_exact_filter_by_name(name)"},{"line_number":27,"context_line":"    return (filter and filter[\u0027name\u0027] \u003d\u003d name and"},{"line_number":28,"context_line":"            filter[\u0027compartor\u0027] \u003d\u003d \u0027equals\u0027)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FbVU%3D","line":25,"in_reply_to":"AAAASn%2F%2Fb2o%3D","updated":"2013-09-04 22:58:56.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":28,"context_line":"            filter[\u0027compartor\u0027] \u003d\u003d \u0027equals\u0027)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class FilterPaginationTests(object):"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _match_with_list(self, this_batch, total_list,"},{"line_number":34,"context_line":"                         batch_size\u003dNone,"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb2I%3D","line":31,"updated":"2013-09-04 19:40:08.000000000","message":"more pagination stuff that should be cut... rename the module, the class, etc","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":28,"context_line":"            filter[\u0027compartor\u0027] \u003d\u003d \u0027equals\u0027)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class FilterPaginationTests(object):"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _match_with_list(self, this_batch, total_list,"},{"line_number":34,"context_line":"                         batch_size\u003dNone,"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FbVQ%3D","line":31,"in_reply_to":"AAAASn%2F%2Fb2I%3D","updated":"2013-09-04 22:58:56.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        f \u003d getattr(self.identity_api, \u0027create_%s\u0027 % entity_type, None)"},{"line_number":51,"context_line":"        if f is None:"},{"line_number":52,"context_line":"            f \u003d getattr(self.assignment_api, \u0027create_%s\u0027 % entity_type)"},{"line_number":53,"context_line":"        return f"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _delete_entity(self, entity_type):"},{"line_number":56,"context_line":"        f \u003d getattr(self.identity_api, \u0027delete_%s\u0027 % entity_type, None)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb14%3D","line":53,"updated":"2013-09-04 19:40:08.000000000","message":"can you open a bug that bp split-identity bp merged unfinished before committing more undocumented code to work around that spectacular failure? cite the bug here so these hacks can be found and removed","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        f \u003d getattr(self.identity_api, \u0027create_%s\u0027 % entity_type, None)"},{"line_number":51,"context_line":"        if f is None:"},{"line_number":52,"context_line":"            f \u003d getattr(self.assignment_api, \u0027create_%s\u0027 % entity_type)"},{"line_number":53,"context_line":"        return f"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _delete_entity(self, entity_type):"},{"line_number":56,"context_line":"        f \u003d getattr(self.identity_api, \u0027delete_%s\u0027 % entity_type, None)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FbUM%3D","line":53,"in_reply_to":"AAAASn%2F%2Fb14%3D","updated":"2013-09-04 22:58:56.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def _create_one_entity(self, entity_type, domain_id):"},{"line_number":68,"context_line":"        # Make sure our user.id\u0027s will order before any of the default"},{"line_number":69,"context_line":"        # fixtures"},{"line_number":70,"context_line":"        new_entity \u003d {\u0027id\u0027: \u00270000\u0027 + uuid.uuid4().hex,"},{"line_number":71,"context_line":"                      \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":72,"context_line":"                      \u0027domain_id\u0027: domain_id}"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb0s%3D","line":69,"updated":"2013-09-04 19:40:08.000000000","message":"i don\u0027t think this is relevant","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"81576f6fda3f8916219d7f6fedc4942b0f343c41","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def _create_one_entity(self, entity_type, domain_id):"},{"line_number":68,"context_line":"        # Make sure our user.id\u0027s will order before any of the default"},{"line_number":69,"context_line":"        # fixtures"},{"line_number":70,"context_line":"        new_entity \u003d {\u0027id\u0027: \u00270000\u0027 + uuid.uuid4().hex,"},{"line_number":71,"context_line":"                      \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":72,"context_line":"                      \u0027domain_id\u0027: domain_id}"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2FbUA%3D","line":69,"in_reply_to":"AAAASn%2F%2Fb0s%3D","updated":"2013-09-04 22:58:56.000000000","message":"Done","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"}],"keystone/tests/filtering.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":25,"context_line":"def name_in_filter(name, hints):"},{"line_number":26,"context_line":"    filter \u003d hints.get_exact_filter_by_name(name)"},{"line_number":27,"context_line":"    return (filter and filter[\u0027name\u0027] \u003d\u003d name and"},{"line_number":28,"context_line":"            filter[\u0027compartor\u0027] \u003d\u003d \u0027equals\u0027)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class FilterTests(object):"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Facw%3D","line":28,"updated":"2013-09-05 00:42:46.000000000","message":"change \"compartor\" to \"comparator\"\n\nisn\u0027t this what hints.get_exact_filter_by_name is doing already?","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":25,"context_line":"def name_in_filter(name, hints):"},{"line_number":26,"context_line":"    filter \u003d hints.get_exact_filter_by_name(name)"},{"line_number":27,"context_line":"    return (filter and filter[\u0027name\u0027] \u003d\u003d name and"},{"line_number":28,"context_line":"            filter[\u0027compartor\u0027] \u003d\u003d \u0027equals\u0027)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class FilterTests(object):"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKKA%3D","line":28,"in_reply_to":"AAAASn%2F%2Facw%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class FilterTests(object):"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _match_with_list(self, this_batch, total_list,"},{"line_number":34,"context_line":"                         batch_size\u003dNone,"},{"line_number":35,"context_line":"                         list_start\u003dNone, list_end\u003dNone):"},{"line_number":36,"context_line":"        if batch_size is None:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2Fack%3D","line":33,"updated":"2013-09-05 00:42:46.000000000","message":"what do we need this for?","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class FilterTests(object):"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _match_with_list(self, this_batch, total_list,"},{"line_number":34,"context_line":"                         batch_size\u003dNone,"},{"line_number":35,"context_line":"                         list_start\u003dNone, list_end\u003dNone):"},{"line_number":36,"context_line":"        if batch_size is None:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKIE%3D","line":33,"in_reply_to":"AAAASn%2F%2Fack%3D","updated":"2014-01-16 22:36:39.000000000","message":"comment added","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                    found \u003d True"},{"line_number":47,"context_line":"            self.assertTrue(found)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    # TODO(henry-nash) Simplify below when Bug #1220913 is fixed to complete"},{"line_number":50,"context_line":"    # the split backend."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _create_entity(self, entity_type):"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FacY%3D","line":49,"updated":"2013-09-05 00:42:46.000000000","message":"I thought this was done already.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                    found \u003d True"},{"line_number":47,"context_line":"            self.assertTrue(found)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    # TODO(henry-nash) Simplify below when Bug #1220913 is fixed to complete"},{"line_number":50,"context_line":"    # the split backend."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _create_entity(self, entity_type):"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKHs%3D","line":49,"in_reply_to":"AAAASn%2F%2FacY%3D","updated":"2014-01-16 22:36:39.000000000","message":"removed","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4409319d6b576598dddd265d08aad063dc0acc28","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystone import config"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"CONF \u003d config.CONF"},{"line_number":22,"context_line":"DEFAULT_DOMAIN_ID \u003d CONF.identity.default_domain_id"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def name_in_filter(name, hints):"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6RQ%3D","line":22,"updated":"2014-01-20 20:41:20.000000000","message":"This is broken because the config setting doesn\u0027t get set until after imports are done. Get rid of this line.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"28acae28b370d9fd2e09cc016d8b82f8fd5768b8","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystone import config"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"CONF \u003d config.CONF"},{"line_number":22,"context_line":"DEFAULT_DOMAIN_ID \u003d CONF.identity.default_domain_id"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def name_in_filter(name, hints):"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6HQ%3D","line":22,"in_reply_to":"AAAAUH%2F%2B6RQ%3D","updated":"2014-01-20 21:20:14.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def name_in_filter(name, hints):"},{"line_number":26,"context_line":"    filter \u003d hints.get_exact_filter_by_name(name)"},{"line_number":27,"context_line":"    return (filter and filter[\u0027name\u0027] \u003d\u003d name and"},{"line_number":28,"context_line":"            filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7tI%3D","line":27,"updated":"2014-01-20 16:59:34.000000000","message":"Isn\u0027t this doing the same logic as the function called in the line above?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def name_in_filter(name, hints):"},{"line_number":26,"context_line":"    filter \u003d hints.get_exact_filter_by_name(name)"},{"line_number":27,"context_line":"    return (filter and filter[\u0027name\u0027] \u003d\u003d name and"},{"line_number":28,"context_line":"            filter[\u0027comparator\u0027] \u003d\u003d \u0027equals\u0027)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6kY%3D","line":27,"in_reply_to":"AAAAUH%2F%2B7tI%3D","updated":"2014-01-20 20:30:47.000000000","message":"Agreed…in fact, I think we ditch this function altogether...","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        self._create_entity(entity_type)(new_entity[\u0027id\u0027], new_entity)"},{"line_number":74,"context_line":"        return new_entity"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def _create_test_data(self, entity_type, number, domain_id\u003dNone):"},{"line_number":77,"context_line":"        \"\"\"Create entity test data"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        :param entity_type: type of entity to create, e.g. \u0027user\u0027, group\u0027 etc."}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7sU%3D","line":76,"updated":"2014-01-20 16:59:34.000000000","message":"Instead of None as the default you can use DEFAULT_DOMAIN_ID so that you can get rid of the conditional on line 87.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"28acae28b370d9fd2e09cc016d8b82f8fd5768b8","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        self._create_entity(entity_type)(new_entity[\u0027id\u0027], new_entity)"},{"line_number":74,"context_line":"        return new_entity"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def _create_test_data(self, entity_type, number, domain_id\u003dNone):"},{"line_number":77,"context_line":"        \"\"\"Create entity test data"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        :param entity_type: type of entity to create, e.g. \u0027user\u0027, group\u0027 etc."}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6G8%3D","line":76,"in_reply_to":"AAAAUH%2F%2B6RE%3D","updated":"2014-01-20 21:20:14.000000000","message":"OK..undone!","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4409319d6b576598dddd265d08aad063dc0acc28","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        self._create_entity(entity_type)(new_entity[\u0027id\u0027], new_entity)"},{"line_number":74,"context_line":"        return new_entity"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def _create_test_data(self, entity_type, number, domain_id\u003dNone):"},{"line_number":77,"context_line":"        \"\"\"Create entity test data"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        :param entity_type: type of entity to create, e.g. \u0027user\u0027, group\u0027 etc."}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6RE%3D","line":76,"in_reply_to":"AAAAUH%2F%2B6kw%3D","updated":"2014-01-20 20:41:20.000000000","message":"Don\u0027t do this. It doesn\u0027t work because default argument values are calculated at import time, and config isn\u0027t set until after that.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        self._create_entity(entity_type)(new_entity[\u0027id\u0027], new_entity)"},{"line_number":74,"context_line":"        return new_entity"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def _create_test_data(self, entity_type, number, domain_id\u003dNone):"},{"line_number":77,"context_line":"        \"\"\"Create entity test data"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        :param entity_type: type of entity to create, e.g. \u0027user\u0027, group\u0027 etc."}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6kw%3D","line":76,"in_reply_to":"AAAAUH%2F%2B7sU%3D","updated":"2014-01-20 20:30:47.000000000","message":"Nice…done.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"}],"keystone/tests/test_backend.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0607f8164c89c67f4bbb99717773ef40e736edc6","unresolved":false,"context_lines":[{"line_number":1695,"context_line":"    def test_list_users(self):"},{"line_number":1696,"context_line":"        users \u003d self.identity_api.list_users()"},{"line_number":1697,"context_line":"        for test_user in default_fixtures.USERS:"},{"line_number":1698,"context_line":"            found \u003d False"},{"line_number":1699,"context_line":"            for x in users:"},{"line_number":1700,"context_line":"                if x[\u0027id\u0027] \u003d\u003d test_user[\u0027id\u0027]:"},{"line_number":1701,"context_line":"                    found \u003d True"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F29E%3D","line":1698,"updated":"2013-08-28 19:01:11.000000000","message":"why did this change?","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"257cf5a3b3f22131d68fcb047d1bc076d5342a66","unresolved":false,"context_lines":[{"line_number":1695,"context_line":"    def test_list_users(self):"},{"line_number":1696,"context_line":"        users \u003d self.identity_api.list_users()"},{"line_number":1697,"context_line":"        for test_user in default_fixtures.USERS:"},{"line_number":1698,"context_line":"            found \u003d False"},{"line_number":1699,"context_line":"            for x in users:"},{"line_number":1700,"context_line":"                if x[\u0027id\u0027] \u003d\u003d test_user[\u0027id\u0027]:"},{"line_number":1701,"context_line":"                    found \u003d True"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F2xc%3D","line":1698,"in_reply_to":"AAAASn%2F%2F29E%3D","updated":"2013-08-28 19:19:07.000000000","message":"The previous test isn\u0027t safe (for instance if you set users \u003d [] just before the for loop, no error is raised).  I found this when trying to re-use this code for my filter tests.  technical, I know, it should be in a separate patch....but didn\u0027t seem worth it","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0607f8164c89c67f4bbb99717773ef40e736edc6","unresolved":false,"context_lines":[{"line_number":2903,"context_line":"        old_identity_list_limit \u003d CONF.identity.list_limit"},{"line_number":2904,"context_line":""},{"line_number":2905,"context_line":"        CONF.list_limit \u003d 10"},{"line_number":2906,"context_line":"        # Should get back the first 10 users in domain1"},{"line_number":2907,"context_line":"        query_string \u003d {\u0027domain_id\u0027: domain1[\u0027id\u0027]}"},{"line_number":2908,"context_line":"        users \u003d self.identity_api.list_users("},{"line_number":2909,"context_line":"            query_dict_in_out\u003dquery_string,"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F210%3D","line":2906,"updated":"2013-08-28 19:01:11.000000000","message":"what are the first 10 users? are they ordered somehow?","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"257cf5a3b3f22131d68fcb047d1bc076d5342a66","unresolved":false,"context_lines":[{"line_number":2903,"context_line":"        old_identity_list_limit \u003d CONF.identity.list_limit"},{"line_number":2904,"context_line":""},{"line_number":2905,"context_line":"        CONF.list_limit \u003d 10"},{"line_number":2906,"context_line":"        # Should get back the first 10 users in domain1"},{"line_number":2907,"context_line":"        query_string \u003d {\u0027domain_id\u0027: domain1[\u0027id\u0027]}"},{"line_number":2908,"context_line":"        users \u003d self.identity_api.list_users("},{"line_number":2909,"context_line":"            query_dict_in_out\u003dquery_string,"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F2xQ%3D","line":2906,"in_reply_to":"AAAASn%2F%2F210%3D","updated":"2013-08-28 19:19:07.000000000","message":"Sorry, you\u0027re right...this is hang over comment form the pagination version of this test (when thing ARE ordered).","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0607f8164c89c67f4bbb99717773ef40e736edc6","unresolved":false,"context_lines":[{"line_number":2915,"context_line":""},{"line_number":2916,"context_line":"        # Override with driver specific limit"},{"line_number":2917,"context_line":"        CONF.identity_list_limit \u003d 5"},{"line_number":2918,"context_line":"        # Should get back the first 5 users in domain1"},{"line_number":2919,"context_line":"        query_string \u003d {\u0027domain_id\u0027: domain1[\u0027id\u0027]}"},{"line_number":2920,"context_line":"        users \u003d self.identity_api.list_users("},{"line_number":2921,"context_line":"            query_dict_in_out\u003dquery_string,"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F21Y%3D","line":2918,"updated":"2013-08-28 19:01:11.000000000","message":"what are the first 5 users? are they ordered somehow?","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"257cf5a3b3f22131d68fcb047d1bc076d5342a66","unresolved":false,"context_lines":[{"line_number":2915,"context_line":""},{"line_number":2916,"context_line":"        # Override with driver specific limit"},{"line_number":2917,"context_line":"        CONF.identity_list_limit \u003d 5"},{"line_number":2918,"context_line":"        # Should get back the first 5 users in domain1"},{"line_number":2919,"context_line":"        query_string \u003d {\u0027domain_id\u0027: domain1[\u0027id\u0027]}"},{"line_number":2920,"context_line":"        users \u003d self.identity_api.list_users("},{"line_number":2921,"context_line":"            query_dict_in_out\u003dquery_string,"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F2xM%3D","line":2918,"in_reply_to":"AAAASn%2F%2F21Y%3D","updated":"2013-08-28 19:19:07.000000000","message":"as above","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"3e9dd0e45ba0fce02f1f4cf5545251bd2cc36ab0","unresolved":false,"context_lines":[{"line_number":1744,"context_line":"            for x in users:"},{"line_number":1745,"context_line":"                if x[\u0027id\u0027] \u003d\u003d test_user[\u0027id\u0027]:"},{"line_number":1746,"context_line":"                    found \u003d True"},{"line_number":1747,"context_line":"            self.assertTrue(found)"},{"line_number":1748,"context_line":""},{"line_number":1749,"context_line":"    def test_list_groups(self):"},{"line_number":1750,"context_line":"        group1 \u003d {"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FxyA%3D","line":1747,"updated":"2013-08-29 18:00:19.000000000","message":"why is this change necessary?","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"5231291a3d02057b7aa30cc0fea0e5de5c053f17","unresolved":false,"context_lines":[{"line_number":1744,"context_line":"            for x in users:"},{"line_number":1745,"context_line":"                if x[\u0027id\u0027] \u003d\u003d test_user[\u0027id\u0027]:"},{"line_number":1746,"context_line":"                    found \u003d True"},{"line_number":1747,"context_line":"            self.assertTrue(found)"},{"line_number":1748,"context_line":""},{"line_number":1749,"context_line":"    def test_list_groups(self):"},{"line_number":1750,"context_line":"        group1 \u003d {"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FxA4%3D","line":1747,"in_reply_to":"AAAASn%2F%2FxrI%3D","updated":"2013-08-29 20:50:41.000000000","message":"yeah, sorry I missed that one.","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d95726f9d1848137992fface585ea24422551a1f","unresolved":false,"context_lines":[{"line_number":1744,"context_line":"            for x in users:"},{"line_number":1745,"context_line":"                if x[\u0027id\u0027] \u003d\u003d test_user[\u0027id\u0027]:"},{"line_number":1746,"context_line":"                    found \u003d True"},{"line_number":1747,"context_line":"            self.assertTrue(found)"},{"line_number":1748,"context_line":""},{"line_number":1749,"context_line":"    def test_list_groups(self):"},{"line_number":1750,"context_line":"        group1 \u003d {"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FxrI%3D","line":1747,"in_reply_to":"AAAASn%2F%2FxyA%3D","updated":"2013-08-29 18:25:33.000000000","message":"see comment on earlier patch....the code isn\u0027t safe (i.e. if we you set users\u003d[] before going into the for loop, you get no error.  I found this while tryring to copy this code to use in my new tests below.  If preferred, I can split this out and make it a separate patch.","commit_id":"8296ce890154c6680a4cfb890a2f81b4a0aadbe0"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ee3e89a0163cab31f1f9d2120aa8177cdd7e7362","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from keystone.openstack.common import timeutils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import default_fixtures"},{"line_number":30,"context_line":"import filter_pagination"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"CONF \u003d config.CONF"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fgaw%3D","line":30,"updated":"2013-09-04 00:20:15.000000000","message":"we want to eliminate relative imports, which is only recently possible... not propagate them","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1702bf36903aded8134fa4d349b218c4e69301a9","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from keystone.openstack.common import timeutils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import default_fixtures"},{"line_number":30,"context_line":"import filter_pagination"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"CONF \u003d config.CONF"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fe7Q%3D","line":30,"in_reply_to":"AAAASn%2F%2Fgaw%3D","updated":"2013-09-04 10:30:50.000000000","message":"Done","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ee3e89a0163cab31f1f9d2120aa8177cdd7e7362","unresolved":false,"context_lines":[{"line_number":1746,"context_line":"            for x in users:"},{"line_number":1747,"context_line":"                if x[\u0027id\u0027] \u003d\u003d test_user[\u0027id\u0027]:"},{"line_number":1748,"context_line":"                    found \u003d True"},{"line_number":1749,"context_line":"            self.assertTrue(found)"},{"line_number":1750,"context_line":""},{"line_number":1751,"context_line":"    def test_list_groups(self):"},{"line_number":1752,"context_line":"        group1 \u003d {"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fgag%3D","line":1749,"updated":"2013-09-04 00:20:15.000000000","message":"what was the point of this change?","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4032a8b1103488234a6686a8822d8a160d4fdd56","unresolved":false,"context_lines":[{"line_number":1746,"context_line":"            for x in users:"},{"line_number":1747,"context_line":"                if x[\u0027id\u0027] \u003d\u003d test_user[\u0027id\u0027]:"},{"line_number":1748,"context_line":"                    found \u003d True"},{"line_number":1749,"context_line":"            self.assertTrue(found)"},{"line_number":1750,"context_line":""},{"line_number":1751,"context_line":"    def test_list_groups(self):"},{"line_number":1752,"context_line":"        group1 \u003d {"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FdkM%3D","line":1749,"in_reply_to":"AAAASn%2F%2Fe8U%3D","updated":"2013-09-04 14:16:37.000000000","message":"i\u0027d be curious... other than memory usage, they should have the same behavior afaict","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1702bf36903aded8134fa4d349b218c4e69301a9","unresolved":false,"context_lines":[{"line_number":1746,"context_line":"            for x in users:"},{"line_number":1747,"context_line":"                if x[\u0027id\u0027] \u003d\u003d test_user[\u0027id\u0027]:"},{"line_number":1748,"context_line":"                    found \u003d True"},{"line_number":1749,"context_line":"            self.assertTrue(found)"},{"line_number":1750,"context_line":""},{"line_number":1751,"context_line":"    def test_list_groups(self):"},{"line_number":1752,"context_line":"        group1 \u003d {"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fe8U%3D","line":1749,"in_reply_to":"AAAASn%2F%2Fgag%3D","updated":"2013-09-04 10:30:50.000000000","message":"The code is unsafe (which I found when I tried to copy it and re-use it).  I\u0027ll remove and submit under separate bug fix.","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e391d38c39ec85047bc19ad4b78d09aaf09fe836","unresolved":false,"context_lines":[{"line_number":3167,"context_line":"            query_string \u003d {\u0027domain_id\u0027: domain1[\u0027id\u0027]}"},{"line_number":3168,"context_line":"            hints \u003d driver_hints.Hints("},{"line_number":3169,"context_line":"                query_dict\u003dquery_string,"},{"line_number":3170,"context_line":"                supported_filters\u003dsupported_filters)"},{"line_number":3171,"context_line":"            entities \u003d self._list_entities(entity)(hints\u003dhints)"},{"line_number":3172,"context_line":"            self.assertEqual(len(entities), 14)"},{"line_number":3173,"context_line":"            self._match_with_list(entities, domain1_entity_list)"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2Fa9M%3D","line":3170,"updated":"2013-09-04 22:25:42.000000000","message":"!","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"020fff62981f4743262605a1c80f17e58351b394","unresolved":false,"context_lines":[{"line_number":3167,"context_line":"            query_string \u003d {\u0027domain_id\u0027: domain1[\u0027id\u0027]}"},{"line_number":3168,"context_line":"            hints \u003d driver_hints.Hints("},{"line_number":3169,"context_line":"                query_dict\u003dquery_string,"},{"line_number":3170,"context_line":"                supported_filters\u003dsupported_filters)"},{"line_number":3171,"context_line":"            entities \u003d self._list_entities(entity)(hints\u003dhints)"},{"line_number":3172,"context_line":"            self.assertEqual(len(entities), 14)"},{"line_number":3173,"context_line":"            self._match_with_list(entities, domain1_entity_list)"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2Faqk%3D","line":3170,"in_reply_to":"AAAASn%2F%2Fa9M%3D","updated":"2013-09-04 23:32:35.000000000","message":"Done","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e391d38c39ec85047bc19ad4b78d09aaf09fe836","unresolved":false,"context_lines":[{"line_number":3178,"context_line":"            query_string \u003d {\u0027name\u0027: domain1_entity_list[10][\u0027name\u0027]}"},{"line_number":3179,"context_line":"            hints \u003d driver_hints.Hints("},{"line_number":3180,"context_line":"                query_dict\u003dquery_string,"},{"line_number":3181,"context_line":"                supported_filters\u003dsupported_filters)"},{"line_number":3182,"context_line":"            entities \u003d self._list_entities(entity)(hints\u003dhints)"},{"line_number":3183,"context_line":"            self.assertEqual(len(entities), 1)"},{"line_number":3184,"context_line":"            self.assertEqual(entities[0][\u0027id\u0027], domain1_entity_list[10][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2Fa9I%3D","line":3181,"updated":"2013-09-04 22:25:42.000000000","message":"!","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"020fff62981f4743262605a1c80f17e58351b394","unresolved":false,"context_lines":[{"line_number":3178,"context_line":"            query_string \u003d {\u0027name\u0027: domain1_entity_list[10][\u0027name\u0027]}"},{"line_number":3179,"context_line":"            hints \u003d driver_hints.Hints("},{"line_number":3180,"context_line":"                query_dict\u003dquery_string,"},{"line_number":3181,"context_line":"                supported_filters\u003dsupported_filters)"},{"line_number":3182,"context_line":"            entities \u003d self._list_entities(entity)(hints\u003dhints)"},{"line_number":3183,"context_line":"            self.assertEqual(len(entities), 1)"},{"line_number":3184,"context_line":"            self.assertEqual(entities[0][\u0027id\u0027], domain1_entity_list[10][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2Faqg%3D","line":3181,"in_reply_to":"AAAASn%2F%2Fa9I%3D","updated":"2013-09-04 23:32:35.000000000","message":"Done","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e391d38c39ec85047bc19ad4b78d09aaf09fe836","unresolved":false,"context_lines":[{"line_number":3233,"context_line":"        query_string \u003d {\u0027name__icontains\u0027: \u0027ministry\u0027}"},{"line_number":3234,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":3235,"context_line":"            query_dict\u003dquery_string,"},{"line_number":3236,"context_line":"            supported_filters\u003dsupported_filters)"},{"line_number":3237,"context_line":"        users \u003d self.identity_api.list_users(hints\u003dhints)"},{"line_number":3238,"context_line":"        self.assertEqual(len(users), 5)"},{"line_number":3239,"context_line":"        self._match_with_list(users, user_list,"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2Fa9E%3D","line":3236,"updated":"2013-09-04 22:25:42.000000000","message":"!","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"020fff62981f4743262605a1c80f17e58351b394","unresolved":false,"context_lines":[{"line_number":3233,"context_line":"        query_string \u003d {\u0027name__icontains\u0027: \u0027ministry\u0027}"},{"line_number":3234,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":3235,"context_line":"            query_dict\u003dquery_string,"},{"line_number":3236,"context_line":"            supported_filters\u003dsupported_filters)"},{"line_number":3237,"context_line":"        users \u003d self.identity_api.list_users(hints\u003dhints)"},{"line_number":3238,"context_line":"        self.assertEqual(len(users), 5)"},{"line_number":3239,"context_line":"        self._match_with_list(users, user_list,"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2Faqc%3D","line":3236,"in_reply_to":"AAAASn%2F%2Fa9E%3D","updated":"2013-09-04 23:32:35.000000000","message":"Done","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e391d38c39ec85047bc19ad4b78d09aaf09fe836","unresolved":false,"context_lines":[{"line_number":3243,"context_line":"        query_string \u003d {\u0027name__istartswith\u0027: \u0027The\u0027}"},{"line_number":3244,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":3245,"context_line":"            query_dict\u003dquery_string,"},{"line_number":3246,"context_line":"            supported_filters\u003dsupported_filters)"},{"line_number":3247,"context_line":"        users \u003d self.identity_api.list_users(hints\u003dhints)"},{"line_number":3248,"context_line":"        self.assertEqual(len(users), 6)"},{"line_number":3249,"context_line":"        self._match_with_list(users, user_list,"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2Fa9A%3D","line":3246,"updated":"2013-09-04 22:25:42.000000000","message":"!","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"020fff62981f4743262605a1c80f17e58351b394","unresolved":false,"context_lines":[{"line_number":3243,"context_line":"        query_string \u003d {\u0027name__istartswith\u0027: \u0027The\u0027}"},{"line_number":3244,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":3245,"context_line":"            query_dict\u003dquery_string,"},{"line_number":3246,"context_line":"            supported_filters\u003dsupported_filters)"},{"line_number":3247,"context_line":"        users \u003d self.identity_api.list_users(hints\u003dhints)"},{"line_number":3248,"context_line":"        self.assertEqual(len(users), 6)"},{"line_number":3249,"context_line":"        self._match_with_list(users, user_list,"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2FaqY%3D","line":3246,"in_reply_to":"AAAASn%2F%2Fa9A%3D","updated":"2013-09-04 23:32:35.000000000","message":"Done","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e391d38c39ec85047bc19ad4b78d09aaf09fe836","unresolved":false,"context_lines":[{"line_number":3253,"context_line":"        query_string \u003d {\u0027name__iendswith\u0027: \u0027of\u0027}"},{"line_number":3254,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":3255,"context_line":"            query_dict\u003dquery_string,"},{"line_number":3256,"context_line":"            supported_filters\u003dsupported_filters)"},{"line_number":3257,"context_line":"        users \u003d self.identity_api.list_users(hints\u003dhints)"},{"line_number":3258,"context_line":"        self.assertEqual(len(users), 2)"},{"line_number":3259,"context_line":"        self.assertEqual(users[0][\u0027id\u0027], user_list[7][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2Fa88%3D","line":3256,"updated":"2013-09-04 22:25:42.000000000","message":"!","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"020fff62981f4743262605a1c80f17e58351b394","unresolved":false,"context_lines":[{"line_number":3253,"context_line":"        query_string \u003d {\u0027name__iendswith\u0027: \u0027of\u0027}"},{"line_number":3254,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":3255,"context_line":"            query_dict\u003dquery_string,"},{"line_number":3256,"context_line":"            supported_filters\u003dsupported_filters)"},{"line_number":3257,"context_line":"        users \u003d self.identity_api.list_users(hints\u003dhints)"},{"line_number":3258,"context_line":"        self.assertEqual(len(users), 2)"},{"line_number":3259,"context_line":"        self.assertEqual(users[0][\u0027id\u0027], user_list[7][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2FaqU%3D","line":3256,"in_reply_to":"AAAASn%2F%2Fa88%3D","updated":"2013-09-04 23:32:35.000000000","message":"Done","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e391d38c39ec85047bc19ad4b78d09aaf09fe836","unresolved":false,"context_lines":[{"line_number":3280,"context_line":"        query_string \u003d {\u0027name\u0027: \"anything\u0027 or \u0027x\u0027\u003d\u0027x\"}"},{"line_number":3281,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":3282,"context_line":"            query_dict\u003dquery_string,"},{"line_number":3283,"context_line":"            supported_filters\u003dsupported_filters)"},{"line_number":3284,"context_line":"        users \u003d self.identity_api.list_users(hints\u003dhints)"},{"line_number":3285,"context_line":"        self.assertEqual(len(users), 0)"},{"line_number":3286,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2Fa84%3D","line":3283,"updated":"2013-09-04 22:25:42.000000000","message":"!","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"020fff62981f4743262605a1c80f17e58351b394","unresolved":false,"context_lines":[{"line_number":3280,"context_line":"        query_string \u003d {\u0027name\u0027: \"anything\u0027 or \u0027x\u0027\u003d\u0027x\"}"},{"line_number":3281,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":3282,"context_line":"            query_dict\u003dquery_string,"},{"line_number":3283,"context_line":"            supported_filters\u003dsupported_filters)"},{"line_number":3284,"context_line":"        users \u003d self.identity_api.list_users(hints\u003dhints)"},{"line_number":3285,"context_line":"        self.assertEqual(len(users), 0)"},{"line_number":3286,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2FaqQ%3D","line":3283,"in_reply_to":"AAAASn%2F%2Fa84%3D","updated":"2013-09-04 23:32:35.000000000","message":"Done","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e391d38c39ec85047bc19ad4b78d09aaf09fe836","unresolved":false,"context_lines":[{"line_number":3293,"context_line":"        query_string \u003d {\u0027name\u0027: \"x\u0027; drop table group\"}"},{"line_number":3294,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":3295,"context_line":"            query_dict\u003dquery_string,"},{"line_number":3296,"context_line":"            supported_filters\u003dsupported_filters)"},{"line_number":3297,"context_line":"        groups \u003d self.identity_api.list_groups(hints\u003dhints)"},{"line_number":3298,"context_line":"        self.assertEqual(len(groups), 0)"},{"line_number":3299,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2Fa80%3D","line":3296,"updated":"2013-09-04 22:25:42.000000000","message":"!","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"020fff62981f4743262605a1c80f17e58351b394","unresolved":false,"context_lines":[{"line_number":3293,"context_line":"        query_string \u003d {\u0027name\u0027: \"x\u0027; drop table group\"}"},{"line_number":3294,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":3295,"context_line":"            query_dict\u003dquery_string,"},{"line_number":3296,"context_line":"            supported_filters\u003dsupported_filters)"},{"line_number":3297,"context_line":"        groups \u003d self.identity_api.list_groups(hints\u003dhints)"},{"line_number":3298,"context_line":"        self.assertEqual(len(groups), 0)"},{"line_number":3299,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAASn%2F%2FaqM%3D","line":3296,"in_reply_to":"AAAASn%2F%2Fa80%3D","updated":"2013-09-04 23:32:35.000000000","message":"Done","commit_id":"cc79d5c0a8d8e0115af85d8f7c36cc247dbee106"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":1805,"context_line":"        project2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":1806,"context_line":"                    \u0027domain_id\u0027: domain1[\u0027id\u0027]}"},{"line_number":1807,"context_line":"        self.assignment_api.create_project(project2[\u0027id\u0027], project2)"},{"line_number":1808,"context_line":""},{"line_number":1809,"context_line":"        project_ids \u003d ([x[\u0027id\u0027] for x in"},{"line_number":1810,"context_line":"                       self.assignment_api.list_projects_in_domain("},{"line_number":1811,"context_line":"                           domain1[\u0027id\u0027], driver_hints.Hints())])"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FacQ%3D","line":1808,"updated":"2013-09-05 00:42:46.000000000","message":"revert whitespace change.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":1805,"context_line":"        project2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":1806,"context_line":"                    \u0027domain_id\u0027: domain1[\u0027id\u0027]}"},{"line_number":1807,"context_line":"        self.assignment_api.create_project(project2[\u0027id\u0027], project2)"},{"line_number":1808,"context_line":""},{"line_number":1809,"context_line":"        project_ids \u003d ([x[\u0027id\u0027] for x in"},{"line_number":1810,"context_line":"                       self.assignment_api.list_projects_in_domain("},{"line_number":1811,"context_line":"                           domain1[\u0027id\u0027], driver_hints.Hints())])"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKHU%3D","line":1808,"in_reply_to":"AAAASn%2F%2FacQ%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"15fc6394b106dc328e967082081375e0ffbe37cd","unresolved":false,"context_lines":[{"line_number":3213,"context_line":"        # basis), need to add tests for that here."},{"line_number":3214,"context_line":""},{"line_number":3215,"context_line":"        query_string \u003d {\u0027name__icontains\u0027: \u0027ministry\u0027}"},{"line_number":3216,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":3217,"context_line":"            query_dict\u003dquery_string,"},{"line_number":3218,"context_line":"            supported_filters\u003dsupported_filters)"},{"line_number":3219,"context_line":"        users \u003d self.identity_api.list_users(hints\u003dhints)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FalA%3D","line":3216,"updated":"2013-09-04 23:52:19.000000000","message":"This test is skipped until IceHouse anyway...at which time this should be fined up to build the hints using add_filter","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":3213,"context_line":"        # basis), need to add tests for that here."},{"line_number":3214,"context_line":""},{"line_number":3215,"context_line":"        query_string \u003d {\u0027name__icontains\u0027: \u0027ministry\u0027}"},{"line_number":3216,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":3217,"context_line":"            query_dict\u003dquery_string,"},{"line_number":3218,"context_line":"            supported_filters\u003dsupported_filters)"},{"line_number":3219,"context_line":"        users \u003d self.identity_api.list_users(hints\u003dhints)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2FKGQ%3D","line":3216,"in_reply_to":"AAAASn%2F%2FalA%3D","updated":"2014-01-16 22:36:39.000000000","message":"Agreed","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1362923dce7b8eed6fcd26e523f76e163ab7e952","unresolved":false,"context_lines":[{"line_number":4006,"context_line":"            self._delete_test_data(entity, domain1_entity_list)"},{"line_number":4007,"context_line":""},{"line_number":4008,"context_line":"    def test_list_users_inexact_filtered(self):"},{"line_number":4009,"context_line":"        self.skipTest(\u0027Inexact filters do not work against MySQL\u0027)"},{"line_number":4010,"context_line":"        # Create 20 users"},{"line_number":4011,"context_line":"        user_list \u003d self._create_test_data(\u0027user\u0027, 20)"},{"line_number":4012,"context_line":"        # Set up some names that we can filter on"}],"source_content_type":"text/x-python","patch_set":52,"id":"AAAAUH%2F%2B5so%3D","line":4009,"updated":"2014-01-20 22:34:43.000000000","message":"there\u0027s a bunch of code after this that isn\u0027t going to get run. Suggest remove it.","commit_id":"8984cd265b58deae5dfba3627f597f866c8189a1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d55d8e3f2182e7dd7725d80a39e934e1ff1d061e","unresolved":false,"context_lines":[{"line_number":4006,"context_line":"            self._delete_test_data(entity, domain1_entity_list)"},{"line_number":4007,"context_line":""},{"line_number":4008,"context_line":"    def test_list_users_inexact_filtered(self):"},{"line_number":4009,"context_line":"        self.skipTest(\u0027Inexact filters do not work against MySQL\u0027)"},{"line_number":4010,"context_line":"        # Create 20 users"},{"line_number":4011,"context_line":"        user_list \u003d self._create_test_data(\u0027user\u0027, 20)"},{"line_number":4012,"context_line":"        # Set up some names that we can filter on"}],"source_content_type":"text/x-python","patch_set":52,"id":"AAAAUH%2F%2B5qQ%3D","line":4009,"in_reply_to":"AAAAUH%2F%2B5so%3D","updated":"2014-01-20 22:42:08.000000000","message":"Oops - that shouldn\u0027t be skipped - it\u0027s only case sensitive tests that won\u0027t work here - see comment at end of this method","commit_id":"8984cd265b58deae5dfba3627f597f866c8189a1"}],"keystone/tests/test_driver_hints.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def test_create_iterate_satisfy(self):"},{"line_number":26,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":27,"context_line":"            query_dict\u003d{\u0027t1\u0027: \u0027data1\u0027, \u0027t2\u0027: \u0027data2\u0027, \u0027myattr\u0027: \u0027data\u0027},"},{"line_number":28,"context_line":"            supported_filters\u003d[\u0027t1\u0027, \u0027t2\u0027, \u0027t3\u0027])"},{"line_number":29,"context_line":"        filter_count \u003d 0"},{"line_number":30,"context_line":"        for filters in hints.filters():"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb0A%3D","line":27,"updated":"2013-09-04 19:40:08.000000000","message":"this interface would fail if presented with:\n\n  name__contains\u003dfoor\u0026name__contains\u003dbar\n\nwhich is perfectly valid HTTP... i don\u0027t know if you want to deny that or not","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9ff8cd2b65cca16689184c9d86ed904546c6a4b6","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def test_create_iterate_satisfy(self):"},{"line_number":26,"context_line":"        hints \u003d driver_hints.Hints("},{"line_number":27,"context_line":"            query_dict\u003d{\u0027t1\u0027: \u0027data1\u0027, \u0027t2\u0027: \u0027data2\u0027, \u0027myattr\u0027: \u0027data\u0027},"},{"line_number":28,"context_line":"            supported_filters\u003d[\u0027t1\u0027, \u0027t2\u0027, \u0027t3\u0027])"},{"line_number":29,"context_line":"        filter_count \u003d 0"},{"line_number":30,"context_line":"        for filters in hints.filters():"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fapc%3D","line":27,"in_reply_to":"AAAASn%2F%2Fb0A%3D","updated":"2013-09-04 23:37:33.000000000","message":"let me think on that one for a follow up","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7c3e2c7df96650858b584d1a079574b74c27e218","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        filter_count \u003d 0"},{"line_number":30,"context_line":"        for filters in hints.filters():"},{"line_number":31,"context_line":"            filter_count +\u003d 1"},{"line_number":32,"context_line":"        self.assertEqual(filter_count, 2)"},{"line_number":33,"context_line":"        filter \u003d hints.get_exact_filter_by_name(\u0027t1\u0027)"},{"line_number":34,"context_line":"        self.assertEqual(filter[\u0027name\u0027], \u0027t1\u0027)"},{"line_number":35,"context_line":"        self.assertEqual(filter[\u0027value\u0027], \u0027data1\u0027)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fbzg%3D","line":32,"updated":"2013-09-04 19:40:08.000000000","message":"you\u0027re already built a list, so you can avoid the unnecessary for loop dance and just check the length:\n\n  self.assertEqual(len(hints.filters()), 2)","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9ff8cd2b65cca16689184c9d86ed904546c6a4b6","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        filter_count \u003d 0"},{"line_number":30,"context_line":"        for filters in hints.filters():"},{"line_number":31,"context_line":"            filter_count +\u003d 1"},{"line_number":32,"context_line":"        self.assertEqual(filter_count, 2)"},{"line_number":33,"context_line":"        filter \u003d hints.get_exact_filter_by_name(\u0027t1\u0027)"},{"line_number":34,"context_line":"        self.assertEqual(filter[\u0027name\u0027], \u0027t1\u0027)"},{"line_number":35,"context_line":"        self.assertEqual(filter[\u0027value\u0027], \u0027data1\u0027)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Faps%3D","line":32,"in_reply_to":"AAAASn%2F%2Fbzg%3D","updated":"2013-09-04 23:37:33.000000000","message":"good point now its a list...maybe follow up with that change","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6300a8b456d66b4e9af18320083f59e0c4458ce","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from keystone.common import driver_hints"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ListHintsTests(test.TestCase):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def test_create_iterate_satisfy(self):"},{"line_number":26,"context_line":"        hints \u003d driver_hints.Hints()"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FabM%3D","line":23,"updated":"2013-09-05 00:42:46.000000000","message":"a comment here would be nice to say what this is for.","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"89178226aa8373c74b7a58ace1494529159d8e82","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from keystone.common import driver_hints"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ListHintsTests(test.TestCase):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def test_create_iterate_satisfy(self):"},{"line_number":26,"context_line":"        hints \u003d driver_hints.Hints()"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAASn%2F%2FXFw%3D","line":23,"in_reply_to":"AAAASn%2F%2FabM%3D","updated":"2014-01-16 22:36:39.000000000","message":"Done","commit_id":"6110608e50be982aa417fdd545bfe8e92f27e25f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":27,"context_line":"        hints.add_filter(\u0027t1\u0027, \u0027data1\u0027)"},{"line_number":28,"context_line":"        hints.add_filter(\u0027t2\u0027, \u0027data2\u0027)"},{"line_number":29,"context_line":"        filter_count \u003d 0"},{"line_number":30,"context_line":"        for filters in hints.filters():"},{"line_number":31,"context_line":"            filter_count +\u003d 1"},{"line_number":32,"context_line":"        self.assertEqual(filter_count, 2)"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7k0%3D","line":29,"updated":"2014-01-20 16:59:34.000000000","message":"Lines 29 through 32 can be rewritten to just:\n\n  self.assertEqual(len(hints.filters()), 2)","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":27,"context_line":"        hints.add_filter(\u0027t1\u0027, \u0027data1\u0027)"},{"line_number":28,"context_line":"        hints.add_filter(\u0027t2\u0027, \u0027data2\u0027)"},{"line_number":29,"context_line":"        filter_count \u003d 0"},{"line_number":30,"context_line":"        for filters in hints.filters():"},{"line_number":31,"context_line":"            filter_count +\u003d 1"},{"line_number":32,"context_line":"        self.assertEqual(filter_count, 2)"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6mA%3D","line":29,"in_reply_to":"AAAAUH%2F%2B7k0%3D","updated":"2014-01-20 20:30:47.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":48,"context_line":"        hints.add_filter(\u0027t1\u0027, \u0027data1\u0027)"},{"line_number":49,"context_line":"        hints.add_filter(\u0027t2\u0027, \u0027data2\u0027)"},{"line_number":50,"context_line":"        filter_count \u003d 0"},{"line_number":51,"context_line":"        for filters in hints.filters():"},{"line_number":52,"context_line":"            filter_count +\u003d 1"},{"line_number":53,"context_line":"        self.assertEqual(filter_count, 2)"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7kY%3D","line":50,"updated":"2014-01-20 16:59:34.000000000","message":"Same as above...","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":48,"context_line":"        hints.add_filter(\u0027t1\u0027, \u0027data1\u0027)"},{"line_number":49,"context_line":"        hints.add_filter(\u0027t2\u0027, \u0027data2\u0027)"},{"line_number":50,"context_line":"        filter_count \u003d 0"},{"line_number":51,"context_line":"        for filters in hints.filters():"},{"line_number":52,"context_line":"            filter_count +\u003d 1"},{"line_number":53,"context_line":"        self.assertEqual(filter_count, 2)"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6l8%3D","line":50,"in_reply_to":"AAAAUH%2F%2B7kY%3D","updated":"2014-01-20 20:30:47.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        hints2 \u003d driver_hints.Hints()"},{"line_number":55,"context_line":"        hints2.add_filter(\u0027t4\u0027, \u0027data1\u0027)"},{"line_number":56,"context_line":"        hints2.add_filter(\u0027t5\u0027, \u0027data2\u0027)"},{"line_number":57,"context_line":"        filter_count \u003d 0"},{"line_number":58,"context_line":"        for filters in hints2.filters():"},{"line_number":59,"context_line":"            filter_count +\u003d 1"},{"line_number":60,"context_line":"        self.assertEqual(filter_count, 2)"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7kU%3D","line":57,"updated":"2014-01-20 16:59:34.000000000","message":"Same as above...","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        hints2 \u003d driver_hints.Hints()"},{"line_number":55,"context_line":"        hints2.add_filter(\u0027t4\u0027, \u0027data1\u0027)"},{"line_number":56,"context_line":"        hints2.add_filter(\u0027t5\u0027, \u0027data2\u0027)"},{"line_number":57,"context_line":"        filter_count \u003d 0"},{"line_number":58,"context_line":"        for filters in hints2.filters():"},{"line_number":59,"context_line":"            filter_count +\u003d 1"},{"line_number":60,"context_line":"        self.assertEqual(filter_count, 2)"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6l4%3D","line":57,"in_reply_to":"AAAAUH%2F%2B7kU%3D","updated":"2014-01-20 20:30:47.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"}],"keystone/tests/test_listdirectives.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c55c79bf36a81524d61299f7345b8bd83455cdd","unresolved":false,"context_lines":[{"line_number":30,"context_line":"            filter_count +\u003d 1"},{"line_number":31,"context_line":"        self.assertEquals(filter_count, 2)"},{"line_number":32,"context_line":"        fk1, filter \u003d directives.getexactfilterbyname(\u0027t1\u0027)"},{"line_number":33,"context_line":"        self.assertEquals(filter[\u0027name\u0027], \u0027t1\u0027)"},{"line_number":34,"context_line":"        self.assertEquals(filter[\u0027value\u0027], \u0027data1\u0027)"},{"line_number":35,"context_line":"        self.assertEquals(filter[\u0027comparator\u0027], \u0027equals\u0027)"},{"line_number":36,"context_line":"        self.assertEquals(filter[\u0027casesensitive\u0027], False)"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2FhoE%3D","line":33,"updated":"2013-09-03 20:01:14.000000000","message":"change to assertEqual","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f640733dada825c35f36e794de5b76cb89d35d1c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"            filter_count +\u003d 1"},{"line_number":31,"context_line":"        self.assertEquals(filter_count, 2)"},{"line_number":32,"context_line":"        fk1, filter \u003d directives.getexactfilterbyname(\u0027t1\u0027)"},{"line_number":33,"context_line":"        self.assertEquals(filter[\u0027name\u0027], \u0027t1\u0027)"},{"line_number":34,"context_line":"        self.assertEquals(filter[\u0027value\u0027], \u0027data1\u0027)"},{"line_number":35,"context_line":"        self.assertEquals(filter[\u0027comparator\u0027], \u0027equals\u0027)"},{"line_number":36,"context_line":"        self.assertEquals(filter[\u0027casesensitive\u0027], False)"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAASn%2F%2Fgyg%3D","line":33,"in_reply_to":"AAAASn%2F%2FhoE%3D","updated":"2013-09-03 23:06:52.000000000","message":"Done","commit_id":"5de89f0fa107d7dd96f40be52cd43cd5bd52f528"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ee3e89a0163cab31f1f9d2120aa8177cdd7e7362","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FgbU%3D","line":3,"updated":"2013-09-04 00:20:15.000000000","message":"you forgot to add an ibm copyright","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1702bf36903aded8134fa4d349b218c4e69301a9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fe7I%3D","line":3,"in_reply_to":"AAAASn%2F%2FgbU%3D","updated":"2013-09-04 10:30:50.000000000","message":"done :-)","commit_id":"45f71bde90f49f6e652f0d4db53e8ff501a4c6c1"}],"keystone/tests/test_v3_filters.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"186ce2b0af1897f7d4648937642c769c2879351a","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self.assertIn(self.user3[\u0027id\u0027], id_list)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def test_list_filtered_domains(self):"},{"line_number":129,"context_line":"        \"\"\"GET /domains?enabled\u003d0"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        Test Plan:"},{"line_number":132,"context_line":"        - Update policy for no protection on api"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fb%2FA%3D","line":129,"updated":"2013-09-04 19:05:54.000000000","message":"(out of scope, but...) when did this API appear? it should really be:\n\n  GET /domains?disabled\n\nthere\u0027s some incomplete docs here ... ?\n\n  https://github.com/openstack/identity-api/blob/master/openstack-identity-api/v3/src/markdown/identity-api-v3.md#list-entities-filtered-by-attribute","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9ff8cd2b65cca16689184c9d86ed904546c6a4b6","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self.assertIn(self.user3[\u0027id\u0027], id_list)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def test_list_filtered_domains(self):"},{"line_number":129,"context_line":"        \"\"\"GET /domains?enabled\u003d0"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        Test Plan:"},{"line_number":132,"context_line":"        - Update policy for no protection on api"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAASn%2F%2Fap4%3D","line":129,"in_reply_to":"AAAASn%2F%2Fb%2FA%3D","updated":"2013-09-04 23:37:33.000000000","message":"went in for Grizzly....it\u0027s what you and I agreed to at the time via IRC!  We can revise it, of course.","commit_id":"683442d70f25fee3cf931e817a25c3db23d32e22"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4409319d6b576598dddd265d08aad063dc0acc28","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"CONF \u003d config.CONF"},{"line_number":29,"context_line":"DEFAULT_DOMAIN_ID \u003d CONF.identity.default_domain_id"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class IdentityTestFilteredCase(filtering.FilterTests,"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6QY%3D","line":29,"updated":"2014-01-20 20:41:20.000000000","message":"don\u0027t do this. it\u0027s broken.","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"28acae28b370d9fd2e09cc016d8b82f8fd5768b8","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"CONF \u003d config.CONF"},{"line_number":29,"context_line":"DEFAULT_DOMAIN_ID \u003d CONF.identity.default_domain_id"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class IdentityTestFilteredCase(filtering.FilterTests,"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6Gw%3D","line":29,"in_reply_to":"AAAAUH%2F%2B6QY%3D","updated":"2014-01-20 21:20:14.000000000","message":"Done","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"}],"keystone/tests/test_v3_protection.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0607f8164c89c67f4bbb99717773ef40e736edc6","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        # the name supplied"},{"line_number":253,"context_line":"        id_list \u003d self._get_id_list_from_ref_list(r.result.get(\u0027groups\u0027))"},{"line_number":254,"context_line":"        self.assertEqual(len(id_list), 1)"},{"line_number":255,"context_line":"        self.assertIn(self.group2[\u0027id\u0027], id_list)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F20s%3D","line":255,"updated":"2013-08-28 19:01:11.000000000","message":"why were these tests removed?","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"257cf5a3b3f22131d68fcb047d1bc076d5342a66","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        # the name supplied"},{"line_number":253,"context_line":"        id_list \u003d self._get_id_list_from_ref_list(r.result.get(\u0027groups\u0027))"},{"line_number":254,"context_line":"        self.assertEqual(len(id_list), 1)"},{"line_number":255,"context_line":"        self.assertIn(self.group2[\u0027id\u0027], id_list)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F2ww%3D","line":255,"in_reply_to":"AAAASn%2F%2F20s%3D","updated":"2013-08-28 19:19:07.000000000","message":"I moved them into their own file: test_v3_filters.py","commit_id":"f7d6cafe6e9d69e0d01ea0b38a1f3c68bfd5d121"}],"keystone/trust/controllers.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f7f7141b2257a63da2946ca4ff2fe687cb88ff2","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                trust[\u0027expires_at\u0027] \u003d (timeutils.isotime"},{"line_number":209,"context_line":"                                       (trust[\u0027expires_at\u0027],"},{"line_number":210,"context_line":"                                        subsecond\u003dTrue))"},{"line_number":211,"context_line":"        return TrustV3.wrap_collection(context, trusts, hints\u003d[])"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @controller.protected()"},{"line_number":214,"context_line":"    def delete_trust(self, context, trust_id):"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B7jk%3D","line":211,"updated":"2014-01-20 16:59:34.000000000","message":"None instead of []?","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f264e881ba8853436b78c314036b1ff6821ffcb","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                trust[\u0027expires_at\u0027] \u003d (timeutils.isotime"},{"line_number":209,"context_line":"                                       (trust[\u0027expires_at\u0027],"},{"line_number":210,"context_line":"                                        subsecond\u003dTrue))"},{"line_number":211,"context_line":"        return TrustV3.wrap_collection(context, trusts, hints\u003d[])"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @controller.protected()"},{"line_number":214,"context_line":"    def delete_trust(self, context, trust_id):"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2B6mY%3D","line":211,"in_reply_to":"AAAAUH%2F%2B7jk%3D","updated":"2014-01-20 20:30:47.000000000","message":"Actually this change should be reverted…the wrap collection has hints\u003dNone as a default","commit_id":"597f0b63c5fadb99ebafa6a378e9b53d1c026242"}]}
