)]}'
{"openstackclient/identity/v3/credential.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"98d089237f04283b6197e8e7619c63eefd591aa6","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        parser \u003d super(CreateCredential, self).get_parser(prog_name)"},{"line_number":37,"context_line":"        parser.add_argument("},{"line_number":38,"context_line":"            \u0027user\u0027,"},{"line_number":39,"context_line":"            metavar\u003d\u0027\u003ccredential-user\u003e\u0027,"},{"line_number":40,"context_line":"            help\u003d\u0027Name or ID of user that owns the credential\u0027,"},{"line_number":41,"context_line":"        )"},{"line_number":42,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FPvc%3D","line":39,"updated":"2013-01-31 16:24:09.000000000","message":"Should change this to \u003cuser\u003e","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"12b304a5037baad5ebed8cbc16cb5eb1e4c99ece","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        parser \u003d super(CreateCredential, self).get_parser(prog_name)"},{"line_number":37,"context_line":"        parser.add_argument("},{"line_number":38,"context_line":"            \u0027user\u0027,"},{"line_number":39,"context_line":"            metavar\u003d\u0027\u003ccredential-user\u003e\u0027,"},{"line_number":40,"context_line":"            help\u003d\u0027Name or ID of user that owns the credential\u0027,"},{"line_number":41,"context_line":"        )"},{"line_number":42,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNbE%3D","line":39,"in_reply_to":"AAAAM3%2F%2FNgI%3D","updated":"2013-02-02 06:38:50.000000000","message":"Cool, I\u0027ll try and eliminate the redundant parts in the other files too.","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"67b8eca5cd61f708a8aa44b643ca520b80137f6e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        parser \u003d super(CreateCredential, self).get_parser(prog_name)"},{"line_number":37,"context_line":"        parser.add_argument("},{"line_number":38,"context_line":"            \u0027user\u0027,"},{"line_number":39,"context_line":"            metavar\u003d\u0027\u003ccredential-user\u003e\u0027,"},{"line_number":40,"context_line":"            help\u003d\u0027Name or ID of user that owns the credential\u0027,"},{"line_number":41,"context_line":"        )"},{"line_number":42,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNgI%3D","line":39,"in_reply_to":"AAAAM3%2F%2FPvc%3D","updated":"2013-02-02 02:30:52.000000000","message":"in general I prefer to not use the redundant bits, like \u0027credential\u0027 in this case.","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"98d089237f04283b6197e8e7619c63eefd591aa6","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            help\u003d\u0027ID of credential to change\u0027,"},{"line_number":146,"context_line":"        )"},{"line_number":147,"context_line":"        parser.add_argument("},{"line_number":148,"context_line":"            \u0027user\u0027,"},{"line_number":149,"context_line":"            metavar\u003d\u0027\u003ccredential-user\u003e\u0027,"},{"line_number":150,"context_line":"            help\u003d\u0027Name or ID of user that owns the credential\u0027,"},{"line_number":151,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FPv0%3D","line":148,"updated":"2013-01-31 16:24:09.000000000","message":"Should user, type and data be optional? and only credential id as required?","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"12b304a5037baad5ebed8cbc16cb5eb1e4c99ece","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            help\u003d\u0027ID of credential to change\u0027,"},{"line_number":146,"context_line":"        )"},{"line_number":147,"context_line":"        parser.add_argument("},{"line_number":148,"context_line":"            \u0027user\u0027,"},{"line_number":149,"context_line":"            metavar\u003d\u0027\u003ccredential-user\u003e\u0027,"},{"line_number":150,"context_line":"            help\u003d\u0027Name or ID of user that owns the credential\u0027,"},{"line_number":151,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNbI%3D","line":148,"in_reply_to":"AAAAM3%2F%2FNgc%3D","updated":"2013-02-02 06:38:50.000000000","message":"Agreed, I\u0027ll make the change needed.","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"67b8eca5cd61f708a8aa44b643ca520b80137f6e","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            help\u003d\u0027ID of credential to change\u0027,"},{"line_number":146,"context_line":"        )"},{"line_number":147,"context_line":"        parser.add_argument("},{"line_number":148,"context_line":"            \u0027user\u0027,"},{"line_number":149,"context_line":"            metavar\u003d\u0027\u003ccredential-user\u003e\u0027,"},{"line_number":150,"context_line":"            help\u003d\u0027Name or ID of user that owns the credential\u0027,"},{"line_number":151,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNgc%3D","line":148,"in_reply_to":"AAAAM3%2F%2FPv0%3D","updated":"2013-02-02 02:30:52.000000000","message":"I think so, but the API doc is unclear.  We can always retrieve the existing values to populate them if required.","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1649a7c3fa62d16f1ca6c43a0ae1ee711c0f5a66","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        parser.add_argument("},{"line_number":36,"context_line":"            \u0027user\u0027,"},{"line_number":37,"context_line":"            metavar\u003d\u0027\u003cuser\u003e\u0027,"},{"line_number":38,"context_line":"            help\u003d\u0027Name or ID of user that owns the credential\u0027,"},{"line_number":39,"context_line":"        )"},{"line_number":40,"context_line":"        parser.add_argument("},{"line_number":41,"context_line":"            \u0027type\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FL0Q%3D","line":38,"updated":"2013-02-04 16:12:53.000000000","message":"you won\u0027t be able to identify some users by name if their domain is privately namespaced, in which case a domain ID/name will need to be specified in addition. Same goes for v3 projects.\n\nwould suggest adding an option for like\n\n  --user-domain / --users-domain\n  Name or ID of the user\u0027s domain, required if the user exists in a privately namespaced domain.","commit_id":"e364b870b47268ea19c6cbee8542abd4142b2713"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e006359f5534ef64901b2a86ac0fac43ff986a2d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        parser.add_argument("},{"line_number":36,"context_line":"            \u0027user\u0027,"},{"line_number":37,"context_line":"            metavar\u003d\u0027\u003cuser\u003e\u0027,"},{"line_number":38,"context_line":"            help\u003d\u0027Name or ID of user that owns the credential\u0027,"},{"line_number":39,"context_line":"        )"},{"line_number":40,"context_line":"        parser.add_argument("},{"line_number":41,"context_line":"            \u0027type\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FJTI%3D","line":38,"in_reply_to":"AAAAM3%2F%2FKIk%3D","updated":"2013-02-05 17:59:55.000000000","message":"henry-nash: +1","commit_id":"e364b870b47268ea19c6cbee8542abd4142b2713"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4c1efbdf5cc9f85667d4a9bc2e3ba5b872a67b3c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        parser.add_argument("},{"line_number":36,"context_line":"            \u0027user\u0027,"},{"line_number":37,"context_line":"            metavar\u003d\u0027\u003cuser\u003e\u0027,"},{"line_number":38,"context_line":"            help\u003d\u0027Name or ID of user that owns the credential\u0027,"},{"line_number":39,"context_line":"        )"},{"line_number":40,"context_line":"        parser.add_argument("},{"line_number":41,"context_line":"            \u0027type\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FKIk%3D","line":38,"in_reply_to":"AAAAM3%2F%2FKVM%3D","updated":"2013-02-05 09:48:53.000000000","message":"I think what you are asking for is for us to add domain_id to the query filter for GET users and projects (\u0027name\u0027 is already available as a filter).  You would then do:\n\nGET /users?name\u003d\u003cusername\u003e\u0026domain_id\u003d\u003cdomain_id\u003e\n\n(and similar for projects)\n\nThis seems a sensible suggestion.  Dolph, you agree?  If so, I\u0027ll raise a bug against the api spec to add it (there is already a bug raised against the code to say that the filters are not yet fully implemented, so it can get fixed as part of that)","commit_id":"e364b870b47268ea19c6cbee8542abd4142b2713"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d2f5bf2da29094ccc05d6f49b0019fc756414c53","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        parser.add_argument("},{"line_number":36,"context_line":"            \u0027user\u0027,"},{"line_number":37,"context_line":"            metavar\u003d\u0027\u003cuser\u003e\u0027,"},{"line_number":38,"context_line":"            help\u003d\u0027Name or ID of user that owns the credential\u0027,"},{"line_number":39,"context_line":"        )"},{"line_number":40,"context_line":"        parser.add_argument("},{"line_number":41,"context_line":"            \u0027type\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FKVM%3D","line":38,"in_reply_to":"AAAAM3%2F%2FL0Q%3D","updated":"2013-02-05 06:34:00.000000000","message":"I\u0027m having some trouble trying to figure out what I do with the data after retrieving it. There doesn\u0027t seem to be an existing way of getting a specific user ID, when given a domain. Something like \u0027GET /domains/{domain_id}/users/{user_id}\u0027\nUnless, traversing the list of getting all users in a domain is a good idea? \nEither way, neither of these are implemented in keystone-client, so I would have to do some work there too. \nJust wondering if I\u0027m barking up the wrong tree....","commit_id":"e364b870b47268ea19c6cbee8542abd4142b2713"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1649a7c3fa62d16f1ca6c43a0ae1ee711c0f5a66","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        parser.add_argument("},{"line_number":51,"context_line":"            \u0027--project\u0027,"},{"line_number":52,"context_line":"            metavar\u003d\u0027\u003cproject\u003e\u0027,"},{"line_number":53,"context_line":"            help\u003d\u0027Project name or ID which limits the scope of the credential\u0027,"},{"line_number":54,"context_line":"        )"},{"line_number":55,"context_line":"        return parser"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FLzw%3D","line":53,"updated":"2013-02-04 16:12:53.000000000","message":"same as the above, \n\n  --project-domain / --projects-domain\n  Name or ID of the project\u0027s domain, required if the project exists in a privately namespaced domain.","commit_id":"e364b870b47268ea19c6cbee8542abd4142b2713"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1649a7c3fa62d16f1ca6c43a0ae1ee711c0f5a66","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            \u0027--user\u0027,"},{"line_number":145,"context_line":"            metavar\u003d\u0027\u003cuser\u003e\u0027,"},{"line_number":146,"context_line":"            help\u003d\u0027Name or ID of user that owns the credential\u0027,"},{"line_number":147,"context_line":"        )"},{"line_number":148,"context_line":"        parser.add_argument("},{"line_number":149,"context_line":"            \u0027--type\u0027,"},{"line_number":150,"context_line":"            metavar\u003d\u0027\u003ctype\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FLzc%3D","line":147,"updated":"2013-02-04 16:12:53.000000000","message":"same as above","commit_id":"e364b870b47268ea19c6cbee8542abd4142b2713"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1649a7c3fa62d16f1ca6c43a0ae1ee711c0f5a66","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            metavar\u003d\u0027\u003cdata\u003e\u0027,"},{"line_number":156,"context_line":"            help\u003d\u0027New credential data\u0027,"},{"line_number":157,"context_line":"        )"},{"line_number":158,"context_line":"        parser.add_argument("},{"line_number":159,"context_line":"            \u0027--project\u0027,"},{"line_number":160,"context_line":"            metavar\u003d\u0027\u003cproject\u003e\u0027,"},{"line_number":161,"context_line":"            help\u003d\u0027Project name or ID which limits the scope of the credential\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FLzY%3D","line":158,"updated":"2013-02-04 16:12:53.000000000","message":"same as above","commit_id":"e364b870b47268ea19c6cbee8542abd4142b2713"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            metavar\u003d\u0027\u003cuser\u003e\u0027,"},{"line_number":38,"context_line":"            help\u003d\u0027Name or ID of user that owns the credential\u0027,"},{"line_number":39,"context_line":"        )"},{"line_number":40,"context_line":"        parser.add_argument("},{"line_number":41,"context_line":"            \u0027type\u0027,"},{"line_number":42,"context_line":"            metavar\u003d\u0027\u003ctype\u003e\u0027,"},{"line_number":43,"context_line":"            help\u003d\u0027New credential type: ec2 | cert\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2Bq8%3D","line":40,"updated":"2013-03-04 19:56:49.000000000","message":"If you use the \"choices\" argument here you can define the valid values and they will show up in the help for free: http://docs.python.org/2/library/argparse.html#choices","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        parser.add_argument("},{"line_number":46,"context_line":"            \u0027data\u0027,"},{"line_number":47,"context_line":"            metavar\u003d\u0027\u003cdata\u003e\u0027,"},{"line_number":48,"context_line":"            help\u003d\u0027New credential data\u0027,"},{"line_number":49,"context_line":"        )"},{"line_number":50,"context_line":"        parser.add_argument("},{"line_number":51,"context_line":"            \u0027--project\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2Bq4%3D","line":48,"updated":"2013-03-04 19:56:49.000000000","message":"What form does the data take?","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            project\u003dproject)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        info \u003d {}"},{"line_number":87,"context_line":"        info.update(credential._info)"},{"line_number":88,"context_line":"        return zip(*sorted(info.iteritems()))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2Bq0%3D","line":87,"updated":"2013-03-04 19:56:49.000000000","message":"This doesn\u0027t need to be a separate dict instance.","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    def get_parser(self, prog_name):"},{"line_number":120,"context_line":"        parser \u003d super(ListCredential, self).get_parser(prog_name)"},{"line_number":121,"context_line":"        parser.add_argument("},{"line_number":122,"context_line":"            \u0027--long\u0027,"},{"line_number":123,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":124,"context_line":"            default\u003dFalse,"},{"line_number":125,"context_line":"            help\u003d\u0027Additional fields are listed in output\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2Bqg%3D","line":122,"updated":"2013-03-04 19:56:49.000000000","message":"Is there any real reason not to always include the full output?","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            help\u003d\u0027Name or ID of user that owns the credential\u0027,"},{"line_number":160,"context_line":"        )"},{"line_number":161,"context_line":"        parser.add_argument("},{"line_number":162,"context_line":"            \u0027--type\u0027,"},{"line_number":163,"context_line":"            metavar\u003d\u0027\u003ctype\u003e\u0027,"},{"line_number":164,"context_line":"            help\u003d\u0027New credential type\u0027,"},{"line_number":165,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2BqQ%3D","line":162,"updated":"2013-03-04 19:56:49.000000000","message":"Does the type have an enumeration of valid values?","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                                         parsed_args.credential)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        info \u003d {}"},{"line_number":237,"context_line":"        info.update(credential._info)"},{"line_number":238,"context_line":"        return zip(*sorted(info.iteritems()))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2Bp8%3D","line":237,"updated":"2013-03-04 19:56:49.000000000","message":"This extra dict instance isn\u0027t needed.","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e2cf4d204dc22478d5760f255cefaab43d730fbc","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            \u0027data\u0027,"},{"line_number":48,"context_line":"            metavar\u003d\u0027\u003cdata\u003e\u0027,"},{"line_number":49,"context_line":"            help\u003d\u0027New credential data\u0027,"},{"line_number":50,"context_line":"        )"},{"line_number":51,"context_line":"        parser.add_argument("},{"line_number":52,"context_line":"            \u0027--project\u0027,"},{"line_number":53,"context_line":"            metavar\u003d\u0027\u003cproject\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2BWA%3D","line":50,"updated":"2013-03-04 21:43:36.000000000","message":"Re-iterating dhellmann\u0027s comments to latest patch:\nWhat form does the data take?","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5661d5620f635449988d2fddc0d6647bbbff2d46","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            parsed_args.data,"},{"line_number":72,"context_line":"            project\u003dproject)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        return zip(*sorted(credential._info.iteritems()))"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"class DeleteCredential(command.Command):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8gY%3D","line":74,"updated":"2013-03-05 17:23:11.000000000","message":"should not use another class\u0027s private member.","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5661d5620f635449988d2fddc0d6647bbbff2d46","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class DeleteCredential(command.Command):"},{"line_number":78,"context_line":"    \"\"\"Delete credential command\"\"\""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    api \u003d \u0027identity\u0027"},{"line_number":81,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DeleteCredential\u0027)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8dA%3D","line":80,"updated":"2013-03-05 17:23:11.000000000","message":"suggest having a base class that sets api \u003d \u0027identity\u0027","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5661d5620f635449988d2fddc0d6647bbbff2d46","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    def take_action(self, parsed_args):"},{"line_number":93,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027 % parsed_args)"},{"line_number":94,"context_line":"        identity_client \u003d self.app.client_manager.identity"},{"line_number":95,"context_line":"        identity_client.credentials.delete(parsed_args.credential)"},{"line_number":96,"context_line":"        return"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8c4%3D","line":95,"updated":"2013-03-05 17:23:11.000000000","message":"suggest a base class that has \n _get_credentials_client(): return self.app.client_manager.identity.credentials\n\nsince this code is copied in all these classes.","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"225f34c7134480decd156f38e08c66ce92599197","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#   License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#   under the License."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":"import sys"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\"Identity v3 Credential action implementations\"\"\""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAN3%2F%2F6Pg%3D","line":15,"updated":"2013-03-06 21:20:05.000000000","message":"this import should be after the logging import below","commit_id":"a9c6ce6f24dfc609d1d9238f43af40c8e74defbf"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"964a1597473d500bd4de3a929cf9cbb172e06533","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#   License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#   under the License."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":"import sys"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\"Identity v3 Credential action implementations\"\"\""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAN3%2F%2F4U4%3D","line":15,"in_reply_to":"AAAAN3%2F%2F6Pg%3D","updated":"2013-03-07 20:08:55.000000000","message":"thanks for catching these, they were automagically put there when I did the quick-fix option in eclipse.","commit_id":"a9c6ce6f24dfc609d1d9238f43af40c8e74defbf"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"225f34c7134480decd156f38e08c66ce92599197","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            \u0027type\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003ctype\u003e\u0027,"},{"line_number":44,"context_line":"            choices\u003d[\u0027ec2\u0027, \u0027cert\u0027],"},{"line_number":45,"context_line":"            help\u003d\u0027New credential type\u0027,"},{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":"        parser.add_argument("},{"line_number":48,"context_line":"            \u0027data\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAN3%2F%2F6RA%3D","line":45,"updated":"2013-03-06 21:20:05.000000000","message":"Can we change this one back to an option and default to \u0027cert\u0027?","commit_id":"a9c6ce6f24dfc609d1d9238f43af40c8e74defbf"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"964a1597473d500bd4de3a929cf9cbb172e06533","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            \u0027type\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003ctype\u003e\u0027,"},{"line_number":44,"context_line":"            choices\u003d[\u0027ec2\u0027, \u0027cert\u0027],"},{"line_number":45,"context_line":"            help\u003d\u0027New credential type\u0027,"},{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":"        parser.add_argument("},{"line_number":48,"context_line":"            \u0027data\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAN3%2F%2F4Uw%3D","line":45,"in_reply_to":"AAAAN3%2F%2F6RA%3D","updated":"2013-03-07 20:08:55.000000000","message":"done","commit_id":"a9c6ce6f24dfc609d1d9238f43af40c8e74defbf"}],"openstackclient/identity/v3/domain.py":[{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"67b8eca5cd61f708a8aa44b643ca520b80137f6e","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":"        user_namespace_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":48,"context_line":"        user_namespace_group.add_argument("},{"line_number":49,"context_line":"            \u0027--private_user_names\u0027,"},{"line_number":50,"context_line":"            dest\u003d\u0027private_user_names\u0027,"},{"line_number":51,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":52,"context_line":"            default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNj0%3D","line":49,"updated":"2013-02-02 02:30:52.000000000","message":"Option names must use dashes \u0027-\u0027 instead of underscores \u0027_\u0027.\n\nAll below too...","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"12b304a5037baad5ebed8cbc16cb5eb1e4c99ece","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":"        user_namespace_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":48,"context_line":"        user_namespace_group.add_argument("},{"line_number":49,"context_line":"            \u0027--private_user_names\u0027,"},{"line_number":50,"context_line":"            dest\u003d\u0027private_user_names\u0027,"},{"line_number":51,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":52,"context_line":"            default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNbA%3D","line":49,"in_reply_to":"AAAAM3%2F%2FNj0%3D","updated":"2013-02-02 06:38:50.000000000","message":"Oops, sloppiness.","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"67b8eca5cd61f708a8aa44b643ca520b80137f6e","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        )"},{"line_number":174,"context_line":"        user_namespace_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":175,"context_line":"        user_namespace_group.add_argument("},{"line_number":176,"context_line":"            \u0027--private_user_names\u0027,"},{"line_number":177,"context_line":"            dest\u003d\u0027private_user_names\u0027,"},{"line_number":178,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":179,"context_line":"            default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNg0%3D","line":176,"updated":"2013-02-02 02:30:52.000000000","message":"Is this a one-way switch?  As in shouldn\u0027t there be a --public-user-names option too?","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"910d0851a36e5f6aba3c3e9a8b89cdc8386fb262","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        )"},{"line_number":174,"context_line":"        user_namespace_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":175,"context_line":"        user_namespace_group.add_argument("},{"line_number":176,"context_line":"            \u0027--private_user_names\u0027,"},{"line_number":177,"context_line":"            dest\u003d\u0027private_user_names\u0027,"},{"line_number":178,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":179,"context_line":"            default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNP4%3D","line":176,"in_reply_to":"AAAAM3%2F%2FNa8%3D","updated":"2013-02-02 15:28:12.000000000","message":"Projects and Users either share the global namespace, or a domain explicitly sets one or both to private. It\u0027s an option that\u0027s *only available on creation* (it\u0027s immutable after that), and we default to a shared namespace (private namespaces being an opt-in feature that would break other parts of OS today).\n\nThe two arguments look good to me, as-is (ignoring underscores).\n\n  --private-user-names --private-project-names\n\nAlso, group names are privately namespaced to the domain out of the box, and role names are not domain-specific.","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"12b304a5037baad5ebed8cbc16cb5eb1e4c99ece","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        )"},{"line_number":174,"context_line":"        user_namespace_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":175,"context_line":"        user_namespace_group.add_argument("},{"line_number":176,"context_line":"            \u0027--private_user_names\u0027,"},{"line_number":177,"context_line":"            dest\u003d\u0027private_user_names\u0027,"},{"line_number":178,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":179,"context_line":"            default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNa8%3D","line":176,"in_reply_to":"AAAAM3%2F%2FNg0%3D","updated":"2013-02-02 06:38:50.000000000","message":"That is the way I interpreted the API. The option is either passed in (and the usernames are in private namespace), or it isn\u0027t (and they are not). If dolphm doesn\u0027t comment, I\u0027ll ping him on Monday to make sure.","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1649a7c3fa62d16f1ca6c43a0ae1ee711c0f5a66","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            dest\u003d\u0027enabled\u0027,"},{"line_number":72,"context_line":"            action\u003d\u0027store_false\u0027,"},{"line_number":73,"context_line":"            help\u003d\u0027Disable domain\u0027,"},{"line_number":74,"context_line":"        )"},{"line_number":75,"context_line":"        return parser"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FLzQ%3D","line":74,"updated":"2013-02-04 16:12:53.000000000","message":"i have the same issue here with these semantics -- stuff is enabled by default, so you only need an option to opt for creating in a disabled state. --enable / --disable make sense for update, but only --disabled make sense here.","commit_id":"e364b870b47268ea19c6cbee8542abd4142b2713"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e006359f5534ef64901b2a86ac0fac43ff986a2d","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            dest\u003d\u0027enabled\u0027,"},{"line_number":72,"context_line":"            action\u003d\u0027store_false\u0027,"},{"line_number":73,"context_line":"            help\u003d\u0027Disable domain\u0027,"},{"line_number":74,"context_line":"        )"},{"line_number":75,"context_line":"        return parser"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FJTg%3D","line":74,"in_reply_to":"AAAAM3%2F%2FKWE%3D","updated":"2013-02-05 17:59:55.000000000","message":"that\u0027s exactly what i was thinking","commit_id":"e364b870b47268ea19c6cbee8542abd4142b2713"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d2f5bf2da29094ccc05d6f49b0019fc756414c53","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            dest\u003d\u0027enabled\u0027,"},{"line_number":72,"context_line":"            action\u003d\u0027store_false\u0027,"},{"line_number":73,"context_line":"            help\u003d\u0027Disable domain\u0027,"},{"line_number":74,"context_line":"        )"},{"line_number":75,"context_line":"        return parser"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FKWE%3D","line":74,"in_reply_to":"AAAAM3%2F%2FLzQ%3D","updated":"2013-02-05 06:34:00.000000000","message":"Would it make sense to ...\n1) remove lines 62-68, \n2) rename 71 to \"disabled\", and set default to False\n3) On line 85 - call create with \"enabled \u003d not parsed_args.disabled\"\n?","commit_id":"e364b870b47268ea19c6cbee8542abd4142b2713"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            \u0027--description\u0027,"},{"line_number":42,"context_line":"            metavar\u003d\u0027\u003cdomain-description\u003e\u0027,"},{"line_number":43,"context_line":"            help\u003d\u0027New domain description\u0027,"},{"line_number":44,"context_line":"        )"},{"line_number":45,"context_line":"        user_namespace_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":46,"context_line":"        user_namespace_group.add_argument("},{"line_number":47,"context_line":"            \u0027--private-user-names\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2Bn0%3D","line":44,"updated":"2013-03-04 19:56:49.000000000","message":"Set the default to a string?","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        )"},{"line_number":45,"context_line":"        user_namespace_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":46,"context_line":"        user_namespace_group.add_argument("},{"line_number":47,"context_line":"            \u0027--private-user-names\u0027,"},{"line_number":48,"context_line":"            dest\u003d\u0027private_user_names\u0027,"},{"line_number":49,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":50,"context_line":"            default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2Bno%3D","line":47,"updated":"2013-03-04 19:56:49.000000000","message":"We\u0027ve been using pairs of options for booleans elsewhere.","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        )"},{"line_number":53,"context_line":"        project_namespace_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":54,"context_line":"        project_namespace_group.add_argument("},{"line_number":55,"context_line":"            \u0027--private-project-names\u0027,"},{"line_number":56,"context_line":"            dest\u003d\u0027private_project_names\u0027,"},{"line_number":57,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":58,"context_line":"            default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2Bnc%3D","line":55,"updated":"2013-03-04 19:56:49.000000000","message":"Ditto.","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        )"},{"line_number":61,"context_line":"        enable_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":62,"context_line":"        enable_group.add_argument("},{"line_number":63,"context_line":"            \u0027--disable\u0027,"},{"line_number":64,"context_line":"            dest\u003d\u0027disabled\u0027,"},{"line_number":65,"context_line":"            action\u003d\u0027store_false\u0027,"},{"line_number":66,"context_line":"            default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2BnU%3D","line":63,"updated":"2013-03-04 19:56:49.000000000","message":"Ditto.","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        )"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        info \u003d {}"},{"line_number":83,"context_line":"        info.update(domain._info)"},{"line_number":84,"context_line":"        return zip(*sorted(info.iteritems()))"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2BnQ%3D","line":83,"updated":"2013-03-04 19:56:49.000000000","message":"This extra dict isn\u0027t needed.","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    def get_parser(self, prog_name):"},{"line_number":118,"context_line":"        parser \u003d super(ListDomain, self).get_parser(prog_name)"},{"line_number":119,"context_line":"        parser.add_argument("},{"line_number":120,"context_line":"            \u0027--long\u0027,"},{"line_number":121,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":122,"context_line":"            default\u003dFalse,"},{"line_number":123,"context_line":"            help\u003d\u0027Additional fields are listed in output\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2Bm0%3D","line":120,"updated":"2013-03-04 19:56:49.000000000","message":"What\u0027s the reason for not always including all output values?","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                                     parsed_args.domain)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        info \u003d {}"},{"line_number":223,"context_line":"        info.update(domain._info)"},{"line_number":224,"context_line":"        return zip(*sorted(info.iteritems()))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2Bms%3D","line":223,"updated":"2013-03-04 19:56:49.000000000","message":"This dict isn\u0027t needed.","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5661d5620f635449988d2fddc0d6647bbbff2d46","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        )"},{"line_number":45,"context_line":"        enable_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":46,"context_line":"        enable_group.add_argument("},{"line_number":47,"context_line":"            \u0027--enable\u0027,"},{"line_number":48,"context_line":"            dest\u003d\u0027enabled\u0027,"},{"line_number":49,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":50,"context_line":"            default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8dQ%3D","line":47,"updated":"2013-03-05 17:23:11.000000000","message":"I think --enabled / --disabled would make more sense when creating.","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b24718d3e0f766fa7b8e3d1bde229ff899a42d30","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        )"},{"line_number":45,"context_line":"        enable_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":46,"context_line":"        enable_group.add_argument("},{"line_number":47,"context_line":"            \u0027--enable\u0027,"},{"line_number":48,"context_line":"            dest\u003d\u0027enabled\u0027,"},{"line_number":49,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":50,"context_line":"            default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8Wc%3D","line":47,"in_reply_to":"AAAAN3%2F%2F8dQ%3D","updated":"2013-03-05 18:28:15.000000000","message":"We currently use --enable / --disable everywhere else; i\u0027d like to have things consistent first, and if we need to change things, we can do so afterwards.","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5661d5620f635449988d2fddc0d6647bbbff2d46","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            dest\u003d\u0027enabled\u0027,"},{"line_number":49,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":50,"context_line":"            default\u003dTrue,"},{"line_number":51,"context_line":"            help\u003d\u0027Enable project\u0027)"},{"line_number":52,"context_line":"        enable_group.add_argument("},{"line_number":53,"context_line":"            \u0027--disable\u0027,"},{"line_number":54,"context_line":"            dest\u003d\u0027enabled\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8dg%3D","line":51,"updated":"2013-03-05 17:23:11.000000000","message":"project -\u003e domain","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b24718d3e0f766fa7b8e3d1bde229ff899a42d30","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            dest\u003d\u0027enabled\u0027,"},{"line_number":49,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":50,"context_line":"            default\u003dTrue,"},{"line_number":51,"context_line":"            help\u003d\u0027Enable project\u0027)"},{"line_number":52,"context_line":"        enable_group.add_argument("},{"line_number":53,"context_line":"            \u0027--disable\u0027,"},{"line_number":54,"context_line":"            dest\u003d\u0027enabled\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8WM%3D","line":51,"in_reply_to":"AAAAN3%2F%2F8dg%3D","updated":"2013-03-05 18:28:15.000000000","message":"good catch! thanks","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5661d5620f635449988d2fddc0d6647bbbff2d46","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            \u0027--disable\u0027,"},{"line_number":54,"context_line":"            dest\u003d\u0027enabled\u0027,"},{"line_number":55,"context_line":"            action\u003d\u0027store_false\u0027,"},{"line_number":56,"context_line":"            help\u003d\u0027Disable project\u0027)"},{"line_number":57,"context_line":"        return parser"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8dc%3D","line":56,"updated":"2013-03-05 17:23:11.000000000","message":"project -\u003e domain","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b24718d3e0f766fa7b8e3d1bde229ff899a42d30","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            \u0027--disable\u0027,"},{"line_number":54,"context_line":"            dest\u003d\u0027enabled\u0027,"},{"line_number":55,"context_line":"            action\u003d\u0027store_false\u0027,"},{"line_number":56,"context_line":"            help\u003d\u0027Disable project\u0027)"},{"line_number":57,"context_line":"        return parser"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8WE%3D","line":56,"in_reply_to":"AAAAN3%2F%2F8dc%3D","updated":"2013-03-05 18:28:15.000000000","message":"good catch! thanks","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5661d5620f635449988d2fddc0d6647bbbff2d46","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def take_action(self, parsed_args):"},{"line_number":102,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027 % parsed_args)"},{"line_number":103,"context_line":"        columns \u003d (\u0027ID\u0027, \u0027Name\u0027, \u0027Description\u0027, \u0027Enabled\u0027)"},{"line_number":104,"context_line":"        data \u003d self.app.client_manager.identity.domains.list()"},{"line_number":105,"context_line":"        return (columns,"},{"line_number":106,"context_line":"                (utils.get_item_properties("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8cI%3D","line":103,"updated":"2013-03-05 17:23:11.000000000","message":"suggest move Enabled before Description.","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b24718d3e0f766fa7b8e3d1bde229ff899a42d30","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def take_action(self, parsed_args):"},{"line_number":102,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027 % parsed_args)"},{"line_number":103,"context_line":"        columns \u003d (\u0027ID\u0027, \u0027Name\u0027, \u0027Description\u0027, \u0027Enabled\u0027)"},{"line_number":104,"context_line":"        data \u003d self.app.client_manager.identity.domains.list()"},{"line_number":105,"context_line":"        return (columns,"},{"line_number":106,"context_line":"                (utils.get_item_properties("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8V8%3D","line":103,"in_reply_to":"AAAAN3%2F%2F8cI%3D","updated":"2013-03-05 18:28:15.000000000","message":"will do.","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5661d5620f635449988d2fddc0d6647bbbff2d46","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        )"},{"line_number":135,"context_line":"        enable_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":136,"context_line":"        enable_group.add_argument("},{"line_number":137,"context_line":"            \u0027--enable\u0027,"},{"line_number":138,"context_line":"            dest\u003d\u0027enabled\u0027,"},{"line_number":139,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":140,"context_line":"            default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8cE%3D","line":137,"updated":"2013-03-05 17:23:11.000000000","message":"I prefer --enabled / --disabled here, too.","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5661d5620f635449988d2fddc0d6647bbbff2d46","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            kwargs[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":159,"context_line":"        if parsed_args.description:"},{"line_number":160,"context_line":"            kwargs[\u0027description\u0027] \u003d parsed_args.description"},{"line_number":161,"context_line":"        if \u0027enabled\u0027 in parsed_args:"},{"line_number":162,"context_line":"            kwargs[\u0027enabled\u0027] \u003d parsed_args.enabled"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        if not len(kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8bw%3D","line":161,"updated":"2013-03-05 17:23:11.000000000","message":"Why in CreateDomain don\u0027t we need to check for enabled in parsed_args?","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b24718d3e0f766fa7b8e3d1bde229ff899a42d30","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            kwargs[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":159,"context_line":"        if parsed_args.description:"},{"line_number":160,"context_line":"            kwargs[\u0027description\u0027] \u003d parsed_args.description"},{"line_number":161,"context_line":"        if \u0027enabled\u0027 in parsed_args:"},{"line_number":162,"context_line":"            kwargs[\u0027enabled\u0027] \u003d parsed_args.enabled"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        if not len(kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8Vc%3D","line":161,"in_reply_to":"AAAAN3%2F%2F8bw%3D","updated":"2013-03-05 18:28:15.000000000","message":"Because the variable enabled will always have a default value (true). That being said, the way this (and others) is written, kwargs will always have at least 1 element, enabled.","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5661d5620f635449988d2fddc0d6647bbbff2d46","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        if \u0027enabled\u0027 in parsed_args:"},{"line_number":162,"context_line":"            kwargs[\u0027enabled\u0027] \u003d parsed_args.enabled"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        if not len(kwargs):"},{"line_number":165,"context_line":"            stdout.write(\"Domain not updated, no arguments present\")"},{"line_number":166,"context_line":"            return"},{"line_number":167,"context_line":"        identity_client.domains.update(domain.id, **kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8bo%3D","line":164,"updated":"2013-03-05 17:23:11.000000000","message":"remove len( )","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b24718d3e0f766fa7b8e3d1bde229ff899a42d30","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        if \u0027enabled\u0027 in parsed_args:"},{"line_number":162,"context_line":"            kwargs[\u0027enabled\u0027] \u003d parsed_args.enabled"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        if not len(kwargs):"},{"line_number":165,"context_line":"            stdout.write(\"Domain not updated, no arguments present\")"},{"line_number":166,"context_line":"            return"},{"line_number":167,"context_line":"        identity_client.domains.update(domain.id, **kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8WA%3D","line":164,"in_reply_to":"AAAAN3%2F%2F8bo%3D","updated":"2013-03-05 18:28:15.000000000","message":"fixed.","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"225f34c7134480decd156f38e08c66ce92599197","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#   License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#   under the License."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":"import sys"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\"Identity v3 Domain action implementations\"\"\""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAN3%2F%2F6PY%3D","line":15,"updated":"2013-03-06 21:20:05.000000000","message":"this import should be after the logging import below","commit_id":"a9c6ce6f24dfc609d1d9238f43af40c8e74defbf"}],"openstackclient/identity/v3/policy.py":[{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"67b8eca5cd61f708a8aa44b643ca520b80137f6e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            metavar\u003d\u0027\u003cpolicy-blob\u003e\u0027,"},{"line_number":40,"context_line":"            help\u003d\u0027New policy rule set itself, as a serialized blob\u0027,"},{"line_number":41,"context_line":"        )"},{"line_number":42,"context_line":"        parser.add_argument("},{"line_number":43,"context_line":"            \u0027type\u0027,"},{"line_number":44,"context_line":"            metavar\u003d\u0027\u003cpolicy-type\u003e\u0027,"},{"line_number":45,"context_line":"            help\u003d\u0027New MIME Type of the policy blob - i.e.: application/json\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNgA%3D","line":42,"updated":"2013-02-02 02:30:52.000000000","message":"I think type should come first","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"12b304a5037baad5ebed8cbc16cb5eb1e4c99ece","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            metavar\u003d\u0027\u003cpolicy-blob\u003e\u0027,"},{"line_number":40,"context_line":"            help\u003d\u0027New policy rule set itself, as a serialized blob\u0027,"},{"line_number":41,"context_line":"        )"},{"line_number":42,"context_line":"        parser.add_argument("},{"line_number":43,"context_line":"            \u0027type\u0027,"},{"line_number":44,"context_line":"            metavar\u003d\u0027\u003cpolicy-type\u003e\u0027,"},{"line_number":45,"context_line":"            help\u003d\u0027New MIME Type of the policy blob - i.e.: application/json\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNa4%3D","line":42,"in_reply_to":"AAAAM3%2F%2FNgA%3D","updated":"2013-02-02 06:38:50.000000000","message":"Alright - In the case where there are multiple req. args, are they then treated as positional args?","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"98d089237f04283b6197e8e7619c63eefd591aa6","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            help\u003d\u0027ID of policy to change\u0027,"},{"line_number":127,"context_line":"        )"},{"line_number":128,"context_line":"        parser.add_argument("},{"line_number":129,"context_line":"            \u0027blob\u0027,"},{"line_number":130,"context_line":"            metavar\u003d\u0027\u003cpolicy-blob\u003e\u0027,"},{"line_number":131,"context_line":"            help\u003d\u0027New policy rule set itself, as a serialized blob\u0027,"},{"line_number":132,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FPvo%3D","line":129,"updated":"2013-01-31 16:24:09.000000000","message":"Should blob and type be optional?","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"12b304a5037baad5ebed8cbc16cb5eb1e4c99ece","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            help\u003d\u0027ID of policy to change\u0027,"},{"line_number":127,"context_line":"        )"},{"line_number":128,"context_line":"        parser.add_argument("},{"line_number":129,"context_line":"            \u0027blob\u0027,"},{"line_number":130,"context_line":"            metavar\u003d\u0027\u003cpolicy-blob\u003e\u0027,"},{"line_number":131,"context_line":"            help\u003d\u0027New policy rule set itself, as a serialized blob\u0027,"},{"line_number":132,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNa0%3D","line":129,"in_reply_to":"AAAAM3%2F%2FNf8%3D","updated":"2013-02-02 06:38:50.000000000","message":"Done","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"67b8eca5cd61f708a8aa44b643ca520b80137f6e","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            help\u003d\u0027ID of policy to change\u0027,"},{"line_number":127,"context_line":"        )"},{"line_number":128,"context_line":"        parser.add_argument("},{"line_number":129,"context_line":"            \u0027blob\u0027,"},{"line_number":130,"context_line":"            metavar\u003d\u0027\u003cpolicy-blob\u003e\u0027,"},{"line_number":131,"context_line":"            help\u003d\u0027New policy rule set itself, as a serialized blob\u0027,"},{"line_number":132,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNf8%3D","line":129,"in_reply_to":"AAAAM3%2F%2FPvo%3D","updated":"2013-02-02 02:30:52.000000000","message":"Yes.  And --type should be first.","commit_id":"06e1dec13b249657bef5b0b7db0a724480cfe938"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            \u0027blob\u0027,"},{"line_number":42,"context_line":"            metavar\u003d\u0027\u003cpolicy-blob\u003e\u0027,"},{"line_number":43,"context_line":"            help\u003d\u0027New policy rule set itself, as a serialized blob\u0027,"},{"line_number":44,"context_line":"        )"},{"line_number":45,"context_line":"        return parser"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2Bmc%3D","line":44,"updated":"2013-03-04 19:56:49.000000000","message":"Do we expect people to pass JSON text on the command line? Or is this meant to point to a file? Using a file or reading from stdin seems like it would be easier for a CLI user than trying to get the text formatted properly and passed as an argument.","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        )"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        info \u003d {}"},{"line_number":56,"context_line":"        info.update(policy._info)"},{"line_number":57,"context_line":"        return zip(*sorted(info.iteritems()))"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2BmU%3D","line":56,"updated":"2013-03-04 19:56:49.000000000","message":"Extra dict","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    def get_parser(self, prog_name):"},{"line_number":89,"context_line":"        parser \u003d super(ListPolicy, self).get_parser(prog_name)"},{"line_number":90,"context_line":"        parser.add_argument("},{"line_number":91,"context_line":"            \u0027--long\u0027,"},{"line_number":92,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":93,"context_line":"            default\u003dFalse,"},{"line_number":94,"context_line":"            help\u003d\u0027Additional fields are listed in output\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2Blw%3D","line":91,"updated":"2013-03-04 19:56:49.000000000","message":"This is one case where leaving the blob out most of the time makes sense. A better name for the option would be --include-blob though.","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"90b402804f87135f835e6ed5ec5f5347c3044a01","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                                     parsed_args.policy)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        info \u003d {}"},{"line_number":175,"context_line":"        info.update(policy._info)"},{"line_number":176,"context_line":"        return zip(*sorted(info.iteritems()))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2Blk%3D","line":175,"updated":"2013-03-04 19:56:49.000000000","message":"Extra dict","commit_id":"06cc90173d3d1ad15aad65e655f1b9d0bb06c0a4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5661d5620f635449988d2fddc0d6647bbbff2d46","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        parser.add_argument("},{"line_number":36,"context_line":"            \u0027type\u0027,"},{"line_number":37,"context_line":"            metavar\u003d\u0027\u003cpolicy-type\u003e\u0027,"},{"line_number":38,"context_line":"            help\u003d\u0027New MIME Type of the policy blob - i.e.: application/json\u0027,"},{"line_number":39,"context_line":"        )"},{"line_number":40,"context_line":"        parser.add_argument("},{"line_number":41,"context_line":"            \u0027blob\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8bM%3D","line":38,"updated":"2013-03-05 17:23:11.000000000","message":"suggest default to application/json.","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b24718d3e0f766fa7b8e3d1bde229ff899a42d30","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        parser.add_argument("},{"line_number":36,"context_line":"            \u0027type\u0027,"},{"line_number":37,"context_line":"            metavar\u003d\u0027\u003cpolicy-type\u003e\u0027,"},{"line_number":38,"context_line":"            help\u003d\u0027New MIME Type of the policy blob - i.e.: application/json\u0027,"},{"line_number":39,"context_line":"        )"},{"line_number":40,"context_line":"        parser.add_argument("},{"line_number":41,"context_line":"            \u0027blob\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F8Ww%3D","line":38,"in_reply_to":"AAAAN3%2F%2F8bM%3D","updated":"2013-03-05 18:28:15.000000000","message":"added default\u003d\"application/json\"","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e2cf4d204dc22478d5760f255cefaab43d730fbc","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            \u0027blob\u0027,"},{"line_number":42,"context_line":"            metavar\u003d\u0027\u003cpolicy-blob\u003e\u0027,"},{"line_number":43,"context_line":"            help\u003d\u0027New policy rule set itself, as a serialized blob\u0027,"},{"line_number":44,"context_line":"        )"},{"line_number":45,"context_line":"        return parser"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2BV8%3D","line":44,"updated":"2013-03-04 21:43:36.000000000","message":"Re-iterating dhellmann\u0027s comments to the latest patch:\nDo we expect people to pass JSON text on the command line? Or is this meant to point to a file? Using a file or reading from stdin seems like it would be easier for a CLI user than trying to get the text formatted properly and passed as an argument.","commit_id":"8beb79caf8f2ef191f1b58a132e68367565ab622"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"225f34c7134480decd156f38e08c66ce92599197","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#   License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#   under the License."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":"import sys"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\"Identity v3 Policy action implementations\"\"\""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAN3%2F%2F6PE%3D","line":15,"updated":"2013-03-06 21:20:05.000000000","message":"this import should be after the logging import below","commit_id":"a9c6ce6f24dfc609d1d9238f43af40c8e74defbf"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"225f34c7134480decd156f38e08c66ce92599197","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def get_parser(self, prog_name):"},{"line_number":35,"context_line":"        parser \u003d super(CreatePolicy, self).get_parser(prog_name)"},{"line_number":36,"context_line":"        parser.add_argument("},{"line_number":37,"context_line":"            \u0027type\u0027,"},{"line_number":38,"context_line":"            metavar\u003d\u0027\u003cpolicy-type\u003e\u0027,"},{"line_number":39,"context_line":"            default\u003d\"application/json\","},{"line_number":40,"context_line":"            help\u003d\u0027New MIME Type of the policy blob - i.e.: application/json\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAN3%2F%2F6N4%3D","line":37,"updated":"2013-03-06 21:20:05.000000000","message":"If this has a default can we make it an option?","commit_id":"a9c6ce6f24dfc609d1d9238f43af40c8e74defbf"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"964a1597473d500bd4de3a929cf9cbb172e06533","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def get_parser(self, prog_name):"},{"line_number":35,"context_line":"        parser \u003d super(CreatePolicy, self).get_parser(prog_name)"},{"line_number":36,"context_line":"        parser.add_argument("},{"line_number":37,"context_line":"            \u0027type\u0027,"},{"line_number":38,"context_line":"            metavar\u003d\u0027\u003cpolicy-type\u003e\u0027,"},{"line_number":39,"context_line":"            default\u003d\"application/json\","},{"line_number":40,"context_line":"            help\u003d\u0027New MIME Type of the policy blob - i.e.: application/json\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAN3%2F%2F4Ug%3D","line":37,"in_reply_to":"AAAAN3%2F%2F6N4%3D","updated":"2013-03-07 20:08:55.000000000","message":"done.","commit_id":"a9c6ce6f24dfc609d1d9238f43af40c8e74defbf"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"66e17e36337d32929c362cf6d42b0db18f04481e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            default\u003d\"application/json\","},{"line_number":40,"context_line":"            help\u003d\u0027New MIME Type of the policy blob - i.e.: application/json\u0027,"},{"line_number":41,"context_line":"        )"},{"line_number":42,"context_line":"        parser.add_argument("},{"line_number":43,"context_line":"            \u0027blob\u0027,"},{"line_number":44,"context_line":"            metavar\u003d\u0027\u003cblob\u003e\u0027,"},{"line_number":45,"context_line":"            help\u003d\u0027New policy rule set itself, as a serialized blob\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAN3%2F%2F3FE%3D","line":42,"updated":"2013-03-08 15:16:42.000000000","message":"Passing serialized data on the command line like this worries me from a usability standpoint. I understand that the individual policies are complex. However, it seems like we can do better than forcing users to write JSON as a command line argument.\n\nFor example, if the policy name and policy \"rules\" were listed as separate arguments, then someone could say:\n\n  openstack create policy admin_api is_admin:True\n\nor even\n\n  openstack create policy admin_or_owner  is_admin:True or project_id:%(project_id)s\n\nIf the policy API requires a JSON blob, then it can be assembled from the input arguments by the command line app before the data is sent to the server.\n\nI don\u0027t have an issue with the design of the other commands in this changeset, so if you want to split this file out to be discussed further, we can approve the others.","commit_id":"1cc1da4af60a521ecf6bcba49dcb34e565413cdd"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"66e17e36337d32929c362cf6d42b0db18f04481e","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def take_action(self, parsed_args):"},{"line_number":99,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027 % parsed_args)"},{"line_number":100,"context_line":"        if parsed_args.include_blob:"},{"line_number":101,"context_line":"            columns \u003d (\u0027ID\u0027, \u0027Type\u0027, \u0027Blob\u0027)"},{"line_number":102,"context_line":"        else:"},{"line_number":103,"context_line":"            columns \u003d (\u0027ID\u0027, \u0027Type\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAN3%2F%2F3E0%3D","line":100,"updated":"2013-03-08 15:16:42.000000000","message":"Thanks, I like this better. Perhaps if we can come up with a way to handle the issue above, we can do more formatting for the output of this command, too, to make the inputs and outputs consistent.","commit_id":"1cc1da4af60a521ecf6bcba49dcb34e565413cdd"}]}
