)]}'
{"watcher/api/controllers/v1/audit.py":[{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"a28d73fa5fb60b351a56db08d02dc8baf0352e4f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        # If goal, strategy, or audit_template was provide by name,"},{"line_number":91,"context_line":"        # override the value by uuid of them"},{"line_number":92,"context_line":"        if self.goal and not utils.is_uuid_like(self.goal):"},{"line_number":93,"context_line":"            goal \u003d objects.Goal.get_by_name(context, self.goal)"},{"line_number":94,"context_line":"            self.goal \u003d goal.uuid"},{"line_number":95,"context_line":"        if self.strategy and not utils.is_uuid_like(self.strategy):"},{"line_number":96,"context_line":"            strategy \u003d objects.Strategy.get_by_name(context, self.strategy)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_20370de6","line":93,"range":{"start_line":93,"start_character":12,"end_line":93,"end_character":63},"updated":"2017-12-27 05:28:50.000000000","message":"suggest: try ... except ... struct\nlike line 108","commit_id":"f8b8691a8704052b9527b2d3081f4255ebc25756"},{"author":{"_account_id":24501,"name":"sue","display_name":"suzhengwei","email":"sugar-2008@163.com","username":"suzhengwei"},"change_message_id":"0fd8fb130ef23b7439f16987b4a5686675a70eb1","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        # If goal, strategy, or audit_template was provide by name,"},{"line_number":91,"context_line":"        # override the value by uuid of them"},{"line_number":92,"context_line":"        if self.goal and not utils.is_uuid_like(self.goal):"},{"line_number":93,"context_line":"            goal \u003d objects.Goal.get_by_name(context, self.goal)"},{"line_number":94,"context_line":"            self.goal \u003d goal.uuid"},{"line_number":95,"context_line":"        if self.strategy and not utils.is_uuid_like(self.strategy):"},{"line_number":96,"context_line":"            strategy \u003d objects.Strategy.get_by_name(context, self.strategy)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_2e08b726","line":93,"range":{"start_line":93,"start_character":12,"end_line":93,"end_character":63},"in_reply_to":"bf8cb3f7_20370de6","updated":"2017-12-28 08:53:50.000000000","message":"ok","commit_id":"f8b8691a8704052b9527b2d3081f4255ebc25756"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"a28d73fa5fb60b351a56db08d02dc8baf0352e4f","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            goal \u003d objects.Goal.get_by_name(context, self.goal)"},{"line_number":94,"context_line":"            self.goal \u003d goal.uuid"},{"line_number":95,"context_line":"        if self.strategy and not utils.is_uuid_like(self.strategy):"},{"line_number":96,"context_line":"            strategy \u003d objects.Strategy.get_by_name(context, self.strategy)"},{"line_number":97,"context_line":"            self.strategy \u003d strategy.uuid"},{"line_number":98,"context_line":"        if self.audit_template and not utils.is_uuid_like(self.audit_template):"},{"line_number":99,"context_line":"            audit_template \u003d objects.AuditTemplate.get_by_name("}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_e03045eb","line":96,"range":{"start_line":96,"start_character":12,"end_line":96,"end_character":75},"updated":"2017-12-27 05:28:50.000000000","message":"ditto","commit_id":"f8b8691a8704052b9527b2d3081f4255ebc25756"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"a28d73fa5fb60b351a56db08d02dc8baf0352e4f","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            strategy \u003d objects.Strategy.get_by_name(context, self.strategy)"},{"line_number":97,"context_line":"            self.strategy \u003d strategy.uuid"},{"line_number":98,"context_line":"        if self.audit_template and not utils.is_uuid_like(self.audit_template):"},{"line_number":99,"context_line":"            audit_template \u003d objects.AuditTemplate.get_by_name("},{"line_number":100,"context_line":"                context, self.audit_template)"},{"line_number":101,"context_line":"            self.audit_template \u003d audit_template.uuid"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_804db973","line":99,"range":{"start_line":99,"start_character":12,"end_line":99,"end_character":63},"updated":"2017-12-27 05:28:50.000000000","message":"ditto","commit_id":"f8b8691a8704052b9527b2d3081f4255ebc25756"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"0a02809f489b51b27725c32ec56d6417d2e323f4","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    name \u003d wtypes.wsattr(wtypes.text, mandatory\u003dFalse)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    audit_template_uuid \u003d wtypes.wsattr(wtypes.text, mandatory\u003dFalse)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    goal \u003d wtypes.wsattr(wtypes.text, mandatory\u003dFalse)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_2e93c95e","line":61,"range":{"start_line":61,"start_character":40,"end_line":61,"end_character":51},"updated":"2018-02-15 02:49:13.000000000","message":"audit_template uuid is defined as wtypes.wsattr(types.uuid, readonly\u003dTrue).\nhttps://github.com/openstack/watcher/blob/master/watcher/api/controllers/v1/audit_template.py#L330","commit_id":"6bb618eb49b28310ebfe03220b63338b85de1829"},{"author":{"_account_id":24501,"name":"sue","display_name":"suzhengwei","email":"sugar-2008@163.com","username":"suzhengwei"},"change_message_id":"e44383a8f0d6d330b769f8ff5085e9acea5e854b","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    name \u003d wtypes.wsattr(wtypes.text, mandatory\u003dFalse)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    audit_template_uuid \u003d wtypes.wsattr(wtypes.text, mandatory\u003dFalse)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    goal \u003d wtypes.wsattr(wtypes.text, mandatory\u003dFalse)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_c27ee968","line":61,"range":{"start_line":61,"start_character":40,"end_line":61,"end_character":51},"in_reply_to":"3fa0c359_2e93c95e","updated":"2018-02-24 09:40:47.000000000","message":"I noticed this question because there are no detail about AuditPostType in api guide.\nhttps://docs.openstack.org/watcher/queens/api/v1.html#audits\nthe front-end developer will follow watcherclient to create an audit.\n\nAnd it may be an inappropriate name at the very start, like\nhttps://github.com/openstack/python-watcherclient/blob/master/watcherclient/v1/audit_shell.py#L175\n\nIt has diffrent result if creating an audit by watcherclient or directly by watcher-api, which makes the front-end developers confused.\nSo I think we should unify watcherclient and watcher-api. They could both accept name or uuid as the value of goal/strategy/audittemplate.","commit_id":"6bb618eb49b28310ebfe03220b63338b85de1829"},{"author":{"_account_id":27947,"name":"Egor Panfilov","email":"edpanfilov@sbcloud.ru","username":"erakli"},"change_message_id":"c8adad2102bbe56f5fe0676e7b94df8107df9950","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                strategy \u003d objects.Strategy.get_by_name("},{"line_number":97,"context_line":"                    context, self.strategy)"},{"line_number":98,"context_line":"                self.strategy \u003d strategy.uuid"},{"line_number":99,"context_line":"            except exception.GoalNotFound:"},{"line_number":100,"context_line":"                raise exception.Invalid("},{"line_number":101,"context_line":"                    message\u003d_(\u0027The strategy UUID or name specified is \u0027"},{"line_number":102,"context_line":"                              \u0027invalid\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_6907f583","line":99,"range":{"start_line":99,"start_character":29,"end_line":99,"end_character":41},"updated":"2018-04-21 20:56:44.000000000","message":"StrategyNotFound?","commit_id":"6bb618eb49b28310ebfe03220b63338b85de1829"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"0a02809f489b51b27725c32ec56d6417d2e323f4","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            raise exception.AuditIntervalNotSpecified("},{"line_number":92,"context_line":"                audit_type\u003dself.audit_type)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        if self.strategy and not utils.is_uuid_like(self.strategy):"},{"line_number":95,"context_line":"            try:"},{"line_number":96,"context_line":"                strategy \u003d objects.Strategy.get_by_name("},{"line_number":97,"context_line":"                    context, self.strategy)"},{"line_number":98,"context_line":"                self.strategy \u003d strategy.uuid"},{"line_number":99,"context_line":"            except exception.GoalNotFound:"},{"line_number":100,"context_line":"                raise exception.Invalid("},{"line_number":101,"context_line":"                    message\u003d_(\u0027The strategy UUID or name specified is \u0027"},{"line_number":102,"context_line":"                              \u0027invalid\u0027))"},{"line_number":103,"context_line":"            if not self.name:"},{"line_number":104,"context_line":"                self.name \u003d \"%s-%s\" % (strategy.name,"},{"line_number":105,"context_line":"                                       datetime.datetime.utcnow().isoformat())"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        if self.goal and not utils.is_uuid_like(self.goal):"},{"line_number":108,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_ce4fc590","line":105,"range":{"start_line":94,"start_character":1,"end_line":105,"end_character":78},"updated":"2018-02-15 02:49:13.000000000","message":"objects.Strategy.get raises exception.InvalidIdentity if utils.is_int_like nor utils.is_uuid_like.\nhttps://github.com/openstack/watcher/blob/master/watcher/objects/strategy.py#L48-L66\n\nif self.strategy:\n  strategy \u003d None\n  try:\n    strategy \u003d objects.Strategy.get(self.strategy)\n  except exception.InvalidIdentity:\n    # try to get strategy by strategy name \n    try:\n      strategy \u003d objects.Strategy.get_by_name(\n        context, self.strategy)\n    except:\n      raise exception.Invalid(\n        message\u003d_(\u0027The strategy UUID or name specified is \u0027\n                  \u0027invalid\u0027))\n\n  self.name \u003d \"%s-%s\" % (strategy.name,\n                         datetime.datetime.utcnow().isoformat())\n\nmaybe better to add self.strategy in exception message.","commit_id":"6bb618eb49b28310ebfe03220b63338b85de1829"},{"author":{"_account_id":27947,"name":"Egor Panfilov","email":"edpanfilov@sbcloud.ru","username":"erakli"},"change_message_id":"c8adad2102bbe56f5fe0676e7b94df8107df9950","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            raise exception.AuditIntervalNotSpecified("},{"line_number":92,"context_line":"                audit_type\u003dself.audit_type)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        if self.strategy and not utils.is_uuid_like(self.strategy):"},{"line_number":95,"context_line":"            try:"},{"line_number":96,"context_line":"                strategy \u003d objects.Strategy.get_by_name("},{"line_number":97,"context_line":"                    context, self.strategy)"},{"line_number":98,"context_line":"                self.strategy \u003d strategy.uuid"},{"line_number":99,"context_line":"            except exception.GoalNotFound:"},{"line_number":100,"context_line":"                raise exception.Invalid("},{"line_number":101,"context_line":"                    message\u003d_(\u0027The strategy UUID or name specified is \u0027"},{"line_number":102,"context_line":"                              \u0027invalid\u0027))"},{"line_number":103,"context_line":"            if not self.name:"},{"line_number":104,"context_line":"                self.name \u003d \"%s-%s\" % (strategy.name,"},{"line_number":105,"context_line":"                                       datetime.datetime.utcnow().isoformat())"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        if self.goal and not utils.is_uuid_like(self.goal):"},{"line_number":108,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_c9d401ec","line":105,"range":{"start_line":94,"start_character":1,"end_line":105,"end_character":78},"in_reply_to":"3fa0c359_624cb541","updated":"2018-04-21 20:56:44.000000000","message":"Maybe it\u0027s beter to use same approach as it done for audit_template (L123-L132)?","commit_id":"6bb618eb49b28310ebfe03220b63338b85de1829"},{"author":{"_account_id":24501,"name":"sue","display_name":"suzhengwei","email":"sugar-2008@163.com","username":"suzhengwei"},"change_message_id":"e44383a8f0d6d330b769f8ff5085e9acea5e854b","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            raise exception.AuditIntervalNotSpecified("},{"line_number":92,"context_line":"                audit_type\u003dself.audit_type)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        if self.strategy and not utils.is_uuid_like(self.strategy):"},{"line_number":95,"context_line":"            try:"},{"line_number":96,"context_line":"                strategy \u003d objects.Strategy.get_by_name("},{"line_number":97,"context_line":"                    context, self.strategy)"},{"line_number":98,"context_line":"                self.strategy \u003d strategy.uuid"},{"line_number":99,"context_line":"            except exception.GoalNotFound:"},{"line_number":100,"context_line":"                raise exception.Invalid("},{"line_number":101,"context_line":"                    message\u003d_(\u0027The strategy UUID or name specified is \u0027"},{"line_number":102,"context_line":"                              \u0027invalid\u0027))"},{"line_number":103,"context_line":"            if not self.name:"},{"line_number":104,"context_line":"                self.name \u003d \"%s-%s\" % (strategy.name,"},{"line_number":105,"context_line":"                                       datetime.datetime.utcnow().isoformat())"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        if self.goal and not utils.is_uuid_like(self.goal):"},{"line_number":108,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_624cb541","line":105,"range":{"start_line":94,"start_character":1,"end_line":105,"end_character":78},"in_reply_to":"3fa0c359_ce4fc590","updated":"2018-02-24 09:40:47.000000000","message":"yes, it is better.","commit_id":"6bb618eb49b28310ebfe03220b63338b85de1829"},{"author":{"_account_id":27947,"name":"Egor Panfilov","email":"edpanfilov@sbcloud.ru","username":"erakli"},"change_message_id":"c8adad2102bbe56f5fe0676e7b94df8107df9950","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # If audit_template was provided, we will provide any"},{"line_number":119,"context_line":"        # variables not included in the request, but not override"},{"line_number":120,"context_line":"        # those variables that were included."},{"line_number":121,"context_line":"        if self.audit_template_uuid:"},{"line_number":122,"context_line":"            try:"},{"line_number":123,"context_line":"                if utils.is_uuid_like(self.audit_template_uuid):"},{"line_number":124,"context_line":"                    audit_template \u003d objects.AuditTemplate.get("},{"line_number":125,"context_line":"                        context, self.audit_template_uuid)"},{"line_number":126,"context_line":"                else:"},{"line_number":127,"context_line":"                    audit_template \u003d objects.AuditTemplate.get_by_name("},{"line_number":128,"context_line":"                        context, self.audit_template_uuid)"},{"line_number":129,"context_line":"            except exception.AuditTemplateNotFound:"},{"line_number":130,"context_line":"                raise exception.Invalid("},{"line_number":131,"context_line":"                    message\u003d_(\u0027The audit template UUID or name specified is \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_890cc9a5","line":128,"range":{"start_line":121,"start_character":7,"end_line":128,"end_character":58},"updated":"2018-04-21 20:56:44.000000000","message":"We should change name of audit_template_uuid on audit_template because we try to get AuditTemplate by name also.\n\nOr we should exclude check on name and add discovery of audit_template value. Other approach is to throw exception if we got AuditTemplate name in audit_template_uuid, but it\u0027s too restrictive.","commit_id":"6bb618eb49b28310ebfe03220b63338b85de1829"},{"author":{"_account_id":14039,"name":"watanabe isao","email":"watanabe.isao.openstack@gmail.com","username":"watanabe.isao"},"change_message_id":"d0e60e471a5a7927da5c3e61d0dcfa8d48b5d708","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            if not self.name:"},{"line_number":134,"context_line":"                self.name \u003d \"%s-%s\" % (audit_template.name,"},{"line_number":135,"context_line":"                                       datetime.datetime.utcnow().isoformat())"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"            at2a \u003d {"},{"line_number":138,"context_line":"                \u0027goal\u0027: \u0027goal_id\u0027,"},{"line_number":139,"context_line":"                \u0027strategy\u0027: \u0027strategy_id\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_290dc38f","line":136,"updated":"2018-02-18 11:31:20.000000000","message":"First, is there a case which finally have no value with self.name?\nSecond, in the base case, self.name will finally use goal name, but in the fix, it will not. I\u0027m not sure if there will cause an user impact or not?","commit_id":"6bb618eb49b28310ebfe03220b63338b85de1829"},{"author":{"_account_id":24501,"name":"sue","display_name":"suzhengwei","email":"sugar-2008@163.com","username":"suzhengwei"},"change_message_id":"e44383a8f0d6d330b769f8ff5085e9acea5e854b","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            if not self.name:"},{"line_number":134,"context_line":"                self.name \u003d \"%s-%s\" % (audit_template.name,"},{"line_number":135,"context_line":"                                       datetime.datetime.utcnow().isoformat())"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"            at2a \u003d {"},{"line_number":138,"context_line":"                \u0027goal\u0027: \u0027goal_id\u0027,"},{"line_number":139,"context_line":"                \u0027strategy\u0027: \u0027strategy_id\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_a7964f3d","line":136,"in_reply_to":"3fa0c359_290dc38f","updated":"2018-02-24 09:40:47.000000000","message":"1.\u0027name\u0027 looks equal with other parameters. If check all of them, it will only make the cases enormous, and useless.\n2.mandatory of goal/strategy/audit_template_uuid is False. In usage, when creating an audit, it doesn\u0027t need all of goal/strategy/audit_template_uuid, but one of them at least.\nIf audit.name not given, it just uses name of strategy-\u003eaudit_template-\u003egoal preferentially, as part of the audit.name.","commit_id":"6bb618eb49b28310ebfe03220b63338b85de1829"},{"author":{"_account_id":27947,"name":"Egor Panfilov","email":"edpanfilov@sbcloud.ru","username":"erakli"},"change_message_id":"c8adad2102bbe56f5fe0676e7b94df8107df9950","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            if not self.name:"},{"line_number":134,"context_line":"                self.name \u003d \"%s-%s\" % (audit_template.name,"},{"line_number":135,"context_line":"                                       datetime.datetime.utcnow().isoformat())"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"            at2a \u003d {"},{"line_number":138,"context_line":"                \u0027goal\u0027: \u0027goal_id\u0027,"},{"line_number":139,"context_line":"                \u0027strategy\u0027: \u0027strategy_id\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_09f8b978","line":136,"in_reply_to":"3fa0c359_a7964f3d","updated":"2018-04-21 20:56:44.000000000","message":"watanabe is right. We need final check on self.name in case if something went wrong and none of goal/strategy/audit_template_uuid are present. \n\nSimply throw exception maybe?","commit_id":"6bb618eb49b28310ebfe03220b63338b85de1829"}]}
