Closed
Description
Feature or enhancement
Currently, we have a lot of pattern of the form:
with EnvironmentVarGuard() as env:
if no_c in env:
env.unset(no_c)
if no_d in env:
env.unset(no_d)
for ev in {no_a, no_b}:
if ev in env:
env.unset(ev)
I think it makes sense to have something like this:
with EnvironmentVarGuard() as env:
env.unset(no_a, no_b, no_c, no_d) # unset many vars at once
or to also provide a decorator-based approach when the values to set/unset are statically known.
Features
- Allow to unset multiple environment variables:
env.unset(k1, k2, ...)
Some optional features that I rejected after looking at the use cases:
- Allow to specify new environment variables at construction time (it could save a few lines when we're only modifying one or two envvars) [abandoned, not enough readable use cases]
- Add decorator-based environment guard for EnvironmentVarGuard() [abandoned for now]
I plan to create a PR today or tomorrow to illustrate the new interface.
EDIT: no need to the support for setting multiple variables at once because EnvironmentVarGuard
is a mapping, so it has .update()
which does the trick.
Linked PRs
- gh-131277: allow
EnvironmentVarGuard
to unset more than one environment variable at once #131280 - [3.13] gh-131277: allow EnvironmentVarGuard to unset more than one environment variable at once (GH-131280) #131409
- [3.12] gh-131277: allow EnvironmentVarGuard to unset more than one environment variable at once (GH-131280) #131410
See #131277 (comment) for the version labels rationale and #131280 (comment) for the backporte rationale.