)]}'
{"octavia/api/drivers/amphora_driver/v1/driver.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"fc6e78ef3b78779313cf41d2bb33cd402d73f579","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from octavia_lib.api.drivers import provider_base as driver_base"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from octavia.api.drivers.amphora_driver import flavor_schema"},{"line_number":28,"context_line":"from octavia.api.drivers import exceptions as driver_exceptions"},{"line_number":29,"context_line":"from octavia.api.drivers import utils as driver_utils"},{"line_number":30,"context_line":"from octavia.common import constants as consts"},{"line_number":31,"context_line":"from octavia.common import data_models"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_8f1a526c","line":28,"updated":"2019-08-03 13:40:01.000000000","message":"Why do we need this in v1 but not v2?","commit_id":"7bb0ab1f5f6dc680fc6c9727cdd25ce80263f77b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"db3f554d24832673a38502952e7c9acd89374cab","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from octavia_lib.api.drivers import provider_base as driver_base"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from octavia.api.drivers.amphora_driver import flavor_schema"},{"line_number":28,"context_line":"from octavia.api.drivers import exceptions as driver_exceptions"},{"line_number":29,"context_line":"from octavia.api.drivers import utils as driver_utils"},{"line_number":30,"context_line":"from octavia.common import constants as consts"},{"line_number":31,"context_line":"from octavia.common import data_models"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_9b6a91ea","line":28,"in_reply_to":"7faddb67_8f1a526c","updated":"2019-08-05 08:19:15.000000000","message":"I don\u0027t have any good reason why I did it this way. Of course you\u0027re right :) thanks for pointing this (maybe I forgot about coffee while writing this, idk)... :)","commit_id":"7bb0ab1f5f6dc680fc6c9727cdd25ce80263f77b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"fc6e78ef3b78779313cf41d2bb33cd402d73f579","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        if pool.lb_algorithm not in SUPPORTED_LB_ALGORITHMS:"},{"line_number":141,"context_line":"            msg \u003d (\u0027Amphora provider does not support %s algorithm.\u0027"},{"line_number":142,"context_line":"                   % pool.lb_algorithm)"},{"line_number":143,"context_line":"            raise driver_exceptions.UnsupportedOptionError("},{"line_number":144,"context_line":"                user_fault_string\u003dmsg,"},{"line_number":145,"context_line":"                operator_fault_string\u003dmsg)"},{"line_number":146,"context_line":"        payload \u003d {consts.POOL_ID: pool.pool_id}"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_af15ce3e","line":143,"updated":"2019-08-03 13:40:01.000000000","message":"In v2 we just use `exceptions` from octavia_lib, which is also imported here? Why is it inconsistent?","commit_id":"7bb0ab1f5f6dc680fc6c9727cdd25ce80263f77b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"db3f554d24832673a38502952e7c9acd89374cab","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        if pool.lb_algorithm not in SUPPORTED_LB_ALGORITHMS:"},{"line_number":141,"context_line":"            msg \u003d (\u0027Amphora provider does not support %s algorithm.\u0027"},{"line_number":142,"context_line":"                   % pool.lb_algorithm)"},{"line_number":143,"context_line":"            raise driver_exceptions.UnsupportedOptionError("},{"line_number":144,"context_line":"                user_fault_string\u003dmsg,"},{"line_number":145,"context_line":"                operator_fault_string\u003dmsg)"},{"line_number":146,"context_line":"        payload \u003d {consts.POOL_ID: pool.pool_id}"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_bb6d0d04","line":143,"in_reply_to":"7faddb67_af15ce3e","updated":"2019-08-05 08:19:15.000000000","message":"Like above :) thanks for pointing this","commit_id":"7bb0ab1f5f6dc680fc6c9727cdd25ce80263f77b"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"1a91bc461c3da96cacef99b5f2d92a3745026aa8","unresolved":false,"context_lines":[{"line_number":37,"context_line":"CONF \u003d cfg.CONF"},{"line_number":38,"context_line":"CONF.import_group(\u0027oslo_messaging\u0027, \u0027octavia.common.config\u0027)"},{"line_number":39,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":40,"context_line":"SUPPORTED_LB_ALGORITHMS \u003d ["},{"line_number":41,"context_line":"    consts.LB_ALGORITHM_ROUND_ROBIN,"},{"line_number":42,"context_line":"    consts.LB_ALGORITHM_SOURCE_IP,"},{"line_number":43,"context_line":"    consts.LB_ALGORITHM_LEAST_CONNECTIONS]"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_df010708","line":40,"updated":"2019-09-13 15:25:09.000000000","message":"In lack of a specific constants.py for the amphora driver, should this be moved to common/constants.py?","commit_id":"dd4a9b5aa927fa43f6c33a9ed9673f5e9485bc8a"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"b1d416536f31154c4410c94f2260c2fe6ecc84e4","unresolved":false,"context_lines":[{"line_number":37,"context_line":"CONF \u003d cfg.CONF"},{"line_number":38,"context_line":"CONF.import_group(\u0027oslo_messaging\u0027, \u0027octavia.common.config\u0027)"},{"line_number":39,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":40,"context_line":"SUPPORTED_LB_ALGORITHMS \u003d ["},{"line_number":41,"context_line":"    consts.LB_ALGORITHM_ROUND_ROBIN,"},{"line_number":42,"context_line":"    consts.LB_ALGORITHM_SOURCE_IP,"},{"line_number":43,"context_line":"    consts.LB_ALGORITHM_LEAST_CONNECTIONS]"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_f5b96914","line":40,"in_reply_to":"5faad753_df010708","updated":"2019-09-16 09:22:01.000000000","message":"We already have this constant SUPPORTED_LB_ALGORITHMS in common/constants.py used from neutron_lib [1], but it also includes SOURCE_IP_PORT algorithm, which is not supported in amphore\u0027a provider driver. That is why I\u0027ve redefined it here.\n\n[1] https://github.com/openstack/octavia-lib/blob/master/octavia_lib/common/constants.py#L117","commit_id":"dd4a9b5aa927fa43f6c33a9ed9673f5e9485bc8a"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"d7f90c6a3f1266939948008cd4bbd392df8f2781","unresolved":false,"context_lines":[{"line_number":37,"context_line":"CONF \u003d cfg.CONF"},{"line_number":38,"context_line":"CONF.import_group(\u0027oslo_messaging\u0027, \u0027octavia.common.config\u0027)"},{"line_number":39,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":40,"context_line":"SUPPORTED_LB_ALGORITHMS \u003d ["},{"line_number":41,"context_line":"    consts.LB_ALGORITHM_ROUND_ROBIN,"},{"line_number":42,"context_line":"    consts.LB_ALGORITHM_SOURCE_IP,"},{"line_number":43,"context_line":"    consts.LB_ALGORITHM_LEAST_CONNECTIONS]"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_1a14fff4","line":40,"in_reply_to":"5faad753_f5b96914","updated":"2019-09-18 17:22:31.000000000","message":"It could be named AMPHORA_SUPPORTED_LB_ALGORITHMS. Anyway, we can refactor it later if needed.","commit_id":"dd4a9b5aa927fa43f6c33a9ed9673f5e9485bc8a"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"d7f90c6a3f1266939948008cd4bbd392df8f2781","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        payload \u003d {consts.POOL_ID: pool_id}"},{"line_number":151,"context_line":"        self.client.cast({}, \u0027delete_pool\u0027, **payload)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def pool_update(self, old_pool, new_pool):"},{"line_number":154,"context_line":"        pool_dict \u003d new_pool.to_dict()"},{"line_number":155,"context_line":"        if \u0027admin_state_up\u0027 in pool_dict:"},{"line_number":156,"context_line":"            pool_dict[\u0027enabled\u0027] \u003d pool_dict.pop(\u0027admin_state_up\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_9a18ef1d","line":153,"updated":"2019-09-18 17:22:31.000000000","message":"LB algorithm is an updatable parameter, thus should be also validated.\n\nhttps://docs.openstack.org/api-ref/load-balancer/v2/?expanded\u003dupdate-a-pool-detail#update-a-pool","commit_id":"dd4a9b5aa927fa43f6c33a9ed9673f5e9485bc8a"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c092119cf376fcca36385db4cd3849b6a1bbd029","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        payload \u003d {consts.POOL_ID: pool_id}"},{"line_number":151,"context_line":"        self.client.cast({}, \u0027delete_pool\u0027, **payload)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def pool_update(self, old_pool, new_pool):"},{"line_number":154,"context_line":"        pool_dict \u003d new_pool.to_dict()"},{"line_number":155,"context_line":"        if \u0027admin_state_up\u0027 in pool_dict:"},{"line_number":156,"context_line":"            pool_dict[\u0027enabled\u0027] \u003d pool_dict.pop(\u0027admin_state_up\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_1537e5b2","line":153,"in_reply_to":"3fa7e38b_9a18ef1d","updated":"2019-09-19 10:06:10.000000000","message":"Good point, thanks! I\u0027ll add it.","commit_id":"dd4a9b5aa927fa43f6c33a9ed9673f5e9485bc8a"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"07c0f320ca1c9096cc60cc502ba3d9aed1b94b52","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    # Pool"},{"line_number":138,"context_line":"    def pool_create(self, pool):"},{"line_number":139,"context_line":"        if pool.lb_algorithm not in AMPHORA_SUPPORTED_LB_ALGORITHMS:"},{"line_number":140,"context_line":"            msg \u003d (\u0027Amphora provider does not support %s algorithm.\u0027"},{"line_number":141,"context_line":"                   % pool.lb_algorithm)"},{"line_number":142,"context_line":"            raise exceptions.UnsupportedOptionError("},{"line_number":143,"context_line":"                user_fault_string\u003dmsg,"},{"line_number":144,"context_line":"                operator_fault_string\u003dmsg)"},{"line_number":145,"context_line":"        payload \u003d {consts.POOL_ID: pool.pool_id}"},{"line_number":146,"context_line":"        self.client.cast({}, \u0027create_pool\u0027, **payload)"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_b085bfaf","line":144,"range":{"start_line":139,"start_character":8,"end_line":144,"end_character":42},"updated":"2019-09-19 10:10:57.000000000","message":"This could be moved to a private class method as same code is also used in pool_update.","commit_id":"f006e481648e0dbf6c9bbca9c6d8d79c24f3c6f0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"ee154e1a922c65e3eaf2f97035c955a912db0647","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    # Pool"},{"line_number":138,"context_line":"    def pool_create(self, pool):"},{"line_number":139,"context_line":"        if pool.lb_algorithm not in AMPHORA_SUPPORTED_LB_ALGORITHMS:"},{"line_number":140,"context_line":"            msg \u003d (\u0027Amphora provider does not support %s algorithm.\u0027"},{"line_number":141,"context_line":"                   % pool.lb_algorithm)"},{"line_number":142,"context_line":"            raise exceptions.UnsupportedOptionError("},{"line_number":143,"context_line":"                user_fault_string\u003dmsg,"},{"line_number":144,"context_line":"                operator_fault_string\u003dmsg)"},{"line_number":145,"context_line":"        payload \u003d {consts.POOL_ID: pool.pool_id}"},{"line_number":146,"context_line":"        self.client.cast({}, \u0027create_pool\u0027, **payload)"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_21af3ce4","line":144,"range":{"start_line":139,"start_character":8,"end_line":144,"end_character":42},"in_reply_to":"3fa7e38b_b085bfaf","updated":"2019-09-19 17:44:06.000000000","message":"+1 We can DRY this out....","commit_id":"f006e481648e0dbf6c9bbca9c6d8d79c24f3c6f0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"62cf8abe010be3ed2bf037ef341327c2c3443b7a","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self.client.cast({}, \u0027delete_pool\u0027, **payload)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def pool_update(self, old_pool, new_pool):"},{"line_number":154,"context_line":"        if new_pool.lb_algorithm not in AMPHORA_SUPPORTED_LB_ALGORITHMS:"},{"line_number":155,"context_line":"            msg \u003d (\u0027Amphora provider does not support %s algorithm.\u0027"},{"line_number":156,"context_line":"                   % new_pool.lb_algorithm)"},{"line_number":157,"context_line":"            raise exceptions.UnsupportedOptionError("}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_c1e0a8cf","line":154,"updated":"2019-09-19 17:50:33.000000000","message":"Need to check \"if new_pool.lb_algorithm and not in\"","commit_id":"f006e481648e0dbf6c9bbca9c6d8d79c24f3c6f0"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"52e3aab078a78c117f6df95b937c17bb94639021","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self.client.cast({}, \u0027delete_pool\u0027, **payload)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def pool_update(self, old_pool, new_pool):"},{"line_number":154,"context_line":"        if new_pool.lb_algorithm not in AMPHORA_SUPPORTED_LB_ALGORITHMS:"},{"line_number":155,"context_line":"            msg \u003d (\u0027Amphora provider does not support %s algorithm.\u0027"},{"line_number":156,"context_line":"                   % new_pool.lb_algorithm)"},{"line_number":157,"context_line":"            raise exceptions.UnsupportedOptionError("}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_74f8587a","line":154,"in_reply_to":"3fa7e38b_473efeda","updated":"2019-09-23 20:55:03.000000000","message":"I\u0027m not sure Michael\u0027s comment is actually relevant, but it appears you ignored it anyway, which I believe is fine. Guarding against None shouldn\u0027t be necessary here.","commit_id":"f006e481648e0dbf6c9bbca9c6d8d79c24f3c6f0"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c08cdef73a28720160001147e81a5fedbf1f7271","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self.client.cast({}, \u0027delete_pool\u0027, **payload)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def pool_update(self, old_pool, new_pool):"},{"line_number":154,"context_line":"        if new_pool.lb_algorithm not in AMPHORA_SUPPORTED_LB_ALGORITHMS:"},{"line_number":155,"context_line":"            msg \u003d (\u0027Amphora provider does not support %s algorithm.\u0027"},{"line_number":156,"context_line":"                   % new_pool.lb_algorithm)"},{"line_number":157,"context_line":"            raise exceptions.UnsupportedOptionError("}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_473efeda","line":154,"in_reply_to":"3fa7e38b_c1e0a8cf","updated":"2019-09-20 11:20:43.000000000","message":"+1","commit_id":"f006e481648e0dbf6c9bbca9c6d8d79c24f3c6f0"}],"octavia/api/drivers/amphora_driver/v2/driver.py":[{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"1a91bc461c3da96cacef99b5f2d92a3745026aa8","unresolved":false,"context_lines":[{"line_number":37,"context_line":"CONF \u003d cfg.CONF"},{"line_number":38,"context_line":"CONF.import_group(\u0027oslo_messaging\u0027, \u0027octavia.common.config\u0027)"},{"line_number":39,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":40,"context_line":"SUPPORTED_LB_ALGORITHMS \u003d ["},{"line_number":41,"context_line":"    consts.LB_ALGORITHM_ROUND_ROBIN,"},{"line_number":42,"context_line":"    consts.LB_ALGORITHM_SOURCE_IP,"},{"line_number":43,"context_line":"    consts.LB_ALGORITHM_LEAST_CONNECTIONS]"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_42069c1e","line":40,"updated":"2019-09-13 15:25:09.000000000","message":"ditto","commit_id":"dd4a9b5aa927fa43f6c33a9ed9673f5e9485bc8a"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"07c0f320ca1c9096cc60cc502ba3d9aed1b94b52","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    # Pool"},{"line_number":137,"context_line":"    def pool_create(self, pool):"},{"line_number":138,"context_line":"        if pool.lb_algorithm not in AMPHORA_SUPPORTED_LB_ALGORITHMS:"},{"line_number":139,"context_line":"            msg \u003d (\u0027Amphora provider does not support %s algorithm.\u0027"},{"line_number":140,"context_line":"                   % pool.lb_algorithm)"},{"line_number":141,"context_line":"            raise exceptions.UnsupportedOptionError("},{"line_number":142,"context_line":"                user_fault_string\u003dmsg,"},{"line_number":143,"context_line":"                operator_fault_string\u003dmsg)"},{"line_number":144,"context_line":"        payload \u003d {consts.POOL_ID: pool.pool_id}"},{"line_number":145,"context_line":"        self.client.cast({}, \u0027create_pool\u0027, **payload)"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_50924bf8","line":143,"range":{"start_line":138,"start_character":8,"end_line":143,"end_character":42},"updated":"2019-09-19 10:10:57.000000000","message":"ditto","commit_id":"f006e481648e0dbf6c9bbca9c6d8d79c24f3c6f0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"ee154e1a922c65e3eaf2f97035c955a912db0647","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    # Pool"},{"line_number":137,"context_line":"    def pool_create(self, pool):"},{"line_number":138,"context_line":"        if pool.lb_algorithm not in AMPHORA_SUPPORTED_LB_ALGORITHMS:"},{"line_number":139,"context_line":"            msg \u003d (\u0027Amphora provider does not support %s algorithm.\u0027"},{"line_number":140,"context_line":"                   % pool.lb_algorithm)"},{"line_number":141,"context_line":"            raise exceptions.UnsupportedOptionError("},{"line_number":142,"context_line":"                user_fault_string\u003dmsg,"},{"line_number":143,"context_line":"                operator_fault_string\u003dmsg)"},{"line_number":144,"context_line":"        payload \u003d {consts.POOL_ID: pool.pool_id}"},{"line_number":145,"context_line":"        self.client.cast({}, \u0027create_pool\u0027, **payload)"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_a1848c5f","line":143,"range":{"start_line":138,"start_character":8,"end_line":143,"end_character":42},"in_reply_to":"3fa7e38b_50924bf8","updated":"2019-09-19 17:44:06.000000000","message":"+1","commit_id":"f006e481648e0dbf6c9bbca9c6d8d79c24f3c6f0"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c08cdef73a28720160001147e81a5fedbf1f7271","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    # Pool"},{"line_number":137,"context_line":"    def pool_create(self, pool):"},{"line_number":138,"context_line":"        if pool.lb_algorithm not in AMPHORA_SUPPORTED_LB_ALGORITHMS:"},{"line_number":139,"context_line":"            msg \u003d (\u0027Amphora provider does not support %s algorithm.\u0027"},{"line_number":140,"context_line":"                   % pool.lb_algorithm)"},{"line_number":141,"context_line":"            raise exceptions.UnsupportedOptionError("},{"line_number":142,"context_line":"                user_fault_string\u003dmsg,"},{"line_number":143,"context_line":"                operator_fault_string\u003dmsg)"},{"line_number":144,"context_line":"        payload \u003d {consts.POOL_ID: pool.pool_id}"},{"line_number":145,"context_line":"        self.client.cast({}, \u0027create_pool\u0027, **payload)"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_6731ba0b","line":143,"range":{"start_line":138,"start_character":8,"end_line":143,"end_character":42},"in_reply_to":"3fa7e38b_a1848c5f","updated":"2019-09-20 11:20:43.000000000","message":"+1","commit_id":"f006e481648e0dbf6c9bbca9c6d8d79c24f3c6f0"}]}
