On 17 January 2018 at 11:27, Nathaniel Smith <n...@pobox.com> wrote:
> On Tue, Jan 16, 2018 at 2:44 PM, Yury Selivanov <yselivanov...@gmail.com> 
> wrote:
>> 4. ContextVar.reset(token) now raises a ValueError if the token was
>> created in a different Context.
>
> A minor bit of polish: given that Token objects have to track the
> associated ContextVar anyway, I think it'd be cleaner if instead of
> doing:
>
> token = cvar.set(...)
> cvar.reset(token)
>
> we made the API be:
>
> token = cvar.set(...)
> token.reset()

As a counterpoint to this, consider the case where you're working with
*two* cvars:


    token1 = cvar1.set(...)
    token2 = cvar2.set(...)
    ...
    cvar1.reset(token1)
    ...
    cvar2.reset(token2)

At the point where the resets happen, you know exactly which cvar is
being reset, even if you don't know where the token was created.

With reset-on-the-token, you're entirely reliant on variable naming to
know which ContextVar is going to be affected:

    token1 = cvar1.set(...)
    token2 = cvar2.set(...)
    ...
    token1.reset() # Resets cvar1
    ...
    token2.reset() # Resets cvar2

If someone really does want an auto-reset API, it's also fairly easy
to build atop the more explicit one:

    def set_cvar(cvar, value):
        token = cvar.set(value)
        return functools.partial(cvar.reset, token)

    reset_cvar1 = set_cvar(cvar1, ...)
    ...
    reset_cvar1()

Cheers,
Nick.

-- 
Nick Coghlan   |   ncogh...@gmail.com   |   Brisbane, Australia
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to