Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • 09:55
    dependabot-preview[bot] synchronize #1384
  • 09:55

    dependabot-preview[bot] on pip

    Bump ipython from 7.9.0 to 7.12… (compare)

  • 09:55
    dependabot-preview[bot] edited #1384
  • 09:54
    dependabot-preview[bot] edited #1384
  • 09:54

    dependabot-preview[bot] on pip

    (compare)

  • 09:54

    njsmith on master

    Bump coverage from 4.5.4 to 5.0… Stop closing stdin in tests Wh… Stop leaking an fd in test_pipe… and 2 more (compare)

  • 09:53
    njsmith closed #1364
  • 06:40
    pquentin synchronize #1364
  • 06:40

    pquentin on pip

    Stop closing the same fd twice … (compare)

  • Feb 15 23:37
    wgwz synchronize #1396
  • Feb 15 22:51
    wgwz synchronize #1396
  • Feb 15 22:05
    wgwz synchronize #1396
  • Feb 15 10:13
    pquentin reopened #1396
  • Feb 15 10:13
    pquentin closed #1396
  • Feb 13 16:53

    smurfix on master

    Async-ize bash completion (compare)

  • Feb 13 16:52

    smurfix on v7.0.90

    Async-ize bash completion (compare)

  • Feb 13 16:39

    smurfix on master

    start 7.1 Fix get_current_context typo in… fix link in unicode_literals er… and 72 more (compare)

  • Feb 13 07:05
    pquentin review_requested #1364
Tim Stumbaugh
@tjstum_gitlab
@njsmith Possibly. I will have to do some soul searching to think about if I can really take it on. I would also want to do more to understand its internals and style, so I don't just become a bad steward. I'll give it some more thought!
Nathaniel J. Smith
@njsmith
@tjstum_gitlab no worries! you're also welcome to volunteer on a more limited basis, if that works better for you, or you want to get a taste for it before deciding. Or do nothing at all :-)
Alex Boag-Munroe
@Ninpo
When creating tests for trio apps, how is one supposed to test individual coroutine calls? In a normal app I tend to go into trio.run pretty early, but for testing I'd want to test in as small chunks as possible
nursery jobs can't return things either so this is unchartered waters for me
Quentin Pradet
@pquentin
are you using pytest-trio?
Alex Boag-Munroe
@Ninpo
I can be, I've gone with pytest
ah ha, and there's docs, thanks @pquentin
Quentin Pradet
@pquentin
:+1:
Nathaniel J. Smith
@njsmith
A long post grappling with the names of Stream and Channel: python-trio/trio#1208
Matthias Urlichs
@smurfix
@njsmith The list misses two backticks.
Nathaniel J. Smith
@njsmith
@smurfix fixed, thanks
Dave Hirschfeld
@dhirschfeld
Maybe Channel[T] is fine and Stream just needs to be renamed to ByteStream to prevent any confusion. It breaks the naming symmetry you have in the post but that does highlight that they're different things so ¯\(ツ)/¯?
dhirschfeld @dhirschfeld returns to lurking...
Peter Sutton
@dj-foxxy

I'm using trio.Path.read_text(), code worked until I started using a nursery. Now I get,

  File "/usr/lib/python3.7/site-packages/trio/_core/_traps.py", line 43, in cancel_shielded_checkpoint
    return (await _async_yield(CancelShieldedCheckpoint)).unwrap()
AttributeError: 'NoneType' object has no attribute 'unwrap'

Does this look like a common error? Do I need to post more code?

oakkitten
@oakkitten
if there's a Stream[bytes] and ByteStream, that's even more confusing
oakkitten
@oakkitten
one day someone will want to subclass Stream[bytes] that makes bytes uppercase and they will name it UppercasingByteStream
Laura F. D.
@Fuyukai
I mean the stdlib isn't any better
List[bytes] and bytearray comes to mind
Peter Sutton
@dj-foxxy
the process async context manager tries to kill on cancellation. This fails 'Operation not permitted' if the subprocess is sudo. How can I customize the behaviour?
Tim Stumbaugh
@tjstum_gitlab
Huh, I always thought that sudo relays signals to its child
Peter Sutton
@dj-foxxy
@tjstum_gitlab I'm not sure of the details but this example highlights the issue:
import trio

async def main():
    with trio.move_on_after(1):
        await trio.run_process(['sleep', '2'])
    print('Cancelled 1')

    with trio.move_on_after(1):
        await trio.run_process(['sudo', 'sleep', '2'])
    print('Cancelled 2')

trio.run(main)
Alex Boag-Munroe
@Ninpo
Isn't there a switch that helps that so subprocesses can be killed by the adult
preexec_fn=os.setpgrp I needed this so that my child processes could be killed by parent
Peter Sutton
@dj-foxxy
@Ninpo just passing preexec_fn=os.setpgrp doesn't seem to solve the problem.
Alex Boag-Munroe
@Ninpo
After the list not part of it right
trio.run_process(['sudo', 'sleep', '2'], preexec_fn=os.setpgrp)
Peter Sutton
@dj-foxxy
@Ninpo this is what I've got:
import os

import trio


async def main():
    with trio.move_on_after(1):
        await trio.run_process(['sleep', '2'])
    print('Cancelled 1')

    with trio.move_on_after(1):
        await trio.run_process(['sudo', 'sleep', '2'], preexec_fn=os.setpgrp)
    print('Cancelled 2')

trio.run(main)
Alex Boag-Munroe
@Ninpo
hrm. That's definitely usually the way to solve this problem :/
Peter Sutton
@dj-foxxy
@Ninpo, yep I use that solution with plain subprocess but it doesn't seem to be working here for me.
Alex Boag-Munroe
@Ninpo
Might be worth seeing how move_on_after is trying to kill it
Peter Sutton
@dj-foxxy
Also, is there a way of limited the max number of subprocesses?
NoskLo
@nosklo_gitlab
Just use a CapacityLimiter
limit = trio.CapacityLimiter(5)
... then later ...
async with limit:
    await trio.run_process(....)
Peter Sutton
@dj-foxxy
@nosklo_gitlab Exactly what I need!
Alex Boag-Munroe
@Ninpo
Is that new? I normally use Semaphore
NoskLo
@nosklo_gitlab
@Ninpo it is like a Semaphore but more specific to this use case; Also it has some additional error checking built-in
Alex Boag-Munroe
@Ninpo
Just finished reading the docs on it, nice
and probably what I'll use where I'd used Semaphore before :)
saves me passing it around so I can acquire and release in the right place
Tim Stumbaugh
@tjstum_gitlab

Calling socket.is_readable() on a closed socket raises a ValueError:

trio/_socket.py in is_readable(self)
    485             return bool(rready)
    486         p = select.poll()
--> 487         p.register(self._sock, select.POLLIN)
    488         return bool(p.poll(0))
    489

ValueError: file descriptor cannot be a negative integer (-1)

i can put together a patch to change that to a trio.ClosedResourceError if that's the desired approach there

Peter Sutton
@dj-foxxy
I've just "finished" my first project using trio: a simple MAC scanner. If anyone has got a seconds, I'd like some feedback (am I using trio correctly). https://git.fds.im/snippets/4
Nathaniel J. Smith
@njsmith
@dj-foxxy that NoneType error in traps.py is super weird looking. Did you figure it out?
@dj-foxxy and that's a good question about how trio should handle the case where it fails to kill the child process... Can you open an issue to discuss more fully?
@tjstum_gitlab ValueError does seem like the wrong thing there, especially because it's probably inconsistent between different platforms...
I guess the other option for an exception would be OSError(EBADFD) or however you spell that. But ClosedResourceError probably makes more sense, because there isn't actually any syscall returning EBADFD
Nathaniel J. Smith
@njsmith
@dj-foxxy I did a quick read of the code and didn't really see anything to comment on, it seemed pretty reasonable :-)
(I didn't try to validate the Condition usage)
Tim Stumbaugh
@tjstum_gitlab
hrm? os.read(-1, 4096) certainly seems to fail with BADFD. or do you mean "it's never something that isn't just a programming error"
Nathaniel J. Smith
@njsmith
@tjstum_gitlab I mean that when you call is_readable and it fails, the failure doesn't involve a syscall returning EBADFD