)]}'
{"keystone/common/controller.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7eac7f3a9ce09f66e4e8cfbe942864a3364e0b1f","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        return container"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    @classmethod"},{"line_number":367,"context_line":"    def limit(cls, refs, hints):"},{"line_number":368,"context_line":"        \"\"\"Limits a list of entities."},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        The underlying driver layer may have already truncated the collection"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FA50%3D","side":"PARENT","line":367,"updated":"2014-04-24 16:51:39.000000000","message":"the limit implementation is really a v3 api feature","commit_id":"de33c22df50018f1c732c93f6868b22b5def0b8f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"684d6c18a849b932ca33cee10543ec1d082c83ec","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        return container"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    @classmethod"},{"line_number":367,"context_line":"    def limit(cls, refs, hints):"},{"line_number":368,"context_line":"        \"\"\"Limits a list of entities."},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        The underlying driver layer may have already truncated the collection"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2F%2BI8%3D","side":"PARENT","line":367,"in_reply_to":"AAAAXH%2F%2FA50%3D","updated":"2014-04-24 23:37:18.000000000","message":"is it? or is it trying to make up for a limitation in the drivers?","commit_id":"de33c22df50018f1c732c93f6868b22b5def0b8f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7eac7f3a9ce09f66e4e8cfbe942864a3364e0b1f","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        return NOT_LIMITED, refs"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    @classmethod"},{"line_number":401,"context_line":"    def filter_by_attributes(cls, refs, hints):"},{"line_number":402,"context_line":"        \"\"\"Filters a list of references by filter values.\"\"\""},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        def _attr_match(ref_attr, val_attr):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FA5k%3D","side":"PARENT","line":401,"updated":"2014-04-24 16:51:39.000000000","message":"this is implementing v3 api functionality","commit_id":"de33c22df50018f1c732c93f6868b22b5def0b8f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"684d6c18a849b932ca33cee10543ec1d082c83ec","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        return NOT_LIMITED, refs"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    @classmethod"},{"line_number":401,"context_line":"    def filter_by_attributes(cls, refs, hints):"},{"line_number":402,"context_line":"        \"\"\"Filters a list of references by filter values.\"\"\""},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        def _attr_match(ref_attr, val_attr):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2F%2BJE%3D","side":"PARENT","line":401,"in_reply_to":"AAAAXH%2F%2FA5k%3D","updated":"2014-04-24 23:37:18.000000000","message":"is it? or is it trying to make up for a limitation in the drivers?","commit_id":"de33c22df50018f1c732c93f6868b22b5def0b8f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7eac7f3a9ce09f66e4e8cfbe942864a3364e0b1f","unresolved":false,"context_lines":[{"line_number":470,"context_line":"                                  keys in query_dict that are not in this list."},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        \"\"\""},{"line_number":473,"context_line":"        query_dict \u003d context[\u0027query_string\u0027]"},{"line_number":474,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"        if query_dict is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FA5U%3D","side":"PARENT","line":473,"updated":"2014-04-24 16:51:39.000000000","message":"query_string is very much within scope for the controllers to handle - it\u0027s certainly not a driver responsibility.","commit_id":"de33c22df50018f1c732c93f6868b22b5def0b8f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"684d6c18a849b932ca33cee10543ec1d082c83ec","unresolved":false,"context_lines":[{"line_number":470,"context_line":"                                  keys in query_dict that are not in this list."},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        \"\"\""},{"line_number":473,"context_line":"        query_dict \u003d context[\u0027query_string\u0027]"},{"line_number":474,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"        if query_dict is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2F98g%3D","side":"PARENT","line":473,"in_reply_to":"AAAAXH%2F%2FA5U%3D","updated":"2014-04-24 23:37:18.000000000","message":"right - but only because we call it query string. It\u0027s converted to a proper dictionary in the base application controller already so if we called it filter_args or something it would be ok.","commit_id":"de33c22df50018f1c732c93f6868b22b5def0b8f"}],"keystone/common/driver_hints.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7eac7f3a9ce09f66e4e8cfbe942864a3364e0b1f","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            if x[\u0027type\u0027] \u003d\u003d \u0027limit\u0027:"},{"line_number":140,"context_line":"                return x"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def apply_attribute_filters(self, refs):"},{"line_number":143,"context_line":"        \"\"\"Filters a list of references by filter values.\"\"\""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        def _attr_match(ref_attr, val_attr):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FA5A%3D","line":142,"updated":"2014-04-24 16:51:39.000000000","message":"this should belong to the v3 controller as it\u0027s implementing v3 api","commit_id":"51547f14996980cd2671abf6456de847c042d69c"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"684d6c18a849b932ca33cee10543ec1d082c83ec","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            if x[\u0027type\u0027] \u003d\u003d \u0027limit\u0027:"},{"line_number":140,"context_line":"                return x"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def apply_attribute_filters(self, refs):"},{"line_number":143,"context_line":"        \"\"\"Filters a list of references by filter values.\"\"\""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        def _attr_match(ref_attr, val_attr):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2F98I%3D","line":142,"in_reply_to":"AAAAXH%2F%2FA5A%3D","updated":"2014-04-24 23:37:18.000000000","message":"that\u0027s only because the v2 API doesn\u0027t implement filtering - which is a limitation of the v2 api. \n\nIf we were to have a concurrent v4 API then likely we would want this external to the controller because it\u0027s dealing with the models and not the controller.","commit_id":"51547f14996980cd2671abf6456de847c042d69c"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7eac7f3a9ce09f66e4e8cfbe942864a3364e0b1f","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        return refs"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def apply_limits(self, refs):"},{"line_number":205,"context_line":"        \"\"\"Limits a list of entities."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        The underlying driver layer may have already truncated the collection"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FA40%3D","line":204,"updated":"2014-04-24 16:51:39.000000000","message":"this should belong to the v3 controller as it\u0027s implementing v3 api","commit_id":"51547f14996980cd2671abf6456de847c042d69c"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"684d6c18a849b932ca33cee10543ec1d082c83ec","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        return refs"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def apply_limits(self, refs):"},{"line_number":205,"context_line":"        \"\"\"Limits a list of entities."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        The underlying driver layer may have already truncated the collection"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2F97w%3D","line":204,"in_reply_to":"AAAAXH%2F%2FA40%3D","updated":"2014-04-24 23:37:18.000000000","message":"Again, is it? it would appear to be limiting the results returned from a driver. This is not unique to a v3 controller other than the fact that the v2 API doesn\u0027t do it. \n\nIf we had a v4 api (which would have limiting) this would be a reusable function because there is nothing specific to the v3 object representation in this function.","commit_id":"51547f14996980cd2671abf6456de847c042d69c"}]}
