)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"af010a1f14498691e46dfc03cf9c21ebfb0a771e","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2017-06-22 12:46:13 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"code refactoring"},{"line_number":8,"context_line":"replacing \"varibale is None\" with \"not variable\""},{"line_number":9,"context_line":"replacing \"variable is not None\" with \"variable\""},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I870b05da16eef57f58dd9d08d462cd7e1a6cac6f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5f201791_8a73bb4d","line":9,"range":{"start_line":8,"start_character":0,"end_line":9,"end_character":48},"updated":"2017-06-23 06:32:48.000000000","message":"What is the motivation of this refactoring?\n\n\u003e Comparisons to singletons like None should always be done with is or is not , never the equality operators.\n\n\u003e Also, beware of writing if x when you really mean if x is not None -- e.g. when testing whether a variable or argument that defaults to None was set to some other value. The other value might have a type (such as a container) that could be false in a boolean context!\n\nQuoted from PEP8 https://www.python.org/dev/peps/pep-0008/#programming-recommendations","commit_id":"9568be27d2859f5528e1a93958d54add396543c0"}],"vitrage/api/app.py":[{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"22940df5a2b84732021c15540c10cdc7eb818e6a","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def setup_app(pecan_config\u003dPECAN_CONFIG, conf\u003dNone):"},{"line_number":36,"context_line":"    if not conf:"},{"line_number":37,"context_line":"        raise RuntimeError(\u0027Config is actually mandatory\u0027)"},{"line_number":38,"context_line":"    app_hooks \u003d [hooks.ConfigHook(conf),"},{"line_number":39,"context_line":"                 hooks.TranslationHook(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_073894ec","line":36,"range":{"start_line":36,"start_character":11,"end_line":36,"end_character":15},"updated":"2017-06-26 11:38:44.000000000","message":"IMHO, not passing `conf` (`None`) is a different error from passing an empty `conf`.\n\n- An empty `conf is a **user** error but the code itself is correct.\n- Not passing `conf` is a **programming** error and consider as a bug\n\nThis may result in different error handling policy.\n\nBTW, if `conf` is mandatory, why not removing the default value in method definition?","commit_id":"9568be27d2859f5528e1a93958d54add396543c0"},{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"c098851e6e5723d707cd291b207f4a90651cb6be","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def setup_app(pecan_config\u003dPECAN_CONFIG, conf\u003dNone):"},{"line_number":36,"context_line":"    if not conf:"},{"line_number":37,"context_line":"        raise RuntimeError(\u0027Config is actually mandatory\u0027)"},{"line_number":38,"context_line":"    app_hooks \u003d [hooks.ConfigHook(conf),"},{"line_number":39,"context_line":"                 hooks.TranslationHook(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_1a90cfec","line":36,"range":{"start_line":36,"start_character":11,"end_line":36,"end_character":15},"in_reply_to":"5f201791_073894ec","updated":"2017-06-27 03:41:36.000000000","message":"Conf can be None but it will never be empty because we are the ones who fill it from vitrage.conf.","commit_id":"9568be27d2859f5528e1a93958d54add396543c0"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"83c54632899b002db7da9f65599c58a84154a2dd","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def setup_app(pecan_config\u003dPECAN_CONFIG, conf\u003dNone):"},{"line_number":36,"context_line":"    if not conf:"},{"line_number":37,"context_line":"        raise RuntimeError(\u0027Config is actually mandatory\u0027)"},{"line_number":38,"context_line":"    app_hooks \u003d [hooks.ConfigHook(conf),"},{"line_number":39,"context_line":"                 hooks.TranslationHook(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_8c114560","line":36,"range":{"start_line":36,"start_character":11,"end_line":36,"end_character":15},"in_reply_to":"5f201791_1a90cfec","updated":"2017-06-27 07:58:36.000000000","message":"Then I can argue it will never be `None` because we are the ones who wrote code that calls `setup_app` :-)","commit_id":"9568be27d2859f5528e1a93958d54add396543c0"}],"vitrage/api/controllers/v1/topology.py":[{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"22940df5a2b84732021c15540c10cdc7eb818e6a","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @staticmethod"},{"line_number":90,"context_line":"    def _check_input_para(graph_type, depth, query, root, all_tenants):"},{"line_number":91,"context_line":"        if graph_type \u003d\u003d \u0027graph\u0027 and depth and not root:"},{"line_number":92,"context_line":"            LOG.exception(\"Graph-type \u0027graph\u0027 requires a \u0027root\u0027 with \u0027depth\u0027\")"},{"line_number":93,"context_line":"            abort(403, \"Graph-type \u0027graph\u0027 requires a \u0027root\u0027 with \u0027depth\u0027\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_7cb35a4e","line":91,"range":{"start_line":91,"start_character":37,"end_line":91,"end_character":42},"updated":"2017-06-26 11:38:44.000000000","message":"When depth is equal 0, the exception message will be misleading, because, user did pass a depth argument though it is not valid. It is a different from missing argument.\n\nIf we want to check the validity of depth then simple check for zero value is not enough, better to check more strictly like \"depth \u003c\u003d 0 and isinstance(1, int)\".","commit_id":"9568be27d2859f5528e1a93958d54add396543c0"},{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"c098851e6e5723d707cd291b207f4a90651cb6be","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @staticmethod"},{"line_number":90,"context_line":"    def _check_input_para(graph_type, depth, query, root, all_tenants):"},{"line_number":91,"context_line":"        if graph_type \u003d\u003d \u0027graph\u0027 and depth and not root:"},{"line_number":92,"context_line":"            LOG.exception(\"Graph-type \u0027graph\u0027 requires a \u0027root\u0027 with \u0027depth\u0027\")"},{"line_number":93,"context_line":"            abort(403, \"Graph-type \u0027graph\u0027 requires a \u0027root\u0027 with \u0027depth\u0027\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_1a7e8fae","line":91,"range":{"start_line":91,"start_character":37,"end_line":91,"end_character":42},"in_reply_to":"5f201791_7cb35a4e","updated":"2017-06-27 03:41:36.000000000","message":"Here I agree with you.","commit_id":"9568be27d2859f5528e1a93958d54add396543c0"}],"vitrage/datasources/aodh/driver.py":[{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"a3f55c25e3a7c2c8e5a0e0e9ed2f9c197f10a64d","unresolved":false,"context_lines":[{"line_number":296,"context_line":""},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"def _is_vitrage_alarm(rule):"},{"line_number":299,"context_line":"    return _parse_query(rule, AodhProps.VITRAGE_ID)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_373c30be","line":299,"updated":"2017-06-22 11:30:46.000000000","message":"Either change method name or return boolean","commit_id":"9dc8e3f5dfec38c79362010ffd0e0a3775b5bcc3"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"22940df5a2b84732021c15540c10cdc7eb818e6a","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            return None"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        # Don\u0027t need to update entity, only update the cache"},{"line_number":145,"context_line":"        if not entity:"},{"line_number":146,"context_line":"            return None"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        entity[DSProps.EVENT_TYPE] \u003d event_type"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_3cf72262","line":145,"updated":"2017-06-26 11:38:44.000000000","message":"`None` is an expected value when the action requires no enrichment, while 0, False, [] or other falsy value is unexpected.\n\nIf we test it with `not entity`, such exception will be hidden in this step and user won\u0027t be aware the abnormal status and it sometimes will propagate into an operation error that is difficult to pinpoint.","commit_id":"9568be27d2859f5528e1a93958d54add396543c0"},{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"c098851e6e5723d707cd291b207f4a90651cb6be","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            return None"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        # Don\u0027t need to update entity, only update the cache"},{"line_number":145,"context_line":"        if not entity:"},{"line_number":146,"context_line":"            return None"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        entity[DSProps.EVENT_TYPE] \u003d event_type"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_9a9cdf0e","line":145,"in_reply_to":"5f201791_3cf72262","updated":"2017-06-27 03:41:36.000000000","message":"I see what you mean, but the entity is created by us and thus it won\u0027t be never an empty dict, thus this is ok here.","commit_id":"9568be27d2859f5528e1a93958d54add396543c0"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"83c54632899b002db7da9f65599c58a84154a2dd","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            return None"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        # Don\u0027t need to update entity, only update the cache"},{"line_number":145,"context_line":"        if not entity:"},{"line_number":146,"context_line":"            return None"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        entity[DSProps.EVENT_TYPE] \u003d event_type"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_0c9c1568","line":145,"in_reply_to":"5f201791_9a9cdf0e","updated":"2017-06-27 07:58:36.000000000","message":"Yes, in our design, it **should** never be empty. But all programs have bugs and bugs are not designed by us. So we can not guarantee it will never be empty. \n\nMy point is we should expose such error to higher level such as the driver manager. Since such error is unexpected (compare to errors like network connection lost which is expected in real world), normally the only thing we could do is log the error and abort. If it is a service or process, maybe a restart is required to resume normal status.\n\nThat is the reason I insist to handle None (an excected value) and empty (an exception value) differently.","commit_id":"9568be27d2859f5528e1a93958d54add396543c0"}],"vitrage/datasources/aodh/transformer.py":[{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"a3f55c25e3a7c2c8e5a0e0e9ed2f9c197f10a64d","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"def _is_vitrage_alarm(entity_event):"},{"line_number":158,"context_line":"    return entity_event.get(AodhProps.VITRAGE_ID)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_97cc24bd","line":158,"updated":"2017-06-22 11:30:46.000000000","message":"Either change method name, or return boolean","commit_id":"9dc8e3f5dfec38c79362010ffd0e0a3775b5bcc3"}],"vitrage/datasources/collectd/driver.py":[{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"a3f55c25e3a7c2c8e5a0e0e9ed2f9c197f10a64d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            and not new_alarm[CProps.SEVERITY] \u003d\u003d old_alarm[CProps.SEVERITY]"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _is_valid(self, alarm):"},{"line_number":57,"context_line":"        return alarm[CProps.RESOURCE_TYPE] and alarm[CProps.RESOURCE_NAME]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @staticmethod"},{"line_number":60,"context_line":"    def _configuration_mapping(conf):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_d7605ca8","line":57,"updated":"2017-06-22 11:30:46.000000000","message":"Either change method name, or always return boolean","commit_id":"9dc8e3f5dfec38c79362010ffd0e0a3775b5bcc3"}],"vitrage/datasources/collector_notifier.py":[{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"a3f55c25e3a7c2c8e5a0e0e9ed2f9c197f10a64d","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @property"},{"line_number":40,"context_line":"    def enabled(self):"},{"line_number":41,"context_line":"        return self.oslo_notifier"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def notify_when_applicable(self, enriched_event):"},{"line_number":44,"context_line":"        \"\"\"Callback subscribed to driver.graph updates"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_d705fcc3","line":41,"updated":"2017-06-22 11:30:46.000000000","message":"either change method name or always return boolean","commit_id":"9dc8e3f5dfec38c79362010ffd0e0a3775b5bcc3"}],"vitrage/datasources/nagios/driver.py":[{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"a3f55c25e3a7c2c8e5a0e0e9ed2f9c197f10a64d","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            not alarm1[NagiosProps.STATUS] \u003d\u003d alarm2[NagiosProps.STATUS]"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def _is_valid(self, alarm):"},{"line_number":100,"context_line":"        return alarm[NagiosProps.RESOURCE_TYPE] and \\"},{"line_number":101,"context_line":"            alarm[NagiosProps.RESOURCE_NAME]"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_57f9ecc5","line":100,"updated":"2017-06-22 11:30:46.000000000","message":"Either change method name or always return boolean","commit_id":"9dc8e3f5dfec38c79362010ffd0e0a3775b5bcc3"}],"vitrage/datasources/transformer_base.py":[{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"a3f55c25e3a7c2c8e5a0e0e9ed2f9c197f10a64d","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                         neighbor_category\u003dEntityCategory.RESOURCE,"},{"line_number":205,"context_line":"                         is_entity_source\u003dTrue,"},{"line_number":206,"context_line":"                         metadata\u003dNone):"},{"line_number":207,"context_line":"        metadata \u003d {} if not metadata else metadata"},{"line_number":208,"context_line":"        # create placeholder vertex"},{"line_number":209,"context_line":"        entity_vitrage_id \u003d self._create_entity_key(entity_event)"},{"line_number":210,"context_line":"        vitrage_sample_timestamp \u003d entity_event[DSProps.SAMPLE_DATE]"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_371d500f","line":207,"updated":"2017-06-22 11:30:46.000000000","message":"metadata (properties) returns different answers, in some cases, if you \"properties is None\" or \"not properties\"\n\nHopefully it\u0027s what you want in this case.","commit_id":"9dc8e3f5dfec38c79362010ffd0e0a3775b5bcc3"}],"vitrage/datasources/zabbix/driver.py":[{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"a3f55c25e3a7c2c8e5a0e0e9ed2f9c197f10a64d","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            return priority_changed or description_changed"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _is_valid(self, alarm):"},{"line_number":147,"context_line":"        return alarm[ZProps.RESOURCE_TYPE] and alarm[ZProps.RESOURCE_NAME]"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @staticmethod"},{"line_number":150,"context_line":"    def _get_value(alarm):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_77e068fb","line":147,"updated":"2017-06-22 11:30:46.000000000","message":"Either change method name or always return boolean","commit_id":"9dc8e3f5dfec38c79362010ffd0e0a3775b5bcc3"}],"vitrage/entity_graph/processor/notifier.py":[{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"a3f55c25e3a7c2c8e5a0e0e9ed2f9c197f10a64d","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @property"},{"line_number":47,"context_line":"    def enabled(self):"},{"line_number":48,"context_line":"        return self.oslo_notifier"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def notify_when_applicable(self, before, current, is_vertex, graph):"},{"line_number":51,"context_line":"        \"\"\"Callback subscribed to driver.graph updates"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_57e7ac13","line":48,"updated":"2017-06-22 11:30:46.000000000","message":"Either change method name or always return boolean","commit_id":"9dc8e3f5dfec38c79362010ffd0e0a3775b5bcc3"}],"vitrage/entity_graph/processor/processor.py":[{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"a3f55c25e3a7c2c8e5a0e0e9ed2f9c197f10a64d","unresolved":false,"context_lines":[{"line_number":366,"context_line":""},{"line_number":367,"context_line":"    def _enrich_event(self, event):"},{"line_number":368,"context_line":"        attr \u003d self.transformer_manager.get_enrich_query(event)"},{"line_number":369,"context_line":"        if not attr:"},{"line_number":370,"context_line":"            return"},{"line_number":371,"context_line":"        result \u003d self.entity_graph.get_vertices(attr)"},{"line_number":372,"context_line":"        event[TransformerBase.QUERY_RESULT] \u003d result"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_77ae2899","line":369,"updated":"2017-06-22 11:30:46.000000000","message":"properties returns different answers, in some cases, if you \"properties is None\" or \"not properties\"\nHopefully it\u0027s what you want in this case.","commit_id":"9dc8e3f5dfec38c79362010ffd0e0a3775b5bcc3"}],"vitrage/graph/driver/graph.py":[{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"a3f55c25e3a7c2c8e5a0e0e9ed2f9c197f10a64d","unresolved":false,"context_lines":[{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    @staticmethod"},{"line_number":282,"context_line":"    def _merge_properties(base_props, new_props):"},{"line_number":283,"context_line":"        if not base_props:"},{"line_number":284,"context_line":"            base_props \u003d copy.copy(new_props)"},{"line_number":285,"context_line":"        else:"},{"line_number":286,"context_line":"            base_props.update(copy.copy(new_props))"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_17781428","line":283,"updated":"2017-06-22 11:30:46.000000000","message":"properties returns different answers, in some cases, if you \"properties is None\" or \"not properties\"\nHopefully it\u0027s what you want in this case.","commit_id":"9dc8e3f5dfec38c79362010ffd0e0a3775b5bcc3"}],"vitrage/graph/driver/networkx_graph.py":[{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"a3f55c25e3a7c2c8e5a0e0e9ed2f9c197f10a64d","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        :rtype: Vertex"},{"line_number":119,"context_line":"        \"\"\""},{"line_number":120,"context_line":"        properties \u003d self._g.node.get(v_id, None)"},{"line_number":121,"context_line":"        if properties:"},{"line_number":122,"context_line":"            return vertex_copy(v_id, properties)"},{"line_number":123,"context_line":"        LOG.debug(\"get_vertex item not found. v_id\u003d%s\", str(v_id))"},{"line_number":124,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_f7723849","line":121,"updated":"2017-06-22 11:30:46.000000000","message":"properties returns different answers, in some cases, if you \"properties is None\" or \"not properties\"\nHopefully it\u0027s what you want in this case.","commit_id":"9dc8e3f5dfec38c79362010ffd0e0a3775b5bcc3"},{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"a3f55c25e3a7c2c8e5a0e0e9ed2f9c197f10a64d","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            LOG.debug(\"get_edge item not found. source_id\u003d%s, target_id\u003d%s, \""},{"line_number":131,"context_line":"                      \"label\u003d%s\", str(source_id), str(target_id), str(label))"},{"line_number":132,"context_line":"            return None"},{"line_number":133,"context_line":"        if properties:"},{"line_number":134,"context_line":"            return edge_copy(source_id, target_id, label, properties)"},{"line_number":135,"context_line":"        return None"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_d78f3c21","line":133,"updated":"2017-06-22 11:30:46.000000000","message":"properties returns different answers, in some cases, if you \"properties is None\" or \"not properties\"\nHopefully it\u0027s what you want in this case.","commit_id":"9dc8e3f5dfec38c79362010ffd0e0a3775b5bcc3"}],"vitrage/tests/mocks/mock_driver.py":[{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"a3f55c25e3a7c2c8e5a0e0e9ed2f9c197f10a64d","unresolved":false,"context_lines":[{"line_number":392,"context_line":"               for host_index in range(host_num)]"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    test_entity_spec_list \u003d []"},{"line_number":395,"context_line":"    if snapshot_events \u003e 0:"},{"line_number":396,"context_line":"        if not snap_vals:"},{"line_number":397,"context_line":"            snap_vals \u003d {}"},{"line_number":398,"context_line":"        snap_vals.update({"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_57044c4a","line":395,"updated":"2017-06-22 11:30:46.000000000","message":"No","commit_id":"9dc8e3f5dfec38c79362010ffd0e0a3775b5bcc3"},{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"a3f55c25e3a7c2c8e5a0e0e9ed2f9c197f10a64d","unresolved":false,"context_lines":[{"line_number":408,"context_line":"             }"},{"line_number":409,"context_line":"        )"},{"line_number":410,"context_line":"    if update_events \u003e 0:"},{"line_number":411,"context_line":"        if not update_vals:"},{"line_number":412,"context_line":"            update_vals \u003d {}"},{"line_number":413,"context_line":"        update_vals.update({"},{"line_number":414,"context_line":"            DSProps.DATASOURCE_ACTION: DatasourceAction.UPDATE,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_37ff9035","line":411,"updated":"2017-06-22 11:30:46.000000000","message":"No","commit_id":"9dc8e3f5dfec38c79362010ffd0e0a3775b5bcc3"}],"vitrage/tests/mocks/trace_generator.py":[{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"22940df5a2b84732021c15540c10cdc7eb818e6a","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    vm_host_mapping \u003d spec[MAPPING_KEY]"},{"line_number":212,"context_line":"    static_info \u003d None"},{"line_number":213,"context_line":"    if spec[STATIC_INFO_FKEY]:"},{"line_number":214,"context_line":"        static_info \u003d utils.load_specs(spec[STATIC_INFO_FKEY])"},{"line_number":215,"context_line":"    static_values \u003d []"},{"line_number":216,"context_line":"    host_ids \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_9ca99625","line":213,"updated":"2017-06-26 11:38:44.000000000","message":"Should this be `STATIC_INFO_FKEY not in spec`?","commit_id":"9568be27d2859f5528e1a93958d54add396543c0"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"83c54632899b002db7da9f65599c58a84154a2dd","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    vm_host_mapping \u003d spec[MAPPING_KEY]"},{"line_number":212,"context_line":"    static_info \u003d None"},{"line_number":213,"context_line":"    if spec[STATIC_INFO_FKEY]:"},{"line_number":214,"context_line":"        static_info \u003d utils.load_specs(spec[STATIC_INFO_FKEY])"},{"line_number":215,"context_line":"    static_values \u003d []"},{"line_number":216,"context_line":"    host_ids \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_ec2f9985","line":213,"in_reply_to":"5f201791_9a6a9fea","updated":"2017-06-27 07:58:36.000000000","message":"I know and I will be glad to fix it :-)","commit_id":"9568be27d2859f5528e1a93958d54add396543c0"},{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"c098851e6e5723d707cd291b207f4a90651cb6be","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    vm_host_mapping \u003d spec[MAPPING_KEY]"},{"line_number":212,"context_line":"    static_info \u003d None"},{"line_number":213,"context_line":"    if spec[STATIC_INFO_FKEY]:"},{"line_number":214,"context_line":"        static_info \u003d utils.load_specs(spec[STATIC_INFO_FKEY])"},{"line_number":215,"context_line":"    static_values \u003d []"},{"line_number":216,"context_line":"    host_ids \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_9a6a9fea","line":213,"in_reply_to":"5f201791_9ca99625","updated":"2017-06-27 03:41:36.000000000","message":"I don\u0027t know, it is your code :)","commit_id":"9568be27d2859f5528e1a93958d54add396543c0"}],"vitrage/tests/unit/entity_graph/processor/test_entity_graph.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"802a43096aa9ab46fc04062ab3aa6c36b2213e96","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        # deal with placeholder vertex"},{"line_number":39,"context_line":"        PUtils.delete_placeholder_vertex(entity_graph, vertex)"},{"line_number":40,"context_line":"        vertex \u003d entity_graph.get_vertex(vertex.vertex_id)"},{"line_number":41,"context_line":"        self.assertTrue(not vertex)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        # create vertex properties"},{"line_number":44,"context_line":"        vertex \u003d self._update_vertex_to_graph(entity_graph,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_03b9fa2c","line":41,"range":{"start_line":41,"start_character":24,"end_line":41,"end_character":27},"updated":"2017-06-22 08:43:26.000000000","message":"assertFalse(vertex) more clear","commit_id":"9bc90108505c6760deab1e4039ba7e55c31470d9"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"fe6e3e3d46adf6c1354913475971a4f00b75414b","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        # deal with placeholder vertex"},{"line_number":39,"context_line":"        PUtils.delete_placeholder_vertex(entity_graph, vertex)"},{"line_number":40,"context_line":"        vertex \u003d entity_graph.get_vertex(vertex.vertex_id)"},{"line_number":41,"context_line":"        self.assertTrue(not vertex)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        # create vertex properties"},{"line_number":44,"context_line":"        vertex \u003d self._update_vertex_to_graph(entity_graph,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_46c7fb46","line":41,"range":{"start_line":41,"start_character":23,"end_line":41,"end_character":24},"updated":"2017-06-22 12:31:03.000000000","message":"being positive is always clearer\n\nbetter do  \n\nself.assertFalse(vertex)","commit_id":"7ca012f1f106e4b5fe25de8d118e0fd626697f38"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"6fdd187f991c31aba99255222baa6e428a59c97f","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        # deal with placeholder vertex"},{"line_number":39,"context_line":"        PUtils.delete_placeholder_vertex(entity_graph, vertex)"},{"line_number":40,"context_line":"        vertex \u003d entity_graph.get_vertex(vertex.vertex_id)"},{"line_number":41,"context_line":"        self.assertTrue(vertex is None)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        # create vertex properties"},{"line_number":44,"context_line":"        vertex \u003d self._update_vertex_to_graph(entity_graph,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_1f64a6e3","line":41,"range":{"start_line":41,"start_character":30,"end_line":41,"end_character":31},"updated":"2017-06-22 14:05:11.000000000","message":"then do\nself.assertIsNone(vertex)","commit_id":"9568be27d2859f5528e1a93958d54add396543c0"}]}
