Show More
@@ -1264,6 +1264,24 b' class InteractiveShell(SingletonConfigurable, Magic):' | |||
|
1264 | 1264 | else: |
|
1265 | 1265 | for name,val in vdict.iteritems(): |
|
1266 | 1266 | config_ns[name] = val |
|
1267 | ||
|
1268 | def drop_by_id(self, variables): | |
|
1269 | """Remove a dict of variables from the user namespace, if they are the | |
|
1270 | same as the values in the dictionary. | |
|
1271 | ||
|
1272 | This is intended for use by extensions: variables that they've added can | |
|
1273 | be taken back out if they are unloaded, without removing any that the | |
|
1274 | user has overwritten. | |
|
1275 | ||
|
1276 | Parameters | |
|
1277 | ---------- | |
|
1278 | variables : dict | |
|
1279 | A dictionary mapping object names (as strings) to the objects. | |
|
1280 | """ | |
|
1281 | for name, obj in variables.iteritems(): | |
|
1282 | if name in self.user_ns and self.user_ns[name] is obj: | |
|
1283 | del self.user_ns[name] | |
|
1284 | self.user_ns_hidden.pop(name, None) | |
|
1267 | 1285 | |
|
1268 | 1286 | #------------------------------------------------------------------------- |
|
1269 | 1287 | # Things related to object introspection |
@@ -179,4 +179,17 b' class InteractiveShellTestCase(unittest.TestCase):' | |||
|
179 | 179 | finally: |
|
180 | 180 | io.stderr = save_stderr |
|
181 | 181 | |
|
182 | ||
|
182 | def test_drop_by_id(self): | |
|
183 | ip = get_ipython() | |
|
184 | myvars = {"a":object(), "b":object(), "c": object()} | |
|
185 | ip.push(myvars, interactive=False) | |
|
186 | for name in myvars: | |
|
187 | assert name in ip.user_ns, name | |
|
188 | assert name in ip.user_ns_hidden, name | |
|
189 | ip.user_ns['b'] = 12 | |
|
190 | ip.drop_by_id(myvars) | |
|
191 | for name in ["a", "c"]: | |
|
192 | assert name not in ip.user_ns, name | |
|
193 | assert name not in ip.user_ns_hidden, name | |
|
194 | assert ip.user_ns['b'] == 12 | |
|
195 | ip.reset() |
General Comments 0
You need to be logged in to leave comments.
Login now