)]}'
{"keystoneauth1/session.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"e0691ae368be269cf18cd758e72884ff2078e004","unresolved":false,"context_lines":[{"line_number":634,"context_line":""},{"line_number":635,"context_line":"        try:"},{"line_number":636,"context_line":"            try:"},{"line_number":637,"context_line":"                with self._context_manager("},{"line_number":638,"context_line":"                        req_session\u003dself.session,"},{"line_number":639,"context_line":"                        method\u003dmethod,"},{"line_number":640,"context_line":"                        url\u003durl,"},{"line_number":641,"context_line":"                        **kwargs) as task_context_manager:"},{"line_number":642,"context_line":"                    resp \u003d task_context_manager.request(method, url, **kwargs)"},{"line_number":643,"context_line":"            except requests.exceptions.SSLError as e:"},{"line_number":644,"context_line":"                msg \u003d \u0027SSL exception connecting to %(url)s: %(error)s\u0027 % {"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a74a57a_2595a83f","line":641,"range":{"start_line":637,"start_character":0,"end_line":641,"end_character":58},"updated":"2016-12-01 03:09:00.000000000","message":"This needs to be done somehow without on-demand instantiation to support the concept of real serialization that can be shared among threads in multi-threaded applications.\n\nIt could be built to share a common lock, but I worry that is non-intuitive enough to warrant working through a change to ensure the class can be pre-instantiated.","commit_id":"37c420db4a9960da3aaec13d0858817b72d2f401"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"9b89b9053bcf2c89d4a8d961ee8d99a91a8a52b7","unresolved":false,"context_lines":[{"line_number":638,"context_line":"                        req_session\u003dself.session,"},{"line_number":639,"context_line":"                        method\u003dmethod,"},{"line_number":640,"context_line":"                        url\u003durl,"},{"line_number":641,"context_line":"                        **kwargs) as task_context_manager:"},{"line_number":642,"context_line":"                    resp \u003d task_context_manager.request(method, url, **kwargs)"},{"line_number":643,"context_line":"            except requests.exceptions.SSLError as e:"},{"line_number":644,"context_line":"                msg \u003d \u0027SSL exception connecting to %(url)s: %(error)s\u0027 % {"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_c720ac4c","line":641,"in_reply_to":"3a71b18c_80ff8c33","updated":"2016-12-01 18:26:05.000000000","message":"Ah yeah a partial should cover the issue.","commit_id":"37c420db4a9960da3aaec13d0858817b72d2f401"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"2435059b60107367e3b83b8334039faa09dc5ccd","unresolved":false,"context_lines":[{"line_number":638,"context_line":"                        req_session\u003dself.session,"},{"line_number":639,"context_line":"                        method\u003dmethod,"},{"line_number":640,"context_line":"                        url\u003durl,"},{"line_number":641,"context_line":"                        **kwargs) as task_context_manager:"},{"line_number":642,"context_line":"                    resp \u003d task_context_manager.request(method, url, **kwargs)"},{"line_number":643,"context_line":"            except requests.exceptions.SSLError as e:"},{"line_number":644,"context_line":"                msg \u003d \u0027SSL exception connecting to %(url)s: %(error)s\u0027 % {"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_80ff8c33","line":641,"in_reply_to":"5a74a57a_2595a83f","updated":"2016-12-01 14:33:08.000000000","message":"I think this will work if you replace the or task_manager.TaskContextManager with or get_task_manager() and have get_task_manager be a simple function that creates a TaskManager and then returns a functools.partial of TaskContextManager with the TaskManager passed to the first arg.","commit_id":"37c420db4a9960da3aaec13d0858817b72d2f401"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e996e22006aea98a396374fd23a682933aed4783","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                                       will be added to the user agent. This"},{"line_number":218,"context_line":"                                       can be used by libraries that are part"},{"line_number":219,"context_line":"                                       of the communication process."},{"line_number":220,"context_line":"    :param: session_ctx_mngr:"},{"line_number":221,"context_line":"            :py:class:`keystoneauth1.task_manager.TaskContextManager`. This"},{"line_number":222,"context_line":"            contest manager allows for executing/changing how requests are"},{"line_number":223,"context_line":"            executed within keystoneauth specifically for extra logic such"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_42cc8735","line":220,"range":{"start_line":220,"start_character":12,"end_line":220,"end_character":28},"updated":"2016-12-01 20:06:35.000000000","message":"session is redundant here, just context_manager?","commit_id":"c0dcf5fd6f2527f327577635511ed97fafddc96b"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e996e22006aea98a396374fd23a682933aed4783","unresolved":false,"context_lines":[{"line_number":636,"context_line":"            try:"},{"line_number":637,"context_line":"                with self._context_manager as task_context_manager:"},{"line_number":638,"context_line":"                    resp \u003d task_context_manager.request("},{"line_number":639,"context_line":"                        self.session, method, url, **kwargs)"},{"line_number":640,"context_line":"            except requests.exceptions.SSLError as e:"},{"line_number":641,"context_line":"                msg \u003d \u0027SSL exception connecting to %(url)s: %(error)s\u0027 % {"},{"line_number":642,"context_line":"                    \u0027url\u0027: url, \u0027error\u0027: e}"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_429ac715","line":639,"updated":"2016-12-01 20:06:35.000000000","message":"The only thing here is that the context_manager will never have access to the ksa.session object which is something it may need. \n\nMaybe pass self here as the first arg, and use self.session in the manager?","commit_id":"c0dcf5fd6f2527f327577635511ed97fafddc96b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"54184a0e14d5826326374056cfeddb96f5546ab1","unresolved":false,"context_lines":[{"line_number":636,"context_line":"            try:"},{"line_number":637,"context_line":"                with self._context_manager as task_context_manager:"},{"line_number":638,"context_line":"                    resp \u003d task_context_manager.request("},{"line_number":639,"context_line":"                        self.session, method, url, **kwargs)"},{"line_number":640,"context_line":"            except requests.exceptions.SSLError as e:"},{"line_number":641,"context_line":"                msg \u003d \u0027SSL exception connecting to %(url)s: %(error)s\u0027 % {"},{"line_number":642,"context_line":"                    \u0027url\u0027: url, \u0027error\u0027: e}"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_f51d4bbe","line":639,"in_reply_to":"3a71b18c_429ac715","updated":"2016-12-01 20:18:15.000000000","message":"sure.","commit_id":"c0dcf5fd6f2527f327577635511ed97fafddc96b"}],"keystoneauth1/task_manager.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"95b60ab01b025b057b96f7840620a052ac4e28ba","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        self._traceback \u003d tb"},{"line_number":64,"context_line":"        self._finished.set()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def wait(self, raw\u003dFalse):"},{"line_number":67,"context_line":"        self._finished.wait()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        if self._exception:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_bf040918","line":66,"range":{"start_line":66,"start_character":23,"end_line":66,"end_character":28},"updated":"2016-08-29 22:58:05.000000000","message":"what\u0027s raw here?","commit_id":"477c14831db40d3f5adaf492219f05cce32d2630"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"e13feb191cfafdb7c953099d8e34e83147905ba2","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        self._traceback \u003d tb"},{"line_number":64,"context_line":"        self._finished.set()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def wait(self, raw\u003dFalse):"},{"line_number":67,"context_line":"        self._finished.wait()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        if self._exception:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_8459a237","line":66,"in_reply_to":"fa7ab95a_627024dd","updated":"2016-11-28 20:28:45.000000000","message":"since raw and results_filteR_cb are part of the public api on task manager, i am inclined to say we can\u0027t clean it up directly. It can be massaged once the code lands and we aren\u0027t trying to muck with 3 different locations for this code.","commit_id":"477c14831db40d3f5adaf492219f05cce32d2630"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"7dd9f2aa58ca81d34f400e14c8897603d8df7b0d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        self._traceback \u003d tb"},{"line_number":64,"context_line":"        self._finished.set()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def wait(self, raw\u003dFalse):"},{"line_number":67,"context_line":"        self._finished.wait()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        if self._exception:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_627024dd","line":66,"in_reply_to":"fa7ab95a_bf040918","updated":"2016-08-29 23:28:31.000000000","message":"raw and results_filter_cb are two different ways of getting at the same thing. I\u0027ll clean this up.","commit_id":"477c14831db40d3f5adaf492219f05cce32d2630"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"95b60ab01b025b057b96f7840620a052ac4e28ba","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                self.name, task.name, (end - start)))"},{"line_number":160,"context_line":"        return task.wait(raw)"},{"line_number":161,"context_line":"    # Backwards compatibility"},{"line_number":162,"context_line":"    submitTask \u003d submit_task"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def submit_function("},{"line_number":165,"context_line":"            self, method, name\u003dNone, result_filter_cb\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_e218b477","line":162,"updated":"2016-08-29 22:58:05.000000000","message":"probably don\u0027t need this in a new implementation","commit_id":"477c14831db40d3f5adaf492219f05cce32d2630"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"7dd9f2aa58ca81d34f400e14c8897603d8df7b0d","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                self.name, task.name, (end - start)))"},{"line_number":160,"context_line":"        return task.wait(raw)"},{"line_number":161,"context_line":"    # Backwards compatibility"},{"line_number":162,"context_line":"    submitTask \u003d submit_task"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def submit_function("},{"line_number":165,"context_line":"            self, method, name\u003dNone, result_filter_cb\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_0265981c","line":162,"in_reply_to":"fa7ab95a_e218b477","updated":"2016-08-29 23:28:31.000000000","message":"shade would be deleting its implementation and just passing through to ksa. We can\u0027t delete it from shade, since it\u0027s part of the public API. So we either put the compat here, or we\u0027d have to have shade monkey-patch it on import. I don\u0027t feel super strong either way.","commit_id":"477c14831db40d3f5adaf492219f05cce32d2630"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"99b9c7c832a429bc924532e7fdf19aca78eb4d95","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            try:"},{"line_number":80,"context_line":"                self.done(self.main(client))"},{"line_number":81,"context_line":"            except keystoneauth1.exceptions.RetriableConnectionFailure:"},{"line_number":82,"context_line":"                client.log.debug("},{"line_number":83,"context_line":"                    \"Connection failure for {name}, retrying\".format("},{"line_number":84,"context_line":"                        name\u003dtype(self).__name__))"},{"line_number":85,"context_line":"                self.done(self.main(client))"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_2f31875a","line":82,"updated":"2016-11-28 21:02:50.000000000","message":"This assumes an interface that may not always be true - we should maybe make a self._log that is its own logger (like we do below in TaskManager)","commit_id":"ce3c924187cf3fb1ba604bea38bb4cc8342afb6b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d9450d6dcd10659141ece3da099fb32514c491e5","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            try:"},{"line_number":80,"context_line":"                self.done(self.main(client))"},{"line_number":81,"context_line":"            except keystoneauth1.exceptions.RetriableConnectionFailure:"},{"line_number":82,"context_line":"                client.log.debug("},{"line_number":83,"context_line":"                    \"Connection failure for {name}, retrying\".format("},{"line_number":84,"context_line":"                        name\u003dtype(self).__name__))"},{"line_number":85,"context_line":"                self.done(self.main(client))"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_af003735","line":82,"in_reply_to":"5a74a57a_2f31875a","updated":"2016-11-28 21:06:57.000000000","message":"good point. I\u0027ll get that handled in the next patch-set or on a follow up depending on the other comments.\n\n++","commit_id":"ce3c924187cf3fb1ba604bea38bb4cc8342afb6b"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"083ea109f8d1aaeecebf9f723d11d81da2ffb2d6","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        else:"},{"line_number":135,"context_line":"            self._result_filter_cb \u003d result_filter_cb"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def stop(self):"},{"line_number":138,"context_line":"        \"\"\"Direct action passthrough TaskManager.\"\"\""},{"line_number":139,"context_line":"        pass"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_f5be82ac","line":137,"updated":"2016-11-28 21:51:36.000000000","message":"This feels like the wrong interface based on the conversations we\u0027ve had about expected use.  The start/stop approach is specific to something external, and should not be part of the base interface, probably a subclass.\n\nIt seems like what your really want is a chain of decorators which each have a \"before\" and \"after\" method for the call to the remote service.  Submit task seems like it should really be split between these two, but leave the call to meth(**self.args) out of it.\n\nWhat is more important, I think, is the interface around how the session is going to call these shim methods.\n\nIf I understand correctly, what you are really looking for here is aspect oriented programming: the API call is the cut point, and you want specific behavior before or after a method call.\n\nFor rate limiting, the before call would make sure sufficient time had passed since the last call before returning.\n\nFor logging, before logs the request values, after logs the response.\n\nAnd so on.","commit_id":"ce3c924187cf3fb1ba604bea38bb4cc8342afb6b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0772850c8bb5d1abb1eb389d55fde134c5ba68d2","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        else:"},{"line_number":135,"context_line":"            self._result_filter_cb \u003d result_filter_cb"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def stop(self):"},{"line_number":138,"context_line":"        \"\"\"Direct action passthrough TaskManager.\"\"\""},{"line_number":139,"context_line":"        pass"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_b53dea2c","line":137,"in_reply_to":"5a74a57a_f5be82ac","updated":"2016-11-28 21:54:03.000000000","message":"Stop/run are removed. they are to be implemented as needed by the subclass implementation. KSA would never call start/run, therefore it is no longer an interface here.\n\nSee next patchset.","commit_id":"ce3c924187cf3fb1ba604bea38bb4cc8342afb6b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"cf40c6b199fb2e4d1b5e43c47ca01e0294b0b80b","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            self._result_filter_cb \u003d result_filter_cb"},{"line_number":131,"context_line":"        self.log \u003d log or utils.get_logger(__name__)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def submit_task(self, task, raw\u003dFalse):"},{"line_number":135,"context_line":"        \"\"\"Submit and execute the given task."},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_c3b51432","line":133,"updated":"2016-11-29 21:45:47.000000000","message":"Looks like there is a pep8 violation here.","commit_id":"6fccdaf79d9eb0064bac73f0dbfb30d789c1266c"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"4559b7609c07f23c8b21d01fc2361915f95209bd","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            self._result_filter_cb \u003d result_filter_cb"},{"line_number":131,"context_line":"        self.log \u003d log or utils.get_logger(__name__)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def submit_task(self, task, raw\u003dFalse):"},{"line_number":135,"context_line":"        \"\"\"Submit and execute the given task."},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_86916a55","line":133,"in_reply_to":"5a74a57a_c3b51432","updated":"2016-11-29 22:27:52.000000000","message":"yep. fixed in next","commit_id":"6fccdaf79d9eb0064bac73f0dbfb30d789c1266c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"cf40c6b199fb2e4d1b5e43c47ca01e0294b0b80b","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    # removed at this point unless shade/nodepool monkey patch it"},{"line_number":153,"context_line":"    # in. In deference to making lives of our consumers better"},{"line_number":154,"context_line":"    # this is maintained here."},{"line_number":155,"context_line":"    submitTask \u003d submit_task"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def submit_function("},{"line_number":158,"context_line":"            self, method, name\u003dNone, result_filter_cb\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_6308c12e","line":155,"updated":"2016-11-29 21:45:47.000000000","message":"This is just allowing consumers two different ways to submit a task, right? I can use something like:\n\n  tm \u003d task_manager.TaskManager(c, \u0027my_task_manager\u0027)\n  tm.submitTask(task)\n\nor \n\n  tm.submit_task(task)\n\nDo we have a preference for which one folks use? The comment above suggests that we should at least use a deprecation warning when using `submitTask`, but this is new to me. Regardless, I\u0027m just curious.","commit_id":"6fccdaf79d9eb0064bac73f0dbfb30d789c1266c"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"4559b7609c07f23c8b21d01fc2361915f95209bd","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    # removed at this point unless shade/nodepool monkey patch it"},{"line_number":153,"context_line":"    # in. In deference to making lives of our consumers better"},{"line_number":154,"context_line":"    # this is maintained here."},{"line_number":155,"context_line":"    submitTask \u003d submit_task"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def submit_function("},{"line_number":158,"context_line":"            self, method, name\u003dNone, result_filter_cb\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_068c7a34","line":155,"in_reply_to":"5a74a57a_6308c12e","updated":"2016-11-29 22:27:52.000000000","message":"the submit_task is more correct. We can add a deprecation warning, but it wont be removed in any real timeline. due to the strong contract on the public interface we\u0027re sourcing from.","commit_id":"6fccdaf79d9eb0064bac73f0dbfb30d789c1266c"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"b63e196f1fc48e092addc97903f815c899edf749","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            # Retry one time if we get a retriable connection failure"},{"line_number":75,"context_line":"            try:"},{"line_number":76,"context_line":"                self.done(self.main(client))"},{"line_number":77,"context_line":"            except keystoneauth1.exceptions.RetriableConnectionFailure:"},{"line_number":78,"context_line":"                self.log.debug("},{"line_number":79,"context_line":"                    \"Connection failure for {name}, retrying\".format("},{"line_number":80,"context_line":"                        name\u003dtype(self).__name__))"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a74a57a_b73052ea","line":77,"updated":"2016-11-30 00:24:06.000000000","message":"I\u0027m not sure we should do this if we have all requests coming through a task manager.","commit_id":"2c0d5128440436fb2ff8fd84b1a6400591835374"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"b63e196f1fc48e092addc97903f815c899edf749","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    return result"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"def generate_task_class(method, name, result_filter_cb):"},{"line_number":93,"context_line":"    if name is None:"},{"line_number":94,"context_line":"        if callable(method):"},{"line_number":95,"context_line":"            name \u003d method.__name__"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a74a57a_176d86cc","line":92,"updated":"2016-11-30 00:24:06.000000000","message":"does this need to be like this? it looks like a TaskClassFactory","commit_id":"2c0d5128440436fb2ff8fd84b1a6400591835374"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"b63e196f1fc48e092addc97903f815c899edf749","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    # TaskManager implementation in shade/nodepool. This can\u0027t be"},{"line_number":151,"context_line":"    # removed at this point unless shade/nodepool monkey patch it"},{"line_number":152,"context_line":"    # in. In deference to making lives of our consumers better"},{"line_number":153,"context_line":"    # this is maintained here."},{"line_number":154,"context_line":"    submitTask \u003d submit_task"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def submit_function("}],"source_content_type":"text/x-python","patch_set":6,"id":"5a74a57a_979ef661","line":153,"updated":"2016-11-30 00:24:06.000000000","message":"i can accept shade\u0027s compat issue here - but shouldn\u0027t shade be subclassing TaskManager anyway and can maintain it there?","commit_id":"2c0d5128440436fb2ff8fd84b1a6400591835374"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e996e22006aea98a396374fd23a682933aed4783","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def __init__(self):"},{"line_number":35,"context_line":"        self.log \u003d utils.get_logger(__name__)"},{"line_number":36,"context_line":"        self.name \u003d type(self).__name__"},{"line_number":37,"context_line":"        self.resp \u003d None"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __enter__(self):"},{"line_number":40,"context_line":"        \"\"\"Context Manager enter method."}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_22630b1c","line":37,"range":{"start_line":37,"start_character":12,"end_line":37,"end_character":13},"updated":"2016-12-01 20:06:35.000000000","message":"why these? there\u0027s no use for these vars in the default implementation?","commit_id":"c0dcf5fd6f2527f327577635511ed97fafddc96b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"54184a0e14d5826326374056cfeddb96f5546ab1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def __init__(self):"},{"line_number":35,"context_line":"        self.log \u003d utils.get_logger(__name__)"},{"line_number":36,"context_line":"        self.name \u003d type(self).__name__"},{"line_number":37,"context_line":"        self.resp \u003d None"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __enter__(self):"},{"line_number":40,"context_line":"        \"\"\"Context Manager enter method."}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_753a1b38","line":37,"range":{"start_line":37,"start_character":12,"end_line":37,"end_character":13},"in_reply_to":"3a71b18c_22630b1c","updated":"2016-12-01 20:18:15.000000000","message":"Those were meant to be deleted.","commit_id":"c0dcf5fd6f2527f327577635511ed97fafddc96b"}]}
