1# pyfakefs Release Notes
2The released versions correspond to PyPi releases.
3
4## Version 4.1.0 (as yet unreleased)
5
6## [Version 4.0.2](https://pypi.python.org/pypi/pyfakefs/4.0.2)
7
8This as a patch release that only builds for Python 3. Note that
9versions 4.0.0 and 4.0.1 will be removed from PyPi to not to be able to
10install them under Python 2.
11
12#### Fixes
13  * Do not build for Python 2 (see [#524](../../issues/524))
14
15## [Version 4.0.1](https://pypi.python.org/pypi/pyfakefs/4.0.1)
16
17This as a bug fix release for a regression bug.
18
19#### Fixes
20  * Avoid exception if using `flask-restx` (see [#523](../../issues/523))
21
22## [Version 4.0.0](https://pypi.python.org/pypi/pyfakefs/4.0.0)
23
24  * pyfakefs 4.0.0 drops support for Python 2.7. If you still need
25    Python 2.7, you can continue to use pyfakefs 3.7.x.
26
27#### Changes
28  * Removed Python 2.7 and 3.4 support (see [#492](../../issues/492))
29
30#### New Features
31  * Added support for handling keyword-only arguments in some `os` functions
32  * Added possibility to pass additional parameters to `fs` pytest fixture
33  * Added automatic patching of default arguments that are file system
34    functions
35  * Added convenience decorator `patchfs` to patch single functions using
36    the fake filesystem
37
38#### Fixes
39  * Added missing `st_ino` in `makedir` (see [#515](../../issues/515))
40  * Fixed handling of relative paths in `lresolve` / `os.lstat`
41    (see [#516](../../issues/516))
42  * Fixed handling of byte string paths
43    (see [#517](../../issues/517))
44  * Fixed `os.walk` if path ends with path separator
45    (see [#512](../../issues/512))
46  * Fixed handling of empty path in `os.makedirs`
47    (see [#510](../../issues/510))
48  * Fixed handling of `os.TMPFILE` flag under Linux
49    (see [#509](../../issues/509) and [#511](../../issues/511))
50  * Adapted fake `pathlib` to changes in Python 3.7.6/3.8.1
51    (see [#508](../../issues/508))
52  * Fixed behavior of `os.makedirs` in write-protected directory
53    (see [#507](../../issues/507))
54
55## [Version 3.7.2](https://pypi.python.org/pypi/pyfakefs/3.7.2)
56
57This version backports some fixes from master.
58
59#### Fixes
60  * Fixed handling of relative paths in `lresolve` / `os.lstat`
61    (see [#516](../../issues/516))
62  * Fixed `os.walk` if path ends with path separator
63    (see [#512](../../issues/512))
64  * Fixed handling of empty path in `os.makedirs`
65    (see [#510](../../issues/510))
66  * Fixed handling of `os.TMPFILE` flag under Linux
67    (see [#509](../../issues/509) and [#511](../../issues/511))
68  * Fixed behavior of `os.makedirs` in write-protected directory
69    (see [#507](../../issues/507))
70
71## [Version 3.7.1](https://pypi.python.org/pypi/pyfakefs/3.7.1)
72
73This version adds support for Python 3.7.6 and 3.8.1.
74
75#### Fixes
76  * Adapted fake `pathlib` to changes in Python 3.7.6/3.8.1
77    (see [#508](../../issues/508)) (backported from master)
78
79## [Version 3.7](https://pypi.python.org/pypi/pyfakefs/3.7)
80
81This version adds support for Python 3.8.
82
83_Note:_ This is the last pyfakefs version that will support Python 2.7
84and Python 3.4 (possible bug fix releases notwithstanding).
85
86#### New Features
87  * added support for Python 3.8 (see [#504](../../issues/504))
88  * added preliminary support for Windows-specific `os.stat_result` attributes
89    `tst_file_attributes` and `st_reparse_tag` (see [#504](../../issues/504))
90  * added support for fake `os.sendfile` (Posix only, Python 3 only)
91    (see [#504](../../issues/504))
92
93#### Fixes
94  * support `devnull` in Windows under Python 3.8
95    (see [#504](../../issues/504))
96  * fixed side effect of calling `DirEntry.stat()` under Windows (changed
97    st_nlink) (see [#502](../../issues/502))
98  * fixed problem of fake modules still referenced after a test in modules
99    loaded during the test (see [#501](../../issues/501) and [#427](../../issues/427))
100  * correctly handle missing read permission for parent directory
101    (see [#496](../../issues/496))
102  * raise for `os.scandir` with non-existing directory
103    (see [#498](../../issues/498))
104
105#### Infrastructure
106  * fixed CI tests scripts to always propagate errors
107    (see [#500](../../issues/500))
108
109## [Version 3.6.1](https://pypi.python.org/pypi/pyfakefs/3.6.1)
110
111#### Fixes
112  * avoid rare side effect during module iteration in test setup
113    (see [#338](../../issues/338))
114  * make sure real OS tests are not executed by default
115    (see [#495](../../issues/495))
116
117## [Version 3.6](https://pypi.python.org/pypi/pyfakefs/3.6)
118
119#### Changes
120  * removed unneeded parameter `use_dynamic_patch`
121
122#### New Features
123  * support for `src_dir_fd` and `dst_dir_fd` arguments in `os.rename`,
124    `os.replace` and `os.link`
125  * added possibility to use modules instead of module names for the
126    `additional_skip_names` argument (see [#482](../../issues/482))
127  * added argument `allow_root_user` to `Patcher` and `UnitTest` to allow
128    forcing non-root access (see [#474](../../issues/474))
129  * added basic support for `os.pipe` (see [#473](../../issues/473))
130  * added support for symlinks in `add_real_directory`
131  * added new public method `add_real_symlink`
132
133#### Infrastructure
134  * added check for correctly installed Python 3 version in Travis.CI
135    (see [#487](../../issues/487))
136
137#### Fixes
138  * fixed incorrect argument names for some `os` functions
139  * fake `DirEntry` now implements `os.PathLike` in Python >= 3.6
140    (see [#483](../../issues/483))
141  * fixed incorrect argument name for `os.makedirs`
142    (see [#481](../../issues/481))
143  * avoid pytest warning under Python 2.7 (see [#466](../../issues/466))
144  * add __next__ to FakeFileWrapper (see [#485](../../issues/485))
145
146## [Version 3.5.8](https://pypi.python.org/pypi/pyfakefs/3.5.8)
147
148Another bug-fix release that mainly fixes a regression wih Python 2 that has
149been introduced in version 3.5.3.
150
151#### Fixes
152  * regression: patching build-in `open` under Python 2 broke unit tests
153    (see [#469](../../issues/469))
154  * fixed writing to file added with `add_real_file`
155    (see [#470](../../issues/470))
156  * fixed argument name of `FakeIOModule.open` (see [#471](../../pull/471))
157
158#### Infrastructure
159  * more changes to run tests using `python setup.py test` under Python 2
160    regardless of `pathlib2` presence
161
162## [Version 3.5.7](https://pypi.python.org/pypi/pyfakefs/3.5.7)
163
164This is mostly a bug-fix release.
165
166#### Fixes
167  * regression: `pathlib` did not get patched in the presence of `pathlib2`
168    (see [#467](../../issues/467))
169  * fixed errors if running the PyCharm debugger under Python 2
170    (see [#464](../../issues/464))
171
172#### Infrastructure
173  * do not run real file system tests by default (fixes deployment problem,
174    see [#465](../../issues/465))
175  * make tests run if running `python setup.py test` under Python 2
176
177## [Version 3.5.6](https://pypi.python.org/pypi/pyfakefs/3.5.6)
178
179#### Changes
180  * import external `pathlib2` and `scandir` packages first if present
181    (see [#462](../../issues/462))
182
183## [Version 3.5.5](https://pypi.python.org/pypi/pyfakefs/3.5.5)
184
185#### Fixes
186  * removed shebang from test files to avoid packaging warnings
187   (see [#461](../../issues/461))
188
189## [Version 3.5.4](https://pypi.python.org/pypi/pyfakefs/3.5.4)
190
191#### New Features
192  * added context manager class `Pause` for pause/resume
193    (see [#448](../../issues/448))
194
195#### Fixes
196  * fixed `AttributeError` shown while displaying `fs` in a failing pytest
197    in Python 2
198  * fixed permission handling for root user
199  * avoid `AttributeError` triggered by modules without `__module__` attribute
200    (see [#460](../../issues/460))
201
202## [Version 3.5.3](https://pypi.python.org/pypi/pyfakefs/3.5.3)
203
204This is a minor release to have a version with passing tests for OpenSUSE
205packaging.
206
207#### New Features
208  * automatically patch file system methods imported as another name like
209    `from os.path import exists as my_exists`, including builtin `open`
210    and `io.open`
211
212#### Fixes
213  * make tests for access time less strict to account for file systems that
214    do not change it immediately ([#453](../../issues/453))
215
216## [Version 3.5.2](https://pypi.python.org/pypi/pyfakefs/3.5.2)
217
218This is mostly a bug-fix release.
219
220#### New Features
221  * added support for pause/resume of patching the file system modules
222    ([#448](../../issues/448))
223  * allow to set current group ID, set current user ID and group ID as
224    `st_uid` and `st_gid` in new files ([#449](../../issues/449))
225
226#### Fixes
227  * fixed using `modules_to_patch` (regression, see [#450](../../issues/450))
228  * fixed recursion error on unpickling the fake file system
229    ([#445](../../issues/445))
230  * allow trailing path in `add_real_directory` ([#446](../../issues/446))
231
232## [Version 3.5](https://pypi.python.org/pypi/pyfakefs/3.5)
233
234#### Changes
235  * This version of pyfakefs does not support Python 3.3. Python 3.3 users
236    must keep using pyfakefs 3.4.3, or upgrade to a newer Python version.
237  * The deprecation warnings for the old API are now switched on by default.
238    To switch them off for legacy code, use:
239    ```python
240    from pyfakefs.deprecator import Deprecator
241    Deprecator.show_warnings = False
242    ```
243
244#### New Features
245  * Improved automatic patching:
246    * automatically patch methods of a patched file system module imported like
247      `from os.path import exists` ([#443](../../pull/443))
248    * a module imported as another name (`import os as _os`) is now correctly
249      patched without the need of additional parameters
250      ([#434](../../pull/434))
251    * automatically patch `Path` if imported like `from pathlib import Path`
252      ([#440](../../issues/440))
253    * parameter `patch_path` has been removed from `UnitTest` and `Patcher`,
254      the correct patching of `path` imports is now done automatically
255      ([#429](../../pull/429))
256    * `UnitTest` /`Patcher` arguments can now also be set in `setUpPyfakefs()`
257      ([#430](../../pull/430))
258  * added possibility to set user ID ([#431](../../issues/431))
259  * added side_effect option to fake files ([#433](../../pull/433))
260  * added some support for extended filesystem attributes under Linux
261    ([#423](../../issues/423))
262  * handle `contents=None` in `create_file()` as empty contents if size not
263    set ([#424](../../issues/424))
264  * added `pathlib2` support ([#408](../../issues/408)) ([#422](../../issues/422))
265  * added support for null device ([#418](../../issues/418))
266  * improved error message for "Bad file descriptor in fake filesystem"
267    ([#419](../../issues/419))
268
269#### Fixes
270  * fixed pytest when both pyfakefs and future are installed
271    ([#441](../../issues/441))
272  * file timestamps are now updated more according to the real behavior
273    ([#435](../../issues/435))
274  * fixed a problem related to patching `shutil` functions using `zipfile`
275    ([#427](../../issues/427))
276
277## [Version 3.4.3](https://pypi.python.org/pypi/pyfakefs/3.4.3)
278
279This is mostly a bug fix release, mainly for bugs found by
280[@agroce](https://github.com/agroce) using [tstl](https://github.com/agroce/tstl).
281
282#### New Features
283  * added support for path-like objects as arguments in `create_file()`,
284  `create_dir()`, `create_symlink()`, `add_real_file()` and
285  `add_real_directory()` (Python >= 3.6, see [#409](../../issues/409))
286
287#### Infrastructure
288  * moved tests into package
289  * use README.md in pypi ([#358](../../issues/358))
290
291#### Fixes
292  * `tell` after `seek` gave incorrect result in append mode
293  ([#363](../../issues/363))
294  * a failing pytest did not display the test function correctly
295  ([#381](../../issues/381))
296  * flushing file contents after truncate was incorrect under some conditions
297  ([#412](../../issues/412))
298  * `readline()` did not work correctly in binary mode
299  ([#411](../../issues/411))
300  *  `pathlib.Path.resolve()` behaved incorrectly if the path does not exist
301  ([#401](../../issues/401))
302  * `closed` attribute was not implemented in fake file ([#380](../../issues/380))
303  * `add_real_directory` did not behave correctly for nested paths
304  * the following functions did not behave correctly for paths ending with a
305  path separator (found by @agroce using [tstl](https://github.com/agroce/tstl)):
306    * `os.rename` ([#400](../../issues/400))
307    * `os.link` ([#399](../../issues/399), [#407](../../issues/407))
308    * `os.rmdir` ([#398](../../issues/398))
309    * `os.mkdir`, `os.makedirs` ([#396](../../issues/396))
310    * `os.rename` ([#391](../../issues/391), [#395](../../issues/395),
311    [#396](../../issues/396), [#389](../../issues/389),
312    [#406](../../issues/406))
313    * `os.symlink` ([#371](../../issues/371), [#390](../../issues/390))
314    * `os.path.isdir` ([#387](../../issues/387))
315    * `open` ([#362](../../issues/362), [#369](../../issues/369),
316    [#397](../../issues/397))
317    * `os.path.lexists`, `os.path.islink` ([#365](../../issues/365),
318    [#373](../../issues/373), [#396](../../issues/396))
319    * `os.remove` ([#360](../../issues/360), [#377](../../issues/377),
320    [#396](../../issues/396))
321    * `os.stat` ([#376](../../issues/376))
322    * `os.path.isfile` ([#374](../../issues/374))
323    * `os.path.getsize` ([#368](../../issues/368))
324    * `os.lstat` ([#366](../../issues/366))
325    * `os.path.exists` ([#364](../../issues/364))
326    * `os.readlink` ([#359](../../issues/359), [#372](../../issues/372),
327    [#392](../../issues/392))
328
329## [Version 3.4.1](https://pypi.python.org/pypi/pyfakefs/3.4.1)
330
331This is a bug fix only release.
332
333#### Fixes
334  * Missing cleanup after using dynamic patcher let to incorrect behavior of
335   `tempfile` after test execution (regression, see [#356](../../issues/356))
336  * `add_real_directory` does not work after `chdir` (see [#355](../../issues/355))
337
338## [Version 3.4](https://pypi.python.org/pypi/pyfakefs/3.4)
339
340This version of pyfakefs does not support Python 2.6.  Python 2.6 users
341must use pyfakefs 3.3 or earlier.
342
343#### New Features
344  * Added possibility to map real files or directories to another path in
345  the fake file system (see [#347](../../issues/347))
346  * Configuration of `Patcher` and `TestCase`:
347    * Possibility to reload modules is now also available in `Patcher`
348    * Added possibility to add own fake modules via `modules_to_patch`
349    argument (see [#345](../../issues/345))
350    * Dynamic loading of modules after setup is now on by default and no more
351    considered experimental (see [#340](../../issues/340))
352  * Added support for file descriptor path parameter in `os.scandir`
353   (Python >= 3.7, Posix only) (see [#346](../../issues/346))
354  * Added support to fake out backported `scandir` module ([#332](../../issues/332))
355  * `IOError`/`OSError` exception messages in the fake file system now always
356  start with the message issued in the real file system in Unix systems (see [#202](../../issues/202))
357
358#### Infrastructure
359  * Changed API to be PEP-8 conform ([#186](../../issues/186)). Note: The old
360    API is still available.
361  * Removed Python 2.6 support ([#293](../../issues/293))
362  * Added usage documentation to GitHub Pages
363  * Added contributing guide
364  * Added flake8 tests to Travis CI
365
366#### Fixes
367  * Links in base path in `os.scandir` shall not be resolved ([#350](../../issues/350))
368  * Fixed unit tests when run on a computer not having umask set to 0022
369  * Correctly handle newline parameter in `open()` for Python 3, added support for universal newline mode in Python 2 ([#339](../../issues/339))
370  * Fixed handling of case-changing rename with symlink under MacOS ([#322](../../issues/322))
371  * Creating a file with a path ending with path separator did not raise ([#320](../../issues/320))
372  * Fixed more problems related to `flush` ([#302](../../issues/302), [#300](../../issues/300))
373  * Correctly handle opening files more than once ([#343](../../issues/343))
374  * Fake `os.lstat()` crashed with several trailing path separators ([#342](../../issues/342))
375  * Fixed handling of path components starting with a drive letter([#337](../../issues/337))
376  * Symlinks to absolute paths were incorrectly resolved under Windows ([#341](../../issues/341))
377  * Unittest mock didn't work after setUpPyfakefs ([#334](../../issues/334))
378  * `os.path.split()` and `os.path.dirname()` gave incorrect results under Windows ([#335](../../issues/335))
379
380## [Version 3.3](https://pypi.python.org/pypi/pyfakefs/3.3)
381
382This is the last release that supports Python 2.6.
383
384#### New Features
385  * The OS specific temp directory is now automatically created in `setUp()` (related to [#191](../../issues/191)).
386    Note that this may break test code that assumes that the fake file system is completely empty at test start.
387  * Added possibility to reload modules and switch on dynamic loading of modules
388    after setup (experimental, see [#248](../../issues/248))
389  * Added possibility to patch modules that import file system modules under
390    another name, for example `import os as '_os` ([#231](../../issues/231))
391  * Added support for `dir_fd` argument in several `os` functions
392    ([#206](../../issues/206))
393  * Added support for open file descriptor as path argument in `os.utime`,
394    `os.chmod`, `os.chdir`, `os.chown`, `os.listdir`, `os.stat` and `os.lstat`
395    (Python >= 3.3) ([#205](../../issues/205))
396  * Added support for basic modes in fake `os.open()` ([#204](../../issues/204))
397  * Added fake `os.path.samefile` implementation ([#193](../../issues/193))
398  * Added support for `ns` argument in `os.utime()` (Python >= 3.3)
399    ([#192](../../issues/192))
400  * Added nanosecond time members in `os.stat_result` (Python >= 3.3)
401    ([#196](../../issues/196))
402
403#### Infrastructure
404  * Added Travis CI tests for MacOSX (Python 2.7 and 3.6)
405  * Added Appveyor CI tests for Windows (Python 2.7, 3.3 and 3.6)
406  * Added auto-generated documentation for development version on GitHub Pages
407  * Removed most of `fake_filesystem_shutil` implementation, relying on the
408    patched `os` module instead ([#194](../../issues/194))
409  * Removed `fake_tempfile` and `fake_filesystem_glob`, relying on the patched
410    `os` module instead ([#189](../../issues/189), [#191](../../issues/191))
411
412#### Fixes
413  * Multiple fixes of bugs found using TSTL by @agroce (see about 100 issues
414    with the `TSTL` label)
415    * several problems with buffer handling in high-level IO functions
416    * several problems with multiple handles on the same file
417    * several problems with low-level IO functions
418    * incorrect exception (`IOError` vs `OSError`) raised in several cases
419    * Fake `rename` did not behave like `os.rename` in many cases
420    * Symlinks have not been considered or incorrectly handled in several
421      functions
422    * A nonexistent file that has the same name as the content of the parent
423      object was seen as existing
424    * Incorrect error handling during directory creation
425    * many fixes for OS-specific behavior
426  * Also patch modules that are loaded between `__init__()` and `setUp()`
427    ([#199](../../issues/199))
428  * Creating files in read-only directory was possible ([#203](../../issues/203))
429
430## [Version 3.2](https://pypi.python.org/pypi/pyfakefs/3.2)
431
432#### New Features
433  * The `errors` argument is supported for `io.open()` and `os.open()`
434  * New methods `add_real_file()`, `add_real_directory()` and `add_real_paths()`
435    make real files and directories appear within the fake file system.
436    File contents are read from the real file system only as needed ([#170](../../issues/170)).
437    See `example_test.py` for a usage example.
438  * Deprecated `TestCase.copyRealFile()` in favor of `add_real_file()`.
439    `copyRealFile()` remains only for backward compatability.  Also, some
440    less-popular argument combinations have been disallowed.
441  * Added this file you are reading, `CHANGES.md`, to the release manifest
442
443#### Infrastructure
444  * The `mox3` package is no longer a prerequisite--the portion required by pyfakefs
445    has been integrated into pyfakefs ([#182](../../issues/182))
446
447#### Fixes
448 * Corrected the handling of byte/unicode paths in several functions ([#187](../../issues/187))
449 * `FakeShutilModule.rmtree()` failed for directories ending with path separator ([#177](../../issues/177))
450 * Case was incorrectly handled for added Windows drives
451 * `pathlib.glob()` incorrectly handled case under MacOS ([#167](../../issues/167))
452 * tox support was broken ([#163](../../issues/163))
453 * On Windows it was not possible to rename a file when only the case of the file
454   name changed ([#160](../../issues/160))
455
456## [Version 3.1](https://pypi.python.org/pypi/pyfakefs/3.1)
457
458#### New Features
459 * Added helper method `TestCase.copyRealFile()` to copy a file from
460   the real file system to the fake file system. This makes it easy to use
461   template, data and configuration files in your tests.
462 * A pytest plugin is now installed with pyfakefs that exports the
463   fake filesystem as pytest fixture `fs`.
464
465#### Fixes
466 * Incorrect disk usage calculation if too large file created ([#155](../../issues/155))
467
468## [Version 3.0](https://pypi.python.org/pypi/pyfakefs/3.0)
469
470#### New Features
471 * Support for path-like objects as arguments in fake `os`
472   and `os.path` modules (Python >= 3.6)
473 * Some changes to make pyfakefs work with Python 3.6
474 * Added fake `pathlib` module (Python >= 3.4) ([#29](../../issues/29))
475 * Support for `os.replace` (Python >= 3.3)
476 * `os.access`, `os.chmod`, `os.chown`, `os.stat`, `os.utime`:
477   support for `follow_symlinks` argument (Python >= 3.3)
478 * Support for `os.scandir` (Python >= 3.5) ([#119](../../issues/119))
479 * Option to not fake modules named `path` ([#53](../../issues/53))
480 * `glob.glob`, `glob.iglob`: support for `recursive` argument (Python >= 3.5) ([#116](../../issues/116))
481 * Support for `glob.iglob` ([#59](../../issues/59))
482
483#### Infrastructure
484 * Added [auto-generated documentation](http://jmcgeheeiv.github.io/pyfakefs/)
485
486#### Fixes
487 * `shutil.move` incorrectly moves directories ([#145](../../issues/145))
488 * Missing support for 'x' mode in `open` (Python >= 3.3) ([#147](../../issues/147))
489 * Incorrect exception type in Posix if path ancestor is a file ([#139](../../issues/139))
490 * Exception handling when using `Patcher` with py.test ([#135](../../issues/135))
491 * Fake `os.listdir` returned sorted instead of unsorted entries
492
493## [Version 2.9](https://pypi.python.org/pypi/pyfakefs/2.9)
494
495#### New Features
496 * `io.open`, `os.open`: support for `encoding` argument ([#120](../../issues/120))
497 * `os.makedirs`: support for `exist_ok` argument (Python >= 3.2) ([#98](../../issues/98))
498 * Support for fake `io.open()` ([#70](../../issues/70))
499 * Support for mount points ([#25](../../issues/25))
500 * Support for hard links ([#75](../../issues/75))
501 * Support for float times (mtime, ctime)
502 * Windows support:
503     * support for alternative path separator
504     * support for case-insensitive filesystems ([#69](../../issues/69))
505     * support for drive letters and UNC paths
506 * Support for filesystem size ([#86](../../issues/86))
507 * `shutil.rmtree`: support for `ignore_errors` and `onerror` arguments ([#72](../../issues/72))
508 * Support for `os.fsync()` and `os.fdatasync()` ([#73](../../issues/73))
509 * `os.walk`: Support for `followlinks` argument
510
511#### Fixes
512 * `shutil` functions like `make_archive` do not work with pyfakefs ([#104](../../issues/104))
513 * File permissions on deletion not correctly handled ([#27](../../issues/27))
514 * `shutil.copy` error with bytes contents ([#105](../../issues/105))
515 * mtime and ctime not updated on content changes
516
517## [Version 2.7](https://pypi.python.org/pypi/pyfakefs/2.7)
518
519#### Infrastructure
520 * Moved repository from GoogleCode to GitHub, merging 3 projects
521 * Added continuous integration testing with Travis CI
522 * Added usage documentation in project wiki
523 * Better support for pypi releases
524
525#### New Features
526 * Added direct unit test support in `fake_filesystem_unittest`
527   (transparently patches all calls to faked implementations)
528 * Added support for doctests
529 * Added support for cygwin
530 * Better support for Python 3
531
532#### Fixes
533 * `os.utime` fails to traverse symlinks ([#49](../../issues/49))
534 * `chown` incorrectly accepts non-integer uid/gid arguments ([#30](../../issues/30))
535 * Reading from fake block devices doesn't work ([#24](../../issues/24))
536 * `fake_tempfile` is using `AddOpenFile` incorrectly ([#23](../../issues/23))
537 * Incorrect behavior of `relpath`, `abspath` and `normpath` on Windows.
538 * Cygwin wasn't treated as Windows ([#37](../../issues/37))
539 * Python 3 `open` in binary mode not working ([#32](../../issues/32))
540 * `os.remove` doesn't work with relative paths ([#31](../../issues/31))
541 * `mkstemp` returns no valid file descriptor ([#19](../../issues/19))
542 * `open` methods lack `IOError` for prohibited operations ([#18](../../issues/18))
543 * Incorrectly resolved relative path ([#3](../../issues/3))
544 * `FakeFileOpen` keyword args do not match the `__builtin__` equivalents ([#5](../../issues/5))
545 * Relative paths not supported ([#16](../../issues/16), [#17](../../issues/17)))
546
547## Older Versions
548There are no release notes for releases 2.6 and below.  The following versions are still available on PyPi:
549 * [1.1](https://pypi.python.org/pypi/pyfakefs/1.1), [1.2](https://pypi.python.org/pypi/pyfakefs/1.2), [2.0](https://pypi.python.org/pypi/pyfakefs/2.0), [2.1](https://pypi.python.org/pypi/pyfakefs/2.1), [2.2](https://pypi.python.org/pypi/pyfakefs/2.2), [2.3](https://pypi.python.org/pypi/pyfakefs/2.3) and [2.4](https://pypi.python.org/pypi/pyfakefs/2.4)
550