)]}'
{"keystoneclient/base.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"54ecadfcce6c5d43c2fb6aa4c5c5d16cd113dfab","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        for key, ref in kwargs.items():"},{"line_number":58,"context_line":"            if ref is None:"},{"line_number":59,"context_line":"                # drop null values"},{"line_number":60,"context_line":"                del kwargs[key]"},{"line_number":61,"context_line":"            else:"},{"line_number":62,"context_line":"                id_value \u003d getid(ref)"},{"line_number":63,"context_line":"                if id_value !\u003d ref:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F3AI%3D","line":60,"updated":"2013-07-21 16:07:57.000000000","message":"suggest \u0027continue\u0027 here so can drop a level of indentation below.","commit_id":"070129421d6cb4f8cca69f5a65db30cae7ce7e04"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"329b84b333054391b143735d3b6b6259009b402f","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        for key, ref in kwargs.items():"},{"line_number":58,"context_line":"            if ref is None:"},{"line_number":59,"context_line":"                # drop null values"},{"line_number":60,"context_line":"                del kwargs[key]"},{"line_number":61,"context_line":"            else:"},{"line_number":62,"context_line":"                id_value \u003d getid(ref)"},{"line_number":63,"context_line":"                if id_value !\u003d ref:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F2rU%3D","line":60,"in_reply_to":"AAAAQn%2F%2F3AI%3D","updated":"2013-07-22 00:22:01.000000000","message":"Done","commit_id":"070129421d6cb4f8cca69f5a65db30cae7ce7e04"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"54ecadfcce6c5d43c2fb6aa4c5c5d16cd113dfab","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                del kwargs[key]"},{"line_number":61,"context_line":"            else:"},{"line_number":62,"context_line":"                id_value \u003d getid(ref)"},{"line_number":63,"context_line":"                if id_value !\u003d ref:"},{"line_number":64,"context_line":"                    # if an object with an id was passed remove the object"},{"line_number":65,"context_line":"                    # from params and replace it with just the id."},{"line_number":66,"context_line":"                    # e.g user: User(id\u003d1) becomes user_id: 1"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F2%2F8%3D","line":63,"updated":"2013-07-21 16:07:57.000000000","message":"should this be \"is not\" rather than !\u003d, since comparing object identity?\n\nalso, suggest change to \"if id_value is ref: continue\" to drop a level of indentation.","commit_id":"070129421d6cb4f8cca69f5a65db30cae7ce7e04"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"329b84b333054391b143735d3b6b6259009b402f","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                del kwargs[key]"},{"line_number":61,"context_line":"            else:"},{"line_number":62,"context_line":"                id_value \u003d getid(ref)"},{"line_number":63,"context_line":"                if id_value !\u003d ref:"},{"line_number":64,"context_line":"                    # if an object with an id was passed remove the object"},{"line_number":65,"context_line":"                    # from params and replace it with just the id."},{"line_number":66,"context_line":"                    # e.g user: User(id\u003d1) becomes user_id: 1"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F2rQ%3D","line":63,"in_reply_to":"AAAAQn%2F%2F2%2F8%3D","updated":"2013-07-22 00:22:01.000000000","message":"Whilst i think is not would work we are not necessarily comparing identity, we will vary often be comparing integers or object to integer and whilst integer identity comparison works it\u0027s not a nice way of doing it. \n\nAlso this is how it was done in the original implementation and i\u0027m trying to change this behaviour.","commit_id":"070129421d6cb4f8cca69f5a65db30cae7ce7e04"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"54ecadfcce6c5d43c2fb6aa4c5c5d16cd113dfab","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    key \u003d None"},{"line_number":202,"context_line":"    base_url \u003d None"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def build_url(self, kwargs\u003dNone):"},{"line_number":205,"context_line":"        \"\"\"Builds a resource URL for the given kwargs."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        Given an example collection where `collection_key \u003d \u0027entities\u0027` and"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F3AQ%3D","line":204,"updated":"2013-07-21 16:07:57.000000000","message":"suggest don\u0027t call a variable kwargs unless it\u0027s **kwargs. Doesn\u0027t **kwargs work?","commit_id":"070129421d6cb4f8cca69f5a65db30cae7ce7e04"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"329b84b333054391b143735d3b6b6259009b402f","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    key \u003d None"},{"line_number":202,"context_line":"    base_url \u003d None"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def build_url(self, kwargs\u003dNone):"},{"line_number":205,"context_line":"        \"\"\"Builds a resource URL for the given kwargs."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        Given an example collection where `collection_key \u003d \u0027entities\u0027` and"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F2rM%3D","line":204,"in_reply_to":"AAAAQn%2F%2F3AQ%3D","updated":"2013-07-22 00:22:01.000000000","message":"No, this takes the kwargs from other functions as a dictionary so it can modify the object.","commit_id":"070129421d6cb4f8cca69f5a65db30cae7ce7e04"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"54ecadfcce6c5d43c2fb6aa4c5c5d16cd113dfab","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @filter_kwargs"},{"line_number":236,"context_line":"    def create(self, **kwargs):"},{"line_number":237,"context_line":"        base_url \u003d self.build_url(kwargs)"},{"line_number":238,"context_line":"        return self._create("},{"line_number":239,"context_line":"            base_url,"},{"line_number":240,"context_line":"            {self.key: kwargs},"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F2%2Bk%3D","line":237,"updated":"2013-07-21 16:07:57.000000000","message":"change \"base_url\" to \"url\". Or remove this line and put use self.build_url(kwargs) at 239.","commit_id":"070129421d6cb4f8cca69f5a65db30cae7ce7e04"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"329b84b333054391b143735d3b6b6259009b402f","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @filter_kwargs"},{"line_number":236,"context_line":"    def create(self, **kwargs):"},{"line_number":237,"context_line":"        base_url \u003d self.build_url(kwargs)"},{"line_number":238,"context_line":"        return self._create("},{"line_number":239,"context_line":"            base_url,"},{"line_number":240,"context_line":"            {self.key: kwargs},"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F2rI%3D","line":237,"in_reply_to":"AAAAQn%2F%2F2%2Bk%3D","updated":"2013-07-22 00:22:01.000000000","message":"self.build_url modifies the kwargs dict, so in places where kwargs are used in the function i extract out the build_url call. \n\nRenamed to url.","commit_id":"070129421d6cb4f8cca69f5a65db30cae7ce7e04"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"54ecadfcce6c5d43c2fb6aa4c5c5d16cd113dfab","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        \"\"\""},{"line_number":288,"context_line":"        Find a single item with attributes matching ``**kwargs``."},{"line_number":289,"context_line":"        \"\"\""},{"line_number":290,"context_line":"        base_url \u003d self.build_url(kwargs)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        rl \u003d self._list("},{"line_number":293,"context_line":"            \u0027%(base_url)s%(query)s\u0027 % {"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F2%2Bg%3D","line":290,"updated":"2013-07-21 16:07:57.000000000","message":"change \"base_url\" to \"url\"","commit_id":"070129421d6cb4f8cca69f5a65db30cae7ce7e04"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"329b84b333054391b143735d3b6b6259009b402f","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        \"\"\""},{"line_number":288,"context_line":"        Find a single item with attributes matching ``**kwargs``."},{"line_number":289,"context_line":"        \"\"\""},{"line_number":290,"context_line":"        base_url \u003d self.build_url(kwargs)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        rl \u003d self._list("},{"line_number":293,"context_line":"            \u0027%(base_url)s%(query)s\u0027 % {"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F2rE%3D","line":290,"in_reply_to":"AAAAQn%2F%2F2%2Bg%3D","updated":"2013-07-22 00:22:01.000000000","message":"Done","commit_id":"070129421d6cb4f8cca69f5a65db30cae7ce7e04"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"96e71ddadf4747cbde17144fff113f3e03585a25","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    key \u003d None"},{"line_number":205,"context_line":"    base_url \u003d None"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def build_url(self, dict_args\u003dNone):"},{"line_number":208,"context_line":"        \"\"\"Builds a resource URL for the given kwargs."},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        Given an example collection where `collection_key \u003d \u0027entities\u0027` and"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAQn%2F%2FmjU%3D","line":207,"updated":"2013-07-26 18:25:48.000000000","message":"since dict_args is being modified by this function, call it dict_args_in_out.","commit_id":"48b660ddd0072814f1c41f50aba2861e065b398e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"96e71ddadf4747cbde17144fff113f3e03585a25","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    @filter_kwargs"},{"line_number":239,"context_line":"    def create(self, **kwargs):"},{"line_number":240,"context_line":"        url \u003d self.build_url(kwargs)"},{"line_number":241,"context_line":"        return self._create("},{"line_number":242,"context_line":"            url,"},{"line_number":243,"context_line":"            {self.key: kwargs},"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAQn%2F%2Fmi4%3D","line":240,"updated":"2013-07-26 18:25:48.000000000","message":"since build_url takes a named parameter, use a named argument.\n\n url \u003d self.build_url(dict_args_in_out\u003dkwargs)\n\nthen it will be obvious that kwargs is being modified by this call.","commit_id":"48b660ddd0072814f1c41f50aba2861e065b398e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"96e71ddadf4747cbde17144fff113f3e03585a25","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        \"\"\""},{"line_number":291,"context_line":"        Find a single item with attributes matching ``**kwargs``."},{"line_number":292,"context_line":"        \"\"\""},{"line_number":293,"context_line":"        url \u003d self.build_url(kwargs)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        rl \u003d self._list("},{"line_number":296,"context_line":"            \u0027%(url)s%(query)s\u0027 % {"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAQn%2F%2Fmi0%3D","line":293,"updated":"2013-07-26 18:25:48.000000000","message":"since build_url takes a named parameter, use a named argument.\n\n url \u003d self.build_url(dict_args_in_out\u003dkwargs)\n\nthen it will be obvious that kwargs is being modified by this call.","commit_id":"48b660ddd0072814f1c41f50aba2861e065b398e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"bddd19722c82d111d69296cf5beaaffd141a2db2","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    @filter_kwargs"},{"line_number":239,"context_line":"    def create(self, **kwargs):"},{"line_number":240,"context_line":"        url \u003d self.build_url(dict_args_in_out\u003dkwargs)"},{"line_number":241,"context_line":"        return self._create("},{"line_number":242,"context_line":"            url,"},{"line_number":243,"context_line":"            {self.key: kwargs},"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2FhJM%3D","line":240,"updated":"2013-07-29 23:12:36.000000000","message":"this shows that there\u0027s probably a better way to do this. For example, rather than mutate the parameter return a tuple or dict. mutating parameters is an abomination.","commit_id":"50e405dfe6c567ecd87b646b956818d5e838f5fc"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"2924ddb3d6e4f30b3c401a26fad30f0be38bb983","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    @filter_kwargs"},{"line_number":239,"context_line":"    def create(self, **kwargs):"},{"line_number":240,"context_line":"        url \u003d self.build_url(dict_args_in_out\u003dkwargs)"},{"line_number":241,"context_line":"        return self._create("},{"line_number":242,"context_line":"            url,"},{"line_number":243,"context_line":"            {self.key: kwargs},"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2Fg1k%3D","line":240,"in_reply_to":"AAAAQn%2F%2FhJM%3D","updated":"2013-07-30 00:29:23.000000000","message":"Yes, but this was the original logic.  Why force a dictionary copy here when all we want to do is cull null values out of the Kwargs?","commit_id":"50e405dfe6c567ecd87b646b956818d5e838f5fc"}]}
