Improve --pyargs.

Don't evaluate modules and do nto show 'module not found' if ImportError is
thrown in the module.
This commit is contained in:
Florian Mayer 2011-09-01 16:19:16 +02:00
parent 8675cf640d
commit 0e05a4fbcf
1 changed files with 17 additions and 11 deletions

View File

@ -2,7 +2,7 @@
import py import py
import pytest, _pytest import pytest, _pytest
import os, sys import os, sys, imp
tracebackcutdir = py.path.local(_pytest.__file__).dirpath() tracebackcutdir = py.path.local(_pytest.__file__).dirpath()
# exitcodes for the command line # exitcodes for the command line
@ -469,16 +469,22 @@ class Session(FSCollector):
return True return True
def _tryconvertpyarg(self, x): def _tryconvertpyarg(self, x):
try: mod = None
mod = __import__(x, None, None, ['__doc__']) path = [os.path.abspath('.')] + sys.path
except (ValueError, ImportError): for name in x.split('.'):
return x try:
p = py.path.local(mod.__file__) fd, mod, type_ = imp.find_module(name, path)
if p.purebasename == "__init__": except ImportError:
p = p.dirpath() return x
else: else:
p = p.new(basename=p.purebasename+".py") if fd is not None:
return str(p) fd.close()
if type_[2] != imp.PKG_DIRECTORY:
path = [os.path.dirname(mod)]
else:
path = [mod]
return mod
def _parsearg(self, arg): def _parsearg(self, arg):
""" return (fspath, names) tuple after checking the file exists. """ """ return (fspath, names) tuple after checking the file exists. """