)]}'
{"doc/source/command-objects/project.rst":[{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"8b328a117840bd0635705b3647785bae9528fade","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    Project to display (name or ID)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"project unset"},{"line_number":200,"context_line":"------------"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Unset project details"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a7e1126_076b3af2","line":200,"range":{"start_line":200,"start_character":0,"end_line":200,"end_character":12},"updated":"2015-12-21 04:38:00.000000000","message":"nit: The ------ should have the same length with \"project unset\".","commit_id":"c238f09af702614d5b037bb3fedc69186af6243f"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"8b328a117840bd0635705b3647785bae9528fade","unresolved":false,"context_lines":[{"line_number":199,"context_line":"project unset"},{"line_number":200,"context_line":"------------"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Unset project details"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":".. program:: project unset"},{"line_number":205,"context_line":".. code:: bash"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a7e1126_a77ca6b5","line":202,"range":{"start_line":202,"start_character":14,"end_line":202,"end_character":21},"updated":"2015-12-21 04:38:00.000000000","message":"nit: details --\u003e properties\n\nIt should consistent to the comments in source code.","commit_id":"c238f09af702614d5b037bb3fedc69186af6243f"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"8b328a117840bd0635705b3647785bae9528fade","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    os project unset"},{"line_number":208,"context_line":"        --property \u003ckey\u003e"},{"line_number":209,"context_line":"        [--property \u003ckey\u003e] ..."},{"line_number":210,"context_line":"        \u003cproject\u003e"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":".. option:: --property \u003ckey\u003e"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a7e1126_a7534638","line":209,"range":{"start_line":209,"start_character":27,"end_line":209,"end_character":30},"updated":"2015-12-21 04:38:00.000000000","message":"nit: --property \u003ckey\u003e [--property \u003ckey\u003e ...]","commit_id":"c238f09af702614d5b037bb3fedc69186af6243f"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"8b328a117840bd0635705b3647785bae9528fade","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":".. option:: --property \u003ckey\u003e"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    Property key to remove from project (repeat to set multiple values)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":".. describe:: \u003cproject\u003e"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a7e1126_e724eec5","line":214,"range":{"start_line":214,"start_character":51,"end_line":214,"end_character":54},"updated":"2015-12-21 04:38:00.000000000","message":"nit: repeat to unset multiple properties\n\nPlease do not use \"value\" because we only have \"key\" for this option.","commit_id":"c238f09af702614d5b037bb3fedc69186af6243f"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"8b328a117840bd0635705b3647785bae9528fade","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":".. describe:: \u003cproject\u003e"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    Project (name or ID)"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a7e1126_791bc273","line":218,"range":{"start_line":218,"start_character":4,"end_line":218,"end_character":11},"updated":"2015-12-21 04:38:00.000000000","message":"nit: Project to modify (name or ID)\n\nIt should consistent to the comments in source code.","commit_id":"c238f09af702614d5b037bb3fedc69186af6243f"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"3affff7a5a456a52c4e07bd76c37ae136e5c7a61","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    Project to display (name or ID)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"project unset"},{"line_number":200,"context_line":"-----------"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Unset project properties"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a7e1126_9bb694f7","line":200,"range":{"start_line":200,"start_character":0,"end_line":200,"end_character":11},"updated":"2015-12-21 11:55:13.000000000","message":"It is no big deal. I hope I\u0027m not begging too much here. :)\n\nPlease make the ------ and the string above it have the same length.\n\nSince the test has a problem, I think you will post a new version anyway.\n\nThanks. :)","commit_id":"b3d6bf1c71dc9dce636bb3f474cb265b39ca75a5"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"3affff7a5a456a52c4e07bd76c37ae136e5c7a61","unresolved":false,"context_lines":[{"line_number":205,"context_line":".. code:: bash"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    os project unset"},{"line_number":208,"context_line":"        --property \u003ckey\u003e"},{"line_number":209,"context_line":"        [--property \u003ckey\u003e]"},{"line_number":210,"context_line":"        \u003cproject\u003e"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":".. option:: --property \u003ckey\u003e"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a7e1126_bb92704a","line":209,"range":{"start_line":208,"start_character":0,"end_line":209,"end_character":26},"updated":"2015-12-21 11:55:13.000000000","message":"Please make these in on line like:\n\n--property \u003ckey\u003e [--property \u003ckey\u003e ...]","commit_id":"b3d6bf1c71dc9dce636bb3f474cb265b39ca75a5"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"677d370e29f114fa6ad18e3ed5bb1c871b14e09a","unresolved":false,"context_lines":[{"line_number":205,"context_line":".. code:: bash"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    os project unset"},{"line_number":208,"context_line":"        --property \u003ckey\u003e [--property \u003ckey\u003e ...]"},{"line_number":209,"context_line":"        \u003cproject\u003e"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":".. option:: --property \u003ckey\u003e"}],"source_content_type":"text/x-rst","patch_set":17,"id":"1a7b0d38_fb94dbe2","line":208,"range":{"start_line":208,"start_character":10,"end_line":208,"end_character":18},"updated":"2015-12-25 07:47:48.000000000","message":"Can we use \"os project property unset \u003ckey\u003e ...\" since we can just unset properties","commit_id":"108ddb115d80a42a71338224a4d26a54b5dfef9e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a7736d7d21dd09ec407ea07f69c3c03b223fa662","unresolved":false,"context_lines":[{"line_number":205,"context_line":".. code:: bash"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    os project unset"},{"line_number":208,"context_line":"        --property \u003ckey\u003e [--property \u003ckey\u003e ...]"},{"line_number":209,"context_line":"        \u003cproject\u003e"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":".. option:: --property \u003ckey\u003e"}],"source_content_type":"text/x-rst","patch_set":17,"id":"1a7b0d38_186f56c6","line":208,"range":{"start_line":208,"start_character":10,"end_line":208,"end_character":18},"in_reply_to":"1a7b0d38_fb94dbe2","updated":"2015-12-26 07:28:46.000000000","message":"this is the pattern we\u0027ve establish in other commands, so this is OK by me.","commit_id":"108ddb115d80a42a71338224a4d26a54b5dfef9e"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"4c575242521827a83f018a8b0ed97314ae040c16","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    Property key to remove from project (repeat option to remove multiple properties)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    *Identity version 2 only*"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":".. describe:: \u003cproject\u003e"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"fa69d971_a961323b","line":217,"updated":"2016-01-04 14:42:18.000000000","message":"This should apply to the entire command, not just the option.  There is no v3 project unset command.","commit_id":"a2532f8cc98d6946b49497eaaa0e40f2389e3b34"}],"functional/tests/identity/v2/test_project.py":[{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"8b328a117840bd0635705b3647785bae9528fade","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self.assert_show_fields(items, fields)"},{"line_number":73,"context_line":"        project \u003d self.parse_show_as_object(raw_output)"},{"line_number":74,"context_line":"        self.assertEqual(new_project_name, project[\u0027name\u0027])"},{"line_number":75,"context_line":"        self.assertEqual(\u0027False\u0027, project[\u0027enable\u0027])"},{"line_number":76,"context_line":"        self.assertEqual(\u0027v0\u0027, project[\u0027k0\u0027])"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def test_project_show(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a7e1126_3939baa4","line":75,"range":{"start_line":75,"start_character":43,"end_line":75,"end_character":49},"updated":"2015-12-21 04:38:00.000000000","message":"I\u0027m sorry, but are you sure about this ?  I didn\u0027t dig deep into the code, but if this is wrong, how did the CI pass ?\nIf this is wrong here, then the test cases may have some other problems. I think this can be fixed in a separate patch.\n\nAnd also, please also add test cases for UnsetProject.","commit_id":"c238f09af702614d5b037bb3fedc69186af6243f"}],"openstackclient/identity/v2_0/project.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"162bb0b74d013775e69b1d23648b6c4560432ea3","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        return"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"class UnsetProject(command.Command):"},{"line_number":244,"context_line":"    \"\"\"Unset project properties\"\"\""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.UnsetProject\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_f320c64b","line":243,"range":{"start_line":243,"start_character":6,"end_line":243,"end_character":18},"updated":"2015-12-17 08:24:54.000000000","message":"try to keep the classes alphabetical, so this should go after \"show\"","commit_id":"17ff290765dd654062d801046f189a2ecbff9414"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"162bb0b74d013775e69b1d23648b6c4560432ea3","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            identity_client.tenants,"},{"line_number":271,"context_line":"            parsed_args.project,"},{"line_number":272,"context_line":"        )"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        kwargs \u003d project._info"},{"line_number":275,"context_line":"        if parsed_args.property:"},{"line_number":276,"context_line":"            for key in parsed_args.property:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_93f38273","line":273,"updated":"2015-12-17 08:24:54.000000000","message":"you can check if properties were passed in early and just exit if there are none, instead of checking \"if parsed_args.property\" later on.\n\n  if not parsed_args.property:\n    self.app.log.error(\"No changes requested\\n\")","commit_id":"17ff290765dd654062d801046f189a2ecbff9414"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"162bb0b74d013775e69b1d23648b6c4560432ea3","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        kwargs \u003d project._info"},{"line_number":275,"context_line":"        if parsed_args.property:"},{"line_number":276,"context_line":"            for key in parsed_args.property:"},{"line_number":277,"context_line":"                if key in kwargs:"},{"line_number":278,"context_line":"                    kwargs[key] \u003d None"},{"line_number":279,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_f6f8b47e","line":276,"range":{"start_line":276,"start_character":23,"end_line":276,"end_character":34},"updated":"2015-12-17 08:24:54.000000000","message":"you can do this in a bit more of a slick way using sets, where \"info\" is project._info and \"props\" is parsed_args.property:\n\n  \u003e\u003e\u003e info \u003d {\u0027a\u0027:\u0027b\u0027, \u0027c\u0027:\u0027d\u0027}\n  \u003e\u003e\u003e props \u003d [\u0027c\u0027]\n  \u003e\u003e\u003e keys \u003d set(info).difference(set(props))\n  \u003e\u003e\u003e print keys\n  set([\u0027a\u0027])\n  \u003e\u003e\u003e result \u003d {k:info[k] for k in keys}\n  \u003e\u003e\u003e print result\n  {\u0027a\u0027: \u0027b\u0027}\n\nnote that the ordering of \"difference\" is important.\n\"s.difference(t)   new set with elements in s but not in t\"\n\nthis way you are still just passing in the full dictionary to the update call, but without the props","commit_id":"17ff290765dd654062d801046f189a2ecbff9414"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"162bb0b74d013775e69b1d23648b6c4560432ea3","unresolved":false,"context_lines":[{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        # TODO(stevemar): Remove the line below when we support multitenancy"},{"line_number":325,"context_line":"        info.pop(\u0027parent_id\u0027, None)"},{"line_number":326,"context_line":"        info \u003d dict((k, v) for k, v in info.iteritems() if v)"},{"line_number":327,"context_line":"        return zip(*sorted(six.iteritems(info)))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_b3031eb8","line":326,"range":{"start_line":326,"start_character":8,"end_line":326,"end_character":12},"updated":"2015-12-17 08:24:54.000000000","message":"looks like this is where the py34 error is happening.\n\ninstead of displaying them as | key | value | in the table, we generally like to show properties in the form of:\n\n  | properties | k\u003dv; k2\u003dv2 |\n\nYou can use the function \"format_dict\" in openstack.common.utils to help with this. An example on how to use it is in the link below\n\nhttps://github.com/openstack/python-openstackclient/blob/18a7d23a8ab12aa29a13f441cd8608ea5138f420/openstackclient/object/v1/account.py#L58-L59","commit_id":"17ff290765dd654062d801046f189a2ecbff9414"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"52758c80f59641e54e7b125fc2175a2237e24e24","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        # TODO(stevemar): Remove the line below when we support multitenancy"},{"line_number":284,"context_line":"        info.pop(\u0027parent_id\u0027, None)"},{"line_number":285,"context_line":"        info \u003d dict((k, v) for k, v in info.iteritems() if v)"},{"line_number":286,"context_line":"        if \u0027properties\u0027 in info:"},{"line_number":287,"context_line":"            info[\u0027properties\u0027] \u003d utils.format_dict(info.pop(\u0027properties\u0027))"},{"line_number":288,"context_line":"        return zip(*sorted(six.iteritems(info)))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a7e1126_436e5a02","line":285,"range":{"start_line":285,"start_character":39,"end_line":285,"end_character":55},"updated":"2015-12-18 08:43:47.000000000","message":"you\u0027re gonna want to use\n\n  info.items()\n\nhere, using `iteritems()` is causing py3 to fail since iteritems was removed in py3","commit_id":"a6c74b42c9306ce65d494475a0a85cad32b56975"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"8b328a117840bd0635705b3647785bae9528fade","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        # TODO(stevemar): Remove the line below when we support multitenancy"},{"line_number":284,"context_line":"        info.pop(\u0027parent_id\u0027, None)"},{"line_number":285,"context_line":"        info \u003d dict((k, v) for k, v in info.items() if v)"},{"line_number":286,"context_line":"        if \u0027properties\u0027 in info:"},{"line_number":287,"context_line":"            info[\u0027properties\u0027] \u003d utils.format_dict(info.pop(\u0027properties\u0027))"},{"line_number":288,"context_line":"        return zip(*sorted(six.iteritems(info)))"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a7e1126_195b9ef7","line":287,"range":{"start_line":285,"start_character":8,"end_line":287,"end_character":74},"updated":"2015-12-21 04:38:00.000000000","message":"I\u0027m sorry, but why adding these ?  To make the output more clear, or also output properties ?","commit_id":"c238f09af702614d5b037bb3fedc69186af6243f"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"8b328a117840bd0635705b3647785bae9528fade","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":307,"context_line":"            default\u003d[],"},{"line_number":308,"context_line":"            help\u003d_(\u0027Unset a project property \u0027"},{"line_number":309,"context_line":"                   \u0027(repeat option to set multiple properties)\u0027),"},{"line_number":310,"context_line":"            required\u003dTrue,"},{"line_number":311,"context_line":"        )"},{"line_number":312,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a7e1126_b93ccac8","line":309,"range":{"start_line":309,"start_character":38,"end_line":309,"end_character":41},"updated":"2015-12-21 04:38:00.000000000","message":"nit: set --\u003e unset","commit_id":"c238f09af702614d5b037bb3fedc69186af6243f"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"8b328a117840bd0635705b3647785bae9528fade","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            parsed_args.project,"},{"line_number":320,"context_line":"        )"},{"line_number":321,"context_line":"        if not parsed_args.property:"},{"line_number":322,"context_line":"            self.app.log.error(\"No changes requested\\n\")"},{"line_number":323,"context_line":"        else:"},{"line_number":324,"context_line":"            kwargs \u003d project._info"},{"line_number":325,"context_line":"            for key in parsed_args.property:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a7e1126_f96b32b7","line":322,"range":{"start_line":322,"start_character":25,"end_line":322,"end_character":30},"updated":"2015-12-21 04:38:00.000000000","message":"How about raising an exception here ?\n\nSo far as I know, some of the SetXXX commands raise exceptions when no option is specified. I think we should make it behave in the same way.\n\nBut I can also see that SetProject does not raise exception here...... So I\u0027m OK with this.","commit_id":"c238f09af702614d5b037bb3fedc69186af6243f"}],"openstackclient/tests/identity/v2_0/test_project.py":[{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"3affff7a5a456a52c4e07bd76c37ae136e5c7a61","unresolved":false,"context_lines":[{"line_number":631,"context_line":""},{"line_number":632,"context_line":"        result \u003d self.cmd.run(parsed_args)"},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"        self.assertEqual(0, result)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_fb0238b3","line":634,"range":{"start_line":634,"start_character":8,"end_line":634,"end_character":35},"updated":"2015-12-21 11:55:13.000000000","message":"Please also check if identity_client.tenants.update() is called with the correct params. Like this:\n\nhttps://github.com/openstack/python-openstackclient/blob/master/openstackclient/tests/identity/v2_0/test_project.py#L560","commit_id":"b3d6bf1c71dc9dce636bb3f474cb265b39ca75a5"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"ab394aa6aa2522d748c918b4c4c68c3d50041b9a","unresolved":false,"context_lines":[{"line_number":632,"context_line":"        result \u003d self.cmd.run(parsed_args)"},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"        self.assertEqual(0, result)"},{"line_number":635,"context_line":"        "},{"line_number":636,"context_line":"        # Set expected values"},{"line_number":637,"context_line":"        kwargs \u003d {"},{"line_number":638,"context_line":"            \u0027description\u0027: identity_fakes.project_description,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a7e1126_4fadbf99","line":635,"range":{"start_line":635,"start_character":0,"end_line":635,"end_character":8},"updated":"2015-12-21 15:34:25.000000000","message":"This is why pep8 test failed, I think.","commit_id":"74dfeb01383e15c43c089d6ca6eeba4385b516a8"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"ab394aa6aa2522d748c918b4c4c68c3d50041b9a","unresolved":false,"context_lines":[{"line_number":634,"context_line":"        self.assertEqual(0, result)"},{"line_number":635,"context_line":"        "},{"line_number":636,"context_line":"        # Set expected values"},{"line_number":637,"context_line":"        kwargs \u003d {"},{"line_number":638,"context_line":"            \u0027description\u0027: identity_fakes.project_description,"},{"line_number":639,"context_line":"            \u0027id\u0027: identity_fakes.project_id,"},{"line_number":640,"context_line":"            \u0027enabled\u0027: True,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a7e1126_da3debc4","line":637,"range":{"start_line":637,"start_character":8,"end_line":637,"end_character":14},"updated":"2015-12-21 15:34:25.000000000","message":"As you can see, \"key\" is not a key in project._info, so finally, kwargs won\u0027t contain \"key\" in it. So shall we call this case \"test_project_unset_nonexist\" or something similar, and add one more test to unset a property existing in project._info, and then check if update() is called with the value None ?\n\nThis version is good enough, so +1. :) \n\nBut as you have to solve the pep8 failure and update the patch anyway, please add the test if you like.\n\nThanks. :)","commit_id":"74dfeb01383e15c43c089d6ca6eeba4385b516a8"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"c2121dab2015bd001437c81d253c6494311e977d","unresolved":false,"context_lines":[{"line_number":610,"context_line":""},{"line_number":611,"context_line":"        self.projects_mock.get.return_value \u003d fakes.FakeResource("},{"line_number":612,"context_line":"            None,"},{"line_number":613,"context_line":"            copy.deepcopy(identity_fakes.PROJECT),"},{"line_number":614,"context_line":"            loaded\u003dTrue,"},{"line_number":615,"context_line":"        )"},{"line_number":616,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a7b0d38_6ece4f5c","line":613,"range":{"start_line":613,"start_character":26,"end_line":613,"end_character":48},"updated":"2015-12-22 15:11:41.000000000","message":"You can create a new dict like this one in the \"unset key exist\" test, like this:\n\ndict \u003d identity_fakes.PROJECT + {\"fee\": fi, \"fo\": fut}\n\nThen deep copy it to create FakeResource object. And we don\u0027t need to call set command. I don\u0027t think mix the two commands in one test is a good idea.","commit_id":"f0794bb12220f43f72d4c9ca85d83f97999100a3"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"c2121dab2015bd001437c81d253c6494311e977d","unresolved":false,"context_lines":[{"line_number":630,"context_line":"            (\u0027project\u0027, identity_fakes.project_name),"},{"line_number":631,"context_line":"        ]"},{"line_number":632,"context_line":"        parsed_args \u003d self.check_parser(self.cmd_set, arglist, verifylist)"},{"line_number":633,"context_line":"        self.cmd_set.run(parsed_args)"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"        # unsetting two properties"},{"line_number":636,"context_line":"        arglist \u003d ["}],"source_content_type":"text/x-python","patch_set":12,"id":"1a7b0d38_8e0e1be4","line":633,"range":{"start_line":633,"start_character":8,"end_line":633,"end_character":37},"updated":"2015-12-22 15:11:41.000000000","message":"No need to do this, I think.","commit_id":"f0794bb12220f43f72d4c9ca85d83f97999100a3"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"c2121dab2015bd001437c81d253c6494311e977d","unresolved":false,"context_lines":[{"line_number":644,"context_line":""},{"line_number":645,"context_line":"        parsed_args \u003d self.check_parser(self.cmd_unset, arglist, verifylist)"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"        self.cmd_unset.take_action(parsed_args)"},{"line_number":648,"context_line":"        # Set expected values"},{"line_number":649,"context_line":"        kwargs \u003d {"},{"line_number":650,"context_line":"            \u0027description\u0027: identity_fakes.project_description,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a7b0d38_cb173553","line":647,"range":{"start_line":647,"start_character":23,"end_line":647,"end_character":34},"updated":"2015-12-22 15:11:41.000000000","message":"Why not call run() here ?\n\nMost of the other tests call take_action(), but seems that in this file, all the other tests call run().","commit_id":"f0794bb12220f43f72d4c9ca85d83f97999100a3"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"c2121dab2015bd001437c81d253c6494311e977d","unresolved":false,"context_lines":[{"line_number":651,"context_line":"            \u0027enabled\u0027: True,"},{"line_number":652,"context_line":"            \u0027fee\u0027: None,"},{"line_number":653,"context_line":"            \u0027fo\u0027: None,"},{"line_number":654,"context_line":"            \u0027tenant_name\u0027: identity_fakes.project_name,"},{"line_number":655,"context_line":"        }"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        self.projects_mock.update.assert_called_with("}],"source_content_type":"text/x-python","patch_set":12,"id":"1a7b0d38_0e622bd9","line":654,"range":{"start_line":654,"start_character":13,"end_line":654,"end_character":24},"updated":"2015-12-22 15:11:41.000000000","message":"Why it is \"tenant_name\" here but \"name\" below ?  And where is \"id\" ?\n\nBecause of the following code, \n\n            kwargs \u003d project._info\n            for key in parsed_args.property:\n                if key in kwargs:\n                    kwargs[key] \u003d None\n            identity_client.tenants.update(project.id, **kwargs)\n\nupdate() is finally called with project._info with some of the properties set to None. So I think the kwargs here should be the same with the one below, except for \"fee\" and \"fo\".","commit_id":"f0794bb12220f43f72d4c9ca85d83f97999100a3"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"5321a12e9f9cf66efcff6d02293998aee91e06d5","unresolved":false,"context_lines":[{"line_number":608,"context_line":"    def setUp(self):"},{"line_number":609,"context_line":"        super(TestProjectUnset, self).setUp()"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"        identity_fakes.PROJECT.update({\"fee\":\"fi\",\"fo\":\"fum\"})"},{"line_number":612,"context_line":"        self.projects_mock.get.return_value \u003d fakes.FakeResource("},{"line_number":613,"context_line":"            None,"},{"line_number":614,"context_line":"            copy.deepcopy(identity_fakes.PROJECT),"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a7b0d38_0bd67ec5","line":611,"range":{"start_line":611,"start_character":8,"end_line":611,"end_character":30},"updated":"2015-12-23 07:28:21.000000000","message":"This will change identity_fakes.PROJECT, I think. Use a variable to store the updated dict would be better.\n\nAnd all the rest looks good to me.\n\nThanks for updating. :)","commit_id":"77b24b13e34b15a82ad75229a6b1a92f9ac6f229"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"00066d49969af8aeb8b0160df70fa8fdca6e7a52","unresolved":false,"context_lines":[{"line_number":608,"context_line":"    def setUp(self):"},{"line_number":609,"context_line":"        super(TestProjectUnset, self).setUp()"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"        identity_fakes.PROJECT.update({\"fee\":\"fi\",\"fo\":\"fum\"})"},{"line_number":612,"context_line":"        self.projects_mock.get.return_value \u003d fakes.FakeResource("},{"line_number":613,"context_line":"            None,"},{"line_number":614,"context_line":"            copy.deepcopy(identity_fakes.PROJECT),"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a7b0d38_8bf90e50","line":611,"range":{"start_line":611,"start_character":8,"end_line":611,"end_character":30},"updated":"2015-12-23 07:30:12.000000000","message":"This will change identity_fakes.PROJECT, I think. Use a variable to store the updated dict would be better.\nAnd all the rest looks good to me.\nThanks for updating. :)","commit_id":"e4d7a7282411a2c974dcf211add978c857d3a073"}],"setup.cfg":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"162bb0b74d013775e69b1d23648b6c4560432ea3","unresolved":false,"context_lines":[{"line_number":162,"context_line":"    project_delete \u003d openstackclient.identity.v2_0.project:DeleteProject"},{"line_number":163,"context_line":"    project_list \u003d openstackclient.identity.v2_0.project:ListProject"},{"line_number":164,"context_line":"    project_set \u003d openstackclient.identity.v2_0.project:SetProject"},{"line_number":165,"context_line":"    project_unset \u003d openstackclient.identity.v2_0.project:UnsetProject"},{"line_number":166,"context_line":"    project_show \u003d openstackclient.identity.v2_0.project:ShowProject"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    role_add \u003d openstackclient.identity.v2_0.role:AddRole"}],"source_content_type":"text/x-ttcn-cfg","patch_set":2,"id":"3a7e1126_9352a212","line":165,"range":{"start_line":165,"start_character":4,"end_line":165,"end_character":17},"updated":"2015-12-17 08:24:54.000000000","message":"this should be alphabetical and after \u0027show\u0027","commit_id":"17ff290765dd654062d801046f189a2ecbff9414"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"677d370e29f114fa6ad18e3ed5bb1c871b14e09a","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    project_create \u003d openstackclient.identity.v3.project:CreateProject"},{"line_number":254,"context_line":"    project_delete \u003d openstackclient.identity.v3.project:DeleteProject"},{"line_number":255,"context_line":"    project_list \u003d openstackclient.identity.v3.project:ListProject"},{"line_number":256,"context_line":"    project_set \u003d openstackclient.identity.v3.project:SetProject"},{"line_number":257,"context_line":"    project_show \u003d openstackclient.identity.v3.project:ShowProject"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    federation_protocol_create \u003d openstackclient.identity.v3.federation_protocol:CreateProtocol"}],"source_content_type":"text/x-ttcn-cfg","patch_set":17,"id":"1a7b0d38_db679f23","line":256,"range":{"start_line":256,"start_character":4,"end_line":256,"end_character":15},"updated":"2015-12-25 07:47:48.000000000","message":"add unset too?","commit_id":"108ddb115d80a42a71338224a4d26a54b5dfef9e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a7736d7d21dd09ec407ea07f69c3c03b223fa662","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    project_create \u003d openstackclient.identity.v3.project:CreateProject"},{"line_number":254,"context_line":"    project_delete \u003d openstackclient.identity.v3.project:DeleteProject"},{"line_number":255,"context_line":"    project_list \u003d openstackclient.identity.v3.project:ListProject"},{"line_number":256,"context_line":"    project_set \u003d openstackclient.identity.v3.project:SetProject"},{"line_number":257,"context_line":"    project_show \u003d openstackclient.identity.v3.project:ShowProject"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    federation_protocol_create \u003d openstackclient.identity.v3.federation_protocol:CreateProtocol"}],"source_content_type":"text/x-ttcn-cfg","patch_set":17,"id":"1a7b0d38_589cfebf","line":256,"range":{"start_line":256,"start_character":4,"end_line":256,"end_character":15},"in_reply_to":"1a7b0d38_db679f23","updated":"2015-12-26 07:28:46.000000000","message":"this line is for v3 commands, which doesn\u0027t have the unset option","commit_id":"108ddb115d80a42a71338224a4d26a54b5dfef9e"}]}
