FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
ipython/IPython/utils/contexts.py at python-3.14-dev · krassowski/ipython · GitHub
krassowski
ipython
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
ipython
/
IPython
/
utils
/
contexts.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
60 lines (47 loc) · 1.57 KB
Breadcrumbs
ipython
/
IPython
/
utils
/
contexts.py
Copy path
File metadata and controls
60 lines (47 loc) · 1.57 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# encoding: utf-8
"""Miscellaneous context managers."""
import
warnings
# Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
class
preserve_keys
:
"""Preserve a set of keys in a dictionary.
Upon entering the context manager the current values of the keys
will be saved. Upon exiting, the dictionary will be updated to
restore the original value of the preserved keys. Preserved keys
which did not exist when entering the context manager will be
deleted.
Examples
--------
>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> with preserve_keys(d, 'b', 'c', 'd'):
... del d['a']
... del d['b'] # will be reset to 2
... d['c'] = None # will be reset to 3
... d['d'] = 4 # will be deleted
... d['e'] = 5
... print(sorted(d.items()))
...
[('c', None), ('d', 4), ('e', 5)]
>>> print(sorted(d.items()))
[('b', 2), ('c', 3), ('e', 5)]
"""
def
__init__
(
self
,
dictionary
,
*
keys
):
self
.
dictionary
=
dictionary
self
.
keys
=
keys
def
__enter__
(
self
):
# Actions to perform upon exiting.
to_delete
=
[]
to_update
=
{}
d
=
self
.
dictionary
for
k
in
self
.
keys
:
if
k
in
d
:
to_update
[
k
]
=
d
[
k
]
else
:
to_delete
.
append
(
k
)
self
.
to_delete
=
to_delete
self
.
to_update
=
to_update
def
__exit__
(
self
,
*
exc_info
):
d
=
self
.
dictionary
for
k
in
self
.
to_delete
:
d
.
pop
(
k
,
None
)
d
.
update
(
self
.
to_update
)
Back
|
FazBrowse Home
|
New Git URL