)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"10a66ed5bc8b570d2294a4d12fc845d4811b8d62","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support  multiprocessing parallel evaluation of Vitrage templates."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Per event template matching runs in parallel, using N EvaluatorWorkers each holding a copy of the graph and executing different templates."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I9d777fde1ea2bc3155c3eca8a30877aedd669081"},{"line_number":12,"context_line":"Implements: blueprint parallel-evaluation"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3f4b6375_5b473978","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":70},"updated":"2017-10-27 07:02:19.000000000","message":"Trivial thing but wrapping the commit message will make it easier for reviewers.","commit_id":"3471970c9070f59bcce9e9ac1d74370e90b587f6"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"19cbfe2c2da1a279ee3950c11a886fc9f43f330a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support  multiprocessing parallel evaluation of Vitrage templates."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Per event template matching runs in parallel, using N EvaluatorWorkers each holding a copy of the graph and executing different templates."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I9d777fde1ea2bc3155c3eca8a30877aedd669081"},{"line_number":12,"context_line":"Implements: blueprint parallel-evaluation"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3f4b6375_45ea96ac","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":70},"in_reply_to":"3f4b6375_5b473978","updated":"2017-10-29 09:09:06.000000000","message":"Tnx","commit_id":"3471970c9070f59bcce9e9ac1d74370e90b587f6"}],"vitrage/common/utils.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6a5400589a32a519de12d28b29f8beae0669505d","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    return profiled_func"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def get_portion(lst, num_of_portions, portion_index):"},{"line_number":60,"context_line":"    \"\"\"Split a list into n slices and return the i\u0027th slice"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    :rtype: list"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_4d7c631e","line":59,"range":{"start_line":59,"start_character":4,"end_line":59,"end_character":15},"updated":"2017-10-25 07:26:03.000000000","message":"Are you sure it should be a common utility function? who else is going to use it, besides the evaluator?","commit_id":"91aef5ea45401b64afa6b6a335b8ba437e96f018"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"96b227d434b318d2efd8df8ca7fdd9d2ff2de1ff","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    return profiled_func"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def get_portion(lst, num_of_portions, portion_index):"},{"line_number":60,"context_line":"    \"\"\"Split a list into n slices and return the i\u0027th slice"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    :rtype: list"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_89710479","line":59,"range":{"start_line":59,"start_character":4,"end_line":59,"end_character":15},"in_reply_to":"3f4b6375_4d7c631e","updated":"2017-10-26 12:16:30.000000000","message":"It is generic for any list, i think it makes less mess here than in the scenario repository","commit_id":"91aef5ea45401b64afa6b6a335b8ba437e96f018"}],"vitrage/evaluator/scenario_evaluator.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"9a4afe04909763d156a56c137e8924f10ac91117","unresolved":false,"context_lines":[{"line_number":449,"context_line":"        # TODO(idan_hefetz): DB read and write not in a transaction"},{"line_number":450,"context_line":"        exists \u003d False"},{"line_number":451,"context_line":"        active_actions \u003d self._query_similar_actions(action_info)"},{"line_number":452,"context_line":"        for a in active_actions:"},{"line_number":453,"context_line":"            if a.action_id \u003d\u003d action_info.action_id \\"},{"line_number":454,"context_line":"                    and a.trigger \u003d\u003d action_info.trigger_id:"},{"line_number":455,"context_line":"                exists \u003d True"},{"line_number":456,"context_line":"        if not exists:"},{"line_number":457,"context_line":"            db_row \u003d self._to_db_row(action_info)"},{"line_number":458,"context_line":"            active_actions.append(db_row)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_b53d78c5","line":455,"range":{"start_line":452,"start_character":8,"end_line":455,"end_character":29},"updated":"2017-10-24 12:11:47.000000000","message":"use find","commit_id":"eb6dc9576688d141830e10078b1c9618724c43c1"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"d9826daa9f06513382bc064e24cff7145e841c27","unresolved":false,"context_lines":[{"line_number":449,"context_line":"        # TODO(idan_hefetz): DB read and write not in a transaction"},{"line_number":450,"context_line":"        exists \u003d False"},{"line_number":451,"context_line":"        active_actions \u003d self._query_similar_actions(action_info)"},{"line_number":452,"context_line":"        for a in active_actions:"},{"line_number":453,"context_line":"            if a.action_id \u003d\u003d action_info.action_id \\"},{"line_number":454,"context_line":"                    and a.trigger \u003d\u003d action_info.trigger_id:"},{"line_number":455,"context_line":"                exists \u003d True"},{"line_number":456,"context_line":"        if not exists:"},{"line_number":457,"context_line":"            db_row \u003d self._to_db_row(action_info)"},{"line_number":458,"context_line":"            active_actions.append(db_row)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_a0d9b8f3","line":455,"range":{"start_line":452,"start_character":8,"end_line":455,"end_character":29},"in_reply_to":"3f4b6375_b53d78c5","updated":"2017-10-24 12:49:13.000000000","message":"Done","commit_id":"eb6dc9576688d141830e10078b1c9618724c43c1"}],"vitrage/evaluator/scenario_repository.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"9a4afe04909763d156a56c137e8924f10ac91117","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        scenarios \u003d []"},{"line_number":91,"context_line":"        for scenario_key, value in self.entity_scenarios.items():"},{"line_number":92,"context_line":"            if scenario_key.issubset(entity_key):"},{"line_number":93,"context_line":"                scenarios +\u003d [(e, s) for e, s in value if s.enabled]"},{"line_number":94,"context_line":"        return scenarios"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def get_scenarios_by_edge(self, edge_description):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_359d08bc","line":93,"range":{"start_line":93,"start_character":29,"end_line":93,"end_character":68},"updated":"2017-10-24 12:11:47.000000000","message":"this repeated itself maybe create a method","commit_id":"eb6dc9576688d141830e10078b1c9618724c43c1"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"d9826daa9f06513382bc064e24cff7145e841c27","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        scenarios \u003d []"},{"line_number":91,"context_line":"        for scenario_key, value in self.entity_scenarios.items():"},{"line_number":92,"context_line":"            if scenario_key.issubset(entity_key):"},{"line_number":93,"context_line":"                scenarios +\u003d [(e, s) for e, s in value if s.enabled]"},{"line_number":94,"context_line":"        return scenarios"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def get_scenarios_by_edge(self, edge_description):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_80e23c9f","line":93,"range":{"start_line":93,"start_character":29,"end_line":93,"end_character":68},"in_reply_to":"3f4b6375_359d08bc","updated":"2017-10-24 12:49:13.000000000","message":"i think it is clearer this way","commit_id":"eb6dc9576688d141830e10078b1c9618724c43c1"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6a5400589a32a519de12d28b29f8beae0669505d","unresolved":false,"context_lines":[{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        scenarios \u003d self._all_scenarios if \\"},{"line_number":253,"context_line":"            worker_ind is None or n is None else\\"},{"line_number":254,"context_line":"            get_portion(self._all_scenarios, n, worker_ind)"},{"line_number":255,"context_line":"        for s in scenarios:"},{"line_number":256,"context_line":"            s.enabled \u003d True"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_6d75df63","line":254,"range":{"start_line":254,"start_character":12,"end_line":254,"end_character":23},"updated":"2017-10-25 07:26:03.000000000","message":"Do you assume that get_portion will be deterministic and will split the array to the exact same portions for all workers?","commit_id":"91aef5ea45401b64afa6b6a335b8ba437e96f018"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"96b227d434b318d2efd8df8ca7fdd9d2ff2de1ff","unresolved":false,"context_lines":[{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        scenarios \u003d self._all_scenarios if \\"},{"line_number":253,"context_line":"            worker_ind is None or n is None else\\"},{"line_number":254,"context_line":"            get_portion(self._all_scenarios, n, worker_ind)"},{"line_number":255,"context_line":"        for s in scenarios:"},{"line_number":256,"context_line":"            s.enabled \u003d True"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_b76e60fd","line":254,"range":{"start_line":254,"start_character":12,"end_line":254,"end_character":23},"in_reply_to":"3f4b6375_6d75df63","updated":"2017-10-26 12:16:30.000000000","message":"Yup, this behavior is covered by a unit test.","commit_id":"91aef5ea45401b64afa6b6a335b8ba437e96f018"}],"vitrage/evaluator/service_evaluator.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"9a4afe04909763d156a56c137e8924f10ac91117","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def run_evaluator(self):"},{"line_number":41,"context_line":"        LOG.info(\u0027Starting %s Evaluator Processes\u0027, str(self._workers_num))"},{"line_number":42,"context_line":"        for i in xrange(self._workers_num):"},{"line_number":43,"context_line":"            self._add_worker(enabled\u003dFalse)"},{"line_number":44,"context_line":"        self._notify_all(None, None, None, evaluator_action\u003dSTART_EVALUATOR)"},{"line_number":45,"context_line":"        self._entity_graph.subscribe(self._notify_all)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_d5f594ee","line":42,"range":{"start_line":42,"start_character":17,"end_line":42,"end_character":23},"updated":"2017-10-24 12:11:47.000000000","message":"use range or six","commit_id":"eb6dc9576688d141830e10078b1c9618724c43c1"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"d9826daa9f06513382bc064e24cff7145e841c27","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def run_evaluator(self):"},{"line_number":41,"context_line":"        LOG.info(\u0027Starting %s Evaluator Processes\u0027, str(self._workers_num))"},{"line_number":42,"context_line":"        for i in xrange(self._workers_num):"},{"line_number":43,"context_line":"            self._add_worker(enabled\u003dFalse)"},{"line_number":44,"context_line":"        self._notify_all(None, None, None, evaluator_action\u003dSTART_EVALUATOR)"},{"line_number":45,"context_line":"        self._entity_graph.subscribe(self._notify_all)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_00e88c79","line":42,"range":{"start_line":42,"start_character":17,"end_line":42,"end_character":23},"in_reply_to":"3f4b6375_d5f594ee","updated":"2017-10-24 12:49:13.000000000","message":"Done","commit_id":"eb6dc9576688d141830e10078b1c9618724c43c1"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6a5400589a32a519de12d28b29f8beae0669505d","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"START_EVALUATOR \u003d \u0027start_evaluation\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class EvaluatorManager(EvaluatorBase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_6dfa7fbd","line":28,"range":{"start_line":28,"start_character":6,"end_line":28,"end_character":36},"updated":"2017-10-25 07:26:03.000000000","message":"EVALUATOR or evaluatION?","commit_id":"91aef5ea45401b64afa6b6a335b8ba437e96f018"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"96b227d434b318d2efd8df8ca7fdd9d2ff2de1ff","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"START_EVALUATOR \u003d \u0027start_evaluation\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class EvaluatorManager(EvaluatorBase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_22bfd0aa","line":28,"range":{"start_line":28,"start_character":6,"end_line":28,"end_character":36},"in_reply_to":"3f4b6375_6dfa7fbd","updated":"2017-10-26 12:16:30.000000000","message":"evaluation, thanks","commit_id":"91aef5ea45401b64afa6b6a335b8ba437e96f018"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6a5400589a32a519de12d28b29f8beae0669505d","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                # Evaluator queue may have been updated, thus the sleep:"},{"line_number":131,"context_line":"                time.sleep(0)"},{"line_number":132,"context_line":"            except Exception as e:"},{"line_number":133,"context_line":"                LOG.exception(\"Exception: %s\", e)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def _do_task(self, task):"},{"line_number":136,"context_line":"            (before, current, is_vertex, action) \u003d task"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_cdd97357","line":133,"range":{"start_line":133,"start_character":16,"end_line":133,"end_character":29},"updated":"2017-10-25 07:26:03.000000000","message":"In there is an exception, do we want to continue the loop?","commit_id":"91aef5ea45401b64afa6b6a335b8ba437e96f018"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"96b227d434b318d2efd8df8ca7fdd9d2ff2de1ff","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                # Evaluator queue may have been updated, thus the sleep:"},{"line_number":131,"context_line":"                time.sleep(0)"},{"line_number":132,"context_line":"            except Exception as e:"},{"line_number":133,"context_line":"                LOG.exception(\"Exception: %s\", e)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def _do_task(self, task):"},{"line_number":136,"context_line":"            (before, current, is_vertex, action) \u003d task"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_822a04d8","line":133,"range":{"start_line":133,"start_character":16,"end_line":133,"end_character":29},"in_reply_to":"3f4b6375_cdd97357","updated":"2017-10-26 12:16:30.000000000","message":"This is a good question, an exception here may break all the evaluators. If task_done was not called, evaluator manager will wait forever, i will add a todo here and fix in another commit","commit_id":"91aef5ea45401b64afa6b6a335b8ba437e96f018"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6a5400589a32a519de12d28b29f8beae0669505d","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                LOG.exception(\"Exception: %s\", e)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def _do_task(self, task):"},{"line_number":136,"context_line":"            (before, current, is_vertex, action) \u003d task"},{"line_number":137,"context_line":"            if not action:"},{"line_number":138,"context_line":"                self._graph_update(before, current, is_vertex)"},{"line_number":139,"context_line":"            elif action \u003d\u003d START_EVALUATOR:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_6de83fe1","line":136,"range":{"start_line":136,"start_character":12,"end_line":136,"end_character":48},"updated":"2017-10-25 07:26:03.000000000","message":"Consider creating a namedtuple for it","commit_id":"91aef5ea45401b64afa6b6a335b8ba437e96f018"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"10a66ed5bc8b570d2294a4d12fc845d4811b8d62","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3f4b6375_26dfc469","updated":"2017-10-27 07:02:19.000000000","message":"Shall we name it as \"evaluator_service.py\" to be consistent with \"datasource/listener_service.py\"","commit_id":"3471970c9070f59bcce9e9ac1d74370e90b587f6"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"19cbfe2c2da1a279ee3950c11a886fc9f43f330a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3f4b6375_25cf9a58","in_reply_to":"3f4b6375_26dfc469","updated":"2017-10-29 09:09:06.000000000","message":"done","commit_id":"3471970c9070f59bcce9e9ac1d74370e90b587f6"}],"vitrage/tests/unit/common/test_utils.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6a5400589a32a519de12d28b29f8beae0669505d","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self._check_portions(all_items, 10)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        all_items \u003d []"},{"line_number":39,"context_line":"        self._check_portions(all_items, 2)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _check_portions(self, all_items, chunks_count):"},{"line_number":42,"context_line":"        chunks \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_ada8778b","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":42},"updated":"2017-10-25 07:26:03.000000000","message":"Add also: \n_check_portions(all_items, 0)\n_check_portions(all_items, -1)\n_check_portions(all_items, 10000)","commit_id":"91aef5ea45401b64afa6b6a335b8ba437e96f018"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"96b227d434b318d2efd8df8ca7fdd9d2ff2de1ff","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self._check_portions(all_items, 10)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        all_items \u003d []"},{"line_number":39,"context_line":"        self._check_portions(all_items, 2)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _check_portions(self, all_items, chunks_count):"},{"line_number":42,"context_line":"        chunks \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_c2b47cf4","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":42},"in_reply_to":"3f4b6375_ada8778b","updated":"2017-10-26 12:16:30.000000000","message":"Cool","commit_id":"91aef5ea45401b64afa6b6a335b8ba437e96f018"}],"vitrage/utils/file.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"9a4afe04909763d156a56c137e8924f10ac91117","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    files \u003d list_files(dir_path, \u0027.yaml\u0027, with_pathname\u003dTrue)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    yaml_files \u003d []"},{"line_number":49,"context_line":"    files \u003d sorted(files)"},{"line_number":50,"context_line":"    for f in files:"},{"line_number":51,"context_line":"        config \u003d load_yaml_file(f, with_exception)"},{"line_number":52,"context_line":"        if config:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_404fa46a","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":25},"updated":"2017-10-24 12:11:47.000000000","message":"I would move this to the list_files method with an option to sort which can be default true","commit_id":"eb6dc9576688d141830e10078b1c9618724c43c1"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"d9826daa9f06513382bc064e24cff7145e841c27","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    files \u003d list_files(dir_path, \u0027.yaml\u0027, with_pathname\u003dTrue)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    yaml_files \u003d []"},{"line_number":49,"context_line":"    files \u003d sorted(files)"},{"line_number":50,"context_line":"    for f in files:"},{"line_number":51,"context_line":"        config \u003d load_yaml_file(f, with_exception)"},{"line_number":52,"context_line":"        if config:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_a002d83b","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":25},"in_reply_to":"3f4b6375_404fa46a","updated":"2017-10-24 12:49:13.000000000","message":"I removed this sort completely","commit_id":"eb6dc9576688d141830e10078b1c9618724c43c1"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"ba407e0d0597da0dd8c4318608e4f92ef6f9c3ee","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    files \u003d list_files(dir_path, \u0027.yaml\u0027, with_pathname\u003dTrue)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    yaml_files \u003d []"},{"line_number":49,"context_line":"    files \u003d sorted(files)"},{"line_number":50,"context_line":"    for f in files:"},{"line_number":51,"context_line":"        config \u003d load_yaml_file(f, with_exception)"},{"line_number":52,"context_line":"        if config:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_d0e59f0a","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":25},"in_reply_to":"3f4b6375_a002d83b","updated":"2017-10-24 14:08:20.000000000","message":"why did you remove it ?\nmaybe other clients use it and need it sorted ?","commit_id":"eb6dc9576688d141830e10078b1c9618724c43c1"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"7c46b57782888929a531b7d85687ccfdbe7489c0","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    files \u003d list_files(dir_path, \u0027.yaml\u0027, with_pathname\u003dTrue)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    yaml_files \u003d []"},{"line_number":49,"context_line":"    files \u003d sorted(files)"},{"line_number":50,"context_line":"    for f in files:"},{"line_number":51,"context_line":"        config \u003d load_yaml_file(f, with_exception)"},{"line_number":52,"context_line":"        if config:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_ed778f9f","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":25},"in_reply_to":"3f4b6375_d0e59f0a","updated":"2017-10-25 07:08:42.000000000","message":"It was, added in this commit. and is not needed","commit_id":"eb6dc9576688d141830e10078b1c9618724c43c1"}]}
