)]}'
{"futurist/tests/test_waiters.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"33c52f430eee5a6a2369c90d9c83fd622356c120","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import testscenarios"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import eventlet"},{"line_number":20,"context_line":"import futurist"},{"line_number":21,"context_line":"from futurist.tests import base"},{"line_number":22,"context_line":"from futurist import waiters"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_0e4cf36e","line":19,"updated":"2015-07-07 14:15:49.000000000","message":"nit: import grouping rules usually imply grouping evenlet with testscenarios. All local imports should go after new line.","commit_id":"928e68f852f1621242f0668cd0cd793cebe88e2e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"e88a2705a64467049466c89aa04df549444dbdfe","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import testscenarios"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import eventlet"},{"line_number":20,"context_line":"import futurist"},{"line_number":21,"context_line":"from futurist.tests import base"},{"line_number":22,"context_line":"from futurist import waiters"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_216d3304","line":19,"in_reply_to":"ba3cc151_0e4cf36e","updated":"2015-07-07 21:55:44.000000000","message":"Done","commit_id":"928e68f852f1621242f0668cd0cd793cebe88e2e"}],"futurist/waiters.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2aea0b0771880012049be255b7652de7b89612ef","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from concurrent import futures as _futures"},{"line_number":18,"context_line":"from concurrent.futures import _base"},{"line_number":19,"context_line":"import futurist as _futurist"},{"line_number":20,"context_line":"from futurist import _utils"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_641617a9","line":18,"updated":"2015-06-30 14:41:06.000000000","message":"nit: new line between stdlib and local imports","commit_id":"6ae5f506d6e5e89ccba70bfaf13f0e8c28f3ab9e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2aea0b0771880012049be255b7652de7b89612ef","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from concurrent import futures as _futures"},{"line_number":18,"context_line":"from concurrent.futures import _base"},{"line_number":19,"context_line":"import futurist as _futurist"},{"line_number":20,"context_line":"from futurist import _utils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_040dcb8f","line":19,"updated":"2015-06-30 14:41:06.000000000","message":"any particular reason to do renaming of futurist and futures import? these are public modules, and I\u0027m pretty sure you don\u0027t do \"import time as _time\" in previous patch :)","commit_id":"6ae5f506d6e5e89ccba70bfaf13f0e8c28f3ab9e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"91d5cc521952dc85c38825da3ab9fc0e2c1c77d2","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from concurrent import futures as _futures"},{"line_number":18,"context_line":"from concurrent.futures import _base"},{"line_number":19,"context_line":"import futurist as _futurist"},{"line_number":20,"context_line":"from futurist import _utils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_d0f6baf8","line":19,"in_reply_to":"ba3cc151_040dcb8f","updated":"2015-06-30 15:19:31.000000000","message":"Nah, I\u0027ll fix this :-P","commit_id":"6ae5f506d6e5e89ccba70bfaf13f0e8c28f3ab9e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2aea0b0771880012049be255b7652de7b89612ef","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    Works correctly with both green and non-green futures (but not both"},{"line_number":38,"context_line":"    together, since this can\u0027t be guaranteed to avoid dead-lock due to how"},{"line_number":39,"context_line":"    the waiting implementations are different when green threads are being"},{"line_number":40,"context_line":"    used)."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    Returns pair (done futures, not done futures)."},{"line_number":43,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_24100fa8","line":40,"updated":"2015-06-30 14:41:06.000000000","message":"Probably you could create an imperfect hybrid implementation by first waiting on green futures. Not sure it\u0027s worth effort though, but looks a bit better to me than raise","commit_id":"6ae5f506d6e5e89ccba70bfaf13f0e8c28f3ab9e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"91d5cc521952dc85c38825da3ab9fc0e2c1c77d2","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    Works correctly with both green and non-green futures (but not both"},{"line_number":38,"context_line":"    together, since this can\u0027t be guaranteed to avoid dead-lock due to how"},{"line_number":39,"context_line":"    the waiting implementations are different when green threads are being"},{"line_number":40,"context_line":"    used)."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    Returns pair (done futures, not done futures)."},{"line_number":43,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_9092729e","line":40,"in_reply_to":"ba3cc151_24100fa8","updated":"2015-06-30 15:19:31.000000000","message":"Hmmm, possibly.","commit_id":"6ae5f506d6e5e89ccba70bfaf13f0e8c28f3ab9e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2aea0b0771880012049be255b7652de7b89612ef","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    if not _utils.EVENTLET_AVAILABLE or _greenthreading is None:"},{"line_number":87,"context_line":"        raise RuntimeError(\u0027Eventlet is needed to wait on green futures\u0027)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    with _base._AcquireFutures(fs):"},{"line_number":90,"context_line":"        done, not_done \u003d _partition_futures(fs)"},{"line_number":91,"context_line":"        if done:"},{"line_number":92,"context_line":"            return _base.DoneAndNotDoneFutures(done, not_done)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_c427e310","line":89,"updated":"2015-06-30 14:41:06.000000000","message":"using of \"private\" element of another module","commit_id":"6ae5f506d6e5e89ccba70bfaf13f0e8c28f3ab9e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"6b75c65b132c4ee6a84a29e14629ea1270426398","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    if not _utils.EVENTLET_AVAILABLE or _greenthreading is None:"},{"line_number":87,"context_line":"        raise RuntimeError(\u0027Eventlet is needed to wait on green futures\u0027)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    with _base._AcquireFutures(fs):"},{"line_number":90,"context_line":"        done, not_done \u003d _partition_futures(fs)"},{"line_number":91,"context_line":"        if done:"},{"line_number":92,"context_line":"            return _base.DoneAndNotDoneFutures(done, not_done)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_7069eebd","line":89,"in_reply_to":"ba3cc151_c427e310","updated":"2015-06-30 15:18:13.000000000","message":"Yup, sadly the upstream python folks made the whole \u0027_base\u0027 thing \u0027private\u0027\n\nSee: https://github.com/agronholm/pythonfutures/blob/master/concurrent/futures/_base.py\n\nI\u0027m unsure why, but this is what they did, soooo, not much can be done about that IMHO, this \u0027_base\u0027 and code-base is stable, and is needed to make this work correctly. The waiters that exist (https://github.com/agronholm/pythonfutures/blob/master/concurrent/futures/_base.py#L56) in that code don\u0027t allow for changing the lock type to something that is green, so we are sorta stuck, either don\u0027t use that module at all, or use it\u0027s \u0027private\u0027 parts (those private parts have not changed since it was created)...","commit_id":"6ae5f506d6e5e89ccba70bfaf13f0e8c28f3ab9e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"33c52f430eee5a6a2369c90d9c83fd622356c120","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"# We need access to the \u0027_base\u0027 to be able to get at the future states"},{"line_number":20,"context_line":"# and to be able to make a green waiter (that works like a non-green waiter)"},{"line_number":21,"context_line":"# with green events, instead of threading based ones..."},{"line_number":22,"context_line":"from concurrent.futures import _base"},{"line_number":23,"context_line":"import six"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_2e47774c","line":21,"updated":"2015-07-07 14:15:49.000000000","message":"sigh. I really wish they don\u0027t refactor this code...","commit_id":"928e68f852f1621242f0668cd0cd793cebe88e2e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"0d957486352285bcf13a8a87dadc1909e7a2cf6d","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"# We need access to the \u0027_base\u0027 to be able to get at the future states"},{"line_number":20,"context_line":"# and to be able to make a green waiter (that works like a non-green waiter)"},{"line_number":21,"context_line":"# with green events, instead of threading based ones..."},{"line_number":22,"context_line":"from concurrent.futures import _base"},{"line_number":23,"context_line":"import six"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_ef4bc657","line":21,"in_reply_to":"ba3cc151_2e47774c","updated":"2015-07-07 15:51:22.000000000","message":"hasn\u0027t happened so far, if it does, we\u0027ll address what to do.","commit_id":"928e68f852f1621242f0668cd0cd793cebe88e2e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"e88a2705a64467049466c89aa04df549444dbdfe","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"# We need access to the \u0027_base\u0027 to be able to get at the future states"},{"line_number":20,"context_line":"# and to be able to make a green waiter (that works like a non-green waiter)"},{"line_number":21,"context_line":"# with green events, instead of threading based ones..."},{"line_number":22,"context_line":"from concurrent.futures import _base"},{"line_number":23,"context_line":"import six"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_814d1f9b","line":21,"in_reply_to":"ba3cc151_ef4bc657","updated":"2015-07-07 21:55:44.000000000","message":"Adjusted it to be less dependent on it.","commit_id":"928e68f852f1621242f0668cd0cd793cebe88e2e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"33c52f430eee5a6a2369c90d9c83fd622356c120","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    return _wait_for(fs,"},{"line_number":75,"context_line":"                     lambda fs:"},{"line_number":76,"context_line":"                     futures.wait(fs, timeout\u003dtimeout,"},{"line_number":77,"context_line":"                                  return_when\u003dfutures.ALL_COMPLETED),"},{"line_number":78,"context_line":"                     lambda fs: _wait_for_all_green(fs, timeout\u003dtimeout),"},{"line_number":79,"context_line":"                     lambda green_fs, non_green_fs:"},{"line_number":80,"context_line":"                     RuntimeError(\"Can not wait on %s green futures and %s\""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_ce74cb9d","line":77,"updated":"2015-07-07 14:15:49.000000000","message":"what about passing in only return_when, not the whole lambda?","commit_id":"928e68f852f1621242f0668cd0cd793cebe88e2e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"e88a2705a64467049466c89aa04df549444dbdfe","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    return _wait_for(fs,"},{"line_number":75,"context_line":"                     lambda fs:"},{"line_number":76,"context_line":"                     futures.wait(fs, timeout\u003dtimeout,"},{"line_number":77,"context_line":"                                  return_when\u003dfutures.ALL_COMPLETED),"},{"line_number":78,"context_line":"                     lambda fs: _wait_for_all_green(fs, timeout\u003dtimeout),"},{"line_number":79,"context_line":"                     lambda green_fs, non_green_fs:"},{"line_number":80,"context_line":"                     RuntimeError(\"Can not wait on %s green futures and %s\""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_e1774bd2","line":77,"in_reply_to":"ba3cc151_ce74cb9d","updated":"2015-07-07 21:55:44.000000000","message":"Done","commit_id":"928e68f852f1621242f0668cd0cd793cebe88e2e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"33c52f430eee5a6a2369c90d9c83fd622356c120","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                     RuntimeError(\"Can not wait on %s green futures and %s\""},{"line_number":81,"context_line":"                                  \" non-green futures in the same\""},{"line_number":82,"context_line":"                                  \" `wait_for_all` call\" % (green_fs,"},{"line_number":83,"context_line":"                                                            non_green_fs)))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"def wait_for_any(fs, timeout\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_ee774f9d","line":83,"updated":"2015-07-07 14:15:49.000000000","message":"this error is the same for both invocations, except for call name, probably worth just making one exception","commit_id":"928e68f852f1621242f0668cd0cd793cebe88e2e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"e88a2705a64467049466c89aa04df549444dbdfe","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                     RuntimeError(\"Can not wait on %s green futures and %s\""},{"line_number":81,"context_line":"                                  \" non-green futures in the same\""},{"line_number":82,"context_line":"                                  \" `wait_for_all` call\" % (green_fs,"},{"line_number":83,"context_line":"                                                            non_green_fs)))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"def wait_for_any(fs, timeout\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_01734fe8","line":83,"in_reply_to":"ba3cc151_ee774f9d","updated":"2015-07-07 21:55:44.000000000","message":"Done","commit_id":"928e68f852f1621242f0668cd0cd793cebe88e2e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ce6fc4590e9013dfbe32f096d31c41eada91e63b","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"#: Named tuple returned from ``wait_for*`` calls."},{"line_number":39,"context_line":"DoneAndNotDoneFutures \u003d collections.namedtuple("},{"line_number":40,"context_line":"    \u0027DoneAndNotDoneFutures\u0027, \u0027done not_done\u0027)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"_DONE_STATES \u003d frozenset(["},{"line_number":43,"context_line":"    _base.CANCELLED_AND_NOTIFIED,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_5bf0d491","line":40,"updated":"2015-07-10 07:21:08.000000000","message":"nit: I usually prefer syntax namedtuple(\u0027NAME\u0027, (\u0027done\u0027, \u0027not_done\u0027))\n\nmaking it parse a string looks a bit weird to me","commit_id":"e0979e662cacdb1edb9e36be9e4d86daa669832e"}]}
