On Tue, Dec 12, 2017 at 9:55 PM, Guido van Rossum <gu...@python.org> wrote: > On Tue, Dec 12, 2017 at 5:35 PM, Yury Selivanov <yselivanov...@gmail.com> > wrote: >> >> On Tue, Dec 12, 2017 at 6:49 PM, Victor Stinner >> <victor.stin...@gmail.com> wrote: >> > I like the overall idea and I prefer this PEP over PEP 550 since it's >> > shorter and easier to read :-) >> > >> > Question: Is there an API to list all context variables? >> >> Context implements abc.Mapping, so 'get_context().keys()' will give >> you a list of all ContextVars in the current context. > > > This was hinted at in the PEP, but maybe an explicit example would be nice.
Sure. > >> >> > Each get_context() call returns a new Context object. It may be worth >> > to mention it. I understand why, but it's surprising that "assert >> > get_context() is not get_context()" fails. Maybe it's a naming issue? >> > Maybe rename it to contextvars.context()? >> >> I think the name is fine. While get_context() will return a new instance >> every time you call it, those instances will have the same context >> variables/values in them, so I don't think it's a problem. > > > I'm fine with this, but perhaps == should be supported so that those two are > guaranteed to be considered equal? (Otherwise an awkward idiom to compare > contexts using expensive dict() copies would be needed to properly compare > two contexts for equality.) I've no problem with implementing 'Context.__eq__'. I think abc.Mapping also implements it. > >> >> > At the first read, I understood that that ctx.run() creates a new >> > temporary context which is removed once ctx.run() returns. >> > >> > Now I understand that context variable values are restored to their >> > previous values once run() completes. Am I right? >> >> ctx.run(func) runs 'func' in the 'ctx' context. Any changes to >> ContextVars that func makes will stay isolated to the 'ctx' context. >> >> > >> > Maybe add a short comment to explain that? >> >> Added. > > > The PEP still contains the following paragraph: > >> Any changes to the context will be contained and persisted in the >> ``Context`` object on which ``run()`` is called on. > > This phrase is confusing; it could be read as implying that context changes > made by the function *will* get propagated back to the caller of run(), > contradicting what was said earlier. Maybe it's best to just delete it? > Otherwise if you intend it to add something it needs to be rephrased. Maybe > "persisted" is the key word causing confusion? I'll remove "persisted" now, I agree it adds more confusion than clarity. Victor is also confused with how 'Context.run()' is currently explained, I'll try to make it clearer. Thank you, Yury _______________________________________________ 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