-
-
Notifications
You must be signed in to change notification settings - Fork 119
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Just a concept of gather-like method #1966
base: master
Are you sure you want to change the base?
Conversation
returns/methods/gather.py
Outdated
|
||
async with anyio.create_task_group() as tg: | ||
containers_t = tuple(containers) | ||
results: list[IOResult] = len(containers_t)*[IOResult(None)] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you can use a dict[int, IOResult[R, E]]
here instead. Where int
is the index of the running task.
returns/methods/gather.py
Outdated
|
||
for i, coro in enumerate(containers_t): | ||
tg.start_soon(run_task, coro, i) | ||
return tuple(results) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
and return a tuple sorted by keys of the this dict.
tests/test_methods/test_gather.py
Outdated
]) | ||
def test_gather(containers, expected): | ||
"""Test partition function.""" | ||
assert gather(containers) == expected |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should not be possible. You cannot mix Future
and FutureResult
in one operation without an explicit cast.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(from mypy's point of view, I mean)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is not supposed to mix IO operations that can and can not fail? Or it is just mypy limitation?
returns/methods/__init__.py
Outdated
@@ -1,4 +1,5 @@ | |||
from returns.methods.cond import cond as cond | |||
from returns.methods.gather import gather as gather |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's create a new file: async_.py
and put it there.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is naming of the method good(gather)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yeap
Co-authored-by: sobolevn <[email protected]>
Before processing further, here a little snippet how it could look like.
CHANGELOG.md
🙏 Please, if you or your company finds
dry-python
valuable, help us sustain the project by sponsoring it transparently on https://github.com/sponsors/dry-python. As a thank you, your profile/company logo will be added to our main README which receives hundreds of unique visitors per day.