)]}'
{"vitrage/evaluator/base.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    metadata \u003d template.get(TemplateFields.METADATA)"},{"line_number":34,"context_line":"    if metadata is None:"},{"line_number":35,"context_line":"        return None"},{"line_number":36,"context_line":"    version \u003d metadata.get(TemplateFields.VERSION)"},{"line_number":37,"context_line":"    return TemplateSchemaFactory().template_schema(version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_d36fe4f9","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":50},"updated":"2019-01-27 09:05:17.000000000","message":"You need a default of version 1, since it wasn\u0027t written in the template explicitly","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    metadata \u003d template.get(TemplateFields.METADATA)"},{"line_number":34,"context_line":"    if metadata is None:"},{"line_number":35,"context_line":"        return None"},{"line_number":36,"context_line":"    version \u003d metadata.get(TemplateFields.VERSION)"},{"line_number":37,"context_line":"    return TemplateSchemaFactory().template_schema(version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_6eb3af99","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":50},"in_reply_to":"9fdfeff1_d36fe4f9","updated":"2019-01-27 15:14:01.000000000","message":"Done","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"}],"vitrage/evaluator/scenario_repository.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                                 template.file_content,"},{"line_number":106,"context_line":"                                                 template.created_at)"},{"line_number":107,"context_line":"        schema \u003d get_template_schema(template.file_content)"},{"line_number":108,"context_line":"        template_loader \u003d schema.loaders.get(\u0027template_loader\u0027)"},{"line_number":109,"context_line":"        template_data \u003d template_loader.load(schema,"},{"line_number":110,"context_line":"                                             template.file_content,"},{"line_number":111,"context_line":"                                             self._def_templates)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_737878c3","line":108,"range":{"start_line":108,"start_character":45,"end_line":108,"end_character":62},"updated":"2019-01-27 09:05:17.000000000","message":"Should be defined somewhere","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                                 template.file_content,"},{"line_number":106,"context_line":"                                                 template.created_at)"},{"line_number":107,"context_line":"        schema \u003d get_template_schema(template.file_content)"},{"line_number":108,"context_line":"        template_loader \u003d schema.loaders.get(\u0027template_loader\u0027)"},{"line_number":109,"context_line":"        template_data \u003d template_loader.load(schema,"},{"line_number":110,"context_line":"                                             template.file_content,"},{"line_number":111,"context_line":"                                             self._def_templates)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_ae6af7e9","line":108,"range":{"start_line":108,"start_character":45,"end_line":108,"end_character":62},"in_reply_to":"9fdfeff1_2e6b6785","updated":"2019-01-27 15:14:01.000000000","message":"Done","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"bdc978a6c56f2991e7f0339ecb3a0771b4c1c58c","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                                 template.file_content,"},{"line_number":106,"context_line":"                                                 template.created_at)"},{"line_number":107,"context_line":"        schema \u003d get_template_schema(template.file_content)"},{"line_number":108,"context_line":"        template_loader \u003d schema.loaders.get(\u0027template_loader\u0027)"},{"line_number":109,"context_line":"        template_data \u003d template_loader.load(schema,"},{"line_number":110,"context_line":"                                             template.file_content,"},{"line_number":111,"context_line":"                                             self._def_templates)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_2e6b6785","line":108,"range":{"start_line":108,"start_character":45,"end_line":108,"end_character":62},"in_reply_to":"9fdfeff1_737878c3","updated":"2019-01-27 10:15:34.000000000","message":"+1","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                                                 template.file_content,"},{"line_number":107,"context_line":"                                                 template.created_at)"},{"line_number":108,"context_line":"        schema \u003d get_template_schema(template.file_content)"},{"line_number":109,"context_line":"        template_loader \u003d schema.loaders.get(TEMPLATE_LOADER)"},{"line_number":110,"context_line":"        template_data \u003d template_loader.load(schema,"},{"line_number":111,"context_line":"                                             template.file_content,"},{"line_number":112,"context_line":"                                             self._def_templates)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_bc2308bd","line":109,"range":{"start_line":109,"start_character":26,"end_line":109,"end_character":61},"updated":"2019-01-28 11:31:38.000000000","message":"you use get here so it can be None and then you will get\nexception in the next line","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                                                 template.file_content,"},{"line_number":107,"context_line":"                                                 template.created_at)"},{"line_number":108,"context_line":"        schema \u003d get_template_schema(template.file_content)"},{"line_number":109,"context_line":"        template_loader \u003d schema.loaders.get(TEMPLATE_LOADER)"},{"line_number":110,"context_line":"        template_data \u003d template_loader.load(schema,"},{"line_number":111,"context_line":"                                             template.file_content,"},{"line_number":112,"context_line":"                                             self._def_templates)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_2d960441","line":109,"range":{"start_line":109,"start_character":26,"end_line":109,"end_character":61},"in_reply_to":"9fdfeff1_bc2308bd","updated":"2019-01-28 13:06:49.000000000","message":"it can\u0027t be None.\nI\u0027ll change to schema.loaders[TEMPLATE_LOADER]","commit_id":"28243344feac299683d622c2904ec31a776db4c5"}],"vitrage/evaluator/template_loading/scenario_loader.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        return entity, ENTITY"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"def calculate_action_target(condition, entities, relationships):"},{"line_number":132,"context_line":"    \"\"\"Return a vertex that can be used as an action target."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    External actions like execute_mistral do not have an explicit"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_9375dccd","line":131,"range":{"start_line":131,"start_character":4,"end_line":131,"end_character":27},"updated":"2019-01-27 09:05:17.000000000","message":"Why did you extract it from the class?","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        return entity, ENTITY"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"def calculate_action_target(condition, entities, relationships):"},{"line_number":132,"context_line":"    \"\"\"Return a vertex that can be used as an action target."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    External actions like execute_mistral do not have an explicit"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_6e788fc3","line":131,"range":{"start_line":131,"start_character":4,"end_line":131,"end_character":27},"in_reply_to":"9fdfeff1_9375dccd","updated":"2019-01-27 15:14:01.000000000","message":"So we can reuse it, with arguments instead of self. As this is a helper method, we may want to move it into condition.py","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"bdc978a6c56f2991e7f0339ecb3a0771b4c1c58c","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"def calculate_action_target(condition, entities, relationships):"},{"line_number":132,"context_line":"    \"\"\"Return a vertex that can be used as an action target."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    External actions like execute_mistral do not have an explicit"},{"line_number":135,"context_line":"    action target. This parameter is a must for the sub-graph matching"},{"line_number":136,"context_line":"    algorithm. If it is missing, we would like to select an arbitrary"},{"line_number":137,"context_line":"    target from the condition."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    \"\"\""},{"line_number":140,"context_line":"    definition_index \u003d entities.copy()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_0e35438f","line":137,"range":{"start_line":132,"start_character":0,"end_line":137,"end_character":30},"updated":"2019-01-27 10:15:34.000000000","message":"still valid explanation after your change ?","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"def calculate_action_target(condition, entities, relationships):"},{"line_number":132,"context_line":"    \"\"\"Return a vertex that can be used as an action target."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    External actions like execute_mistral do not have an explicit"},{"line_number":135,"context_line":"    action target. This parameter is a must for the sub-graph matching"},{"line_number":136,"context_line":"    algorithm. If it is missing, we would like to select an arbitrary"},{"line_number":137,"context_line":"    target from the condition."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    \"\"\""},{"line_number":140,"context_line":"    definition_index \u003d entities.copy()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_2e7e07af","line":137,"range":{"start_line":132,"start_character":0,"end_line":137,"end_character":30},"in_reply_to":"9fdfeff1_0e35438f","updated":"2019-01-27 15:14:01.000000000","message":"Thanks, added","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"}],"vitrage/evaluator/template_loading/template_loader_v3.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 - Nokia"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_f34d489a","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2019-01-27 09:05:17.000000000","message":"2019","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 - Nokia"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_ee4d5f9a","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"9fdfeff1_f34d489a","updated":"2019-01-27 15:14:01.000000000","message":"Done","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"bdc978a6c56f2991e7f0339ecb3a0771b4c1c58c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                                                       template_schema))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def _build_entities(template):"},{"line_number":47,"context_line":"    entities \u003d dict()"},{"line_number":48,"context_line":"    for template_id, entity in template[TFields.ENTITIES].items():"},{"line_number":49,"context_line":"        properties \u003d PropsConverter.convert_props_with_dictionary(entity)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_ae25175e","line":46,"range":{"start_line":46,"start_character":4,"end_line":46,"end_character":19},"updated":"2019-01-27 10:15:34.000000000","message":"+1","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                                                       template_schema))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def _build_entities(template):"},{"line_number":47,"context_line":"    entities \u003d dict()"},{"line_number":48,"context_line":"    for template_id, entity in template[TFields.ENTITIES].items():"},{"line_number":49,"context_line":"        properties \u003d PropsConverter.convert_props_with_dictionary(entity)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_d3484488","line":46,"range":{"start_line":46,"start_character":4,"end_line":46,"end_character":19},"updated":"2019-01-27 09:05:17.000000000","message":"Why not add these functions to the class?","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"dc2f4061f8c7dcc64a5aa4ac950aa3a0be22bc1c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                                                       template_schema))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def _build_entities(template):"},{"line_number":47,"context_line":"    entities \u003d dict()"},{"line_number":48,"context_line":"    for template_id, entity in template[TFields.ENTITIES].items():"},{"line_number":49,"context_line":"        properties \u003d PropsConverter.convert_props_with_dictionary(entity)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_f429ae89","line":46,"range":{"start_line":46,"start_character":4,"end_line":46,"end_character":19},"in_reply_to":"9fdfeff1_ae38b7ed","updated":"2019-01-29 11:47:31.000000000","message":"I prefer to add them to the class until we need them elsewhere... but I won\u0027t block the change for that","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                                                       template_schema))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def _build_entities(template):"},{"line_number":47,"context_line":"    entities \u003d dict()"},{"line_number":48,"context_line":"    for template_id, entity in template[TFields.ENTITIES].items():"},{"line_number":49,"context_line":"        properties \u003d PropsConverter.convert_props_with_dictionary(entity)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_ae38b7ed","line":46,"range":{"start_line":46,"start_character":4,"end_line":46,"end_character":19},"in_reply_to":"9fdfeff1_d3484488","updated":"2019-01-27 15:14:01.000000000","message":"The class is only here to serve the old structure.\nI think these can be reused more easily in the future.","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    for counter, action_def in enumerate(actions_def):"},{"line_number":130,"context_line":"        action_id \u003d \u0027%s-action%s\u0027 % (scenario_id, str(counter))"},{"line_number":131,"context_line":"        action_type, action_props \u003d action_def.popitem()"},{"line_number":132,"context_line":"        action \u003d template_schema.loaders.get(action_type).load("},{"line_number":133,"context_line":"            action_id,"},{"line_number":134,"context_line":"            default_target,"},{"line_number":135,"context_line":"            action_props,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_93239cbd","line":132,"range":{"start_line":132,"start_character":17,"end_line":132,"end_character":57},"updated":"2019-01-27 09:05:17.000000000","message":"What if it\u0027s None?","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    for counter, action_def in enumerate(actions_def):"},{"line_number":130,"context_line":"        action_id \u003d \u0027%s-action%s\u0027 % (scenario_id, str(counter))"},{"line_number":131,"context_line":"        action_type, action_props \u003d action_def.popitem()"},{"line_number":132,"context_line":"        action \u003d template_schema.loaders.get(action_type).load("},{"line_number":133,"context_line":"            action_id,"},{"line_number":134,"context_line":"            default_target,"},{"line_number":135,"context_line":"            action_props,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_2e2cc7aa","line":132,"range":{"start_line":132,"start_character":17,"end_line":132,"end_character":57},"in_reply_to":"9fdfeff1_93239cbd","updated":"2019-01-27 15:14:01.000000000","message":"It shouldn\u0027t be, it was already validated during syntax validation. In template loading, I think we can trust the input is valid.","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":38,"context_line":"class TemplateLoader(object):"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def load(self, template_schema, template_def, def_templates\u003dNone):"},{"line_number":41,"context_line":"        template \u003d copy.deepcopy(template_def)"},{"line_number":42,"context_line":"        entities \u003d _build_entities(template)"},{"line_number":43,"context_line":"        relationships \u003d _build_condition_relationships(template, entities)"},{"line_number":44,"context_line":"        return TemplateData(scenarios\u003d_build_scenarios("}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_fc167055","line":41,"range":{"start_line":41,"start_character":18,"end_line":41,"end_character":32},"updated":"2019-01-28 11:31:38.000000000","message":"is this necessary ?","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":38,"context_line":"class TemplateLoader(object):"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def load(self, template_schema, template_def, def_templates\u003dNone):"},{"line_number":41,"context_line":"        template \u003d copy.deepcopy(template_def)"},{"line_number":42,"context_line":"        entities \u003d _build_entities(template)"},{"line_number":43,"context_line":"        relationships \u003d _build_condition_relationships(template, entities)"},{"line_number":44,"context_line":"        return TemplateData(scenarios\u003d_build_scenarios("}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_adcf5454","line":41,"range":{"start_line":41,"start_character":18,"end_line":41,"end_character":32},"in_reply_to":"9fdfeff1_fc167055","updated":"2019-01-28 13:06:49.000000000","message":"Yap, the original should remain, and this flow changes the template conditions for example.","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def _build_entities(template):"},{"line_number":49,"context_line":"    entities \u003d dict()"},{"line_number":50,"context_line":"    for template_id, entity in template[TFields.ENTITIES].items():"},{"line_number":51,"context_line":"        properties \u003d PropsConverter.convert_props_with_dictionary(entity)"},{"line_number":52,"context_line":"        entities[template_id] \u003d Vertex(template_id, properties)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_b73fa3b2","line":49,"range":{"start_line":49,"start_character":14,"end_line":49,"end_character":21},"updated":"2019-01-28 11:31:38.000000000","message":"nit: {}","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def _build_condition_relationships(template, entities):"},{"line_number":57,"context_line":"    relationships \u003d dict()"},{"line_number":58,"context_line":"    for scenario in template[TFields.SCENARIOS]:"},{"line_number":59,"context_line":"        condition \u003d scenario.get(TFields.CONDITION)"},{"line_number":60,"context_line":"        extracted_relationships, processed_condition \u003d \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_775e1b13","line":57,"range":{"start_line":57,"start_character":20,"end_line":57,"end_character":26},"updated":"2019-01-28 11:31:38.000000000","message":"nit: {}","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":56,"context_line":"def _build_condition_relationships(template, entities):"},{"line_number":57,"context_line":"    relationships \u003d dict()"},{"line_number":58,"context_line":"    for scenario in template[TFields.SCENARIOS]:"},{"line_number":59,"context_line":"        condition \u003d scenario.get(TFields.CONDITION)"},{"line_number":60,"context_line":"        extracted_relationships, processed_condition \u003d \\"},{"line_number":61,"context_line":"            _process_condition(condition, entities)"},{"line_number":62,"context_line":"        relationships.update(extracted_relationships)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_97429f3d","line":59,"range":{"start_line":59,"start_character":8,"end_line":59,"end_character":17},"updated":"2019-01-28 11:31:38.000000000","message":"what if condition is None ?","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":56,"context_line":"def _build_condition_relationships(template, entities):"},{"line_number":57,"context_line":"    relationships \u003d dict()"},{"line_number":58,"context_line":"    for scenario in template[TFields.SCENARIOS]:"},{"line_number":59,"context_line":"        condition \u003d scenario.get(TFields.CONDITION)"},{"line_number":60,"context_line":"        extracted_relationships, processed_condition \u003d \\"},{"line_number":61,"context_line":"            _process_condition(condition, entities)"},{"line_number":62,"context_line":"        relationships.update(extracted_relationships)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_2d328460","line":59,"range":{"start_line":59,"start_character":8,"end_line":59,"end_character":17},"in_reply_to":"9fdfeff1_97429f3d","updated":"2019-01-28 13:06:49.000000000","message":"Before template loading, the validation should (and will) catch such problems.\nHere we can assume the template is valid.","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        target \u003d matchobj.group(3)"},{"line_number":94,"context_line":"        relation_id \u003d \u0027%s__%s__%s\u0027 % (source, label, target)"},{"line_number":95,"context_line":"        extracted_relationships[relation_id] \u003d EdgeDescription("},{"line_number":96,"context_line":"            Edge(source, target, label, dict()),"},{"line_number":97,"context_line":"            entities[source],"},{"line_number":98,"context_line":"            entities[target])"},{"line_number":99,"context_line":"        return relation_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_97c7ff96","line":96,"range":{"start_line":96,"start_character":40,"end_line":96,"end_character":46},"updated":"2019-01-28 11:31:38.000000000","message":"maybe make Edge have a default parameter None which will create an empty dict in that case","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        target \u003d matchobj.group(3)"},{"line_number":94,"context_line":"        relation_id \u003d \u0027%s__%s__%s\u0027 % (source, label, target)"},{"line_number":95,"context_line":"        extracted_relationships[relation_id] \u003d EdgeDescription("},{"line_number":96,"context_line":"            Edge(source, target, label, dict()),"},{"line_number":97,"context_line":"            entities[source],"},{"line_number":98,"context_line":"            entities[target])"},{"line_number":99,"context_line":"        return relation_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_4d46e8c2","line":96,"range":{"start_line":96,"start_character":40,"end_line":96,"end_character":46},"in_reply_to":"9fdfeff1_97c7ff96","updated":"2019-01-28 13:06:49.000000000","message":"Edge is used in numerous places.","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    scenarios \u003d []"},{"line_number":109,"context_line":"    for index, scenario in enumerate(template[TFields.SCENARIOS]):"},{"line_number":110,"context_line":"        scenario_id \u003d \"%s-scenario%s\" % (name, str(index))"},{"line_number":111,"context_line":"        condition \u003d parse_condition(scenario.get(TFields.CONDITION))"},{"line_number":112,"context_line":"        default_target \u003d calculate_action_target(condition,"},{"line_number":113,"context_line":"                                                 entities,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_373e538c","line":110,"range":{"start_line":110,"start_character":46,"end_line":110,"end_character":50},"updated":"2019-01-28 11:31:38.000000000","message":"I don\u0027t think it is needed","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    scenarios \u003d []"},{"line_number":109,"context_line":"    for index, scenario in enumerate(template[TFields.SCENARIOS]):"},{"line_number":110,"context_line":"        scenario_id \u003d \"%s-scenario%s\" % (name, str(index))"},{"line_number":111,"context_line":"        condition \u003d parse_condition(scenario.get(TFields.CONDITION))"},{"line_number":112,"context_line":"        default_target \u003d calculate_action_target(condition,"},{"line_number":113,"context_line":"                                                 entities,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_0d646049","line":110,"range":{"start_line":110,"start_character":46,"end_line":110,"end_character":50},"in_reply_to":"9fdfeff1_373e538c","updated":"2019-01-28 13:06:49.000000000","message":"Done","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":148,"context_line":"def _build_subgraphs(condition, entities, relationships):"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def _extract_var(symbol_name):"},{"line_number":151,"context_line":"        if symbol_name in relationships.keys():"},{"line_number":152,"context_line":"            edge_descriptor \u003d relationships[symbol_name]"},{"line_number":153,"context_line":"            return edge_descriptor, RELATIONSHIP"},{"line_number":154,"context_line":"        elif symbol_name in entities.keys():"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_f780cb48","line":151,"range":{"start_line":151,"start_character":26,"end_line":151,"end_character":47},"updated":"2019-01-28 11:31:38.000000000","message":"No need for keys() here, that is the default","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":148,"context_line":"def _build_subgraphs(condition, entities, relationships):"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def _extract_var(symbol_name):"},{"line_number":151,"context_line":"        if symbol_name in relationships.keys():"},{"line_number":152,"context_line":"            edge_descriptor \u003d relationships[symbol_name]"},{"line_number":153,"context_line":"            return edge_descriptor, RELATIONSHIP"},{"line_number":154,"context_line":"        elif symbol_name in entities.keys():"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_8d57f058","line":151,"range":{"start_line":151,"start_character":26,"end_line":151,"end_character":47},"in_reply_to":"9fdfeff1_f780cb48","updated":"2019-01-28 13:06:49.000000000","message":"Done","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        if symbol_name in relationships.keys():"},{"line_number":152,"context_line":"            edge_descriptor \u003d relationships[symbol_name]"},{"line_number":153,"context_line":"            return edge_descriptor, RELATIONSHIP"},{"line_number":154,"context_line":"        elif symbol_name in entities.keys():"},{"line_number":155,"context_line":"            vertex \u003d entities[symbol_name]"},{"line_number":156,"context_line":"            return vertex, ENTITY"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_f7f52bee","line":154,"range":{"start_line":154,"start_character":36,"end_line":154,"end_character":44},"updated":"2019-01-28 11:31:38.000000000","message":"same as above","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        if symbol_name in relationships.keys():"},{"line_number":152,"context_line":"            edge_descriptor \u003d relationships[symbol_name]"},{"line_number":153,"context_line":"            return edge_descriptor, RELATIONSHIP"},{"line_number":154,"context_line":"        elif symbol_name in entities.keys():"},{"line_number":155,"context_line":"            vertex \u003d entities[symbol_name]"},{"line_number":156,"context_line":"            return vertex, ENTITY"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_6d4accac","line":154,"range":{"start_line":154,"start_character":36,"end_line":154,"end_character":44},"in_reply_to":"9fdfeff1_f7f52bee","updated":"2019-01-28 13:06:49.000000000","message":"Done","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"a2e232cd5b4bbc3980dd54217cba650823c30ea9","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        tmp_scenario \u003d Scenario("},{"line_number":121,"context_line":"            scenario_id,"},{"line_number":122,"context_line":"            schema.version(),"},{"line_number":123,"context_line":"            None,  # condition,"},{"line_number":124,"context_line":"            _build_actions(schema, scenario, scenario_id, default_target),"},{"line_number":125,"context_line":"            _build_subgraphs(condition, entities, relationships),"},{"line_number":126,"context_line":"            entities,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_71e4e63c","line":123,"range":{"start_line":123,"start_character":12,"end_line":123,"end_character":31},"updated":"2019-01-28 13:29:17.000000000","message":"??","commit_id":"e804a41adf1c859ea56cd8590614a99da720f128"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f56bf4a5d6b94a6b22382828cd1fe87924f34b6e","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        tmp_scenario \u003d Scenario("},{"line_number":121,"context_line":"            scenario_id,"},{"line_number":122,"context_line":"            schema.version(),"},{"line_number":123,"context_line":"            None,  # condition,"},{"line_number":124,"context_line":"            _build_actions(schema, scenario, scenario_id, default_target),"},{"line_number":125,"context_line":"            _build_subgraphs(condition, entities, relationships),"},{"line_number":126,"context_line":"            entities,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_1149da89","line":123,"range":{"start_line":123,"start_character":12,"end_line":123,"end_character":31},"in_reply_to":"9fdfeff1_71e4e63c","updated":"2019-01-28 14:01:35.000000000","message":"Done","commit_id":"e804a41adf1c859ea56cd8590614a99da720f128"}],"vitrage/evaluator/template_loading/v3/action_loader.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 - Nokia"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_5329b498","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2019-01-27 09:05:17.000000000","message":"2019","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 - Nokia"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_ee1b1f7e","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"9fdfeff1_5329b498","updated":"2019-01-27 15:14:01.000000000","message":"Done","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class ActionLoader(object):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def load(self, action_id, default_target, action_dict, action_type):"},{"line_number":22,"context_line":"        target \u003d action_dict.pop(TField.TARGET, default_target[TField.TARGET])"},{"line_number":23,"context_line":"        targets \u003d {TField.TARGET: target}"},{"line_number":24,"context_line":"        if action_dict.get(TField.SOURCE):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_d3160456","line":21,"range":{"start_line":21,"start_character":30,"end_line":21,"end_character":57},"updated":"2019-01-27 09:05:17.000000000","message":"Please explain what those are","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class ActionLoader(object):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def load(self, action_id, default_target, action_dict, action_type):"},{"line_number":22,"context_line":"        target \u003d action_dict.pop(TField.TARGET, default_target[TField.TARGET])"},{"line_number":23,"context_line":"        targets \u003d {TField.TARGET: target}"},{"line_number":24,"context_line":"        if action_dict.get(TField.SOURCE):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_3933aff8","line":21,"range":{"start_line":21,"start_character":30,"end_line":21,"end_character":57},"in_reply_to":"9fdfeff1_d3160456","updated":"2019-01-27 15:14:01.000000000","message":"Done","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"}],"vitrage/evaluator/template_schemas.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    def __init__(self):"},{"line_number":104,"context_line":"        self.validators \u003d {"},{"line_number":105,"context_line":"            TemplateFields.METADATA: V2MetadataValidator,"},{"line_number":106,"context_line":"            \u0027syntax\u0027: V3SyntaxValidator,"},{"line_number":107,"context_line":"            \u0027content\u0027: V3ContentValidator,"},{"line_number":108,"context_line":"        }"},{"line_number":109,"context_line":"        self.loaders \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_33051015","line":106,"range":{"start_line":106,"start_character":13,"end_line":106,"end_character":19},"updated":"2019-01-27 09:05:17.000000000","message":"Please define syntax, content, etc. somewhere","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    def __init__(self):"},{"line_number":104,"context_line":"        self.validators \u003d {"},{"line_number":105,"context_line":"            TemplateFields.METADATA: V2MetadataValidator,"},{"line_number":106,"context_line":"            \u0027syntax\u0027: V3SyntaxValidator,"},{"line_number":107,"context_line":"            \u0027content\u0027: V3ContentValidator,"},{"line_number":108,"context_line":"        }"},{"line_number":109,"context_line":"        self.loaders \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_f94e876d","line":106,"range":{"start_line":106,"start_character":13,"end_line":106,"end_character":19},"in_reply_to":"9fdfeff1_33051015","updated":"2019-01-27 15:14:01.000000000","message":"Done","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            ActionType.RAISE_ALARM: V3ActionLoader(),"},{"line_number":115,"context_line":"            ActionType.SET_STATE: V3ActionLoader(),"},{"line_number":116,"context_line":"        }"},{"line_number":117,"context_line":"        # self.functions[GET_ATTR] \u003d get_attr"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def version(self):"},{"line_number":120,"context_line":"        return \u00273\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_5302140d","line":117,"range":{"start_line":117,"start_character":8,"end_line":117,"end_character":45},"updated":"2019-01-27 09:05:17.000000000","message":"Why is it commented out? we need this support in v3","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            ActionType.RAISE_ALARM: V3ActionLoader(),"},{"line_number":115,"context_line":"            ActionType.SET_STATE: V3ActionLoader(),"},{"line_number":116,"context_line":"        }"},{"line_number":117,"context_line":"        # self.functions[GET_ATTR] \u003d get_attr"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def version(self):"},{"line_number":120,"context_line":"        return \u00273\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_b9579fca","line":117,"range":{"start_line":117,"start_character":8,"end_line":117,"end_character":45},"in_reply_to":"9fdfeff1_5302140d","updated":"2019-01-27 15:14:01.000000000","message":"Oops :), thanks! i\u0027ll soon add the tempest for this.","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"}],"vitrage/evaluator/template_validation/__init__.py":[{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"bdc978a6c56f2991e7f0339ecb3a0771b4c1c58c","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        return _validate_template_v1_v2(template, def_templates)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    try:"},{"line_number":40,"context_line":"        template_schema.validators.get(\u0027syntax\u0027).validate(template)"},{"line_number":41,"context_line":"        template_schema.validators.get(\u0027content\u0027).validate(template)"},{"line_number":42,"context_line":"    except base.ValidationError as e:"},{"line_number":43,"context_line":"        return base.get_custom_fault_result(e.code, e.extra)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_eebd5fd8","line":40,"range":{"start_line":40,"start_character":39,"end_line":40,"end_character":47},"updated":"2019-01-27 10:15:34.000000000","message":"constants ?!","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        return _validate_template_v1_v2(template, def_templates)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    try:"},{"line_number":40,"context_line":"        template_schema.validators.get(\u0027syntax\u0027).validate(template)"},{"line_number":41,"context_line":"        template_schema.validators.get(\u0027content\u0027).validate(template)"},{"line_number":42,"context_line":"    except base.ValidationError as e:"},{"line_number":43,"context_line":"        return base.get_custom_fault_result(e.code, e.extra)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_9972db7a","line":40,"range":{"start_line":40,"start_character":39,"end_line":40,"end_character":47},"in_reply_to":"9fdfeff1_eebd5fd8","updated":"2019-01-27 15:14:01.000000000","message":"Done","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"bdc978a6c56f2991e7f0339ecb3a0771b4c1c58c","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    try:"},{"line_number":40,"context_line":"        template_schema.validators.get(\u0027syntax\u0027).validate(template)"},{"line_number":41,"context_line":"        template_schema.validators.get(\u0027content\u0027).validate(template)"},{"line_number":42,"context_line":"    except base.ValidationError as e:"},{"line_number":43,"context_line":"        return base.get_custom_fault_result(e.code, e.extra)"},{"line_number":44,"context_line":"    except VoluptuousError as e:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_0ec3035f","line":41,"range":{"start_line":41,"start_character":39,"end_line":41,"end_character":48},"updated":"2019-01-27 10:15:34.000000000","message":"same","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    try:"},{"line_number":40,"context_line":"        template_schema.validators.get(\u0027syntax\u0027).validate(template)"},{"line_number":41,"context_line":"        template_schema.validators.get(\u0027content\u0027).validate(template)"},{"line_number":42,"context_line":"    except base.ValidationError as e:"},{"line_number":43,"context_line":"        return base.get_custom_fault_result(e.code, e.extra)"},{"line_number":44,"context_line":"    except VoluptuousError as e:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_396baf85","line":41,"range":{"start_line":41,"start_character":39,"end_line":41,"end_character":48},"in_reply_to":"9fdfeff1_0ec3035f","updated":"2019-01-27 15:14:01.000000000","message":"Done","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"bdc978a6c56f2991e7f0339ecb3a0771b4c1c58c","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        template_schema.validators.get(\u0027content\u0027).validate(template)"},{"line_number":42,"context_line":"    except base.ValidationError as e:"},{"line_number":43,"context_line":"        return base.get_custom_fault_result(e.code, e.extra)"},{"line_number":44,"context_line":"    except VoluptuousError as e:"},{"line_number":45,"context_line":"        return base.get_custom_fault_result(base.get_status_code(e), str(e))"},{"line_number":46,"context_line":"    return base.get_correct_result()"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_ceb89be6","line":44,"range":{"start_line":44,"start_character":4,"end_line":44,"end_character":32},"updated":"2019-01-27 10:15:34.000000000","message":"what if template_schema.validators.get(...) is None ?","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        template_schema.validators.get(\u0027content\u0027).validate(template)"},{"line_number":42,"context_line":"    except base.ValidationError as e:"},{"line_number":43,"context_line":"        return base.get_custom_fault_result(e.code, e.extra)"},{"line_number":44,"context_line":"    except VoluptuousError as e:"},{"line_number":45,"context_line":"        return base.get_custom_fault_result(base.get_status_code(e), str(e))"},{"line_number":46,"context_line":"    return base.get_correct_result()"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_d95ce3ee","line":44,"range":{"start_line":44,"start_character":4,"end_line":44,"end_character":32},"in_reply_to":"9fdfeff1_ceb89be6","updated":"2019-01-27 15:14:01.000000000","message":"Shouldn\u0027t be, these are defined hardcoded.","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"def validate_template(template, def_templates):"},{"line_number":35,"context_line":"    result, template_schema \u003d get_template_schema(template)"},{"line_number":36,"context_line":"    if not result.is_valid_config:"},{"line_number":37,"context_line":"        return result"},{"line_number":38,"context_line":"    if template_schema.version() \u003c \u00273\u0027:"},{"line_number":39,"context_line":"        return _validate_template_v1_v2(template, def_templates)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_d79ca70f","line":36,"range":{"start_line":36,"start_character":18,"end_line":36,"end_character":33},"updated":"2019-01-28 11:31:38.000000000","message":"maybe log an error","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"def validate_template(template, def_templates):"},{"line_number":35,"context_line":"    result, template_schema \u003d get_template_schema(template)"},{"line_number":36,"context_line":"    if not result.is_valid_config:"},{"line_number":37,"context_line":"        return result"},{"line_number":38,"context_line":"    if template_schema.version() \u003c \u00273\u0027:"},{"line_number":39,"context_line":"        return _validate_template_v1_v2(template, def_templates)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_ad02f43b","line":36,"range":{"start_line":36,"start_character":18,"end_line":36,"end_character":33},"in_reply_to":"9fdfeff1_d79ca70f","updated":"2019-01-28 13:06:49.000000000","message":"User failed validation? He already knows :)","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        return _validate_template_v1_v2(template, def_templates)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    try:"},{"line_number":42,"context_line":"        template_schema.validators.get(SYNTAX).validate(template)"},{"line_number":43,"context_line":"        template_schema.validators.get(CONTENT).validate(template)"},{"line_number":44,"context_line":"    except base.ValidationError as e:"},{"line_number":45,"context_line":"        return base.get_custom_fault_result(e.code, e.details)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_d7e7c7ab","line":42,"range":{"start_line":42,"start_character":35,"end_line":42,"end_character":38},"updated":"2019-01-28 11:31:38.000000000","message":"why get and not []","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        return _validate_template_v1_v2(template, def_templates)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    try:"},{"line_number":42,"context_line":"        template_schema.validators.get(SYNTAX).validate(template)"},{"line_number":43,"context_line":"        template_schema.validators.get(CONTENT).validate(template)"},{"line_number":44,"context_line":"    except base.ValidationError as e:"},{"line_number":45,"context_line":"        return base.get_custom_fault_result(e.code, e.details)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_8ddcd0e4","line":42,"range":{"start_line":42,"start_character":35,"end_line":42,"end_character":38},"in_reply_to":"9fdfeff1_d7e7c7ab","updated":"2019-01-28 13:06:49.000000000","message":"Done","commit_id":"28243344feac299683d622c2904ec31a776db4c5"}],"vitrage/evaluator/template_validation/base.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":23,"context_line":"class ValidationError(Exception):"},{"line_number":24,"context_line":"    def __init__(self, code, *args):"},{"line_number":25,"context_line":"        self.code \u003d code"},{"line_number":26,"context_line":"        self.extra \u003d \u0027\u0027"},{"line_number":27,"context_line":"        for arg in args:"},{"line_number":28,"context_line":"            self.extra \u003d self.extra + \u0027, \u0027 + str(arg)"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_4e17cb46","line":26,"range":{"start_line":26,"start_character":8,"end_line":26,"end_character":18},"updated":"2019-01-27 09:05:17.000000000","message":"What does extra mean?","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":23,"context_line":"class ValidationError(Exception):"},{"line_number":24,"context_line":"    def __init__(self, code, *args):"},{"line_number":25,"context_line":"        self.code \u003d code"},{"line_number":26,"context_line":"        self.extra \u003d \u0027\u0027"},{"line_number":27,"context_line":"        for arg in args:"},{"line_number":28,"context_line":"            self.extra \u003d self.extra + \u0027, \u0027 + str(arg)"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_b90c7fec","line":26,"range":{"start_line":26,"start_character":8,"end_line":26,"end_character":18},"in_reply_to":"9fdfeff1_4e17cb46","updated":"2019-01-27 15:14:01.000000000","message":"renamed to details","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def get_custom_fault_result(code, msg):"},{"line_number":46,"context_line":"    return Result(\u0027Template validation\u0027, False, code,"},{"line_number":47,"context_line":"                  status_msgs[code] + \u0027 \u0027 + msg)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_ae1f5759","line":46,"range":{"start_line":46,"start_character":18,"end_line":46,"end_character":39},"updated":"2019-01-27 09:05:17.000000000","message":"It should be part of status_messages, to allow future i18n support","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def get_custom_fault_result(code, msg):"},{"line_number":46,"context_line":"    return Result(\u0027Template validation\u0027, False, code,"},{"line_number":47,"context_line":"                  status_msgs[code] + \u0027 \u0027 + msg)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_39008fab","line":46,"range":{"start_line":46,"start_character":18,"end_line":46,"end_character":39},"in_reply_to":"9fdfeff1_ae1f5759","updated":"2019-01-27 15:14:01.000000000","message":"We dont support it, it is the same as RESULT_DESCRIPTION that is all over the code.","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    def __init__(self, code, *args):"},{"line_number":25,"context_line":"        self.code \u003d code"},{"line_number":26,"context_line":"        self.details \u003d \u0027\u0027"},{"line_number":27,"context_line":"        for arg in args:"},{"line_number":28,"context_line":"            self.details \u003d self.details + \u0027, \u0027 + str(arg)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def get_correct_result(description\u003dRESULT_DESCRIPTION):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_376ad3ed","line":28,"range":{"start_line":27,"start_character":8,"end_line":28,"end_character":57},"updated":"2019-01-28 11:31:38.000000000","message":"self.details \u003d \u0027,\u0027.join(str(arg) for e in args)","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    def __init__(self, code, *args):"},{"line_number":25,"context_line":"        self.code \u003d code"},{"line_number":26,"context_line":"        self.details \u003d \u0027\u0027"},{"line_number":27,"context_line":"        for arg in args:"},{"line_number":28,"context_line":"            self.details \u003d self.details + \u0027, \u0027 + str(arg)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def get_correct_result(description\u003dRESULT_DESCRIPTION):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_cdb5f87f","line":28,"range":{"start_line":27,"start_character":8,"end_line":28,"end_character":57},"in_reply_to":"9fdfeff1_376ad3ed","updated":"2019-01-28 13:06:49.000000000","message":"Done","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                  status_msgs[code] + \u0027 \u0027 + msg)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"def get_status_code(e):"},{"line_number":51,"context_line":"    prefix \u003d str(e).split(\u0027 \u0027)[0].strip()"},{"line_number":52,"context_line":"    if prefix.isdigit():"},{"line_number":53,"context_line":"        return int(prefix)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_97613f08","line":50,"range":{"start_line":50,"start_character":20,"end_line":50,"end_character":22},"updated":"2019-01-28 11:31:38.000000000","message":"is e an exception ? maybe use a better name","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                  status_msgs[code] + \u0027 \u0027 + msg)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"def get_status_code(e):"},{"line_number":51,"context_line":"    prefix \u003d str(e).split(\u0027 \u0027)[0].strip()"},{"line_number":52,"context_line":"    if prefix.isdigit():"},{"line_number":53,"context_line":"        return int(prefix)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_8db37098","line":50,"range":{"start_line":50,"start_character":20,"end_line":50,"end_character":22},"in_reply_to":"9fdfeff1_97613f08","updated":"2019-01-28 13:06:49.000000000","message":"Done","commit_id":"28243344feac299683d622c2904ec31a776db4c5"}],"vitrage/evaluator/template_validation/content/template_content_validator_v3.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 - Nokia"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_6e3defc2","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2019-01-27 09:05:17.000000000","message":"2019","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 - Nokia"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_8e3a93c9","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":24},"updated":"2019-01-27 09:05:17.000000000","message":"Why not put this file under template_validation/v3?","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        _validate_conditions(template)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def _validate_entities_regex(template):"},{"line_number":39,"context_line":"    for entity in template[TemplateFields.ENTITIES].values():"},{"line_number":40,"context_line":"        for key, value in entity.items():"},{"line_number":41,"context_line":"            if key.lower().endswith(TemplateFields.REGEX):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_2e3367f8","line":38,"range":{"start_line":38,"start_character":4,"end_line":38,"end_character":28},"updated":"2019-01-27 09:05:17.000000000","message":"Is it a different implementation than the one of v2?","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    edge_labels_re \u003d r\u0027\\s+\\[\\s*\\w+\\s*\\]\\s+\u0027"},{"line_number":69,"context_line":"    curr_str \u003d re.sub(edge_labels_re, \u0027 \u0027, curr_str)"},{"line_number":70,"context_line":"    if \u0027[\u0027 in curr_str or \u0027]\u0027 in curr_str:"},{"line_number":71,"context_line":"        raise ValidationError(85, condition)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    # Remove all operator occurrences"},{"line_number":74,"context_line":"    operators_re \u003d r\u0027\\b(AND|OR|NOT|and|or|not)\\b\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_ae5437ff","line":71,"range":{"start_line":71,"start_character":30,"end_line":71,"end_character":32},"updated":"2019-01-27 09:05:17.000000000","message":"You can add a new code for that - \u0027malformed condition\u0027, or \u0027malformed relation in condition\u0027.","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    curr_str \u003d curr_str.replace(\u0027(\u0027, \u0027\u0027)"},{"line_number":84,"context_line":"    curr_str \u003d curr_str.replace(\u0027)\u0027, \u0027\u0027)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    # Remaining string should be empty"},{"line_number":87,"context_line":"    if curr_str.strip():"},{"line_number":88,"context_line":"        raise ValidationError(10200, condition, curr_str)"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_8e3ff3b2","line":86,"range":{"start_line":86,"start_character":4,"end_line":86,"end_character":38},"updated":"2019-01-27 09:05:17.000000000","message":"You are not checking the validity of the parenthesis, like:\n((()\n\nBut I guess what you\u0027re checking is good enough :-)","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    \"\"\"Not operator validation"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    1. Not operator can appear only on relationships."},{"line_number":95,"context_line":"    2. There must be at least one  positive term"},{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":"    regex \u003d r\"(\\w+)\\s*\\[\\s*(\\w+)\\s*\\]\\s*(\\w+)\""},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_ee779f9f","line":95,"range":{"start_line":95,"start_character":33,"end_line":95,"end_character":35},"updated":"2019-01-27 09:05:17.000000000","message":"extra space","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":"    regex \u003d r\"(\\w+)\\s*\\[\\s*(\\w+)\\s*\\]\\s*(\\w+)\""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    # def relation_str(matchobj):"},{"line_number":100,"context_line":"    #     aa[0] \u003d aa[0] + 1"},{"line_number":101,"context_line":"    #     return RELATION + str(aa[0])"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    preprocessed_condition \u003d re.sub(regex, RELATION, condition)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_ae6d17cd","line":101,"range":{"start_line":99,"start_character":0,"end_line":101,"end_character":38},"updated":"2019-01-27 09:05:17.000000000","message":"Should be deleted?","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"def _validate_common_entity_for_all_or_clauses(condition):"},{"line_number":136,"context_line":"    # TODO(idan_hefetz): should raise ValidationError(135)"},{"line_number":137,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_ee9c7fc1","line":137,"range":{"start_line":136,"start_character":0,"end_line":137,"end_character":8},"updated":"2019-01-27 09:05:17.000000000","message":"I think this has to be implemented before we merge the code, otherwise some templates won\u0027t work","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        _validate_entities_regex(template)"},{"line_number":38,"context_line":"        _validate_conditions(template)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        # Dummy run of template loading:"},{"line_number":41,"context_line":"        schema \u003d get_template_schema(template)"},{"line_number":42,"context_line":"        V3TemplateLoader().load(schema, template)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def _validate_entities_regex(template):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_b72323bd","line":42,"range":{"start_line":40,"start_character":8,"end_line":42,"end_character":49},"updated":"2019-01-28 11:31:38.000000000","message":"whats this for ?","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        _validate_entities_regex(template)"},{"line_number":38,"context_line":"        _validate_conditions(template)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        # Dummy run of template loading:"},{"line_number":41,"context_line":"        schema \u003d get_template_schema(template)"},{"line_number":42,"context_line":"        V3TemplateLoader().load(schema, template)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def _validate_entities_regex(template):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_ad7514cd","line":42,"range":{"start_line":40,"start_character":8,"end_line":42,"end_character":49},"in_reply_to":"9fdfeff1_b72323bd","updated":"2019-01-28 13:06:49.000000000","message":"As part of validation, when it is finished, we try to load the template, as some validations can only be executed at loading phase.\nUpon a failure a ValidationError will be thrown, caught by a higher level.\n\nAdded code comment.","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":70,"context_line":"def _validate_condition_entity_ids(template, condition):"},{"line_number":71,"context_line":"    curr_str \u003d \u0027 \u0027 + condition + \u0027 \u0027"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    # Remove all [label] occurrences"},{"line_number":74,"context_line":"    edge_labels_re \u003d r\u0027\\s+\\[\\s*\\w+\\s*\\]\\s+\u0027"},{"line_number":75,"context_line":"    curr_str \u003d re.sub(edge_labels_re, \u0027 \u0027, curr_str)"},{"line_number":76,"context_line":"    if \u0027[\u0027 in curr_str or \u0027]\u0027 in curr_str:"},{"line_number":77,"context_line":"        raise ValidationError(85, condition)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    # Remove all operator occurrences"},{"line_number":80,"context_line":"    operators_re \u003d r\u0027\\b(AND|OR|NOT|and|or|not)\\b\u0027"},{"line_number":81,"context_line":"    curr_str \u003d re.sub(operators_re, \u0027\u0027, curr_str)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    # Remove all entity occurrences"},{"line_number":84,"context_line":"    for entity_id in template[TemplateFields.ENTITIES].keys():"},{"line_number":85,"context_line":"        entity_id_regex \u003d r\u0027\\b\u0027 + entity_id + r\u0027\\b\u0027"},{"line_number":86,"context_line":"        curr_str \u003d re.sub(entity_id_regex, \u0027 \u0027, curr_str)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    # Remove all parentheses occurrences"},{"line_number":89,"context_line":"    curr_str \u003d curr_str.replace(\u0027(\u0027, \u0027\u0027)"},{"line_number":90,"context_line":"    curr_str \u003d curr_str.replace(\u0027)\u0027, \u0027\u0027)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    # Remaining string should be empty"},{"line_number":93,"context_line":"    if curr_str.strip():"},{"line_number":94,"context_line":"        raise ValidationError(10200, condition, curr_str)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def _validate_not_condition(condition):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_970fff35","line":94,"range":{"start_line":73,"start_character":4,"end_line":94,"end_character":57},"updated":"2019-01-28 11:31:38.000000000","message":"instead of writing comments write methods with explanatory names","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"def _validate_condition_entity_ids(template, condition):"},{"line_number":71,"context_line":"    curr_str \u003d \u0027 \u0027 + condition + \u0027 \u0027"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    # Remove all [label] occurrences"},{"line_number":74,"context_line":"    edge_labels_re \u003d r\u0027\\s+\\[\\s*\\w+\\s*\\]\\s+\u0027"},{"line_number":75,"context_line":"    curr_str \u003d re.sub(edge_labels_re, \u0027 \u0027, curr_str)"},{"line_number":76,"context_line":"    if \u0027[\u0027 in curr_str or \u0027]\u0027 in curr_str:"},{"line_number":77,"context_line":"        raise ValidationError(85, condition)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    # Remove all operator occurrences"},{"line_number":80,"context_line":"    operators_re \u003d r\u0027\\b(AND|OR|NOT|and|or|not)\\b\u0027"},{"line_number":81,"context_line":"    curr_str \u003d re.sub(operators_re, \u0027\u0027, curr_str)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    # Remove all entity occurrences"},{"line_number":84,"context_line":"    for entity_id in template[TemplateFields.ENTITIES].keys():"},{"line_number":85,"context_line":"        entity_id_regex \u003d r\u0027\\b\u0027 + entity_id + r\u0027\\b\u0027"},{"line_number":86,"context_line":"        curr_str \u003d re.sub(entity_id_regex, \u0027 \u0027, curr_str)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    # Remove all parentheses occurrences"},{"line_number":89,"context_line":"    curr_str \u003d curr_str.replace(\u0027(\u0027, \u0027\u0027)"},{"line_number":90,"context_line":"    curr_str \u003d curr_str.replace(\u0027)\u0027, \u0027\u0027)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    # Remaining string should be empty"},{"line_number":93,"context_line":"    if curr_str.strip():"},{"line_number":94,"context_line":"        raise ValidationError(10200, condition, curr_str)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def _validate_not_condition(condition):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_8d2610ce","line":94,"range":{"start_line":73,"start_character":4,"end_line":94,"end_character":57},"in_reply_to":"9fdfeff1_970fff35","updated":"2019-01-28 13:06:49.000000000","message":"Because curr_str is updated at every step, I think it is more readable the way it is.","commit_id":"28243344feac299683d622c2904ec31a776db4c5"}],"vitrage/evaluator/template_validation/status_messages.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    143: \u0027A template definition file cannot contain \\\u0027includes\\\u0027 or \u0027"},{"line_number":101,"context_line":"         \u0027\\\u0027scenarios\\\u0027 blocks\u0027,"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    10100: \u0027Action must contain target field\u0027,"},{"line_number":104,"context_line":"    10101: \u0027Action target field must match an entity id\u0027,"},{"line_number":105,"context_line":"    10102: \u0027Action must contain source field\u0027,"},{"line_number":106,"context_line":"    10103: \u0027Action source field must match an entity id\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_aea2f7fa","line":103,"range":{"start_line":103,"start_character":32,"end_line":103,"end_character":38},"updated":"2019-01-27 09:05:17.000000000","message":"a target\n\nOr: a \"target\"","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    143: \u0027A template definition file cannot contain \\\u0027includes\\\u0027 or \u0027"},{"line_number":101,"context_line":"         \u0027\\\u0027scenarios\\\u0027 blocks\u0027,"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    10100: \u0027Action must contain target field\u0027,"},{"line_number":104,"context_line":"    10101: \u0027Action target field must match an entity id\u0027,"},{"line_number":105,"context_line":"    10102: \u0027Action must contain source field\u0027,"},{"line_number":106,"context_line":"    10103: \u0027Action source field must match an entity id\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_b9da3f48","line":103,"range":{"start_line":103,"start_character":32,"end_line":103,"end_character":38},"in_reply_to":"9fdfeff1_aea2f7fa","updated":"2019-01-27 15:14:01.000000000","message":"Done","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    10100: \u0027Action must contain target field\u0027,"},{"line_number":104,"context_line":"    10101: \u0027Action target field must match an entity id\u0027,"},{"line_number":105,"context_line":"    10102: \u0027Action must contain source field\u0027,"},{"line_number":106,"context_line":"    10103: \u0027Action source field must match an entity id\u0027,"},{"line_number":107,"context_line":"    10104: \u0027raise_alarm action must contain alarm_name field\u0027,"},{"line_number":108,"context_line":"    10105: \u0027execute_mistral action must contain workflow name field\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_cea73b0b","line":105,"range":{"start_line":105,"start_character":32,"end_line":105,"end_character":38},"updated":"2019-01-27 09:05:17.000000000","message":"a source","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    10100: \u0027Action must contain target field\u0027,"},{"line_number":104,"context_line":"    10101: \u0027Action target field must match an entity id\u0027,"},{"line_number":105,"context_line":"    10102: \u0027Action must contain source field\u0027,"},{"line_number":106,"context_line":"    10103: \u0027Action source field must match an entity id\u0027,"},{"line_number":107,"context_line":"    10104: \u0027raise_alarm action must contain alarm_name field\u0027,"},{"line_number":108,"context_line":"    10105: \u0027execute_mistral action must contain workflow name field\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_19da6b4b","line":105,"range":{"start_line":105,"start_character":32,"end_line":105,"end_character":38},"in_reply_to":"9fdfeff1_cea73b0b","updated":"2019-01-27 15:14:01.000000000","message":"Done","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    10101: \u0027Action target field must match an entity id\u0027,"},{"line_number":105,"context_line":"    10102: \u0027Action must contain source field\u0027,"},{"line_number":106,"context_line":"    10103: \u0027Action source field must match an entity id\u0027,"},{"line_number":107,"context_line":"    10104: \u0027raise_alarm action must contain alarm_name field\u0027,"},{"line_number":108,"context_line":"    10105: \u0027execute_mistral action must contain workflow name field\u0027,"},{"line_number":109,"context_line":"    10107: \u0027raise_alarm field causing_alarm must match an entity id\u0027,"},{"line_number":110,"context_line":"    10200: \u0027Condition contains an unknown entity id\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_0ea223fe","line":107,"range":{"start_line":107,"start_character":44,"end_line":107,"end_character":54},"updated":"2019-01-27 09:05:17.000000000","message":"an alarm_name","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    10101: \u0027Action target field must match an entity id\u0027,"},{"line_number":105,"context_line":"    10102: \u0027Action must contain source field\u0027,"},{"line_number":106,"context_line":"    10103: \u0027Action source field must match an entity id\u0027,"},{"line_number":107,"context_line":"    10104: \u0027raise_alarm action must contain alarm_name field\u0027,"},{"line_number":108,"context_line":"    10105: \u0027execute_mistral action must contain workflow name field\u0027,"},{"line_number":109,"context_line":"    10107: \u0027raise_alarm field causing_alarm must match an entity id\u0027,"},{"line_number":110,"context_line":"    10200: \u0027Condition contains an unknown entity id\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_f9d44722","line":107,"range":{"start_line":107,"start_character":44,"end_line":107,"end_character":54},"in_reply_to":"9fdfeff1_0ea223fe","updated":"2019-01-27 15:14:01.000000000","message":"Done","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    10102: \u0027Action must contain source field\u0027,"},{"line_number":106,"context_line":"    10103: \u0027Action source field must match an entity id\u0027,"},{"line_number":107,"context_line":"    10104: \u0027raise_alarm action must contain alarm_name field\u0027,"},{"line_number":108,"context_line":"    10105: \u0027execute_mistral action must contain workflow name field\u0027,"},{"line_number":109,"context_line":"    10107: \u0027raise_alarm field causing_alarm must match an entity id\u0027,"},{"line_number":110,"context_line":"    10200: \u0027Condition contains an unknown entity id\u0027,"},{"line_number":111,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_6eb08f44","line":108,"range":{"start_line":108,"start_character":48,"end_line":108,"end_character":61},"updated":"2019-01-27 09:05:17.000000000","message":"a \"workflow\".\nI think that workflow name might be confusing - it should be clear what the filed name is.\nAnd BTW, maybe you should write \u0027property\u0027 instead of \u0027field\u0027 everywhere","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    10102: \u0027Action must contain source field\u0027,"},{"line_number":106,"context_line":"    10103: \u0027Action source field must match an entity id\u0027,"},{"line_number":107,"context_line":"    10104: \u0027raise_alarm action must contain alarm_name field\u0027,"},{"line_number":108,"context_line":"    10105: \u0027execute_mistral action must contain workflow name field\u0027,"},{"line_number":109,"context_line":"    10107: \u0027raise_alarm field causing_alarm must match an entity id\u0027,"},{"line_number":110,"context_line":"    10200: \u0027Condition contains an unknown entity id\u0027,"},{"line_number":111,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_5916b3f3","line":108,"range":{"start_line":108,"start_character":48,"end_line":108,"end_character":61},"in_reply_to":"9fdfeff1_6eb08f44","updated":"2019-01-27 15:14:01.000000000","message":"Done","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    10103: \u0027Action source field must match an entity id\u0027,"},{"line_number":107,"context_line":"    10104: \u0027raise_alarm action must contain alarm_name field\u0027,"},{"line_number":108,"context_line":"    10105: \u0027execute_mistral action must contain workflow name field\u0027,"},{"line_number":109,"context_line":"    10107: \u0027raise_alarm field causing_alarm must match an entity id\u0027,"},{"line_number":110,"context_line":"    10200: \u0027Condition contains an unknown entity id\u0027,"},{"line_number":111,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_8eadb3ea","line":109,"range":{"start_line":109,"start_character":12,"end_line":109,"end_character":43},"updated":"2019-01-27 09:05:17.000000000","message":"Complex sentence :-) How about \"The field causing_alarm in raise_alarm action...\"","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    10103: \u0027Action source field must match an entity id\u0027,"},{"line_number":107,"context_line":"    10104: \u0027raise_alarm action must contain alarm_name field\u0027,"},{"line_number":108,"context_line":"    10105: \u0027execute_mistral action must contain workflow name field\u0027,"},{"line_number":109,"context_line":"    10107: \u0027raise_alarm field causing_alarm must match an entity id\u0027,"},{"line_number":110,"context_line":"    10200: \u0027Condition contains an unknown entity id\u0027,"},{"line_number":111,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_39196f21","line":109,"range":{"start_line":109,"start_character":12,"end_line":109,"end_character":43},"in_reply_to":"9fdfeff1_8eadb3ea","updated":"2019-01-27 15:14:01.000000000","message":"Done","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"}],"vitrage/evaluator/template_validation/template_syntax_validator.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 - Nokia"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_2eb60740","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":24},"updated":"2019-01-27 09:05:17.000000000","message":"Is this file used by version 3, or only by version 1 and 2?\nMaybe you should move it under a v1 folder","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"}],"vitrage/evaluator/template_validation/template_syntax_validator_v3.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 - Nokia"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_4eb34b4e","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2019-01-27 09:05:17.000000000","message":"2019, and it should be placed under a v3 folder","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 - Nokia"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_99e5fb0b","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"9fdfeff1_4eb34b4e","updated":"2019-01-27 15:14:01.000000000","message":"I want to handle the folder structure in a different commit.","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @staticmethod"},{"line_number":43,"context_line":"    def validate(template):"},{"line_number":44,"context_line":"        if template.get(base.EXCEPTION):"},{"line_number":45,"context_line":"            raise ValidationError(5, template.get(base.EXCEPTION))"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        Schema({"},{"line_number":48,"context_line":"            Required(TFields.ENTITIES, msg\u003d10000): _entities_schema(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_ee855f5b","line":45,"range":{"start_line":44,"start_character":0,"end_line":45,"end_character":66},"updated":"2019-01-27 09:05:17.000000000","message":"When does this happen?","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @staticmethod"},{"line_number":43,"context_line":"    def validate(template):"},{"line_number":44,"context_line":"        if template.get(base.EXCEPTION):"},{"line_number":45,"context_line":"            raise ValidationError(5, template.get(base.EXCEPTION))"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        Schema({"},{"line_number":48,"context_line":"            Required(TFields.ENTITIES, msg\u003d10000): _entities_schema(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_39c72f67","line":45,"range":{"start_line":44,"start_character":0,"end_line":45,"end_character":66},"in_reply_to":"9fdfeff1_ee855f5b","updated":"2019-01-27 15:14:01.000000000","message":"Removed this, apparently only in tests, thanks.","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    return Schema(["},{"line_number":74,"context_line":"        Schema({"},{"line_number":75,"context_line":"            Required(\u0027actions\u0027, msg\u003d84): Schema([Any("},{"line_number":76,"context_line":"                _raise_alarm_schema(template),"},{"line_number":77,"context_line":"                _set_state_schema(template),"},{"line_number":78,"context_line":"                _add_causal_relationship_schema(template),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_6e996fc2","line":75,"range":{"start_line":75,"start_character":36,"end_line":75,"end_character":38},"updated":"2019-01-27 09:05:17.000000000","message":"Not related to this file, but I think the descriptions of statuses 83 and 84 should be changed... from \u0027Entity\u0027 to \u0027Scenario\u0027","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    return Schema(["},{"line_number":74,"context_line":"        Schema({"},{"line_number":75,"context_line":"            Required(\u0027actions\u0027, msg\u003d84): Schema([Any("},{"line_number":76,"context_line":"                _raise_alarm_schema(template),"},{"line_number":77,"context_line":"                _set_state_schema(template),"},{"line_number":78,"context_line":"                _add_causal_relationship_schema(template),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_19a82b8b","line":75,"range":{"start_line":75,"start_character":36,"end_line":75,"end_character":38},"in_reply_to":"9fdfeff1_6e996fc2","updated":"2019-01-27 15:14:01.000000000","message":"Done","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"a2e232cd5b4bbc3980dd54217cba650823c30ea9","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                _mark_down_schema(template),"},{"line_number":75,"context_line":"                _execute_mistral_schema(),"},{"line_number":76,"context_line":"            )]),"},{"line_number":77,"context_line":"            Required(\u0027condition\u0027, msg\u003d83): any_str,"},{"line_number":78,"context_line":"        })])"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_51da024c","line":77,"range":{"start_line":77,"start_character":22,"end_line":77,"end_character":31},"updated":"2019-01-28 13:29:17.000000000","message":"these template block fields aren\u0027t constants ?!","commit_id":"e804a41adf1c859ea56cd8590614a99da720f128"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f56bf4a5d6b94a6b22382828cd1fe87924f34b6e","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                _mark_down_schema(template),"},{"line_number":75,"context_line":"                _execute_mistral_schema(),"},{"line_number":76,"context_line":"            )]),"},{"line_number":77,"context_line":"            Required(\u0027condition\u0027, msg\u003d83): any_str,"},{"line_number":78,"context_line":"        })])"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_d1d912f3","line":77,"range":{"start_line":77,"start_character":22,"end_line":77,"end_character":31},"in_reply_to":"9fdfeff1_51da024c","updated":"2019-01-28 14:01:35.000000000","message":"You are correct, fixed","commit_id":"e804a41adf1c859ea56cd8590614a99da720f128"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"dc2f4061f8c7dcc64a5aa4ac950aa3a0be22bc1c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from vitrage.evaluator.actions.recipes.execute_mistral import INPUT"},{"line_number":28,"context_line":"from vitrage.evaluator.actions.recipes.execute_mistral import WORKFLOW"},{"line_number":29,"context_line":"from vitrage.evaluator.base import is_function"},{"line_number":30,"context_line":"from vitrage.evaluator.template_fields import TemplateFields as TF"},{"line_number":31,"context_line":"from vitrage.evaluator.template_schema_factory import TemplateSchemaFactory"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_6a805b47","line":30,"range":{"start_line":30,"start_character":64,"end_line":30,"end_character":66},"updated":"2019-01-29 11:47:31.000000000","message":"I really prefer TFields :-) TF doesn\u0027t mean anything","commit_id":"a859882b470c9f8062ba3a6639bdd701ce133963"}],"vitrage/graph/filter.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        if not isinstance(content, list):"},{"line_number":34,"context_line":"            content \u003d [content]"},{"line_number":35,"context_line":"        if data.get(key) not in content:"},{"line_number":36,"context_line":"            if key.lower().endswith(\u0027.regex\u0027):"},{"line_number":37,"context_line":"                new_key \u003d key[:-len(\u0027.regex\u0027)]"},{"line_number":38,"context_line":"                if not check_property_with_regex(new_key, content[0],"},{"line_number":39,"context_line":"                                                 data):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_2e8fe775","line":36,"range":{"start_line":36,"start_character":37,"end_line":36,"end_character":43},"updated":"2019-01-27 09:05:17.000000000","message":"Why did you change it?","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        if not isinstance(content, list):"},{"line_number":34,"context_line":"            content \u003d [content]"},{"line_number":35,"context_line":"        if data.get(key) not in content:"},{"line_number":36,"context_line":"            if key.lower().endswith(\u0027.regex\u0027):"},{"line_number":37,"context_line":"                new_key \u003d key[:-len(\u0027.regex\u0027)]"},{"line_number":38,"context_line":"                if not check_property_with_regex(new_key, content[0],"},{"line_number":39,"context_line":"                                                 data):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_9993bb5b","line":36,"range":{"start_line":36,"start_character":37,"end_line":36,"end_character":43},"in_reply_to":"9fdfeff1_2e8fe775","updated":"2019-01-27 15:14:01.000000000","message":"This caused a circular import when imported by the tempest.\nThe import is removed, has there is no reason for this module to be dependent on the evaluator (that indirectly uses this module.)","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"dc2f4061f8c7dcc64a5aa4ac950aa3a0be22bc1c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        if not isinstance(content, list):"},{"line_number":34,"context_line":"            content \u003d [content]"},{"line_number":35,"context_line":"        if data.get(key) not in content:"},{"line_number":36,"context_line":"            if key.lower().endswith(\u0027.regex\u0027):"},{"line_number":37,"context_line":"                new_key \u003d key[:-len(\u0027.regex\u0027)]"},{"line_number":38,"context_line":"                if not check_property_with_regex(new_key, content[0],"},{"line_number":39,"context_line":"                                                 data):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_2a6813b7","line":36,"range":{"start_line":36,"start_character":37,"end_line":36,"end_character":43},"in_reply_to":"9fdfeff1_9993bb5b","updated":"2019-01-29 11:47:31.000000000","message":"Well, obviously the problem is that the tempest imports this code...","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        if not isinstance(content, list):"},{"line_number":34,"context_line":"            content \u003d [content]"},{"line_number":35,"context_line":"        if data.get(key) not in content:"},{"line_number":36,"context_line":"            if key.lower().endswith(\u0027.regex\u0027):"},{"line_number":37,"context_line":"                new_key \u003d key[:-len(\u0027.regex\u0027)]"},{"line_number":38,"context_line":"                if not check_property_with_regex(new_key, content[0],"},{"line_number":39,"context_line":"                                                 data):"},{"line_number":40,"context_line":"                    return False"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_b23a51c9","line":37,"range":{"start_line":36,"start_character":37,"end_line":37,"end_character":44},"updated":"2019-01-28 11:31:38.000000000","message":"maybe write a comment why not using a constant\nor add #TODO","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        if not isinstance(content, list):"},{"line_number":34,"context_line":"            content \u003d [content]"},{"line_number":35,"context_line":"        if data.get(key) not in content:"},{"line_number":36,"context_line":"            if key.lower().endswith(\u0027.regex\u0027):"},{"line_number":37,"context_line":"                new_key \u003d key[:-len(\u0027.regex\u0027)]"},{"line_number":38,"context_line":"                if not check_property_with_regex(new_key, content[0],"},{"line_number":39,"context_line":"                                                 data):"},{"line_number":40,"context_line":"                    return False"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_ad23d4bc","line":37,"range":{"start_line":36,"start_character":37,"end_line":37,"end_character":44},"in_reply_to":"9fdfeff1_b23a51c9","updated":"2019-01-28 13:06:49.000000000","message":"Done","commit_id":"28243344feac299683d622c2904ec31a776db4c5"}],"vitrage/tests/mocks/graph_generator.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"6783c2e695f935b77b8bd9fb1a1d52266946049d","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                v \u003d self._file_to_vertex(neighbor_props_file, i)"},{"line_number":133,"context_line":"                v[VProps.NAME] \u003d v[VProps.NAME] + \"-\" + source_v[VProps.NAME]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"                if v.get(VProps.VITRAGE_TYPE) \u003d\u003d \u0027nova.host\u0027:"},{"line_number":136,"context_line":"                    v[VProps.ID] \u003d v.get(VProps.NAME)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"                created_vertices.append(v)"},{"line_number":139,"context_line":"                g.add_vertex(v)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_b1f041cb","line":136,"range":{"start_line":135,"start_character":13,"end_line":136,"end_character":53},"updated":"2019-01-24 13:30:09.000000000","message":"this is to openstack specific maybe create a mapper that will map the name without the knowledge of openstack","commit_id":"79bc84d83e094fbe84f81d1d79fe7d1f314ecb4c"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"0b1f1158b9d126ea3a8d0e484156e9618eb64af0","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                v \u003d self._file_to_vertex(neighbor_props_file, i)"},{"line_number":133,"context_line":"                v[VProps.NAME] \u003d v[VProps.NAME] + \"-\" + source_v[VProps.NAME]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"                if v.get(VProps.VITRAGE_TYPE) \u003d\u003d \u0027nova.host\u0027:"},{"line_number":136,"context_line":"                    v[VProps.ID] \u003d v.get(VProps.NAME)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"                created_vertices.append(v)"},{"line_number":139,"context_line":"                g.add_vertex(v)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_6c0520c2","line":136,"range":{"start_line":135,"start_character":13,"end_line":136,"end_character":53},"in_reply_to":"9fdfeff1_b1f041cb","updated":"2019-01-24 14:16:29.000000000","message":"This mock generates an openstack specific graph","commit_id":"79bc84d83e094fbe84f81d1d79fe7d1f314ecb4c"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                v \u003d self._file_to_vertex(neighbor_props_file, i)"},{"line_number":133,"context_line":"                v[VProps.NAME] \u003d v[VProps.NAME] + \"-\" + source_v[VProps.NAME]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"                if v.get(VProps.VITRAGE_TYPE) \u003d\u003d \u0027nova.host\u0027:"},{"line_number":136,"context_line":"                    v[VProps.ID] \u003d v.get(VProps.NAME)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"                created_vertices.append(v)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_f259b934","line":135,"range":{"start_line":135,"start_character":50,"end_line":135,"end_character":59},"updated":"2019-01-28 11:31:38.000000000","message":"I think there is a constant for this","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                v \u003d self._file_to_vertex(neighbor_props_file, i)"},{"line_number":133,"context_line":"                v[VProps.NAME] \u003d v[VProps.NAME] + \"-\" + source_v[VProps.NAME]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"                if v.get(VProps.VITRAGE_TYPE) \u003d\u003d \u0027nova.host\u0027:"},{"line_number":136,"context_line":"                    v[VProps.ID] \u003d v.get(VProps.NAME)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"                created_vertices.append(v)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_b1148e45","line":135,"range":{"start_line":135,"start_character":50,"end_line":135,"end_character":59},"in_reply_to":"9fdfeff1_f259b934","updated":"2019-01-28 13:06:49.000000000","message":"Done","commit_id":"28243344feac299683d622c2904ec31a776db4c5"}],"vitrage/tests/resources/templates/v3_templates/valid_actions.yaml":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"6783c2e695f935b77b8bd9fb1a1d52266946049d","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        workflow: wf_1234"},{"line_number":33,"context_line":"        input:"},{"line_number":34,"context_line":"         farewell: get_attr(host, name) bla bla"},{"line_number":35,"context_line":" - condition: host_network_alarm [ on ] host AND host_ssh_alarm [ on ] host"},{"line_number":36,"context_line":"   actions:"},{"line_number":37,"context_line":"     - add_causal_relationship:"},{"line_number":38,"context_line":"        source: host_network_alarm"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"9fdfeff1_f17d691c","line":35,"range":{"start_line":35,"start_character":45,"end_line":35,"end_character":48},"updated":"2019-01-24 13:30:09.000000000","message":"I would write also \"and\" to check the case insensitive case","commit_id":"79bc84d83e094fbe84f81d1d79fe7d1f314ecb4c"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"0b1f1158b9d126ea3a8d0e484156e9618eb64af0","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        workflow: wf_1234"},{"line_number":33,"context_line":"        input:"},{"line_number":34,"context_line":"         farewell: get_attr(host, name) bla bla"},{"line_number":35,"context_line":" - condition: host_network_alarm [ on ] host AND host_ssh_alarm [ on ] host"},{"line_number":36,"context_line":"   actions:"},{"line_number":37,"context_line":"     - add_causal_relationship:"},{"line_number":38,"context_line":"        source: host_network_alarm"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"9fdfeff1_0cf494ce","line":35,"range":{"start_line":35,"start_character":45,"end_line":35,"end_character":48},"in_reply_to":"9fdfeff1_f17d691c","updated":"2019-01-24 14:16:29.000000000","message":"There is another template file to verify valid conditions:\ntests/resources/templates/v3_templates/valid_conditions.yaml","commit_id":"79bc84d83e094fbe84f81d1d79fe7d1f314ecb4c"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":51,"context_line":"   actions:"},{"line_number":52,"context_line":"     - mark_down:"},{"line_number":53,"context_line":"        target: host"},{"line_number":54,"context_line":" - condition: host"},{"line_number":55,"context_line":"   actions:"},{"line_number":56,"context_line":"     - mark_down:"},{"line_number":57,"context_line":"        target: host"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9fdfeff1_4e8cab7e","line":54,"range":{"start_line":54,"start_character":14,"end_line":54,"end_character":18},"updated":"2019-01-27 09:05:17.000000000","message":"For testing it is ok; but in general it is not a good template example. You don\u0027t want to mark the host as down simply because it exists...","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":51,"context_line":"   actions:"},{"line_number":52,"context_line":"     - mark_down:"},{"line_number":53,"context_line":"        target: host"},{"line_number":54,"context_line":" - condition: host"},{"line_number":55,"context_line":"   actions:"},{"line_number":56,"context_line":"     - mark_down:"},{"line_number":57,"context_line":"        target: host"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9fdfeff1_5999d376","line":54,"range":{"start_line":54,"start_character":14,"end_line":54,"end_character":18},"in_reply_to":"9fdfeff1_4e8cab7e","updated":"2019-01-27 15:14:01.000000000","message":"+1","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"}],"vitrage/tests/resources/templates/v3_templates/valid_conditions.yaml":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":25,"context_line":"   actions:"},{"line_number":26,"context_line":"     - mark_down:"},{"line_number":27,"context_line":"        target: host"},{"line_number":28,"context_line":" - condition: host OR host or host and instance AND instance"},{"line_number":29,"context_line":"   actions:"},{"line_number":30,"context_line":"     - mark_down:"},{"line_number":31,"context_line":"        target: host"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9fdfeff1_0ef0e3fd","line":28,"range":{"start_line":28,"start_character":14,"end_line":28,"end_character":60},"updated":"2019-01-27 09:05:17.000000000","message":"I\u0027m actually not sure what to expect in this condition :-)","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":25,"context_line":"   actions:"},{"line_number":26,"context_line":"     - mark_down:"},{"line_number":27,"context_line":"        target: host"},{"line_number":28,"context_line":" - condition: host OR host or host and instance AND instance"},{"line_number":29,"context_line":"   actions:"},{"line_number":30,"context_line":"     - mark_down:"},{"line_number":31,"context_line":"        target: host"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9fdfeff1_f98be71b","line":28,"range":{"start_line":28,"start_character":14,"end_line":28,"end_character":60},"in_reply_to":"9fdfeff1_0ef0e3fd","updated":"2019-01-27 15:14:01.000000000","message":"Neither do I ;)","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"}],"vitrage/tests/unit/evaluator/__init__.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def get_template_data(template, def_templates\u003dNone):"},{"line_number":19,"context_line":"    schema \u003d get_template_schema(template)"},{"line_number":20,"context_line":"    template_loader \u003d schema.loaders.get(TEMPLATE_LOADER)"},{"line_number":21,"context_line":"    return template_loader.load(schema, template, def_templates)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_327d017f","line":20,"range":{"start_line":20,"start_character":37,"end_line":20,"end_character":42},"updated":"2019-01-28 11:31:38.000000000","message":"maybe use []","commit_id":"28243344feac299683d622c2904ec31a776db4c5"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"f68b489b623b9e36cbf1991a9f748686e325004e","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def get_template_data(template, def_templates\u003dNone):"},{"line_number":19,"context_line":"    schema \u003d get_template_schema(template)"},{"line_number":20,"context_line":"    template_loader \u003d schema.loaders.get(TEMPLATE_LOADER)"},{"line_number":21,"context_line":"    return template_loader.load(schema, template, def_templates)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_d1111254","line":20,"range":{"start_line":20,"start_character":37,"end_line":20,"end_character":42},"in_reply_to":"9fdfeff1_327d017f","updated":"2019-01-28 13:06:49.000000000","message":"Done","commit_id":"28243344feac299683d622c2904ec31a776db4c5"}],"vitrage/tests/unit/evaluator/template_loading/test_template_loading_v3.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        # Basic"},{"line_number":76,"context_line":"        self.assertEqual(expected.id, observed.id)"},{"line_number":77,"context_line":"        self.assertEqual(expected.version, observed.version)"},{"line_number":78,"context_line":"        self.assertEqual(expected.condition, observed.condition)  # is None"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        # Actions"},{"line_number":81,"context_line":"        self.assertEqual(len(expected.actions), len(observed.actions),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_aef0b7fe","line":78,"range":{"start_line":78,"start_character":64,"end_line":78,"end_character":75},"updated":"2019-01-27 09:05:17.000000000","message":"What is this comment?","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"dc2f4061f8c7dcc64a5aa4ac950aa3a0be22bc1c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        # Basic"},{"line_number":76,"context_line":"        self.assertEqual(expected.id, observed.id)"},{"line_number":77,"context_line":"        self.assertEqual(expected.version, observed.version)"},{"line_number":78,"context_line":"        self.assertEqual(expected.condition, observed.condition)  # is None"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        # Actions"},{"line_number":81,"context_line":"        self.assertEqual(len(expected.actions), len(observed.actions),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_8a9c9fc0","line":78,"range":{"start_line":78,"start_character":64,"end_line":78,"end_character":75},"in_reply_to":"9fdfeff1_19910b4f","updated":"2019-01-29 11:47:31.000000000","message":"Thanks for the explanation, I don\u0027t think that this comment is clear","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        # Basic"},{"line_number":76,"context_line":"        self.assertEqual(expected.id, observed.id)"},{"line_number":77,"context_line":"        self.assertEqual(expected.version, observed.version)"},{"line_number":78,"context_line":"        self.assertEqual(expected.condition, observed.condition)  # is None"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        # Actions"},{"line_number":81,"context_line":"        self.assertEqual(len(expected.actions), len(observed.actions),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_19910b4f","line":78,"range":{"start_line":78,"start_character":64,"end_line":78,"end_character":75},"in_reply_to":"9fdfeff1_aef0b7fe","updated":"2019-01-27 15:14:01.000000000","message":"The expected value here is None, just pointing it out.","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.assertEqual(len(expected.actions), len(observed.actions),"},{"line_number":82,"context_line":"                         \u0027actions count\u0027)"},{"line_number":83,"context_line":"        for j in range(len(expected.actions)):"},{"line_number":84,"context_line":"            expected_action \u003d expected.actions[j]"},{"line_number":85,"context_line":"            observed_action \u003d observed.actions[j]"},{"line_number":86,"context_line":"            self.assertEqual(expected_action.id, observed_action.id)"},{"line_number":87,"context_line":"            self.assertEqual(expected_action.type, observed_action.type)"},{"line_number":88,"context_line":"            self.assertEqual(expected_action.properties,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_cef5fbee","line":85,"range":{"start_line":84,"start_character":0,"end_line":85,"end_character":49},"updated":"2019-01-27 09:05:17.000000000","message":"Will they always be in the same order?","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.assertEqual(len(expected.actions), len(observed.actions),"},{"line_number":82,"context_line":"                         \u0027actions count\u0027)"},{"line_number":83,"context_line":"        for j in range(len(expected.actions)):"},{"line_number":84,"context_line":"            expected_action \u003d expected.actions[j]"},{"line_number":85,"context_line":"            observed_action \u003d observed.actions[j]"},{"line_number":86,"context_line":"            self.assertEqual(expected_action.id, observed_action.id)"},{"line_number":87,"context_line":"            self.assertEqual(expected_action.type, observed_action.type)"},{"line_number":88,"context_line":"            self.assertEqual(expected_action.properties,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_b981dffd","line":85,"range":{"start_line":84,"start_character":0,"end_line":85,"end_character":49},"in_reply_to":"9fdfeff1_cef5fbee","updated":"2019-01-27 15:14:01.000000000","message":"Yap, the same as in the template.","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ea81f9a5852d28aa947fdeb872ed930f9843aa97","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            self.assertEqual(expected_action.properties,"},{"line_number":89,"context_line":"                             observed_action.properties)"},{"line_number":90,"context_line":"            if expected_action.type \u003d\u003d \u0027execute_mistral\u0027:"},{"line_number":91,"context_line":"                continue"},{"line_number":92,"context_line":"            self.assertEqual(expected_action.targets, observed_action.targets)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        # Subgraphs"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_6ede4f6e","line":91,"range":{"start_line":91,"start_character":16,"end_line":91,"end_character":24},"updated":"2019-01-27 09:05:17.000000000","message":"TODO?","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"17e1847bf40ae724f5aa1945a76aae5b60ab63c0","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            self.assertEqual(expected_action.properties,"},{"line_number":89,"context_line":"                             observed_action.properties)"},{"line_number":90,"context_line":"            if expected_action.type \u003d\u003d \u0027execute_mistral\u0027:"},{"line_number":91,"context_line":"                continue"},{"line_number":92,"context_line":"            self.assertEqual(expected_action.targets, observed_action.targets)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        # Subgraphs"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_d9862314","line":91,"range":{"start_line":91,"start_character":16,"end_line":91,"end_character":24},"in_reply_to":"9fdfeff1_6ede4f6e","updated":"2019-01-27 15:14:01.000000000","message":"Nope, if \u0027execute_mistral\u0027 we want to skip the next assertions. (As it\u0027s target is arbitrary)","commit_id":"1f0ff7d1656a347b5bcd45c5866b07f35641a802"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4d1bf9827ab3cdfb3d5a3af1041788b08c679e72","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9fdfeff1_32a2e1fe","updated":"2019-01-28 11:31:38.000000000","message":"I think expected values should constants at the top of the file","commit_id":"28243344feac299683d622c2904ec31a776db4c5"}]}
