parent
							
								
									0ef73ed3e0
								
							
						
					
					
						commit
						638b3f5e39
					
				|  | @ -12,6 +12,9 @@ | ||||||
| - fix #900: Better error message in case the target of a ``monkeypatch`` call | - fix #900: Better error message in case the target of a ``monkeypatch`` call | ||||||
|   raises an ``ImportError``. |   raises an ``ImportError``. | ||||||
| 
 | 
 | ||||||
|  | - fix #1292: monkeypatch calls (setattr, setenv, etc.) are now O(1). | ||||||
|  |   Thanks David R. MacIver for the report and Bruno Oliveira for the PR. | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 2.8.5 | 2.8.5 | ||||||
| ----- | ----- | ||||||
|  |  | ||||||
|  | @ -126,7 +126,7 @@ class monkeypatch: | ||||||
|         # avoid class descriptors like staticmethod/classmethod |         # avoid class descriptors like staticmethod/classmethod | ||||||
|         if inspect.isclass(target): |         if inspect.isclass(target): | ||||||
|             oldval = target.__dict__.get(name, notset) |             oldval = target.__dict__.get(name, notset) | ||||||
|         self._setattr.insert(0, (target, name, oldval)) |         self._setattr.append((target, name, oldval)) | ||||||
|         setattr(target, name, value) |         setattr(target, name, value) | ||||||
| 
 | 
 | ||||||
|     def delattr(self, target, name=notset, raising=True): |     def delattr(self, target, name=notset, raising=True): | ||||||
|  | @ -152,13 +152,12 @@ class monkeypatch: | ||||||
|             if raising: |             if raising: | ||||||
|                 raise AttributeError(name) |                 raise AttributeError(name) | ||||||
|         else: |         else: | ||||||
|             self._setattr.insert(0, (target, name, |             self._setattr.append((target, name, getattr(target, name, notset))) | ||||||
|                                      getattr(target, name, notset))) |  | ||||||
|             delattr(target, name) |             delattr(target, name) | ||||||
| 
 | 
 | ||||||
|     def setitem(self, dic, name, value): |     def setitem(self, dic, name, value): | ||||||
|         """ Set dictionary entry ``name`` to value. """ |         """ Set dictionary entry ``name`` to value. """ | ||||||
|         self._setitem.insert(0, (dic, name, dic.get(name, notset))) |         self._setitem.append((dic, name, dic.get(name, notset))) | ||||||
|         dic[name] = value |         dic[name] = value | ||||||
| 
 | 
 | ||||||
|     def delitem(self, dic, name, raising=True): |     def delitem(self, dic, name, raising=True): | ||||||
|  | @ -171,7 +170,7 @@ class monkeypatch: | ||||||
|             if raising: |             if raising: | ||||||
|                 raise KeyError(name) |                 raise KeyError(name) | ||||||
|         else: |         else: | ||||||
|             self._setitem.insert(0, (dic, name, dic.get(name, notset))) |             self._setitem.append((dic, name, dic.get(name, notset))) | ||||||
|             del dic[name] |             del dic[name] | ||||||
| 
 | 
 | ||||||
|     def setenv(self, name, value, prepend=None): |     def setenv(self, name, value, prepend=None): | ||||||
|  | @ -223,13 +222,13 @@ class monkeypatch: | ||||||
|         calling `undo()` will undo all of the changes made in |         calling `undo()` will undo all of the changes made in | ||||||
|         both functions. |         both functions. | ||||||
|         """ |         """ | ||||||
|         for obj, name, value in self._setattr: |         for obj, name, value in reversed(self._setattr): | ||||||
|             if value is not notset: |             if value is not notset: | ||||||
|                 setattr(obj, name, value) |                 setattr(obj, name, value) | ||||||
|             else: |             else: | ||||||
|                 delattr(obj, name) |                 delattr(obj, name) | ||||||
|         self._setattr[:] = [] |         self._setattr[:] = [] | ||||||
|         for dictionary, name, value in self._setitem: |         for dictionary, name, value in reversed(self._setitem): | ||||||
|             if value is notset: |             if value is notset: | ||||||
|                 try: |                 try: | ||||||
|                     del dictionary[name] |                     del dictionary[name] | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue