)]}'
{"doc/source/templates-loading.rst":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"bbc676edf0ddb50f1de84d14182e48502a2bdc63","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    :param condition_str: the string as it written in the template itself"},{"line_number":160,"context_line":"    :return: condition_vars_lists"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Each condition variable contains a ``symbol_name``. Note that the"},{"line_number":163,"context_line":"``symbol_name`` is not extracted to corresponding definition in the parent"},{"line_number":164,"context_line":"template."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"actions"},{"line_number":167,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ff0f0b1f_e4ad8d9b","line":164,"range":{"start_line":162,"start_character":52,"end_line":164,"end_character":8},"updated":"2017-05-23 06:19:05.000000000","message":"According to the example, the \u0027symbol_name\u0027 is the template_id, right? it is not clear from what you wrote here, and I didn\u0027t understand the second sentence.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"965f179b1a02eb409a6468a4004249eeff63e28f","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    :param condition_str: the string as it written in the template itself"},{"line_number":160,"context_line":"    :return: condition_vars_lists"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Each condition variable contains a ``symbol_name``. Note that the"},{"line_number":163,"context_line":"``symbol_name`` is not extracted to corresponding definition in the parent"},{"line_number":164,"context_line":"template."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"actions"},{"line_number":167,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ff0f0b1f_c34d87c4","line":164,"range":{"start_line":162,"start_character":52,"end_line":164,"end_character":8},"in_reply_to":"ff0f0b1f_088508cf","updated":"2017-05-25 13:54:01.000000000","message":"Done","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"4c1a735af40dfbe3394eee690a7ad8001f4a25a9","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    :param condition_str: the string as it written in the template itself"},{"line_number":160,"context_line":"    :return: condition_vars_lists"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Each condition variable contains a ``symbol_name``. Note that the"},{"line_number":163,"context_line":"``symbol_name`` is not extracted to corresponding definition in the parent"},{"line_number":164,"context_line":"template."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"actions"},{"line_number":167,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ff0f0b1f_68d6c42a","line":164,"range":{"start_line":162,"start_character":52,"end_line":164,"end_character":8},"in_reply_to":"ff0f0b1f_12b539ee","updated":"2017-05-24 08:39:02.000000000","message":"The loading of condition string changes. Take a single clause condition `alarm_on_host` for example\n\nBefore:\n\n    [ConditionVar(variable\u003dexpected_relationships[\u0027alarm_on_host\u0027],\n                              type\u003d\u0027relationship\u0027,\n                              positive\u003dTrue)]\n\nthe symbol `alarm_on_host` is extracted to the relationship object.\n\nAfter:\n\n    [ConditionVar(symbol_name\u003d\u0027alarm_on_host\u0027,\n                              positive\u003dTrue)]\n\nthe symbol `alarm_on_host` is preserved in ConditionVar\n\nMaybe I should remove it since it will confuse people if he/she does not know the original implementation.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"da14a10ed791500c8e3d25659b61fb924025cbf3","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    :param condition_str: the string as it written in the template itself"},{"line_number":160,"context_line":"    :return: condition_vars_lists"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Each condition variable contains a ``symbol_name``. Note that the"},{"line_number":163,"context_line":"``symbol_name`` is not extracted to corresponding definition in the parent"},{"line_number":164,"context_line":"template."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"actions"},{"line_number":167,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ff0f0b1f_088508cf","line":164,"range":{"start_line":162,"start_character":52,"end_line":164,"end_character":8},"in_reply_to":"ff0f0b1f_68d6c42a","updated":"2017-05-24 08:47:55.000000000","message":"I agree. As long as the current code works, the original implementation is not interesting (and very few people know it anyhow).","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"90c87e67ec79a7a94da309bc54385ce0b49a17f5","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    :param condition_str: the string as it written in the template itself"},{"line_number":160,"context_line":"    :return: condition_vars_lists"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Each condition variable contains a ``symbol_name``. Note that the"},{"line_number":163,"context_line":"``symbol_name`` is not extracted to corresponding definition in the parent"},{"line_number":164,"context_line":"template."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"actions"},{"line_number":167,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ff0f0b1f_12b539ee","line":164,"range":{"start_line":162,"start_character":52,"end_line":164,"end_character":8},"in_reply_to":"ff0f0b1f_c904e11a","updated":"2017-05-24 07:32:45.000000000","message":"I still don\u0027t understand, sorry...","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"e6c2139987cc2b23e1a78a85fd5682d6449ba44a","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    :param condition_str: the string as it written in the template itself"},{"line_number":160,"context_line":"    :return: condition_vars_lists"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Each condition variable contains a ``symbol_name``. Note that the"},{"line_number":163,"context_line":"``symbol_name`` is not extracted to corresponding definition in the parent"},{"line_number":164,"context_line":"template."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"actions"},{"line_number":167,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ff0f0b1f_c904e11a","line":164,"range":{"start_line":162,"start_character":52,"end_line":164,"end_character":8},"in_reply_to":"ff0f0b1f_e4ad8d9b","updated":"2017-05-23 09:27:13.000000000","message":"Let\u0027s rename it to `template_id` to avoid confusion. \n\nThe original purpose was decoupling condition variable from template. Now we have decided to nest the ScenarioData and SubGraph class under TemplateData.\n\nFor the symbol extraction, please read it along the changes in test_template_data.py and note the differences in ConditionVar.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"bbc676edf0ddb50f1de84d14182e48502a2bdc63","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"``actions`` is a list of ``ActionSpecs``."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"The targets values are linked to ``vertex_id`` of entity condition variables or"},{"line_number":172,"context_line":"``source_id`` and ``target_id`` in relationship condition variable extracted."},{"line_number":173,"context_line":"It will be resolved to real targets from matched sub-graph in entity graph."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"subgraphs"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ff0f0b1f_84aa516e","line":172,"range":{"start_line":171,"start_character":0,"end_line":172,"end_character":76},"updated":"2017-05-23 06:19:05.000000000","message":"I didn\u0027t understand this either...","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"90c87e67ec79a7a94da309bc54385ce0b49a17f5","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"``actions`` is a list of ``ActionSpecs``."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"The targets values are linked to ``vertex_id`` of entity condition variables or"},{"line_number":172,"context_line":"``source_id`` and ``target_id`` in relationship condition variable extracted."},{"line_number":173,"context_line":"It will be resolved to real targets from matched sub-graph in entity graph."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"subgraphs"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ff0f0b1f_f2de453c","line":172,"range":{"start_line":171,"start_character":0,"end_line":172,"end_character":76},"in_reply_to":"ff0f0b1f_0c754764","updated":"2017-05-24 07:32:45.000000000","message":"Ok, now I understand. Can you please write it in the rst, so it will be more clear?","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"e6c2139987cc2b23e1a78a85fd5682d6449ba44a","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"``actions`` is a list of ``ActionSpecs``."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"The targets values are linked to ``vertex_id`` of entity condition variables or"},{"line_number":172,"context_line":"``source_id`` and ``target_id`` in relationship condition variable extracted."},{"line_number":173,"context_line":"It will be resolved to real targets from matched sub-graph in entity graph."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"subgraphs"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ff0f0b1f_0c754764","line":172,"range":{"start_line":171,"start_character":0,"end_line":172,"end_character":76},"in_reply_to":"ff0f0b1f_84aa516e","updated":"2017-05-23 09:27:13.000000000","message":"I mean the value of action targets must be found in the parsed condition definition. Please read this along with the example in test_template_data.py","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"965f179b1a02eb409a6468a4004249eeff63e28f","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"``actions`` is a list of ``ActionSpecs``."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"The targets values are linked to ``vertex_id`` of entity condition variables or"},{"line_number":172,"context_line":"``source_id`` and ``target_id`` in relationship condition variable extracted."},{"line_number":173,"context_line":"It will be resolved to real targets from matched sub-graph in entity graph."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"subgraphs"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ff0f0b1f_83c9cf26","line":172,"range":{"start_line":171,"start_character":0,"end_line":172,"end_character":76},"in_reply_to":"ff0f0b1f_f2de453c","updated":"2017-05-25 13:54:01.000000000","message":"Done","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"f55897b138d1d02848043f945df04788ef7cc5f5","unresolved":false,"context_lines":[{"line_number":169,"context_line":"``source_id`` and ``target_id`` in relationship condition variable extracted."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"In each matched subgraph in the entity graph, the targets will be resolved as"},{"line_number":172,"context_line":"concrete vertices or edges.u"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"subgraphs"},{"line_number":175,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df140735_934b5486","line":172,"range":{"start_line":172,"start_character":27,"end_line":172,"end_character":28},"updated":"2017-05-28 07:24:38.000000000","message":"Extra character","commit_id":"0d8944938cc64af71770a4e25b05099a1de145d7"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"4773d52b92c2e1d57387a2d573a99b14eae57320","unresolved":false,"context_lines":[{"line_number":169,"context_line":"``source_id`` and ``target_id`` in relationship condition variable extracted."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"In each matched subgraph in the entity graph, the targets will be resolved as"},{"line_number":172,"context_line":"concrete vertices or edges.u"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"subgraphs"},{"line_number":175,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df140735_bbf98a4e","line":172,"range":{"start_line":172,"start_character":27,"end_line":172,"end_character":28},"in_reply_to":"df140735_934b5486","updated":"2017-05-29 00:48:52.000000000","message":"Done","commit_id":"0d8944938cc64af71770a4e25b05099a1de145d7"}],"vitrage/evaluator/scenario_repository.py":[{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"1efd0453629933a561c10f01c4d9b73f5b0866fc","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        return scenarios"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def add_equivalence(self, equivalence_def):"},{"line_number":83,"context_line":"        equivalence_data \u003d EquivalenceData(equivalence_def)"},{"line_number":84,"context_line":"        for equivalence in equivalence_data.equivalences:"},{"line_number":85,"context_line":"            for entity in equivalence:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f013ff3_45c84754","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":23},"updated":"2017-05-15 12:11:53.000000000","message":"call the method _add_equivalence","commit_id":"9429f3486b37c87723823d6cc32d0543db284188"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"f224fce777cfcfb83269c8129b086bf991c1573c","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        return scenarios"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def add_equivalence(self, equivalence_def):"},{"line_number":83,"context_line":"        equivalence_data \u003d EquivalenceData(equivalence_def)"},{"line_number":84,"context_line":"        for equivalence in equivalence_data.equivalences:"},{"line_number":85,"context_line":"            for entity in equivalence:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f013ff3_54ca001a","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":23},"in_reply_to":"1f013ff3_45c84754","updated":"2017-05-17 06:15:33.000000000","message":"Done","commit_id":"9429f3486b37c87723823d6cc32d0543db284188"},{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"1efd0453629933a561c10f01c4d9b73f5b0866fc","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                                       \u0027multiple equivalence definitions\u0027)"},{"line_number":89,"context_line":"                self.entity_equivalences[entity] \u003d equivalence"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def get_equivalence_by_vertex(self, vertex):"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        entity_keys \u003d frozenset(vertex.properties.items)"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1f013ff3_a5b14be4","line":91,"range":{"start_line":91,"start_character":8,"end_line":91,"end_character":33},"updated":"2017-05-15 12:11:53.000000000","message":"where this method is used?","commit_id":"9429f3486b37c87723823d6cc32d0543db284188"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"f224fce777cfcfb83269c8129b086bf991c1573c","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                                       \u0027multiple equivalence definitions\u0027)"},{"line_number":89,"context_line":"                self.entity_equivalences[entity] \u003d equivalence"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def get_equivalence_by_vertex(self, vertex):"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        entity_keys \u003d frozenset(vertex.properties.items)"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1f013ff3_34d1b4ce","line":91,"range":{"start_line":91,"start_character":8,"end_line":91,"end_character":33},"in_reply_to":"1f013ff3_a5b14be4","updated":"2017-05-17 06:15:33.000000000","message":"Removed","commit_id":"9429f3486b37c87723823d6cc32d0543db284188"},{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"1efd0453629933a561c10f01c4d9b73f5b0866fc","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def _add_equivalent_scenarios(self, scenario, entity):"},{"line_number":126,"context_line":"        entity_key \u003d frozenset(entity.properties.items())"},{"line_number":127,"context_line":"        for equivalent_props in (self.entity_equivalences.get(entity_key,"},{"line_number":128,"context_line":"                                                              set())"},{"line_number":129,"context_line":"                                 - {entity_key}):"},{"line_number":130,"context_line":"            equivalent_scenario \u003d ScenarioData.build_equivalent_scenario("},{"line_number":131,"context_line":"                scenario,"},{"line_number":132,"context_line":"                entity.vertex_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f013ff3_a5838b04","line":129,"range":{"start_line":127,"start_character":32,"end_line":129,"end_character":48},"updated":"2017-05-15 12:11:53.000000000","message":"please put this data into a variable before the for clause.","commit_id":"9429f3486b37c87723823d6cc32d0543db284188"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"f224fce777cfcfb83269c8129b086bf991c1573c","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def _add_equivalent_scenarios(self, scenario, entity):"},{"line_number":126,"context_line":"        entity_key \u003d frozenset(entity.properties.items())"},{"line_number":127,"context_line":"        for equivalent_props in (self.entity_equivalences.get(entity_key,"},{"line_number":128,"context_line":"                                                              set())"},{"line_number":129,"context_line":"                                 - {entity_key}):"},{"line_number":130,"context_line":"            equivalent_scenario \u003d ScenarioData.build_equivalent_scenario("},{"line_number":131,"context_line":"                scenario,"},{"line_number":132,"context_line":"                entity.vertex_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f013ff3_34b89474","line":129,"range":{"start_line":127,"start_character":32,"end_line":129,"end_character":48},"in_reply_to":"1f013ff3_a5838b04","updated":"2017-05-17 06:15:33.000000000","message":"Done","commit_id":"9429f3486b37c87723823d6cc32d0543db284188"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"bbc676edf0ddb50f1de84d14182e48502a2bdc63","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        for equivalence in equivalence_data.equivalences:"},{"line_number":84,"context_line":"            for entity in equivalence:"},{"line_number":85,"context_line":"                if entity in self.entity_equivalences:"},{"line_number":86,"context_line":"                    raise VitrageError(\u0027one entity should not be included in \u0027"},{"line_number":87,"context_line":"                                       \u0027multiple equivalence definitions\u0027)"},{"line_number":88,"context_line":"                self.entity_equivalences[entity] \u003d equivalence"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def add_template(self, template_def):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_240dc5a0","line":87,"range":{"start_line":86,"start_character":0,"end_line":87,"end_character":74},"updated":"2017-05-23 06:19:05.000000000","message":"What is the effect of this error? Does the entire template loading fail?","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"90c87e67ec79a7a94da309bc54385ce0b49a17f5","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        for equivalence in equivalence_data.equivalences:"},{"line_number":84,"context_line":"            for entity in equivalence:"},{"line_number":85,"context_line":"                if entity in self.entity_equivalences:"},{"line_number":86,"context_line":"                    raise VitrageError(\u0027one entity should not be included in \u0027"},{"line_number":87,"context_line":"                                       \u0027multiple equivalence definitions\u0027)"},{"line_number":88,"context_line":"                self.entity_equivalences[entity] \u003d equivalence"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def add_template(self, template_def):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_cffcba71","line":87,"range":{"start_line":86,"start_character":0,"end_line":87,"end_character":74},"in_reply_to":"ff0f0b1f_240dc5a0","updated":"2017-05-24 07:32:45.000000000","message":"But does it mean that no templates are loaded at all? is this the wanted behavior? I\u0027m not sure what we should do in this case. We can just ignore this equivalence, or all equivalences. The problem is that if we report an error/exception in the log people might not notice, and not understand why their templates are not working.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"e6c2139987cc2b23e1a78a85fd5682d6449ba44a","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        for equivalence in equivalence_data.equivalences:"},{"line_number":84,"context_line":"            for entity in equivalence:"},{"line_number":85,"context_line":"                if entity in self.entity_equivalences:"},{"line_number":86,"context_line":"                    raise VitrageError(\u0027one entity should not be included in \u0027"},{"line_number":87,"context_line":"                                       \u0027multiple equivalence definitions\u0027)"},{"line_number":88,"context_line":"                self.entity_equivalences[entity] \u003d equivalence"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def add_template(self, template_def):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_acc3fb56","line":87,"range":{"start_line":86,"start_character":0,"end_line":87,"end_character":74},"in_reply_to":"ff0f0b1f_240dc5a0","updated":"2017-05-23 09:27:13.000000000","message":"Yes","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"44d80c2397617dbd310eef97c4ed30edf6a27a29","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        for equivalence in equivalence_data.equivalences:"},{"line_number":84,"context_line":"            for entity in equivalence:"},{"line_number":85,"context_line":"                if entity in self.entity_equivalences:"},{"line_number":86,"context_line":"                    raise VitrageError(\u0027one entity should not be included in \u0027"},{"line_number":87,"context_line":"                                       \u0027multiple equivalence definitions\u0027)"},{"line_number":88,"context_line":"                self.entity_equivalences[entity] \u003d equivalence"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def add_template(self, template_def):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_a8061c1f","line":87,"range":{"start_line":86,"start_character":0,"end_line":87,"end_character":74},"in_reply_to":"ff0f0b1f_88a59849","updated":"2017-05-24 08:57:33.000000000","message":"Ok, sounds reasonable","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"965f179b1a02eb409a6468a4004249eeff63e28f","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        for equivalence in equivalence_data.equivalences:"},{"line_number":84,"context_line":"            for entity in equivalence:"},{"line_number":85,"context_line":"                if entity in self.entity_equivalences:"},{"line_number":86,"context_line":"                    raise VitrageError(\u0027one entity should not be included in \u0027"},{"line_number":87,"context_line":"                                       \u0027multiple equivalence definitions\u0027)"},{"line_number":88,"context_line":"                self.entity_equivalences[entity] \u003d equivalence"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def add_template(self, template_def):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_83654f20","line":87,"range":{"start_line":86,"start_character":0,"end_line":87,"end_character":74},"in_reply_to":"ff0f0b1f_a8061c1f","updated":"2017-05-25 13:54:01.000000000","message":"Done","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"7216ec8625cb5113b4109696538f17797edd5087","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        for equivalence in equivalence_data.equivalences:"},{"line_number":84,"context_line":"            for entity in equivalence:"},{"line_number":85,"context_line":"                if entity in self.entity_equivalences:"},{"line_number":86,"context_line":"                    raise VitrageError(\u0027one entity should not be included in \u0027"},{"line_number":87,"context_line":"                                       \u0027multiple equivalence definitions\u0027)"},{"line_number":88,"context_line":"                self.entity_equivalences[entity] \u003d equivalence"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def add_template(self, template_def):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_88a59849","line":87,"range":{"start_line":86,"start_character":0,"end_line":87,"end_character":74},"in_reply_to":"ff0f0b1f_cffcba71","updated":"2017-05-24 08:53:03.000000000","message":"Yes, that is a defensive design before we workout a thorough error handling policy.\n\nMay I mark a TODO item and handle it in a separate patch. I need further investigation on current error handling strategy in vitrage to keep consistency.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"bbc676edf0ddb50f1de84d14182e48502a2bdc63","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    def _create_scenario_key(properties):"},{"line_number":149,"context_line":"        return frozenset(properties)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _add_to_relationship(self, scenario, edge_desc):"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        key \u003d self._create_edge_scenario_key(edge_desc)"},{"line_number":154,"context_line":"        self.relationship_scenarios[key].append((edge_desc, scenario))"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_847491ff","line":151,"range":{"start_line":151,"start_character":7,"end_line":151,"end_character":28},"updated":"2017-05-23 06:19:05.000000000","message":"Why did you add the _to_ to the function name?","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"e6c2139987cc2b23e1a78a85fd5682d6449ba44a","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    def _create_scenario_key(properties):"},{"line_number":149,"context_line":"        return frozenset(properties)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _add_to_relationship(self, scenario, edge_desc):"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        key \u003d self._create_edge_scenario_key(edge_desc)"},{"line_number":154,"context_line":"        self.relationship_scenarios[key].append((edge_desc, scenario))"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_8f29498b","line":151,"range":{"start_line":151,"start_character":7,"end_line":151,"end_character":28},"in_reply_to":"ff0f0b1f_847491ff","updated":"2017-05-23 09:27:13.000000000","message":"The original name confuses me, because this method is used for adding scenario, not adding relationship.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"90c87e67ec79a7a94da309bc54385ce0b49a17f5","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    def _create_scenario_key(properties):"},{"line_number":149,"context_line":"        return frozenset(properties)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _add_to_relationship(self, scenario, edge_desc):"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        key \u003d self._create_edge_scenario_key(edge_desc)"},{"line_number":154,"context_line":"        self.relationship_scenarios[key].append((edge_desc, scenario))"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_8f4ec2be","line":151,"range":{"start_line":151,"start_character":7,"end_line":151,"end_character":28},"in_reply_to":"ff0f0b1f_8f29498b","updated":"2017-05-24 07:32:45.000000000","message":"I agree, but I think that this name is also confusing. It implies that you add something to a relationship, but it\u0027s not clear what. How about _add_relationship_scenario?","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"965f179b1a02eb409a6468a4004249eeff63e28f","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    def _create_scenario_key(properties):"},{"line_number":149,"context_line":"        return frozenset(properties)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _add_to_relationship(self, scenario, edge_desc):"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        key \u003d self._create_edge_scenario_key(edge_desc)"},{"line_number":154,"context_line":"        self.relationship_scenarios[key].append((edge_desc, scenario))"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_4344d773","line":151,"range":{"start_line":151,"start_character":7,"end_line":151,"end_character":28},"in_reply_to":"ff0f0b1f_8f4ec2be","updated":"2017-05-25 13:54:01.000000000","message":"Done","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"7216ec8625cb5113b4109696538f17797edd5087","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    def _create_scenario_key(properties):"},{"line_number":149,"context_line":"        return frozenset(properties)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _add_to_relationship(self, scenario, edge_desc):"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        key \u003d self._create_edge_scenario_key(edge_desc)"},{"line_number":154,"context_line":"        self.relationship_scenarios[key].append((edge_desc, scenario))"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_68ca441b","line":151,"range":{"start_line":151,"start_character":7,"end_line":151,"end_character":28},"in_reply_to":"ff0f0b1f_8f4ec2be","updated":"2017-05-24 08:53:03.000000000","message":"Works for me","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"bbc676edf0ddb50f1de84d14182e48502a2bdc63","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    def _add_to_relationship(self, scenario, edge_desc):"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        key \u003d self._create_edge_scenario_key(edge_desc)"},{"line_number":154,"context_line":"        self.relationship_scenarios[key].append((edge_desc, scenario))"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @staticmethod"},{"line_number":157,"context_line":"    def _create_edge_scenario_key(edge_desc):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_c4dcc9e5","line":154,"range":{"start_line":154,"start_character":8,"end_line":154,"end_character":70},"updated":"2017-05-23 06:19:05.000000000","message":"Why did you remove the _edge_contains() check? is it not needed?","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"7216ec8625cb5113b4109696538f17797edd5087","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    def _add_to_relationship(self, scenario, edge_desc):"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        key \u003d self._create_edge_scenario_key(edge_desc)"},{"line_number":154,"context_line":"        self.relationship_scenarios[key].append((edge_desc, scenario))"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @staticmethod"},{"line_number":157,"context_line":"    def _create_edge_scenario_key(edge_desc):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_c801503a","line":154,"range":{"start_line":154,"start_character":8,"end_line":154,"end_character":70},"in_reply_to":"ff0f0b1f_0f82b2c8","updated":"2017-05-24 08:53:03.000000000","message":"It is not needed any more. We have build a dict of referenced entities in the condition during subgraph building and the keys are unique.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"90c87e67ec79a7a94da309bc54385ce0b49a17f5","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    def _add_to_relationship(self, scenario, edge_desc):"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        key \u003d self._create_edge_scenario_key(edge_desc)"},{"line_number":154,"context_line":"        self.relationship_scenarios[key].append((edge_desc, scenario))"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @staticmethod"},{"line_number":157,"context_line":"    def _create_edge_scenario_key(edge_desc):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_0f82b2c8","line":154,"range":{"start_line":154,"start_character":8,"end_line":154,"end_character":70},"in_reply_to":"ff0f0b1f_4f1fb15a","updated":"2017-05-24 07:32:45.000000000","message":"?","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"e6c2139987cc2b23e1a78a85fd5682d6449ba44a","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    def _add_to_relationship(self, scenario, edge_desc):"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        key \u003d self._create_edge_scenario_key(edge_desc)"},{"line_number":154,"context_line":"        self.relationship_scenarios[key].append((edge_desc, scenario))"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @staticmethod"},{"line_number":157,"context_line":"    def _create_edge_scenario_key(edge_desc):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_4f1fb15a","line":154,"range":{"start_line":154,"start_character":8,"end_line":154,"end_character":70},"in_reply_to":"ff0f0b1f_c4dcc9e5","updated":"2017-05-23 09:27:13.000000000","message":"The original name confuses me, because this method is used for adding scenario, not adding entity.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"44d80c2397617dbd310eef97c4ed30edf6a27a29","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    def _add_to_relationship(self, scenario, edge_desc):"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        key \u003d self._create_edge_scenario_key(edge_desc)"},{"line_number":154,"context_line":"        self.relationship_scenarios[key].append((edge_desc, scenario))"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @staticmethod"},{"line_number":157,"context_line":"    def _create_edge_scenario_key(edge_desc):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_a31bdd70","line":154,"range":{"start_line":154,"start_character":8,"end_line":154,"end_character":70},"in_reply_to":"ff0f0b1f_c801503a","updated":"2017-05-24 08:57:33.000000000","message":"OK","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"}],"vitrage/evaluator/template_data.py":[{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"1efd0453629933a561c10f01c4d9b73f5b0866fc","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                        relationships\u003dself._relationships)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    @classmethod"},{"line_number":186,"context_line":"    def build_equivalent_scenario(cls, scenario, template_id, entity_props):"},{"line_number":187,"context_line":"        entities \u003d scenario.entities.copy()"},{"line_number":188,"context_line":"        entities[template_id] \u003d Vertex("},{"line_number":189,"context_line":"            vertex_id\u003dentities[template_id].vertex_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f013ff3_2521bbfc","line":186,"range":{"start_line":186,"start_character":8,"end_line":186,"end_character":33},"updated":"2017-05-15 12:11:53.000000000","message":"who uses that?","commit_id":"9429f3486b37c87723823d6cc32d0543db284188"},{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"23c9468cafc20d68442933b395d5303e799b8a03","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                        relationships\u003dself._relationships)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    @classmethod"},{"line_number":186,"context_line":"    def build_equivalent_scenario(cls, scenario, template_id, entity_props):"},{"line_number":187,"context_line":"        entities \u003d scenario.entities.copy()"},{"line_number":188,"context_line":"        entities[template_id] \u003d Vertex("},{"line_number":189,"context_line":"            vertex_id\u003dentities[template_id].vertex_id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_2b318d0c","line":186,"range":{"start_line":186,"start_character":8,"end_line":186,"end_character":33},"updated":"2017-05-18 10:53:14.000000000","message":"where this method is being used?","commit_id":"d2ac4f37b88da5f28be240ced263dee4af7a9733"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"a0568f07443915d98729d56a31b28d66bf668cbb","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                        relationships\u003dself._relationships)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    @classmethod"},{"line_number":186,"context_line":"    def build_equivalent_scenario(cls, scenario, template_id, entity_props):"},{"line_number":187,"context_line":"        entities \u003d scenario.entities.copy()"},{"line_number":188,"context_line":"        entities[template_id] \u003d Vertex("},{"line_number":189,"context_line":"            vertex_id\u003dentities[template_id].vertex_id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_8d19c37a","line":186,"range":{"start_line":186,"start_character":8,"end_line":186,"end_character":33},"in_reply_to":"ff0f0b1f_2b318d0c","updated":"2017-05-18 16:16:06.000000000","message":"In ScenarioRepository._add_equivalent_scenarios()","commit_id":"d2ac4f37b88da5f28be240ced263dee4af7a9733"},{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"23c9468cafc20d68442933b395d5303e799b8a03","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                                                      entity_props)"},{"line_number":195,"context_line":"            for rel_id, rel in scenario.relationships.items()}"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        def extract_var(symbol_name):"},{"line_number":198,"context_line":"            if symbol_name in entities:"},{"line_number":199,"context_line":"                return entities[symbol_name], ENTITY"},{"line_number":200,"context_line":"            elif symbol_name in relationships:"},{"line_number":201,"context_line":"                return relationships[symbol_name], RELATIONSHIP"},{"line_number":202,"context_line":"            else:"},{"line_number":203,"context_line":"                raise VitrageError(\u0027invalid symbol name: {}\u0027"},{"line_number":204,"context_line":"                                   .format(symbol_name))"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        subgraphs \u003d SubGraph.from_condition(scenario.condition, extract_var)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_8b8539b0","line":204,"range":{"start_line":197,"start_character":8,"end_line":204,"end_character":56},"updated":"2017-05-18 10:53:14.000000000","message":"please define the nested method at the begining of the method","commit_id":"d2ac4f37b88da5f28be240ced263dee4af7a9733"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"5327babf866ad33b9e69c751b4eed41b43a74558","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                                                      entity_props)"},{"line_number":195,"context_line":"            for rel_id, rel in scenario.relationships.items()}"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        def extract_var(symbol_name):"},{"line_number":198,"context_line":"            if symbol_name in entities:"},{"line_number":199,"context_line":"                return entities[symbol_name], ENTITY"},{"line_number":200,"context_line":"            elif symbol_name in relationships:"},{"line_number":201,"context_line":"                return relationships[symbol_name], RELATIONSHIP"},{"line_number":202,"context_line":"            else:"},{"line_number":203,"context_line":"                raise VitrageError(\u0027invalid symbol name: {}\u0027"},{"line_number":204,"context_line":"                                   .format(symbol_name))"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        subgraphs \u003d SubGraph.from_condition(scenario.condition, extract_var)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_3cc1b981","line":204,"range":{"start_line":197,"start_character":8,"end_line":204,"end_character":56},"in_reply_to":"ff0f0b1f_6dff8f01","updated":"2017-05-19 05:58:15.000000000","message":"OK, moving it to beginning will work. So both way will work for me but personally I would prefer to keep it in place so that the context is more clear.","commit_id":"d2ac4f37b88da5f28be240ced263dee4af7a9733"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"a0568f07443915d98729d56a31b28d66bf668cbb","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                                                      entity_props)"},{"line_number":195,"context_line":"            for rel_id, rel in scenario.relationships.items()}"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        def extract_var(symbol_name):"},{"line_number":198,"context_line":"            if symbol_name in entities:"},{"line_number":199,"context_line":"                return entities[symbol_name], ENTITY"},{"line_number":200,"context_line":"            elif symbol_name in relationships:"},{"line_number":201,"context_line":"                return relationships[symbol_name], RELATIONSHIP"},{"line_number":202,"context_line":"            else:"},{"line_number":203,"context_line":"                raise VitrageError(\u0027invalid symbol name: {}\u0027"},{"line_number":204,"context_line":"                                   .format(symbol_name))"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        subgraphs \u003d SubGraph.from_condition(scenario.condition, extract_var)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_6dff8f01","line":204,"range":{"start_line":197,"start_character":8,"end_line":204,"end_character":56},"in_reply_to":"ff0f0b1f_8b8539b0","updated":"2017-05-18 16:16:06.000000000","message":"This method works as a closure which refers entities assigned in L187. Putting it at the beginning might cause confusion that `entities` are used before assignment.\n\nBesides, I was not so sure about the behavior of variable scope in Python.","commit_id":"d2ac4f37b88da5f28be240ced263dee4af7a9733"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"bbc676edf0ddb50f1de84d14182e48502a2bdc63","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            if symbol_name in self._template_relationships:"},{"line_number":324,"context_line":"                relationship \u003d self._template_relationships[symbol_name]"},{"line_number":325,"context_line":"                self._relationships[symbol_name] \u003d relationship"},{"line_number":326,"context_line":"                self._entities.update({"},{"line_number":327,"context_line":"                    relationship.edge.source_id: relationship.source,"},{"line_number":328,"context_line":"                    relationship.edge.target_id: relationship.target"},{"line_number":329,"context_line":"                })"},{"line_number":330,"context_line":"                return relationship, RELATIONSHIP"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            entity \u003d self._template_entities[symbol_name]"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_647bbdbd","line":329,"range":{"start_line":326,"start_character":0,"end_line":329,"end_character":18},"updated":"2017-05-23 06:19:05.000000000","message":"Why are you updating self in an _extract method?","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"965f179b1a02eb409a6468a4004249eeff63e28f","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            if symbol_name in self._template_relationships:"},{"line_number":324,"context_line":"                relationship \u003d self._template_relationships[symbol_name]"},{"line_number":325,"context_line":"                self._relationships[symbol_name] \u003d relationship"},{"line_number":326,"context_line":"                self._entities.update({"},{"line_number":327,"context_line":"                    relationship.edge.source_id: relationship.source,"},{"line_number":328,"context_line":"                    relationship.edge.target_id: relationship.target"},{"line_number":329,"context_line":"                })"},{"line_number":330,"context_line":"                return relationship, RELATIONSHIP"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            entity \u003d self._template_entities[symbol_name]"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_260a111f","line":329,"range":{"start_line":326,"start_character":0,"end_line":329,"end_character":18},"in_reply_to":"ff0f0b1f_035cc9ea","updated":"2017-05-25 13:54:01.000000000","message":"Done","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"1ed2f0cebf3929b19303d4ec0dc8f294eb78306f","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            if symbol_name in self._template_relationships:"},{"line_number":324,"context_line":"                relationship \u003d self._template_relationships[symbol_name]"},{"line_number":325,"context_line":"                self._relationships[symbol_name] \u003d relationship"},{"line_number":326,"context_line":"                self._entities.update({"},{"line_number":327,"context_line":"                    relationship.edge.source_id: relationship.source,"},{"line_number":328,"context_line":"                    relationship.edge.target_id: relationship.target"},{"line_number":329,"context_line":"                })"},{"line_number":330,"context_line":"                return relationship, RELATIONSHIP"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            entity \u003d self._template_entities[symbol_name]"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_035cc9ea","line":329,"range":{"start_line":326,"start_character":0,"end_line":329,"end_character":18},"in_reply_to":"ff0f0b1f_037289ad","updated":"2017-05-24 09:02:45.000000000","message":"Make sense.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"44d80c2397617dbd310eef97c4ed30edf6a27a29","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            if symbol_name in self._template_relationships:"},{"line_number":324,"context_line":"                relationship \u003d self._template_relationships[symbol_name]"},{"line_number":325,"context_line":"                self._relationships[symbol_name] \u003d relationship"},{"line_number":326,"context_line":"                self._entities.update({"},{"line_number":327,"context_line":"                    relationship.edge.source_id: relationship.source,"},{"line_number":328,"context_line":"                    relationship.edge.target_id: relationship.target"},{"line_number":329,"context_line":"                })"},{"line_number":330,"context_line":"                return relationship, RELATIONSHIP"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            entity \u003d self._template_entities[symbol_name]"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_037289ad","line":329,"range":{"start_line":326,"start_character":0,"end_line":329,"end_character":18},"in_reply_to":"ff0f0b1f_0837484f","updated":"2017-05-24 08:57:33.000000000","message":"No, I\u0027m just saying that by the name _extract_var you don\u0027t understand that the function is going to modify something. How about _extract_var_and_add_index or something like that?","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"90c87e67ec79a7a94da309bc54385ce0b49a17f5","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            if symbol_name in self._template_relationships:"},{"line_number":324,"context_line":"                relationship \u003d self._template_relationships[symbol_name]"},{"line_number":325,"context_line":"                self._relationships[symbol_name] \u003d relationship"},{"line_number":326,"context_line":"                self._entities.update({"},{"line_number":327,"context_line":"                    relationship.edge.source_id: relationship.source,"},{"line_number":328,"context_line":"                    relationship.edge.target_id: relationship.target"},{"line_number":329,"context_line":"                })"},{"line_number":330,"context_line":"                return relationship, RELATIONSHIP"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            entity \u003d self._template_entities[symbol_name]"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_af01863a","line":329,"range":{"start_line":326,"start_character":0,"end_line":329,"end_character":18},"in_reply_to":"ff0f0b1f_4f3e918b","updated":"2017-05-24 07:32:45.000000000","message":"Ok, if it helps with the performance. But I think the function name should reflect the fact that your are doing something, and not just returning an entity.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"e6c2139987cc2b23e1a78a85fd5682d6449ba44a","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            if symbol_name in self._template_relationships:"},{"line_number":324,"context_line":"                relationship \u003d self._template_relationships[symbol_name]"},{"line_number":325,"context_line":"                self._relationships[symbol_name] \u003d relationship"},{"line_number":326,"context_line":"                self._entities.update({"},{"line_number":327,"context_line":"                    relationship.edge.source_id: relationship.source,"},{"line_number":328,"context_line":"                    relationship.edge.target_id: relationship.target"},{"line_number":329,"context_line":"                })"},{"line_number":330,"context_line":"                return relationship, RELATIONSHIP"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            entity \u003d self._template_entities[symbol_name]"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_4f3e918b","line":329,"range":{"start_line":326,"start_character":0,"end_line":329,"end_character":18},"in_reply_to":"ff0f0b1f_647bbdbd","updated":"2017-05-23 09:27:13.000000000","message":"This is like a hook for each visited entity during condition parsing.\n\nIt is used for creating entity index for each scenario. So when we add the scenario to repository, no need to traverse the condition struct again and no need to check for duplicate.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"7216ec8625cb5113b4109696538f17797edd5087","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            if symbol_name in self._template_relationships:"},{"line_number":324,"context_line":"                relationship \u003d self._template_relationships[symbol_name]"},{"line_number":325,"context_line":"                self._relationships[symbol_name] \u003d relationship"},{"line_number":326,"context_line":"                self._entities.update({"},{"line_number":327,"context_line":"                    relationship.edge.source_id: relationship.source,"},{"line_number":328,"context_line":"                    relationship.edge.target_id: relationship.target"},{"line_number":329,"context_line":"                })"},{"line_number":330,"context_line":"                return relationship, RELATIONSHIP"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            entity \u003d self._template_entities[symbol_name]"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_0837484f","line":329,"range":{"start_line":326,"start_character":0,"end_line":329,"end_character":18},"in_reply_to":"ff0f0b1f_af01863a","updated":"2017-05-24 08:53:03.000000000","message":"Are you talking about `update` or `_extract`.\n\n`update` is the builtin method of dict object. Are you suggesting something like\n\n    self._entities[relationship.edge.source_id] \u003d relationship.source\n    self._entities[relationship.edge.target_id] \u003d relationship.target","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"}],"vitrage/tests/resources/equivalences/basic.yaml":[{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"23c9468cafc20d68442933b395d5303e799b8a03","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    - entity:"},{"line_number":6,"context_line":"       category: ALARM"},{"line_number":7,"context_line":"       type: nagios"},{"line_number":8,"context_line":"       name: HOST_HIGH_CPU_LOAD"},{"line_number":9,"context_line":"    - entity:"},{"line_number":10,"context_line":"       category: ALARM"},{"line_number":11,"context_line":"       type: zabbix"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"ff0f0b1f_7d12ac5a","line":8,"range":{"start_line":8,"start_character":13,"end_line":8,"end_character":31},"updated":"2017-05-18 10:53:14.000000000","message":"Please change the name to NAGIOS_HOST_HIGH_CPU_LOAD","commit_id":"d2ac4f37b88da5f28be240ced263dee4af7a9733"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"a0568f07443915d98729d56a31b28d66bf668cbb","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    - entity:"},{"line_number":6,"context_line":"       category: ALARM"},{"line_number":7,"context_line":"       type: nagios"},{"line_number":8,"context_line":"       name: HOST_HIGH_CPU_LOAD"},{"line_number":9,"context_line":"    - entity:"},{"line_number":10,"context_line":"       category: ALARM"},{"line_number":11,"context_line":"       type: zabbix"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"ff0f0b1f_8d32e3f0","line":8,"range":{"start_line":8,"start_character":13,"end_line":8,"end_character":31},"in_reply_to":"ff0f0b1f_7d12ac5a","updated":"2017-05-18 16:16:06.000000000","message":"It will change after rebasing to https://review.openstack.org/#/c/461244/11/vitrage/tests/resources/equivalences/basic.yaml@8","commit_id":"d2ac4f37b88da5f28be240ced263dee4af7a9733"},{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"23c9468cafc20d68442933b395d5303e799b8a03","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    - entity:"},{"line_number":10,"context_line":"       category: ALARM"},{"line_number":11,"context_line":"       type: zabbix"},{"line_number":12,"context_line":"       name: HOST_HIGH_CPU_LOAD"},{"line_number":13,"context_line":"    - entity:"},{"line_number":14,"context_line":"       category: ALARM"},{"line_number":15,"context_line":"       type: vitrage"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"ff0f0b1f_3d1c3469","line":12,"range":{"start_line":12,"start_character":13,"end_line":12,"end_character":31},"updated":"2017-05-18 10:53:14.000000000","message":"Please change the name to ZABBIX_HOST_HIGH_CPU_LOAD","commit_id":"d2ac4f37b88da5f28be240ced263dee4af7a9733"},{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"23c9468cafc20d68442933b395d5303e799b8a03","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    - entity:"},{"line_number":14,"context_line":"       category: ALARM"},{"line_number":15,"context_line":"       type: vitrage"},{"line_number":16,"context_line":"       name: HOST_HIGH_CPU_LOAD"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"ff0f0b1f_1d197078","line":16,"range":{"start_line":16,"start_character":13,"end_line":16,"end_character":31},"updated":"2017-05-18 10:53:14.000000000","message":"Please change the name to VITRAGE_HOST_HIGH_CPU_LOAD","commit_id":"d2ac4f37b88da5f28be240ced263dee4af7a9733"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"bbc676edf0ddb50f1de84d14182e48502a2bdc63","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    - entity:"},{"line_number":6,"context_line":"       category: ALARM"},{"line_number":7,"context_line":"       type: nagios"},{"line_number":8,"context_line":"       name: host_problem # reference an alarm in templates/general/basic.yaml"},{"line_number":9,"context_line":"    - entity:"},{"line_number":10,"context_line":"       category: ALARM"},{"line_number":11,"context_line":"       type: zabbix"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"ff0f0b1f_0412c162","line":8,"range":{"start_line":8,"start_character":25,"end_line":8,"end_character":78},"updated":"2017-05-23 06:19:05.000000000","message":"I think we have an issue here, at least I didn\u0027t think about it before. Do we count on the same name to exist in different templates? is this why you renamed template_id to symbol_name?\nThis looks very fragile... someone can easily edit a template and break the equivalence. Is it possible to do the mapping by the properties only?","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"e6c2139987cc2b23e1a78a85fd5682d6449ba44a","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    - entity:"},{"line_number":6,"context_line":"       category: ALARM"},{"line_number":7,"context_line":"       type: nagios"},{"line_number":8,"context_line":"       name: host_problem # reference an alarm in templates/general/basic.yaml"},{"line_number":9,"context_line":"    - entity:"},{"line_number":10,"context_line":"       category: ALARM"},{"line_number":11,"context_line":"       type: zabbix"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"ff0f0b1f_ef71e577","line":8,"range":{"start_line":8,"start_character":25,"end_line":8,"end_character":78},"in_reply_to":"ff0f0b1f_0412c162","updated":"2017-05-23 09:27:13.000000000","message":"No, it is a property, not a symbol name or template id.\n\nNote there is no ``template_id`` here, because the equivalences are created by comparing the entity key, which is a set of property name-value pair.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"965f179b1a02eb409a6468a4004249eeff63e28f","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    - entity:"},{"line_number":6,"context_line":"       category: ALARM"},{"line_number":7,"context_line":"       type: nagios"},{"line_number":8,"context_line":"       name: host_problem # reference an alarm in templates/general/basic.yaml"},{"line_number":9,"context_line":"    - entity:"},{"line_number":10,"context_line":"       category: ALARM"},{"line_number":11,"context_line":"       type: zabbix"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"ff0f0b1f_e694198d","line":8,"range":{"start_line":8,"start_character":25,"end_line":8,"end_character":78},"in_reply_to":"ff0f0b1f_0f9e3206","updated":"2017-05-25 13:54:01.000000000","message":"Done","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"90c87e67ec79a7a94da309bc54385ce0b49a17f5","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    - entity:"},{"line_number":6,"context_line":"       category: ALARM"},{"line_number":7,"context_line":"       type: nagios"},{"line_number":8,"context_line":"       name: host_problem # reference an alarm in templates/general/basic.yaml"},{"line_number":9,"context_line":"    - entity:"},{"line_number":10,"context_line":"       category: ALARM"},{"line_number":11,"context_line":"       type: zabbix"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"ff0f0b1f_0f9e3206","line":8,"range":{"start_line":8,"start_character":25,"end_line":8,"end_character":78},"in_reply_to":"ff0f0b1f_ef71e577","updated":"2017-05-24 07:32:45.000000000","message":"Ok, good","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"}],"vitrage/tests/resources/equivalences_dup/(a,a)/(a,a).yaml":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"f55897b138d1d02848043f945df04788ef7cc5f5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"metadata:"},{"line_number":2,"context_line":" name: duplicated entities in different equivalences"},{"line_number":3,"context_line":"equivalences:"},{"line_number":4,"context_line":" - equivalence:"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"df140735_135f4442","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":9},"updated":"2017-05-28 07:24:38.000000000","message":"Are you sure the name of the file is legal?...","commit_id":"0d8944938cc64af71770a4e25b05099a1de145d7"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"4773d52b92c2e1d57387a2d573a99b14eae57320","unresolved":false,"context_lines":[{"line_number":1,"context_line":"metadata:"},{"line_number":2,"context_line":" name: duplicated entities in different equivalences"},{"line_number":3,"context_line":"equivalences:"},{"line_number":4,"context_line":" - equivalence:"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"df140735_1bdab6e8","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":9},"in_reply_to":"df140735_135f4442","updated":"2017-05-29 00:48:52.000000000","message":"Yes. It works on macOS and also in the CI system which I assume is Linux. Charactors like \u0027,\u0027, \u0027{\u0027 needs to be escaped in **shell** but not file system.\n\nI\u0027ll correct it any way to avoid confusion.","commit_id":"0d8944938cc64af71770a4e25b05099a1de145d7"}],"vitrage/tests/resources/templates/general/basic.yaml":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"bbc676edf0ddb50f1de84d14182e48502a2bdc63","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - entity:"},{"line_number":7,"context_line":"     category: ALARM"},{"line_number":8,"context_line":"     type: nagios"},{"line_number":9,"context_line":"     name: host_problem # don\u0027t change, referenced by equivalence"},{"line_number":10,"context_line":"     template_id: alarm"},{"line_number":11,"context_line":"  - entity:"},{"line_number":12,"context_line":"     category: RESOURCE"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"ff0f0b1f_8405b116","line":9,"range":{"start_line":9,"start_character":24,"end_line":9,"end_character":65},"updated":"2017-05-23 06:19:05.000000000","message":"Again, this is fragile","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"965f179b1a02eb409a6468a4004249eeff63e28f","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - entity:"},{"line_number":7,"context_line":"     category: ALARM"},{"line_number":8,"context_line":"     type: nagios"},{"line_number":9,"context_line":"     name: host_problem # don\u0027t change, referenced by equivalence"},{"line_number":10,"context_line":"     template_id: alarm"},{"line_number":11,"context_line":"  - entity:"},{"line_number":12,"context_line":"     category: RESOURCE"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"ff0f0b1f_26cd71b6","line":9,"range":{"start_line":9,"start_character":24,"end_line":9,"end_character":65},"in_reply_to":"ff0f0b1f_2fc456f4","updated":"2017-05-25 13:54:01.000000000","message":"Done","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"90c87e67ec79a7a94da309bc54385ce0b49a17f5","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - entity:"},{"line_number":7,"context_line":"     category: ALARM"},{"line_number":8,"context_line":"     type: nagios"},{"line_number":9,"context_line":"     name: host_problem # don\u0027t change, referenced by equivalence"},{"line_number":10,"context_line":"     template_id: alarm"},{"line_number":11,"context_line":"  - entity:"},{"line_number":12,"context_line":"     category: RESOURCE"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"ff0f0b1f_2fc456f4","line":9,"range":{"start_line":9,"start_character":24,"end_line":9,"end_character":65},"in_reply_to":"ff0f0b1f_4fb3310b","updated":"2017-05-24 07:32:45.000000000","message":"No, it\u0027s ok. I understand that the comment is meant for the tests only. I was afraid that we will have such comments all-over in the real equivalence file","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"e6c2139987cc2b23e1a78a85fd5682d6449ba44a","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - entity:"},{"line_number":7,"context_line":"     category: ALARM"},{"line_number":8,"context_line":"     type: nagios"},{"line_number":9,"context_line":"     name: host_problem # don\u0027t change, referenced by equivalence"},{"line_number":10,"context_line":"     template_id: alarm"},{"line_number":11,"context_line":"  - entity:"},{"line_number":12,"context_line":"     category: RESOURCE"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"ff0f0b1f_4fb3310b","line":9,"range":{"start_line":9,"start_character":24,"end_line":9,"end_character":65},"in_reply_to":"ff0f0b1f_8405b116","updated":"2017-05-23 09:27:13.000000000","message":"If the name is modified in other unit test, the entity won\u0027t match the one in equivalence and will break unit test of equivalence.\n\nShould I create a dedicated template for equivalence testing?","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"}],"vitrage/tests/unit/evaluator/test_scenario_repository.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"bbc676edf0ddb50f1de84d14182e48502a2bdc63","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        entity_equivalences \u003d self.scenario_repository.entity_equivalences"},{"line_number":77,"context_line":"        for entity_props, equivalence in entity_equivalences.items():"},{"line_number":78,"context_line":"            self.assertTrue(entity_props in equivalence)"},{"line_number":79,"context_line":"            for equivalent_props in equivalence:"},{"line_number":80,"context_line":"                self.assertTrue(equivalent_props in"},{"line_number":81,"context_line":"                                self.scenario_repository.entity_scenarios)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_c6328ef2","line":78,"range":{"start_line":78,"start_character":0,"end_line":78,"end_character":56},"updated":"2017-05-23 06:19:05.000000000","message":"What does this check exactly? you got both from the scenario_repository.entity_equivalences, right?","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"965f179b1a02eb409a6468a4004249eeff63e28f","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        entity_equivalences \u003d self.scenario_repository.entity_equivalences"},{"line_number":77,"context_line":"        for entity_props, equivalence in entity_equivalences.items():"},{"line_number":78,"context_line":"            self.assertTrue(entity_props in equivalence)"},{"line_number":79,"context_line":"            for equivalent_props in equivalence:"},{"line_number":80,"context_line":"                self.assertTrue(equivalent_props in"},{"line_number":81,"context_line":"                                self.scenario_repository.entity_scenarios)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_7c8c1c35","line":78,"range":{"start_line":78,"start_character":0,"end_line":78,"end_character":56},"in_reply_to":"ff0f0b1f_0f13d267","updated":"2017-05-25 13:54:01.000000000","message":"Done","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"90c87e67ec79a7a94da309bc54385ce0b49a17f5","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        entity_equivalences \u003d self.scenario_repository.entity_equivalences"},{"line_number":77,"context_line":"        for entity_props, equivalence in entity_equivalences.items():"},{"line_number":78,"context_line":"            self.assertTrue(entity_props in equivalence)"},{"line_number":79,"context_line":"            for equivalent_props in equivalence:"},{"line_number":80,"context_line":"                self.assertTrue(equivalent_props in"},{"line_number":81,"context_line":"                                self.scenario_repository.entity_scenarios)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_0f13d267","line":78,"range":{"start_line":78,"start_character":0,"end_line":78,"end_character":56},"in_reply_to":"ff0f0b1f_0f96594d","updated":"2017-05-24 07:32:45.000000000","message":"It\u0027s ok to keep this test, but please add a comment with the explanation","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"e6c2139987cc2b23e1a78a85fd5682d6449ba44a","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        entity_equivalences \u003d self.scenario_repository.entity_equivalences"},{"line_number":77,"context_line":"        for entity_props, equivalence in entity_equivalences.items():"},{"line_number":78,"context_line":"            self.assertTrue(entity_props in equivalence)"},{"line_number":79,"context_line":"            for equivalent_props in equivalence:"},{"line_number":80,"context_line":"                self.assertTrue(equivalent_props in"},{"line_number":81,"context_line":"                                self.scenario_repository.entity_scenarios)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_0f96594d","line":78,"range":{"start_line":78,"start_character":0,"end_line":78,"end_character":56},"in_reply_to":"ff0f0b1f_c6328ef2","updated":"2017-05-23 09:27:13.000000000","message":"To verify the equivalence struct is like\n\n  { A: (A, B, C),\n    B: (A, B, C),\n    C: (A, B, C)\n  }\n\nThat the entity itself is also included.\n\nIt does not have much effect with the required feature,, we can remove it if it looks confusing.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"}],"vitrage/tests/unit/evaluator/test_template_data.py":[{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"1efd0453629933a561c10f01c4d9b73f5b0866fc","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                            properties\u003d{\u0027category\u0027: \u0027ALARM\u0027,"},{"line_number":59,"context_line":"                                        \u0027type\u0027: \u0027nagios\u0027,"},{"line_number":60,"context_line":"                                        \u0027name\u0027: \u0027HOST_HIGH_CPU_LOAD\u0027,"},{"line_number":61,"context_line":"                                        \u0027is_deleted\u0027: False,"},{"line_number":62,"context_line":"                                        \u0027is_placeholder\u0027: False"},{"line_number":63,"context_line":"                                        }),"},{"line_number":64,"context_line":"            \u0027resource\u0027: Vertex(vertex_id\u003d\u0027resource\u0027,"},{"line_number":65,"context_line":"                               properties\u003d{\u0027category\u0027: \u0027RESOURCE\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f013ff3_65558350","side":"PARENT","line":62,"range":{"start_line":61,"start_character":40,"end_line":62,"end_character":63},"updated":"2017-05-15 12:11:53.000000000","message":"Why did you remove that?","commit_id":"78308efe6d9506aff54fedd2d85db0014077055f"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"f224fce777cfcfb83269c8129b086bf991c1573c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                            properties\u003d{\u0027category\u0027: \u0027ALARM\u0027,"},{"line_number":59,"context_line":"                                        \u0027type\u0027: \u0027nagios\u0027,"},{"line_number":60,"context_line":"                                        \u0027name\u0027: \u0027HOST_HIGH_CPU_LOAD\u0027,"},{"line_number":61,"context_line":"                                        \u0027is_deleted\u0027: False,"},{"line_number":62,"context_line":"                                        \u0027is_placeholder\u0027: False"},{"line_number":63,"context_line":"                                        }),"},{"line_number":64,"context_line":"            \u0027resource\u0027: Vertex(vertex_id\u003d\u0027resource\u0027,"},{"line_number":65,"context_line":"                               properties\u003d{\u0027category\u0027: \u0027RESOURCE\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f013ff3_1449188a","side":"PARENT","line":62,"range":{"start_line":61,"start_character":40,"end_line":62,"end_character":63},"in_reply_to":"1f013ff3_65558350","updated":"2017-05-17 06:15:33.000000000","message":"Not removed, just moved to subgraph build instead from condition var build. There are two reasons for it.\n\n1. is_deleted and is_placeholder is defined under subgraph context, not in condition. In `ConditionVar`, there is a dedicated property called `positive` which will be converted to is_deleted and is_placeholder in subgraph.\n\n2. There was a possible racing condition if we set it. In the code before modification, subgraphs **refers** the entity/relationship in the definition dict. Suppose you create a condition (A and B) or (not A and not B), the property is_deleted and is_placeholder seems to be overwritten by the second clause.\n\n3. In most cases, condition refers relationship only, it is removed also from entity to keep the implementation consistent.\n\nSo in the end, I made a copy of the referenced entities/relationship when building subgraph, which means the one in definition dict is not modified. But the properties IS set in subgraphs.","commit_id":"78308efe6d9506aff54fedd2d85db0014077055f"},{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"1efd0453629933a561c10f01c4d9b73f5b0866fc","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            \u0027resource\u0027: Vertex(vertex_id\u003d\u0027resource\u0027,"},{"line_number":65,"context_line":"                               properties\u003d{\u0027category\u0027: \u0027RESOURCE\u0027,"},{"line_number":66,"context_line":"                                           \u0027type\u0027: \u0027nova.host\u0027,"},{"line_number":67,"context_line":"                                           \u0027is_deleted\u0027: False,"},{"line_number":68,"context_line":"                                           \u0027is_placeholder\u0027: False"},{"line_number":69,"context_line":"                                           })"},{"line_number":70,"context_line":"        }"},{"line_number":71,"context_line":"        self.assert_dict_equal(expected_entities, template_data.entities,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f013ff3_254f7bbe","side":"PARENT","line":68,"range":{"start_line":67,"start_character":43,"end_line":68,"end_character":66},"updated":"2017-05-15 12:11:53.000000000","message":"Why did you remove that?","commit_id":"78308efe6d9506aff54fedd2d85db0014077055f"},{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"1efd0453629933a561c10f01c4d9b73f5b0866fc","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                          target_id\u003d\u0027resource\u0027,"},{"line_number":78,"context_line":"                          label\u003d\u0027on\u0027,"},{"line_number":79,"context_line":"                          properties\u003d{\u0027relationship_type\u0027: \u0027on\u0027,"},{"line_number":80,"context_line":"                                      \u0027is_deleted\u0027: False,"},{"line_number":81,"context_line":"                                      \u0027negative_condition\u0027: False}),"},{"line_number":82,"context_line":"                source\u003dexpected_entities[\u0027alarm\u0027],"},{"line_number":83,"context_line":"                target\u003dexpected_entities[\u0027resource\u0027]"},{"line_number":84,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f013ff3_054c7fc5","side":"PARENT","line":81,"range":{"start_line":80,"start_character":37,"end_line":81,"end_character":65},"updated":"2017-05-15 12:11:53.000000000","message":"Why did you remove that?","commit_id":"78308efe6d9506aff54fedd2d85db0014077055f"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"bbc676edf0ddb50f1de84d14182e48502a2bdc63","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                    type\u003d\u0027set_state\u0027,"},{"line_number":84,"context_line":"                    targets\u003d{\u0027target\u0027: \u0027resource\u0027},"},{"line_number":85,"context_line":"                    properties\u003d{\u0027state\u0027: \u0027SUBOPTIMAL\u0027})],"},{"line_number":86,"context_line":"            subgraphs\u003dtemplate_data.scenarios[0].subgraphs,  # ignore subgraphs"},{"line_number":87,"context_line":"            entities\u003dexpected_entities,"},{"line_number":88,"context_line":"            relationships\u003dexpected_relationships"},{"line_number":89,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_466d5eca","line":86,"range":{"start_line":86,"start_character":61,"end_line":86,"end_character":79},"updated":"2017-05-23 06:19:05.000000000","message":"Why ignore subgraphs?","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"e6c2139987cc2b23e1a78a85fd5682d6449ba44a","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                    type\u003d\u0027set_state\u0027,"},{"line_number":84,"context_line":"                    targets\u003d{\u0027target\u0027: \u0027resource\u0027},"},{"line_number":85,"context_line":"                    properties\u003d{\u0027state\u0027: \u0027SUBOPTIMAL\u0027})],"},{"line_number":86,"context_line":"            subgraphs\u003dtemplate_data.scenarios[0].subgraphs,  # ignore subgraphs"},{"line_number":87,"context_line":"            entities\u003dexpected_entities,"},{"line_number":88,"context_line":"            relationships\u003dexpected_relationships"},{"line_number":89,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_d547d24b","line":86,"range":{"start_line":86,"start_character":61,"end_line":86,"end_character":79},"in_reply_to":"ff0f0b1f_466d5eca","updated":"2017-05-23 09:27:13.000000000","message":"Equal operator is not defined in SubGraph so it can not be compared by value.\n\nAnd I consider SubGraph decoupled from TemplateData so it would be better to verify the build method separately, i.e. check the consistency. Not done yet...","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"4c1a735af40dfbe3394eee690a7ad8001f4a25a9","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                    type\u003d\u0027set_state\u0027,"},{"line_number":84,"context_line":"                    targets\u003d{\u0027target\u0027: \u0027resource\u0027},"},{"line_number":85,"context_line":"                    properties\u003d{\u0027state\u0027: \u0027SUBOPTIMAL\u0027})],"},{"line_number":86,"context_line":"            subgraphs\u003dtemplate_data.scenarios[0].subgraphs,  # ignore subgraphs"},{"line_number":87,"context_line":"            entities\u003dexpected_entities,"},{"line_number":88,"context_line":"            relationships\u003dexpected_relationships"},{"line_number":89,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_eddd46e0","line":86,"range":{"start_line":86,"start_character":61,"end_line":86,"end_character":79},"in_reply_to":"ff0f0b1f_522bb181","updated":"2017-05-24 08:39:02.000000000","message":"I assigned a value from **observed** result, so it will always equal. Not an actual verification of subgraph build.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"90c87e67ec79a7a94da309bc54385ce0b49a17f5","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                    type\u003d\u0027set_state\u0027,"},{"line_number":84,"context_line":"                    targets\u003d{\u0027target\u0027: \u0027resource\u0027},"},{"line_number":85,"context_line":"                    properties\u003d{\u0027state\u0027: \u0027SUBOPTIMAL\u0027})],"},{"line_number":86,"context_line":"            subgraphs\u003dtemplate_data.scenarios[0].subgraphs,  # ignore subgraphs"},{"line_number":87,"context_line":"            entities\u003dexpected_entities,"},{"line_number":88,"context_line":"            relationships\u003dexpected_relationships"},{"line_number":89,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_522bb181","line":86,"range":{"start_line":86,"start_character":61,"end_line":86,"end_character":79},"in_reply_to":"ff0f0b1f_d547d24b","updated":"2017-05-24 07:32:45.000000000","message":"But you wrote \u0027ignore subgraphs\u0027 and you *are* using them. Or am I missing something?","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"965f179b1a02eb409a6468a4004249eeff63e28f","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                    type\u003d\u0027set_state\u0027,"},{"line_number":84,"context_line":"                    targets\u003d{\u0027target\u0027: \u0027resource\u0027},"},{"line_number":85,"context_line":"                    properties\u003d{\u0027state\u0027: \u0027SUBOPTIMAL\u0027})],"},{"line_number":86,"context_line":"            subgraphs\u003dtemplate_data.scenarios[0].subgraphs,  # ignore subgraphs"},{"line_number":87,"context_line":"            entities\u003dexpected_entities,"},{"line_number":88,"context_line":"            relationships\u003dexpected_relationships"},{"line_number":89,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_7cbadcc0","line":86,"range":{"start_line":86,"start_character":61,"end_line":86,"end_character":79},"in_reply_to":"ff0f0b1f_e8589488","updated":"2017-05-25 13:54:01.000000000","message":"Done","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"da14a10ed791500c8e3d25659b61fb924025cbf3","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                    type\u003d\u0027set_state\u0027,"},{"line_number":84,"context_line":"                    targets\u003d{\u0027target\u0027: \u0027resource\u0027},"},{"line_number":85,"context_line":"                    properties\u003d{\u0027state\u0027: \u0027SUBOPTIMAL\u0027})],"},{"line_number":86,"context_line":"            subgraphs\u003dtemplate_data.scenarios[0].subgraphs,  # ignore subgraphs"},{"line_number":87,"context_line":"            entities\u003dexpected_entities,"},{"line_number":88,"context_line":"            relationships\u003dexpected_relationships"},{"line_number":89,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_e8589488","line":86,"range":{"start_line":86,"start_character":61,"end_line":86,"end_character":79},"in_reply_to":"ff0f0b1f_eddd46e0","updated":"2017-05-24 08:47:55.000000000","message":"Ok, now I understand, thanks. Please explain it in the comment.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"bbc676edf0ddb50f1de84d14182e48502a2bdc63","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        self.assertIsInstance(condition_var, ConditionVar)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        symbol_name \u003d condition_var.symbol_name"},{"line_number":184,"context_line":"        self.assertIsInstance(symbol_name, str)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        actions \u003d scenario.actions"},{"line_number":187,"context_line":"        self.assert_is_not_empty(scenario.actions)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_26a70a0e","line":184,"range":{"start_line":184,"start_character":0,"end_line":184,"end_character":47},"updated":"2017-05-23 06:19:05.000000000","message":"You removed several tests here. Did you move them elsewhere?","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"e6c2139987cc2b23e1a78a85fd5682d6449ba44a","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        self.assertIsInstance(condition_var, ConditionVar)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        symbol_name \u003d condition_var.symbol_name"},{"line_number":184,"context_line":"        self.assertIsInstance(symbol_name, str)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        actions \u003d scenario.actions"},{"line_number":187,"context_line":"        self.assert_is_not_empty(scenario.actions)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_cfd741ee","line":184,"range":{"start_line":184,"start_character":0,"end_line":184,"end_character":47},"in_reply_to":"ff0f0b1f_26a70a0e","updated":"2017-05-23 09:27:13.000000000","message":"The struct of condition var is modified, it is no longer extracted, only the symbol name is saved. The extraction is moved to sub graph build.","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"90c87e67ec79a7a94da309bc54385ce0b49a17f5","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        self.assertIsInstance(condition_var, ConditionVar)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        symbol_name \u003d condition_var.symbol_name"},{"line_number":184,"context_line":"        self.assertIsInstance(symbol_name, str)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        actions \u003d scenario.actions"},{"line_number":187,"context_line":"        self.assert_is_not_empty(scenario.actions)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_322efd91","line":184,"range":{"start_line":184,"start_character":0,"end_line":184,"end_character":47},"in_reply_to":"ff0f0b1f_cfd741ee","updated":"2017-05-24 07:32:45.000000000","message":"OK","commit_id":"7110d3431bf0a5582fbec1f6b98f0945aca9b6f6"}]}
