)]}'
{"watcher/applier/actions/base.py":[{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"b346a9ef4008a9ec40fbdafa96a6b0900a68c148","unresolved":false,"context_lines":[{"line_number":26,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":27,"context_line":"class BaseAction(object):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    APPLIES_TO \u003d \u0027applies_to\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self):"},{"line_number":32,"context_line":"        self._input_parameters \u003d {}"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_fb4969d1","line":29,"updated":"2016-01-28 05:55:36.000000000","message":"I go back and forth on this.  It\u0027s great to use constants, but when the constant is the exact same as the value but all uppercase, I don\u0027t see the point.  If the value changes, the name of the constant is also going to change, making you have to update all usages of the constant anyways.","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"f2f55f3a9076d843474033bb053e11b49dba47fe","unresolved":false,"context_lines":[{"line_number":26,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":27,"context_line":"class BaseAction(object):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    APPLIES_TO \u003d \u0027applies_to\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self):"},{"line_number":32,"context_line":"        self._input_parameters \u003d {}"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_f5263f67","line":29,"in_reply_to":"7a5de9d1_fb4969d1","updated":"2016-01-31 16:07:58.000000000","message":"Thanks Taylor for your review. I understand your point of view.\nThe main idea to use a constant for the variable \"applies_to\" is to avoid that the developers of a new watcher Action write incorrectly \"applies_to\"\n\nIMHO, it can be error prone to let the user write the ID of an attribute APPLIES_TO (\"Applies_to\" or \"APPLIES_TO\" or \"appliesto\" ect)","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"b346a9ef4008a9ec40fbdafa96a6b0900a68c148","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def validate_parameters(self):"},{"line_number":72,"context_line":"        copy_input_parameters \u003d self.input_parameters.copy()"},{"line_number":73,"context_line":"        if self.APPLIES_TO in [str(v) for v in self.schema.schema]:"},{"line_number":74,"context_line":"            # we have a constraint on the parameter \"applies_to\""},{"line_number":75,"context_line":"            # in order to make easier the declaration of the constraints"},{"line_number":76,"context_line":"            # for the users, we inject the parameter applies_to in"},{"line_number":77,"context_line":"            # the input_parameters"},{"line_number":78,"context_line":"            copy_input_parameters[self.APPLIES_TO] \u003d self.applies_to"},{"line_number":79,"context_line":"        # validate the schema"},{"line_number":80,"context_line":"        self.schema(copy_input_parameters)"},{"line_number":81,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_5bf67d90","line":78,"range":{"start_line":73,"start_character":8,"end_line":78,"end_character":68},"updated":"2016-01-28 05:55:36.000000000","message":"Why is the applies to parameter considered special here - I guess I don\u0027t understand the comment?  Does the applies_to parameter make sense for all actions (we have it set to \"\" for the dummy action, which seems odd)?  Also, would the `in` check work if APPLIES_TO is nested in the schema?","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"f2f55f3a9076d843474033bb053e11b49dba47fe","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def validate_parameters(self):"},{"line_number":72,"context_line":"        copy_input_parameters \u003d self.input_parameters.copy()"},{"line_number":73,"context_line":"        if self.APPLIES_TO in [str(v) for v in self.schema.schema]:"},{"line_number":74,"context_line":"            # we have a constraint on the parameter \"applies_to\""},{"line_number":75,"context_line":"            # in order to make easier the declaration of the constraints"},{"line_number":76,"context_line":"            # for the users, we inject the parameter applies_to in"},{"line_number":77,"context_line":"            # the input_parameters"},{"line_number":78,"context_line":"            copy_input_parameters[self.APPLIES_TO] \u003d self.applies_to"},{"line_number":79,"context_line":"        # validate the schema"},{"line_number":80,"context_line":"        self.schema(copy_input_parameters)"},{"line_number":81,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_f50cff95","line":78,"range":{"start_line":73,"start_character":8,"end_line":78,"end_character":68},"in_reply_to":"7a5de9d1_5bf67d90","updated":"2016-01-31 16:07:58.000000000","message":"Just to be sure that we have the same understanding of the purpose of the attribute \"applies to\". The attribute \"applies to\" is the unique id of the resource to which the Action applies (e.g: it can be a VM, Host,I/O scheduler, ..., a routeur,ect)\n\nThe parameter applies_to has to be considered special because we think that we need to identify explicitly this attribute from the others parameters.\n\nif you take a look to https://github.com/openstack/watcher/blob/master/watcher/objects/action.py#L45\nYou will see that we have a specific attribute for \"applies_to\". \n\nFor example, the watcher-dashboard will need to display on which resource the action is applied. If we didn\u0027t have this special attribute how do we show and select the information to display to the user ?\n\nbut I agree with you this is not a perfect solution.\n\nWe think that an Action will always be applies to a resource to optimize. (The action Dummy is unique because we only use for tests)","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"}],"watcher/applier/actions/change_nova_service_state.py":[{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"b346a9ef4008a9ec40fbdafa96a6b0900a68c148","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def check_state(self, state):"},{"line_number":34,"context_line":"        if state not in [val.value for val in"},{"line_number":35,"context_line":"                         hstate.HypervisorState.__members__.values()]:"},{"line_number":36,"context_line":"            raise voluptuous.Invalid(_(\"The hypervisor state is invalid.\"))"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @property"},{"line_number":39,"context_line":"    def schema(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_1bb7a53a","line":36,"updated":"2016-01-28 05:55:36.000000000","message":"This would result in a message of \"The hypervisor state is invalid. for dictionary @ data[\u0027state\u0027]\" which doesn\u0027t really make sense.\n\n+ see next comment.","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"f2f55f3a9076d843474033bb053e11b49dba47fe","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def check_state(self, state):"},{"line_number":34,"context_line":"        if state not in [val.value for val in"},{"line_number":35,"context_line":"                         hstate.HypervisorState.__members__.values()]:"},{"line_number":36,"context_line":"            raise voluptuous.Invalid(_(\"The hypervisor state is invalid.\"))"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @property"},{"line_number":39,"context_line":"    def schema(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_503e04db","line":36,"in_reply_to":"7a5de9d1_1bb7a53a","updated":"2016-01-31 16:07:58.000000000","message":"Okay, what do you think about: \nThe input_parameter \u0027state\u0027 is not conform to the schema.","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"b346a9ef4008a9ec40fbdafa96a6b0900a68c148","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    @property"},{"line_number":39,"context_line":"    def schema(self):"},{"line_number":40,"context_line":"        return voluptuous.Schema({"},{"line_number":41,"context_line":"            voluptuous.Required(self.STATE): self.check_state,"},{"line_number":42,"context_line":"            voluptuous.Required(self.APPLIES_TO):"},{"line_number":43,"context_line":"                voluptuous.All(str, voluptuous.Length(min\u003d1)),"},{"line_number":44,"context_line":"        })"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_7bb019de","line":41,"range":{"start_line":41,"start_character":45,"end_line":41,"end_character":61},"updated":"2016-01-28 05:55:36.000000000","message":"What about using Any with the splat operator here instead?  \n\n  voluptuous.Any(*[state.value for state in list(hstate.HypervisorState)])","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"f2f55f3a9076d843474033bb053e11b49dba47fe","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    @property"},{"line_number":39,"context_line":"    def schema(self):"},{"line_number":40,"context_line":"        return voluptuous.Schema({"},{"line_number":41,"context_line":"            voluptuous.Required(self.STATE): self.check_state,"},{"line_number":42,"context_line":"            voluptuous.Required(self.APPLIES_TO):"},{"line_number":43,"context_line":"                voluptuous.All(str, voluptuous.Length(min\u003d1)),"},{"line_number":44,"context_line":"        })"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_a08fe328","line":41,"range":{"start_line":41,"start_character":45,"end_line":41,"end_character":61},"in_reply_to":"7a5de9d1_7bb019de","updated":"2016-01-31 16:07:58.000000000","message":"yes good idea","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"}],"watcher/applier/actions/factory.py":[{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"b346a9ef4008a9ec40fbdafa96a6b0900a68c148","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        LOG.debug(\"Checking the input parameters\")"},{"line_number":37,"context_line":"        # NOTE(jed) if we change the schema of an action and we try to reload"},{"line_number":38,"context_line":"        # an older version of the Action, the validation can fail."},{"line_number":39,"context_line":"        # We need to add the versioning of an Action or a migration tool."},{"line_number":40,"context_line":"        # We can also create an new Action which extends the previous one."},{"line_number":41,"context_line":"        loaded_action.validate_parameters()"},{"line_number":42,"context_line":"        return loaded_action"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_fbdba919","line":39,"updated":"2016-01-28 05:55:36.000000000","message":"This kind of sounds like a nightmare.  We\u0027ll have to version / be able to migrate here in addition to the DB?","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"f2f55f3a9076d843474033bb053e11b49dba47fe","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        LOG.debug(\"Checking the input parameters\")"},{"line_number":37,"context_line":"        # NOTE(jed) if we change the schema of an action and we try to reload"},{"line_number":38,"context_line":"        # an older version of the Action, the validation can fail."},{"line_number":39,"context_line":"        # We need to add the versioning of an Action or a migration tool."},{"line_number":40,"context_line":"        # We can also create an new Action which extends the previous one."},{"line_number":41,"context_line":"        loaded_action.validate_parameters()"},{"line_number":42,"context_line":"        return loaded_action"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_ec92c29e","line":39,"in_reply_to":"7a5de9d1_fbdba919","updated":"2016-01-31 16:07:58.000000000","message":"Yes I agree.\nThis is the reason why when we started to implement the implementation of BP \"watcher-add-actions-via-conf\" we have added the attribute \"action_type_version\" to avoid this problem with the  versionning of the actions. \nBut it was not easy to do it with stevedore. \n\nentry_point : MIGRATE_V1, MIGRATE_V2","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"}],"watcher/applier/actions/migration.py":[{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"b346a9ef4008a9ec40fbdafa96a6b0900a68c148","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    @property"},{"line_number":52,"context_line":"    def schema(self):"},{"line_number":53,"context_line":"        return voluptuous.Schema({"},{"line_number":54,"context_line":"            voluptuous.Required(self.APPLIES_TO): self.check_applies_to,"},{"line_number":55,"context_line":"            voluptuous.Required(self.MIGRATION_TYPE,"},{"line_number":56,"context_line":"                                default\u003dself.LIVE_MIGRATION):"},{"line_number":57,"context_line":"                                    self.check_mig_type,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_5bae7d2f","line":54,"range":{"start_line":54,"start_character":55,"end_line":54,"end_character":71},"updated":"2016-01-28 05:55:36.000000000","message":"I think this method may be able to be converted to an ANY.  I also still don\u0027t get what this APPLIES_TO refers to - the VM?","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"f2f55f3a9076d843474033bb053e11b49dba47fe","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    @property"},{"line_number":52,"context_line":"    def schema(self):"},{"line_number":53,"context_line":"        return voluptuous.Schema({"},{"line_number":54,"context_line":"            voluptuous.Required(self.APPLIES_TO): self.check_applies_to,"},{"line_number":55,"context_line":"            voluptuous.Required(self.MIGRATION_TYPE,"},{"line_number":56,"context_line":"                                default\u003dself.LIVE_MIGRATION):"},{"line_number":57,"context_line":"                                    self.check_mig_type,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_f741f863","line":54,"range":{"start_line":54,"start_character":55,"end_line":54,"end_character":71},"in_reply_to":"7a5de9d1_5bae7d2f","updated":"2016-01-31 16:07:58.000000000","message":"yes for any, see my comment about applies_to","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"b346a9ef4008a9ec40fbdafa96a6b0900a68c148","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            voluptuous.Required(self.APPLIES_TO): self.check_applies_to,"},{"line_number":55,"context_line":"            voluptuous.Required(self.MIGRATION_TYPE,"},{"line_number":56,"context_line":"                                default\u003dself.LIVE_MIGRATION):"},{"line_number":57,"context_line":"                                    self.check_mig_type,"},{"line_number":58,"context_line":"            voluptuous.Required(self.DST_HYPERVISOR):"},{"line_number":59,"context_line":"                voluptuous.All(str, voluptuous.Length(min\u003d1)),"},{"line_number":60,"context_line":"            voluptuous.Required(self.SRC_HYPERVISOR):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_5b6bdd1e","line":57,"range":{"start_line":57,"start_character":36,"end_line":57,"end_character":55},"updated":"2016-01-28 05:55:36.000000000","message":"voluptuous.Any(*[self.LIVE_MIGRATION])","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"f2f55f3a9076d843474033bb053e11b49dba47fe","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            voluptuous.Required(self.APPLIES_TO): self.check_applies_to,"},{"line_number":55,"context_line":"            voluptuous.Required(self.MIGRATION_TYPE,"},{"line_number":56,"context_line":"                                default\u003dself.LIVE_MIGRATION):"},{"line_number":57,"context_line":"                                    self.check_mig_type,"},{"line_number":58,"context_line":"            voluptuous.Required(self.DST_HYPERVISOR):"},{"line_number":59,"context_line":"                voluptuous.All(str, voluptuous.Length(min\u003d1)),"},{"line_number":60,"context_line":"            voluptuous.Required(self.SRC_HYPERVISOR):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_b7606002","line":57,"range":{"start_line":57,"start_character":36,"end_line":57,"end_character":55},"in_reply_to":"7a5de9d1_5b6bdd1e","updated":"2016-01-31 16:07:58.000000000","message":"+1","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"}],"watcher/applier/actions/nop.py":[{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"b346a9ef4008a9ec40fbdafa96a6b0900a68c148","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    @property"},{"line_number":34,"context_line":"    def schema(self):"},{"line_number":35,"context_line":"        return voluptuous.Schema({"},{"line_number":36,"context_line":"            voluptuous.Required(self.MESSAGE): str"},{"line_number":37,"context_line":"        })"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_9b49558e","line":36,"range":{"start_line":36,"start_character":47,"end_line":36,"end_character":50},"updated":"2016-01-28 05:55:36.000000000","message":"Allow None?\n\n  ANY(str, None)","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"f2f55f3a9076d843474033bb053e11b49dba47fe","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    @property"},{"line_number":34,"context_line":"    def schema(self):"},{"line_number":35,"context_line":"        return voluptuous.Schema({"},{"line_number":36,"context_line":"            voluptuous.Required(self.MESSAGE): str"},{"line_number":37,"context_line":"        })"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_d75ddc47","line":36,"range":{"start_line":36,"start_character":47,"end_line":36,"end_character":50},"in_reply_to":"7a5de9d1_9b49558e","updated":"2016-01-31 16:07:58.000000000","message":"+1","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"}],"watcher/applier/actions/sleep.py":[{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"b346a9ef4008a9ec40fbdafa96a6b0900a68c148","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    @property"},{"line_number":35,"context_line":"    def schema(self):"},{"line_number":36,"context_line":"        return voluptuous.Schema({"},{"line_number":37,"context_line":"            voluptuous.Required(self.DURATION, default\u003d1): float"},{"line_number":38,"context_line":"        })"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_fb2f299f","line":37,"range":{"start_line":37,"start_character":59,"end_line":37,"end_character":64},"updated":"2016-01-28 05:55:36.000000000","message":"Need to make sure the sleep is \u003e\u003d 0 with the Range function:\n\n  voluptuous.All(float, voluptuous.Range(min\u003d0))\n\nAlso, probably want to use the Coerce function to allow for floats, integers, or strings (of the right format).","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"f2f55f3a9076d843474033bb053e11b49dba47fe","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    @property"},{"line_number":35,"context_line":"    def schema(self):"},{"line_number":36,"context_line":"        return voluptuous.Schema({"},{"line_number":37,"context_line":"            voluptuous.Required(self.DURATION, default\u003d1): float"},{"line_number":38,"context_line":"        })"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_37331016","line":37,"range":{"start_line":37,"start_character":59,"end_line":37,"end_character":64},"in_reply_to":"7a5de9d1_fb2f299f","updated":"2016-01-31 16:07:58.000000000","message":"+1","commit_id":"690beb12af8f5118e6ed8e3caf0127c4ac4a072a"}],"watcher/common/exception.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"2b1fbb39015ce51bfeff9df8d51ed0058593ae0c","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"class ReservedWord(WatcherException):"},{"line_number":285,"context_line":"    msg_fmt \u003d _(\"This identifier is reserved word and cannot \""},{"line_number":286,"context_line":"                \"be used as variables \u0027%(name)s\u0027\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a5ae5dd_19285232","line":286,"range":{"start_line":285,"start_character":0,"end_line":286,"end_character":50},"updated":"2016-02-08 16:20:33.000000000","message":"I would simplify it like below:\n\n\"The identifier \u0027%(name)s\u0027 is a reserved word\"","commit_id":"6857945b5e9b0b8243614938419b7b2f356ff4d0"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"7a97b4065d0879dad9f9b3056161839f7518907e","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"class ReservedWord(WatcherException):"},{"line_number":285,"context_line":"    msg_fmt \u003d _(\"This identifier is reserved word and cannot \""},{"line_number":286,"context_line":"                \"be used as variables \u0027%(name)s\u0027\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a5ae5dd_a8f41d87","line":286,"range":{"start_line":285,"start_character":0,"end_line":286,"end_character":50},"in_reply_to":"5a5ae5dd_19285232","updated":"2016-02-09 08:09:40.000000000","message":"Done","commit_id":"6857945b5e9b0b8243614938419b7b2f356ff4d0"}],"watcher/locale/fr/LC_MESSAGES/watcher.po":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"31bc79ee7bab4ea720ccea9b30021d00498a0dda","unresolved":false,"context_lines":[{"line_number":227,"context_line":"msgstr \"\""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"#: watcher/common/exception.py:182"},{"line_number":230,"context_line":"msgid \"ActionPlan %(action plan)s could not be found\""},{"line_number":231,"context_line":"msgstr \"\""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"#: watcher/common/exception.py:186"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"5a5ae5dd_b0baf5be","line":230,"range":{"start_line":230,"start_character":26,"end_line":230,"end_character":27},"updated":"2016-02-04 16:24:19.000000000","message":"typo: the _ that was here is important.\n\n\nI thought I had fixed it in another PS (https://review.openstack.org/#/c/272456/) so can you rebase to make sure it\u0027s all OK?","commit_id":"0aa52485f83f5c74b7de0c45ba901bbb345eeeca"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"49a58d749a7e528bd2bc79aa60ced9e14ae38020","unresolved":false,"context_lines":[{"line_number":227,"context_line":"msgstr \"\""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"#: watcher/common/exception.py:182"},{"line_number":230,"context_line":"msgid \"ActionPlan %(action plan)s could not be found\""},{"line_number":231,"context_line":"msgstr \"\""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"#: watcher/common/exception.py:186"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"5a5ae5dd_22ff9235","line":230,"range":{"start_line":230,"start_character":26,"end_line":230,"end_character":27},"in_reply_to":"5a5ae5dd_b0baf5be","updated":"2016-02-04 18:42:00.000000000","message":"yes I know : ) I didn\u0027t want to manage the conflicting. \nI want regenerate the file but i forgot.","commit_id":"0aa52485f83f5c74b7de0c45ba901bbb345eeeca"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"d290c049a61fd034c697f346927f2414e3c3ad61","unresolved":false,"context_lines":[{"line_number":332,"context_line":"#: watcher/common/exception.py:285"},{"line_number":333,"context_line":"#, fuzzy, python-format"},{"line_number":334,"context_line":"msgid \"The identifier \u0027%(name)s\u0027 is a reserved word\""},{"line_number":335,"context_line":"msgstr \"L\u0027instance \u0027%(name)s\u0027 n\u0027a pas été trouvée\""},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"#: watcher/common/service.py:83"},{"line_number":338,"context_line":"#, python-format"}],"source_content_type":"application/octet-stream","patch_set":19,"id":"5a5ae5dd_c8339961","line":335,"range":{"start_line":335,"start_character":8,"end_line":335,"end_character":50},"updated":"2016-02-09 08:11:43.000000000","message":"nit: This translation doesn\u0027t match at all","commit_id":"4023e83a61c63a7216cc2f39c715e3bd6bb7d467"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"263c94665d139e79b965b3c2d460031bd135c545","unresolved":false,"context_lines":[{"line_number":332,"context_line":"#: watcher/common/exception.py:285"},{"line_number":333,"context_line":"#, fuzzy, python-format"},{"line_number":334,"context_line":"msgid \"The identifier \u0027%(name)s\u0027 is a reserved word\""},{"line_number":335,"context_line":"msgstr \"L\u0027instance \u0027%(name)s\u0027 n\u0027a pas été trouvée\""},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"#: watcher/common/service.py:83"},{"line_number":338,"context_line":"#, python-format"}],"source_content_type":"application/octet-stream","patch_set":19,"id":"5a5ae5dd_a8fe5d36","line":335,"range":{"start_line":335,"start_character":8,"end_line":335,"end_character":50},"in_reply_to":"5a5ae5dd_c8339961","updated":"2016-02-09 08:25:29.000000000","message":"This translation was automatically made by update_catalog.\nWe decided to stop the translation.","commit_id":"4023e83a61c63a7216cc2f39c715e3bd6bb7d467"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"d290c049a61fd034c697f346927f2414e3c3ad61","unresolved":false,"context_lines":[{"line_number":625,"context_line":"#~ msgstr \"L\u0027état de l\u0027hyperviseur est invalide\""},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"#~ msgid \"The migration type is invalid.\""},{"line_number":628,"context_line":"#~ msgstr \"La type de migration est invalide\""},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"#~ msgid \"%(err)s\""},{"line_number":631,"context_line":"#~ msgstr \"%(err)s\""}],"source_content_type":"application/octet-stream","patch_set":19,"id":"5a5ae5dd_484809cd","line":628,"range":{"start_line":628,"start_character":11,"end_line":628,"end_character":13},"updated":"2016-02-09 08:11:43.000000000","message":"s/La/Le","commit_id":"4023e83a61c63a7216cc2f39c715e3bd6bb7d467"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"263c94665d139e79b965b3c2d460031bd135c545","unresolved":false,"context_lines":[{"line_number":625,"context_line":"#~ msgstr \"L\u0027état de l\u0027hyperviseur est invalide\""},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"#~ msgid \"The migration type is invalid.\""},{"line_number":628,"context_line":"#~ msgstr \"La type de migration est invalide\""},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"#~ msgid \"%(err)s\""},{"line_number":631,"context_line":"#~ msgstr \"%(err)s\""}],"source_content_type":"application/octet-stream","patch_set":19,"id":"5a5ae5dd_5c2a0e80","line":628,"range":{"start_line":628,"start_character":11,"end_line":628,"end_character":13},"in_reply_to":"5a5ae5dd_484809cd","updated":"2016-02-09 08:25:29.000000000","message":"Yes, but this translation is not used at all. \nIHMO, it is only for fuzzy translation.","commit_id":"4023e83a61c63a7216cc2f39c715e3bd6bb7d467"}],"watcher/locale/watcher.pot":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"31bc79ee7bab4ea720ccea9b30021d00498a0dda","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"#: watcher/common/exception.py:182"},{"line_number":228,"context_line":"#, python-format"},{"line_number":229,"context_line":"msgid \"ActionPlan %(action plan)s could not be found\""},{"line_number":230,"context_line":"msgstr \"\""},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"#: watcher/common/exception.py:186"}],"source_content_type":"application/mspowerpoint","patch_set":16,"id":"5a5ae5dd_104189a9","line":229,"range":{"start_line":229,"start_character":26,"end_line":229,"end_character":27},"updated":"2016-02-04 16:24:19.000000000","message":"you shouldn\u0027t remove this _","commit_id":"0aa52485f83f5c74b7de0c45ba901bbb345eeeca"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"49a58d749a7e528bd2bc79aa60ced9e14ae38020","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"#: watcher/common/exception.py:182"},{"line_number":228,"context_line":"#, python-format"},{"line_number":229,"context_line":"msgid \"ActionPlan %(action plan)s could not be found\""},{"line_number":230,"context_line":"msgstr \"\""},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"#: watcher/common/exception.py:186"}],"source_content_type":"application/mspowerpoint","patch_set":16,"id":"5a5ae5dd_e2f89a4b","line":229,"range":{"start_line":229,"start_character":26,"end_line":229,"end_character":27},"in_reply_to":"5a5ae5dd_104189a9","updated":"2016-02-04 18:42:00.000000000","message":"yes I know : ) I didn\u0027t want to manage the conflicting. \nI want regenerate the file but i forgot.","commit_id":"0aa52485f83f5c74b7de0c45ba901bbb345eeeca"}]}
