)]}'
{"troveclient/cli.py":[{"author":{"_account_id":1375,"name":"Ed Cranford","email":"ed.cranford@gmail.com","username":"ed--cranford"},"change_message_id":"0acaa9f8ae7dd63149f4cf97e015a072a7b41341","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        c2 \u003d self.new_host is not None"},{"line_number":187,"context_line":"        c3 \u003d self.new_password is not None"},{"line_number":188,"context_line":"        user_new \u003d {}"},{"line_number":189,"context_line":"        if c1 or c2 or c3:"},{"line_number":190,"context_line":"            user_new \u003d {\u0027name\u0027: self.new_name, \u0027host\u0027: self.new_host,"},{"line_number":191,"context_line":"                        \u0027password\u0027: self.new_password}"},{"line_number":192,"context_line":"            self.dbaas.users.update_attributes(self.id, self.name, user_new,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FZIM%3D","line":189,"updated":"2013-07-02 20:02:19.000000000","message":"how about \"if self.new_name or self.new_host or self.new_password:\" ?","commit_id":"1ec2eb6d63f878b2cec4ef6045a6827c40bbedc3"},{"author":{"_account_id":7796,"name":"Riddhi Shah","email":"ridhi.j.shah@gmail.com","username":"ridhi-j-shah"},"change_message_id":"466e4a7917359bf58f7b5db565420d8240500bcc","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        c2 \u003d self.new_host is not None"},{"line_number":187,"context_line":"        c3 \u003d self.new_password is not None"},{"line_number":188,"context_line":"        user_new \u003d {}"},{"line_number":189,"context_line":"        if c1 or c2 or c3:"},{"line_number":190,"context_line":"            user_new \u003d {\u0027name\u0027: self.new_name, \u0027host\u0027: self.new_host,"},{"line_number":191,"context_line":"                        \u0027password\u0027: self.new_password}"},{"line_number":192,"context_line":"            self.dbaas.users.update_attributes(self.id, self.name, user_new,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FVcY%3D","line":189,"in_reply_to":"AAAAPn%2F%2FZIM%3D","updated":"2013-07-03 19:54:01.000000000","message":"Done","commit_id":"1ec2eb6d63f878b2cec4ef6045a6827c40bbedc3"},{"author":{"_account_id":1375,"name":"Ed Cranford","email":"ed.cranford@gmail.com","username":"ed--cranford"},"change_message_id":"0acaa9f8ae7dd63149f4cf97e015a072a7b41341","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            user_new \u003d {\u0027name\u0027: self.new_name, \u0027host\u0027: self.new_host,"},{"line_number":191,"context_line":"                        \u0027password\u0027: self.new_password}"},{"line_number":192,"context_line":"            self.dbaas.users.update_attributes(self.id, self.name, user_new,"},{"line_number":193,"context_line":"                                           self.hostname)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def list(self):"},{"line_number":196,"context_line":"        \"\"\"List all the users for an instance\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FZHo%3D","line":193,"updated":"2013-07-02 20:02:19.000000000","message":"If the input\u0027s invalid, you should throw an error about required input. You might subclass BadRequest with a custom message about one or more of (name, host, password) being required.","commit_id":"1ec2eb6d63f878b2cec4ef6045a6827c40bbedc3"},{"author":{"_account_id":7796,"name":"Riddhi Shah","email":"ridhi.j.shah@gmail.com","username":"ridhi-j-shah"},"change_message_id":"466e4a7917359bf58f7b5db565420d8240500bcc","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            user_new \u003d {\u0027name\u0027: self.new_name, \u0027host\u0027: self.new_host,"},{"line_number":191,"context_line":"                        \u0027password\u0027: self.new_password}"},{"line_number":192,"context_line":"            self.dbaas.users.update_attributes(self.id, self.name, user_new,"},{"line_number":193,"context_line":"                                           self.hostname)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def list(self):"},{"line_number":196,"context_line":"        \"\"\"List all the users for an instance\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FVcU%3D","line":193,"in_reply_to":"AAAAPn%2F%2FZHo%3D","updated":"2013-07-03 19:54:01.000000000","message":"Done","commit_id":"1ec2eb6d63f878b2cec4ef6045a6827c40bbedc3"},{"author":{"_account_id":1375,"name":"Ed Cranford","email":"ed.cranford@gmail.com","username":"ed--cranford"},"change_message_id":"a01f3db9c3d7393fedc56392dc0eaa86f5871e29","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    def update_attributes(self):"},{"line_number":183,"context_line":"        \"\"\"Update attributes of a single user.\"\"\""},{"line_number":184,"context_line":"        self._require(\u0027id\u0027, \u0027name\u0027)"},{"line_number":185,"context_line":"        self._requiredarguments(\u0027new_name\u0027, \u0027new_host\u0027, \u0027new_password\u0027)"},{"line_number":186,"context_line":"        user_new \u003d {}"},{"line_number":187,"context_line":"        if self.new_name or self.new_host or self.new_password:"},{"line_number":188,"context_line":"            user_new \u003d {\u0027name\u0027: self.new_name, \u0027host\u0027: self.new_host,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F9Ds%3D","line":185,"updated":"2013-07-08 16:48:13.000000000","message":"This notation could get confusing with _require right next to it.\nMaybe something more like _require_group since one or more of that group is required?","commit_id":"758cdb90626d30d60d8bc7fa5ce7415748c41d3e"},{"author":{"_account_id":1375,"name":"Ed Cranford","email":"ed.cranford@gmail.com","username":"ed--cranford"},"change_message_id":"a01f3db9c3d7393fedc56392dc0eaa86f5871e29","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        if self.new_name or self.new_host or self.new_password:"},{"line_number":188,"context_line":"            user_new \u003d {\u0027name\u0027: self.new_name, \u0027host\u0027: self.new_host,"},{"line_number":189,"context_line":"                        \u0027password\u0027: self.new_password}"},{"line_number":190,"context_line":"        else:"},{"line_number":191,"context_line":"            user_new \u003d None"},{"line_number":192,"context_line":"        self.dbaas.users.update_attributes(self.id, self.name, user_new,"},{"line_number":193,"context_line":"                                           self.hostname)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F9F8%3D","line":190,"updated":"2013-07-08 16:48:13.000000000","message":"I bet you could just wipe 190 and 191 and be fine.","commit_id":"758cdb90626d30d60d8bc7fa5ce7415748c41d3e"},{"author":{"_account_id":1375,"name":"Ed Cranford","email":"ed.cranford@gmail.com","username":"ed--cranford"},"change_message_id":"49b64ce6c4c2f8fab19849afcef938bf575668aa","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        self._require(\u0027id\u0027, \u0027name\u0027, \u0027password\u0027, \u0027databases\u0027)"},{"line_number":163,"context_line":"        self._make_list(\u0027databases\u0027)"},{"line_number":164,"context_line":"        databases \u003d [{\u0027name\u0027: dbname} for dbname in self.databases]"},{"line_number":165,"context_line":"        if self.hostname:"},{"line_number":166,"context_line":"            users \u003d [{\u0027name\u0027: self.name, \u0027host\u0027: self.hostname,"},{"line_number":167,"context_line":"                      \u0027password\u0027: self.password, \u0027databases\u0027: databases}]"},{"line_number":168,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F5Os%3D","line":165,"updated":"2013-07-09 16:43:39.000000000","message":"Good catch. del users[0][\u0027host\u0027] would reduce a little repetition.","commit_id":"08f5803501796c9a19b9e747a8f365321e4e8815"},{"author":{"_account_id":971,"name":"Daniel Salinas","email":"imsplitbit@gmail.com","username":"imsplitbit"},"change_message_id":"5b3b394785bd6698e45162e43e9673c0d22d98da","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        self._require(\u0027id\u0027, \u0027name\u0027, \u0027password\u0027, \u0027databases\u0027)"},{"line_number":163,"context_line":"        self._make_list(\u0027databases\u0027)"},{"line_number":164,"context_line":"        databases \u003d [{\u0027name\u0027: dbname} for dbname in self.databases]"},{"line_number":165,"context_line":"        if self.hostname:"},{"line_number":166,"context_line":"            users \u003d [{\u0027name\u0027: self.name, \u0027host\u0027: self.hostname,"},{"line_number":167,"context_line":"                      \u0027password\u0027: self.password, \u0027databases\u0027: databases}]"},{"line_number":168,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F5Ig%3D","line":165,"updated":"2013-07-09 17:08:48.000000000","message":"I think this would read better as:\n\nusers \u003d [{etc...}]\nif self.hostname:\n    users[0][\u0027host\u0027] \u003d self.hostname","commit_id":"08f5803501796c9a19b9e747a8f365321e4e8815"},{"author":{"_account_id":1375,"name":"Ed Cranford","email":"ed.cranford@gmail.com","username":"ed--cranford"},"change_message_id":"859fb30bd7468f4ad5deef3122a413d8c5ee0446","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        self._require(\u0027id\u0027, \u0027name\u0027, \u0027password\u0027, \u0027databases\u0027)"},{"line_number":163,"context_line":"        self._make_list(\u0027databases\u0027)"},{"line_number":164,"context_line":"        databases \u003d [{\u0027name\u0027: dbname} for dbname in self.databases]"},{"line_number":165,"context_line":"        if self.hostname:"},{"line_number":166,"context_line":"            users \u003d [{\u0027name\u0027: self.name, \u0027host\u0027: self.hostname,"},{"line_number":167,"context_line":"                      \u0027password\u0027: self.password, \u0027databases\u0027: databases}]"},{"line_number":168,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F48Q%3D","line":165,"in_reply_to":"AAAAP3%2F%2F5Ig%3D","updated":"2013-07-09 17:59:48.000000000","message":"Even better","commit_id":"08f5803501796c9a19b9e747a8f365321e4e8815"},{"author":{"_account_id":971,"name":"Daniel Salinas","email":"imsplitbit@gmail.com","username":"imsplitbit"},"change_message_id":"5b3b394785bd6698e45162e43e9673c0d22d98da","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        self._require_group(\u0027new_name\u0027, \u0027new_host\u0027, \u0027new_password\u0027)"},{"line_number":188,"context_line":"        user_new \u003d {}"},{"line_number":189,"context_line":"        if self.new_name or self.new_host or self.new_password:"},{"line_number":190,"context_line":"            user_new \u003d {\u0027name\u0027: self.new_name, \u0027host\u0027: self.new_host,"},{"line_number":191,"context_line":"                        \u0027password\u0027: self.new_password}"},{"line_number":192,"context_line":"        self.dbaas.users.update_attributes(self.id, self.name, user_new,"},{"line_number":193,"context_line":"                                           self.hostname)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F5IQ%3D","line":190,"updated":"2013-07-09 17:08:48.000000000","message":"Agreed, breaking this down would look better.","commit_id":"08f5803501796c9a19b9e747a8f365321e4e8815"},{"author":{"_account_id":1375,"name":"Ed Cranford","email":"ed.cranford@gmail.com","username":"ed--cranford"},"change_message_id":"49b64ce6c4c2f8fab19849afcef938bf575668aa","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        self._require_group(\u0027new_name\u0027, \u0027new_host\u0027, \u0027new_password\u0027)"},{"line_number":188,"context_line":"        user_new \u003d {}"},{"line_number":189,"context_line":"        if self.new_name or self.new_host or self.new_password:"},{"line_number":190,"context_line":"            user_new \u003d {\u0027name\u0027: self.new_name, \u0027host\u0027: self.new_host,"},{"line_number":191,"context_line":"                        \u0027password\u0027: self.new_password}"},{"line_number":192,"context_line":"        self.dbaas.users.update_attributes(self.id, self.name, user_new,"},{"line_number":193,"context_line":"                                           self.hostname)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F5Oo%3D","line":190,"updated":"2013-07-09 16:43:39.000000000","message":"Do we want to include fields that are None here? I think it read better as\nif self.new_name:\n    user_new[\u0027name\u0027] \u003d new_name\nand so on","commit_id":"08f5803501796c9a19b9e747a8f365321e4e8815"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"aac7827b5ca8ccb93248a734dce18b3f888eda04","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    def update_attributes(self):"},{"line_number":183,"context_line":"        \"\"\"Update attributes of a single user.\"\"\""},{"line_number":184,"context_line":"        self._require(\u0027id\u0027, \u0027name\u0027)"},{"line_number":185,"context_line":"        self._require_group(\u0027new_name\u0027, \u0027new_host\u0027, \u0027new_password\u0027)"},{"line_number":186,"context_line":"        user_new \u003d {}"},{"line_number":187,"context_line":"        if self.new_name:"},{"line_number":188,"context_line":"            user_new[\u0027name\u0027] \u003d self.new_name"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAQn%2F%2FrYo%3D","line":185,"updated":"2013-07-25 08:41:53.000000000","message":"Minor nitpick:\n\nCan we rename this method to something like require_one_or_more_of(...), or require_at_least_one_of(...) to better indicate the method\u0027s purpose?","commit_id":"fb3b13f6ae50de6cc9e36890210e1aa3fad658a8"}],"troveclient/common.py":[{"author":{"_account_id":1375,"name":"Ed Cranford","email":"ed.cranford@gmail.com","username":"ed--cranford"},"change_message_id":"a01f3db9c3d7393fedc56392dc0eaa86f5871e29","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        return \u0027Argument \"--%s\" required.\u0027 % self.param"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"class ArgumentsRequired(Exception):"},{"line_number":198,"context_line":"    def __init__(self, *params):"},{"line_number":199,"context_line":"        self.params \u003d params"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F9Do%3D","line":197,"updated":"2013-07-08 16:48:13.000000000","message":"How about making this a special case of ArgumentRequired?","commit_id":"758cdb90626d30d60d8bc7fa5ce7415748c41d3e"},{"author":{"_account_id":1375,"name":"Ed Cranford","email":"ed.cranford@gmail.com","username":"ed--cranford"},"change_message_id":"a01f3db9c3d7393fedc56392dc0eaa86f5871e29","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def _requiredarguments(self, *params):"},{"line_number":267,"context_line":"        arguments_present \u003d False"},{"line_number":268,"context_line":"        for param in params:"},{"line_number":269,"context_line":"            if hasattr(self, param):"},{"line_number":270,"context_line":"                if getattr(self, param):"},{"line_number":271,"context_line":"                    arguments_present \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F9DQ%3D","line":268,"updated":"2013-07-08 16:48:13.000000000","message":"# One or more of params is required to be present.\n# Can be repeated with multiple groups of params.\nfor param in params:\n    if not hasattr(self, param):\n        raise ArgumentsRequired(*params)\n    if not getattr(self, param):\n        raise ArgumentsRequired(*params)","commit_id":"758cdb90626d30d60d8bc7fa5ce7415748c41d3e"},{"author":{"_account_id":1375,"name":"Ed Cranford","email":"ed.cranford@gmail.com","username":"ed--cranford"},"change_message_id":"697628b6e3434c3e26953aac0a489d92028cae3b","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def _requiredarguments(self, *params):"},{"line_number":267,"context_line":"        arguments_present \u003d False"},{"line_number":268,"context_line":"        for param in params:"},{"line_number":269,"context_line":"            if hasattr(self, param):"},{"line_number":270,"context_line":"                if getattr(self, param):"},{"line_number":271,"context_line":"                    arguments_present \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F5Yc%3D","line":268,"in_reply_to":"AAAAP3%2F%2F9DQ%3D","updated":"2013-07-09 16:02:47.000000000","message":"No, you were right. Carry on!","commit_id":"758cdb90626d30d60d8bc7fa5ce7415748c41d3e"},{"author":{"_account_id":739,"name":"Michael Basnight","email":"mbasnight@gmail.com","username":"hubcap"},"change_message_id":"77ab50bd9323b4553f37f28b2724b65b69eb868a","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        self.params \u003d params"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def __str__(self):"},{"line_number":202,"context_line":"        returnstring \u003d \u0027Specify atleast one of these arguments: \u0027"},{"line_number":203,"context_line":"        for param in self.params:"},{"line_number":204,"context_line":"            returnstring \u003d returnstring + \u0027\"--%s\" \u0027 % param"},{"line_number":205,"context_line":"        return returnstring"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2Fz7M%3D","line":202,"updated":"2013-07-22 21:32:41.000000000","message":"atleast has no spaces. \u0027at least\u0027","commit_id":"b93181c050a7dfbcf95b644371c269ca62b8959c"},{"author":{"_account_id":7796,"name":"Riddhi Shah","email":"ridhi.j.shah@gmail.com","username":"ridhi-j-shah"},"change_message_id":"65c6a5eb12f63f5dd79b145249a34f14d4a8273b","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        self.params \u003d params"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def __str__(self):"},{"line_number":202,"context_line":"        returnstring \u003d \u0027Specify atleast one of these arguments: \u0027"},{"line_number":203,"context_line":"        for param in self.params:"},{"line_number":204,"context_line":"            returnstring \u003d returnstring + \u0027\"--%s\" \u0027 % param"},{"line_number":205,"context_line":"        return returnstring"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2Fz5E%3D","line":202,"in_reply_to":"AAAAQn%2F%2Fz7M%3D","updated":"2013-07-22 21:41:31.000000000","message":"Done","commit_id":"b93181c050a7dfbcf95b644371c269ca62b8959c"},{"author":{"_account_id":739,"name":"Michael Basnight","email":"mbasnight@gmail.com","username":"hubcap"},"change_message_id":"77ab50bd9323b4553f37f28b2724b65b69eb868a","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                raise ArgumentRequired(param)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def _require_group(self, *params):"},{"line_number":267,"context_line":"    # One or more of params is required to be present."},{"line_number":268,"context_line":"        arguments_present \u003d False"},{"line_number":269,"context_line":"        for param in params:"},{"line_number":270,"context_line":"            if hasattr(self, param):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2Fz7E%3D","line":267,"updated":"2013-07-22 21:32:41.000000000","message":"indent comment","commit_id":"b93181c050a7dfbcf95b644371c269ca62b8959c"},{"author":{"_account_id":7796,"name":"Riddhi Shah","email":"ridhi.j.shah@gmail.com","username":"ridhi-j-shah"},"change_message_id":"65c6a5eb12f63f5dd79b145249a34f14d4a8273b","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                raise ArgumentRequired(param)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def _require_group(self, *params):"},{"line_number":267,"context_line":"    # One or more of params is required to be present."},{"line_number":268,"context_line":"        arguments_present \u003d False"},{"line_number":269,"context_line":"        for param in params:"},{"line_number":270,"context_line":"            if hasattr(self, param):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2Fz5A%3D","line":267,"in_reply_to":"AAAAQn%2F%2Fz7E%3D","updated":"2013-07-22 21:41:31.000000000","message":"Done","commit_id":"b93181c050a7dfbcf95b644371c269ca62b8959c"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"aac7827b5ca8ccb93248a734dce18b3f888eda04","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        for param in params:"},{"line_number":270,"context_line":"            if hasattr(self, param):"},{"line_number":271,"context_line":"                if getattr(self, param):"},{"line_number":272,"context_line":"                    arguments_present \u003d True"},{"line_number":273,"context_line":"        if arguments_present is False:"},{"line_number":274,"context_line":"            raise ArgumentsRequired(*params)"},{"line_number":275,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAQn%2F%2FraM%3D","line":272,"updated":"2013-07-25 08:41:53.000000000","message":"Another nitpick. Can we rename this to \u0027argument_present\u0027 since this would be true even if just _one_ argument were present.","commit_id":"fb3b13f6ae50de6cc9e36890210e1aa3fad658a8"}],"troveclient/users.py":[{"author":{"_account_id":1375,"name":"Ed Cranford","email":"ed.cranford@gmail.com","username":"ed--cranford"},"change_message_id":"0acaa9f8ae7dd63149f4cf97e015a072a7b41341","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        instance_id \u003d base.getid(instance)"},{"line_number":100,"context_line":"        user \u003d quote_user_host(username, hostname)"},{"line_number":101,"context_line":"        if len(newuserattr.keys()) \u003d\u003d 0:"},{"line_number":102,"context_line":"            user_dict \u003d None"},{"line_number":103,"context_line":"        user_dict \u003d {\"user\": newuserattr}"},{"line_number":104,"context_line":"        url \u003d \"/instances/%s/users/%s\" % (instance_id, user)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FZGo%3D","line":101,"updated":"2013-07-02 20:02:19.000000000","message":"You can shorten this to \"if not newuserattr:\".\n\nBut, reading this whole thing, I think 101-103 would read better as\nuser_dict \u003d {}\nif newuserattr:\n  user_dict[\u0027user\u0027] \u003d newuserattr\n\nIs there a case where you expect an empty or null newuserattr to be passed to this function and not cause an error? If it\u0027s required, throw an error. If it\u0027s not, then you can turn it into a kwarg and default it to None. Do not default it to {}, that has other problems.","commit_id":"1ec2eb6d63f878b2cec4ef6045a6827c40bbedc3"},{"author":{"_account_id":7796,"name":"Riddhi Shah","email":"ridhi.j.shah@gmail.com","username":"ridhi-j-shah"},"change_message_id":"466e4a7917359bf58f7b5db565420d8240500bcc","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        instance_id \u003d base.getid(instance)"},{"line_number":100,"context_line":"        user \u003d quote_user_host(username, hostname)"},{"line_number":101,"context_line":"        if len(newuserattr.keys()) \u003d\u003d 0:"},{"line_number":102,"context_line":"            user_dict \u003d None"},{"line_number":103,"context_line":"        user_dict \u003d {\"user\": newuserattr}"},{"line_number":104,"context_line":"        url \u003d \"/instances/%s/users/%s\" % (instance_id, user)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FY6o%3D","line":101,"in_reply_to":"AAAAPn%2F%2FZGo%3D","updated":"2013-07-03 19:54:01.000000000","message":"Done","commit_id":"1ec2eb6d63f878b2cec4ef6045a6827c40bbedc3"},{"author":{"_account_id":1375,"name":"Ed Cranford","email":"ed.cranford@gmail.com","username":"ed--cranford"},"change_message_id":"a01f3db9c3d7393fedc56392dc0eaa86f5871e29","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        instance_id \u003d base.getid(instance)"},{"line_number":100,"context_line":"        user \u003d quote_user_host(username, hostname)"},{"line_number":101,"context_line":"        user_dict \u003d {}"},{"line_number":102,"context_line":"        if not newuserattr:"},{"line_number":103,"context_line":"            newuserattr \u003d {}"},{"line_number":104,"context_line":"        else:"},{"line_number":105,"context_line":"            user_dict[\u0027user\u0027] \u003d newuserattr"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F9CY%3D","line":102,"updated":"2013-07-08 16:48:13.000000000","message":"reverse this condition, and you can drop the else clause entirely.","commit_id":"758cdb90626d30d60d8bc7fa5ce7415748c41d3e"}]}
