
import linecache

import py
import pytest

from pyfakefs.fake_filesystem_unittest import Patcher

try:
    import builtins
except ImportError:
    import __builtin__ as builtins

Patcher.SKIPMODULES.add(py)  # Ignore pytest components when faking filesystem

# The "linecache" module is used to read the test file in case of test failure
# to get traceback information before test tear down.
# In order to make sure that reading the test file is not faked,
# we both skip faking the module, and add the build-in open() function
# as a local function in the module
Patcher.SKIPMODULES.add(linecache)
linecache.open = builtins.open


@pytest.fixture
def fs(request):
    """ Fake filesystem. """
    patcher = Patcher()
    patcher.setUp()
    request.addfinalizer(patcher.tearDown)
    return patcher.fs


import linecache
import sys

import py
import pytest

from pyfakefs.fake_filesystem_unittest import Patcher

if sys.version_info >= (3,):
    import builtins
else:
    import __builtin__ as builtins

Patcher.SKIPMODULES.add(py)  # Ignore pytest components when faking filesystem

# The "linecache" module is used to read the test file in case of test failure
# to get traceback information before test tear down.
# In order to make sure that reading the test file is not faked,
# we both skip faking the module, and add the build-in open() function
# as a local function in the module
Patcher.SKIPMODULES.add(linecache)
linecache.open = builtins.open


@pytest.fixture
def fs(request):
    """ Fake filesystem. """
    patcher = Patcher()
    patcher.setUp()
    request.addfinalizer(patcher.tearDown)
    return patcher.fs

Fix pytest when pyfakefs + future is installed
Fix pytest when pyfakefs + future is installed

`python-future` is notorious for breaking modules which use `try:` / `except:`
to import modules based on version.  In this case, `pyfakefs` imported the
backported `builtins` module which changes the semantics of the `open()`
function.  `pyfakefs` then monkeypatches `linecache` which breaks any module
which attempts to use `linecache` (in this case `pytest`).

The downstream issue is https://github.com/pytest-dev/pytest/pull/4074

  
  import linecache
+ import sys
  
  import py
  import pytest
  
  from pyfakefs.fake_filesystem_unittest import Patcher
  
- try:
+ if sys.version_info >= (3,):
      import builtins
- except ImportError:
+ else:
      import __builtin__ as builtins
  
  Patcher.SKIPMODULES.add(py)  # Ignore pytest components when faking filesystem
  
  # The "linecache" module is used to read the test file in case of test failure
  # to get traceback information before test tear down.
  # In order to make sure that reading the test file is not faked,
  # we both skip faking the module, and add the build-in open() function
  # as a local function in the module
  Patcher.SKIPMODULES.add(linecache)
  linecache.open = builtins.open
  
  
  @pytest.fixture
  def fs(request):
      """ Fake filesystem. """
      patcher = Patcher()
      patcher.setUp()
      request.addfinalizer(patcher.tearDown)
      return patcher.fs
  
Fix pytest when pyfakefs + future is installed
## Code Before:

import linecache

import py
import pytest

from pyfakefs.fake_filesystem_unittest import Patcher

try:
    import builtins
except ImportError:
    import __builtin__ as builtins

Patcher.SKIPMODULES.add(py)  # Ignore pytest components when faking filesystem

# The "linecache" module is used to read the test file in case of test failure
# to get traceback information before test tear down.
# In order to make sure that reading the test file is not faked,
# we both skip faking the module, and add the build-in open() function
# as a local function in the module
Patcher.SKIPMODULES.add(linecache)
linecache.open = builtins.open


@pytest.fixture
def fs(request):
    """ Fake filesystem. """
    patcher = Patcher()
    patcher.setUp()
    request.addfinalizer(patcher.tearDown)
    return patcher.fs

## Instruction:
Fix pytest when pyfakefs + future is installed
## Code After:

import linecache
import sys

import py
import pytest

from pyfakefs.fake_filesystem_unittest import Patcher

if sys.version_info >= (3,):
    import builtins
else:
    import __builtin__ as builtins

Patcher.SKIPMODULES.add(py)  # Ignore pytest components when faking filesystem

# The "linecache" module is used to read the test file in case of test failure
# to get traceback information before test tear down.
# In order to make sure that reading the test file is not faked,
# we both skip faking the module, and add the build-in open() function
# as a local function in the module
Patcher.SKIPMODULES.add(linecache)
linecache.open = builtins.open


@pytest.fixture
def fs(request):
    """ Fake filesystem. """
    patcher = Patcher()
    patcher.setUp()
    request.addfinalizer(patcher.tearDown)
    return patcher.fs
