)]}'
{"keystone/common/controller.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"36d406546843e6867aa143374dd721e066534b56","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"            \"\"\""},{"line_number":319,"context_line":"            if type(ref_attr) is bool:"},{"line_number":320,"context_line":"                if str(val_attr).lower() \u003d\u003d \u0027false\u0027:"},{"line_number":321,"context_line":"                    val \u003d False"},{"line_number":322,"context_line":"                elif (isinstance(val_attr, basestring) and"},{"line_number":323,"context_line":"                        val_attr \u003d\u003d \u00270\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2FqL4%3D","line":320,"updated":"2014-01-10 00:33:44.000000000","message":"whilst i think it would work \u0027str\u0027 is bad py3\n\nmaybe change\n\nif isinstance(val_attr, basestring):\n    if val_attr.lower() \u003d\u003d \u0027false\u0027 or val_attr \u003d \u00270\u0027:\n        val \u003d False","commit_id":"373bc1f5f426fee03e2974b1ff06b878f0636329"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"94b9c1b1f8c17cbb9762644ab4d4ca908ccc9fe2","unresolved":false,"context_lines":[{"line_number":309,"context_line":"    def filter_by_attribute(cls, context, refs, attr):"},{"line_number":310,"context_line":"        \"\"\"Filters a list of references by query string value.\"\"\""},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        def _attr_match(ref_attr, val_attr):"},{"line_number":313,"context_line":"            \"\"\"Matches attributes allowing for booleans as strings."},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"            We test explicitly for a value that defines it as \u0027False\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BxiM%3D","line":312,"updated":"2014-01-22 09:27:09.000000000","message":"This function has now moved to keystone/common/utils as part of a patch that is now gating: https://review.openstack.org/#/c/43257/54\n\nI\u0027d suggest you rebase this change on that patch","commit_id":"e0abdab639bb3673e5f2913d479b5034ba864f8a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"94b9c1b1f8c17cbb9762644ab4d4ca908ccc9fe2","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        def _attr_match(ref_attr, val_attr):"},{"line_number":313,"context_line":"            \"\"\"Matches attributes allowing for booleans as strings."},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"            We test explicitly for a value that defines it as \u0027False\u0027,"},{"line_number":316,"context_line":"            which also means that the existence of the attribute with"},{"line_number":317,"context_line":"            no value implies \u0027True\u0027"},{"line_number":318,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Bxio%3D","line":315,"updated":"2014-01-22 09:27:09.000000000","message":"I\u0027m not sure this comment would be valid any more?","commit_id":"e0abdab639bb3673e5f2913d479b5034ba864f8a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"0f04043c3ec44e63342ebf27e08e92eba906bc26","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        def _attr_match(ref_attr, val_attr):"},{"line_number":313,"context_line":"            \"\"\"Matches attributes allowing for booleans as strings."},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"            We test explicitly for a value that defines it as \u0027False\u0027,"},{"line_number":316,"context_line":"            which also means that the existence of the attribute with"},{"line_number":317,"context_line":"            no value implies \u0027True\u0027"},{"line_number":318,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BYZU%3D","line":315,"in_reply_to":"AAAAUH%2F%2BYpU%3D","updated":"2014-01-27 14:41:48.000000000","message":"Yes you are correct, sorry!","commit_id":"e0abdab639bb3673e5f2913d479b5034ba864f8a"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"9c3bb8da4b4ff1513c6f55a40b66a726605e0f5e","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        def _attr_match(ref_attr, val_attr):"},{"line_number":313,"context_line":"            \"\"\"Matches attributes allowing for booleans as strings."},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"            We test explicitly for a value that defines it as \u0027False\u0027,"},{"line_number":316,"context_line":"            which also means that the existence of the attribute with"},{"line_number":317,"context_line":"            no value implies \u0027True\u0027"},{"line_number":318,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BYpU%3D","line":315,"in_reply_to":"AAAAUH%2F%2Bxio%3D","updated":"2014-01-27 14:05:47.000000000","message":"I think it is still valid:\n\nhttps://github.com/openstack/keystone/blob/master/keystone/openstack/common/strutils.py#L81\n\nWe test explicitly for a value which matches something in FALSE_STRINGS, otherwise we return True.","commit_id":"e0abdab639bb3673e5f2913d479b5034ba864f8a"}],"keystone/tests/test_v3_filters.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b05180c1976fc762c7464e6b543f3a282e26f07d","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            r \u003d self.get(\u0027/domains?enabled\u003d%s\u0027 % val, auth\u003dself.auth)"},{"line_number":147,"context_line":"            id_list \u003d self._get_id_list_from_ref_list(r.result.get(\u0027domains\u0027))"},{"line_number":148,"context_line":"            self.assertEqual(len(id_list), 1)"},{"line_number":149,"context_line":"            self.assertIn(self.domainC[\u0027id\u0027], id_list)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        # Now try a few ways of specifying \u0027true\u0027 when we should get back"},{"line_number":152,"context_line":"        # the other two domains, plus the default domain"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2BVD0%3D","line":149,"updated":"2014-01-28 00:13:56.000000000","message":"since you know what the list is going to look like, just assert the list. Change 148 \u0026 149 to:\n\n self.assertEqual([self.domainC[\u0027id\u0027]], id_list)","commit_id":"73fe19fabfb395e2cb150b639c52f50a6cb81b8c"}]}
