From 0e05a4fbcfa40aef921471c63ee494b83c7a3333 Mon Sep 17 00:00:00 2001 From: Florian Mayer Date: Thu, 1 Sep 2011 16:19:16 +0200 Subject: [PATCH] Improve --pyargs. Don't evaluate modules and do nto show 'module not found' if ImportError is thrown in the module. --- _pytest/main.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/_pytest/main.py b/_pytest/main.py index ac306a867..d0d7c2dc3 100644 --- a/_pytest/main.py +++ b/_pytest/main.py @@ -2,7 +2,7 @@ import py import pytest, _pytest -import os, sys +import os, sys, imp tracebackcutdir = py.path.local(_pytest.__file__).dirpath() # exitcodes for the command line @@ -469,16 +469,22 @@ class Session(FSCollector): return True def _tryconvertpyarg(self, x): - try: - mod = __import__(x, None, None, ['__doc__']) - except (ValueError, ImportError): - return x - p = py.path.local(mod.__file__) - if p.purebasename == "__init__": - p = p.dirpath() - else: - p = p.new(basename=p.purebasename+".py") - return str(p) + mod = None + path = [os.path.abspath('.')] + sys.path + for name in x.split('.'): + try: + fd, mod, type_ = imp.find_module(name, path) + except ImportError: + return x + else: + if fd is not None: + fd.close() + + if type_[2] != imp.PKG_DIRECTORY: + path = [os.path.dirname(mod)] + else: + path = [mod] + return mod def _parsearg(self, arg): """ return (fspath, names) tuple after checking the file exists. """