Mercurial > ~astiob > upreckon > hgweb
changeset 150:006dce02752c
Added the testee configuration variable and the config.nativize_path function
The testee configuration variable stores the string or iterable of strings to
pass to subprocess.Popen except that the first/only string always follows the
POSIX pathname format or, if the native format is really needed, is prefixed
by slash-slash-colon (the same format is used in Boost.Filesystem).
config.nativize_path is now a part of the public API of the config module.
It converts a path in the format described above into the native format
and can be used in testconf if it needs to use paths other than testee[0].
author | Oleg Oshmyan <chortos@inbox.lv> |
---|---|
date | Fri, 03 Jun 2011 02:39:02 +0100 |
parents | a1286da36d29 |
children | 6261eea8a975 |
files | upreckon/config.py |
diffstat | 1 files changed, 26 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/upreckon/config.py Thu Jun 02 14:25:23 2011 +0100 +++ b/upreckon/config.py Fri Jun 03 02:39:02 2011 +0100 @@ -14,9 +14,9 @@ else: zipimport = None -import imp, os, sys, tempfile +import imp, os, posixpath, sys, tempfile -__all__ = 'load_problem', 'load_global', 'globalconf' +__all__ = 'load_problem', 'load_global', 'globalconf', 'nativize_path' defaults_problem = {'kind': 'batch', 'usegroups': False, @@ -82,6 +82,22 @@ self.file.close() os.remove(self.name) +def nativize_path(portable_path): + if portable_path.startswith('//:'): + return portable_path[3:] + comps = portable_path.split('/') + for i, comp in enumerate(comps): + if comp == '..': + comps[i] = os.path.pardir + elif comp == '.': + comps[i] = os.path.curdir + native_path = os.path.join(*comps) + if posixpath.isabs(portable_path) != os.path.isabs(native_path): + native_path = os.path.sep + native_path + if posixpath.isabs(portable_path) != os.path.isabs(native_path): + raise ValueError('cannot make native path relative/absolute') + return native_path + def load_problem(problem_name): global builtins try: @@ -89,7 +105,7 @@ sys.dont_write_bytecode = True except AttributeError: pass - metafile = files.File('/'.join((problem_name, 'testconf.py')), True, 'configuration') + metafile = files.File(problem_name + '/testconf.py', True, 'configuration') module = None with CompatBuiltins() as builtins: if zipimport and isinstance(metafile.archive, files.ZipArchive): @@ -134,7 +150,13 @@ module.dummyinname = getattr(module, 'testcaseinname', module.dummyinname) if not module.dummyoutname: module.dummyoutname = getattr(module, 'testcaseoutname', module.dummyoutname) - if not hasattr(module, 'path'): + if hasattr(module, 'testee'): + if isinstance(module.testee, basestring): + module.path = nativize_path(module.testee) + else: + testee = tuple(module.testee) + module.path = (nativize_path(testee[0]),) + testee[1:] + elif not hasattr(module, 'path'): if hasattr(module, 'name'): module.path = module.name elif sys.platform != 'win32':