Nick Coghlan <ncogh...@gmail.com> added the comment:

OK, I'll head down the path of creating a new procedural PEP to supersede PEP 
411 (I'll try to get the locals() semantic clarification PEP out of the way 
first, though).

I'll make "Where to put the feature flags?" an open question, as my rationale 
for proposing __main__ was three-fold:

1. In regular scripts, it makes feature flags as easy to set as possible, since 
you can just do "use_provisional_interpreters = True" without any import at all
2. In applications, "import __main__; use_provisional_interpreters = True" 
isn't markedly more brittle as a process-global state storage location than any 
other module name (as long as the feature flag names are prefixed to minimise 
the risk of name collisions)
3. Using an existing always imported module makes the runtime cost of managing 
the feature flags as close to zero as possible

However, you'd also get most of those benefits with an even lower risk of name 
collisions by co-opting "sys" for the same purpose.

Silencing the warning via the feature flag:

    import sys
    sys.use_provisional_interpreters = True
    import interpreters


Silencing the warning via the warnings module:

    from warnings import filterwarnings
    filterwarnings("ignore", module="interpreters", category=FutureWarning)
    import interpreters

Emitting the warning:

    import sys
    _feature_flag = f"use_provisional_{__name__}"
    if not getattr(sys, _feature_flag):
        import warnings
        _provisional_msg = (
            f"The {__name__} module is currently a provisional API - see 
documentation for details. "
            f"Set 'sys.{_feature_flag} = True' before importing the API to 
disable this warning."
        )
        warnings.warn(FutureWarning, _provisional_msg)

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue31742>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to