)]}'
{"futurist/_futures.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cf7d076cbd1c4549e18513f52df5b7aa5f5c478c","unresolved":true,"context_lines":[{"line_number":715,"context_line":"        })"},{"line_number":716,"context_line":""},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"class DelayedExecutorMixinBase(_futures.Executor):"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    class Task:"},{"line_number":721,"context_line":"        def __init__(self, fn, args, kwargs, future: Future, delay: float):"}],"source_content_type":"text/x-python","patch_set":1,"id":"53b36e41_111fb558","line":718,"updated":"2026-02-03 13:45:06.000000000","message":"Add proper doc","commit_id":"e2c94d56d35b9edc938c3b00f20bc048bef45d78"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cf7d076cbd1c4549e18513f52df5b7aa5f5c478c","unresolved":true,"context_lines":[{"line_number":748,"context_line":"        heapq.heapify(self._queue)"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"        self._sentinel \u003d self.Task("},{"line_number":751,"context_line":"            lambda: None, (), {}, None, sys.float_info.max)"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"        self._shutdown_requested \u003d False"},{"line_number":754,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e560c1fa_010d9ecc","line":751,"updated":"2026-02-03 13:45:06.000000000","message":"sys.float_int.max is probably unsafe here as we will add time.monotic() to it when the Task is created. It would be better to create a Task derivative like SentinelTask or LastTask that overrides `__lt__` so that LastTask is always having the furthest deadline.","commit_id":"e2c94d56d35b9edc938c3b00f20bc048bef45d78"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cf7d076cbd1c4549e18513f52df5b7aa5f5c478c","unresolved":true,"context_lines":[{"line_number":752,"context_line":""},{"line_number":753,"context_line":"        self._shutdown_requested \u003d False"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"        self._scheduler \u003d self._start_thread(self._schedule)"},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"    def _log(self, msg, *args):"},{"line_number":758,"context_line":"        print(msg % args)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f47e872_3482658f","line":755,"updated":"2026-02-03 13:45:06.000000000","message":"Making the thread daemon might be needed...","commit_id":"e2c94d56d35b9edc938c3b00f20bc048bef45d78"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cf7d076cbd1c4549e18513f52df5b7aa5f5c478c","unresolved":true,"context_lines":[{"line_number":755,"context_line":"        self._scheduler \u003d self._start_thread(self._schedule)"},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"    def _log(self, msg, *args):"},{"line_number":758,"context_line":"        print(msg % args)"},{"line_number":759,"context_line":"        LOG.debug(msg, *args)"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"    def _task_wrapper(self, task):"}],"source_content_type":"text/x-python","patch_set":1,"id":"6fc75b2a_4af86cab","line":758,"updated":"2026-02-03 13:45:06.000000000","message":"drop this","commit_id":"e2c94d56d35b9edc938c3b00f20bc048bef45d78"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cf7d076cbd1c4549e18513f52df5b7aa5f5c478c","unresolved":true,"context_lines":[{"line_number":756,"context_line":""},{"line_number":757,"context_line":"    def _log(self, msg, *args):"},{"line_number":758,"context_line":"        print(msg % args)"},{"line_number":759,"context_line":"        LOG.debug(msg, *args)"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"    def _task_wrapper(self, task):"},{"line_number":762,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"c6d2aa47_c7697613","line":759,"updated":"2026-02-03 13:45:06.000000000","message":"I\u0027m not sure how futurist handles logging. Are we OK to log extensively in this class?","commit_id":"e2c94d56d35b9edc938c3b00f20bc048bef45d78"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cf7d076cbd1c4549e18513f52df5b7aa5f5c478c","unresolved":true,"context_lines":[{"line_number":847,"context_line":"            return task.future"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"    def shutdown(self, wait: bool \u003d True) -\u003e None:"},{"line_number":850,"context_line":"        pass"},{"line_number":851,"context_line":""},{"line_number":852,"context_line":"        \"\"\"Shutdown the executor\"\"\""},{"line_number":853,"context_line":"        self._log(\"Shutdown requested\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"776653d5_151da79d","line":850,"updated":"2026-02-03 13:45:06.000000000","message":"drop it\n(obviously we are missing a lot of test coverage as noted in the commit message)","commit_id":"e2c94d56d35b9edc938c3b00f20bc048bef45d78"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cf7d076cbd1c4549e18513f52df5b7aa5f5c478c","unresolved":true,"context_lines":[{"line_number":881,"context_line":""},{"line_number":882,"context_line":"    @property"},{"line_number":883,"context_line":"    def alive(self) -\u003e bool:"},{"line_number":884,"context_line":"        return self._scheduler.is_alive() or super().alive"},{"line_number":885,"context_line":""},{"line_number":886,"context_line":""},{"line_number":887,"context_line":"class GreenDelayedExecutorMixin(DelayedExecutorMixinBase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ee54539b_966e06cb","line":884,"updated":"2026-02-03 13:45:06.000000000","message":"I\u0027m not sure if is_alive exists on GreenThread, we might need a compatibility method here","commit_id":"e2c94d56d35b9edc938c3b00f20bc048bef45d78"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cf7d076cbd1c4549e18513f52df5b7aa5f5c478c","unresolved":true,"context_lines":[{"line_number":884,"context_line":"        return self._scheduler.is_alive() or super().alive"},{"line_number":885,"context_line":""},{"line_number":886,"context_line":""},{"line_number":887,"context_line":"class GreenDelayedExecutorMixin(DelayedExecutorMixinBase):"},{"line_number":888,"context_line":"    @staticmethod"},{"line_number":889,"context_line":"    def _get_condition_object():"},{"line_number":890,"context_line":"        return _green.threading.condition_object()"}],"source_content_type":"text/x-python","patch_set":1,"id":"58129791_b2024f76","line":887,"updated":"2026-02-03 13:45:06.000000000","message":"This extra layer is only needed as futurist wants to support using eventlet primitives without monkey_patching. So we need to replace all std lib primitives with eventlet based variants to make the mixin work with eventlet outside of a monkey patched env.","commit_id":"e2c94d56d35b9edc938c3b00f20bc048bef45d78"}]}
