def __init__(self, path_entry): self.path_entry = path_entry sitedir = getsyssitepackages() if path_entry in (sitedir, GatekeeperFinder.PATH_TRIGGER): logger.debug("handle entry %s", path_entry) return else: logger.debug("not handling entry %s", path_entry) raise ImportError()
def init_path(): """ Add any new modules that are directories to the PATH """ sitedirs = getsyssitepackages() for sitedir in sitedirs: env_path = os.environ['PATH'].split(os.pathsep) for module in allowed_modules: p = join(sitedir, module) if isdir(p) and not p in env_path: os.environ['PATH'] += env_t(os.pathsep + p)
def load_specs(): bad_specs = set() last_error = None for fn in spec_files(): logger.debug("load spec: %s", fn) if fn in bad_specs: # Don't try and load the same bad spec twice continue try: spec = open_spec(open(fn)) for module in spec['modules']: logger.debug("allow module: %s", module) allowed_modules.add(module) for path_name in spec.get('extra_paths', []): extra_path = get_extra_path(path_name) if isdir(extra_path): os.environ['PATH'] += env_t(os.pathsep + extra_path) sys.path.append(extra_path) added_dirs.add(extra_path) else: logger.warn("Skipped adding nonexistant path: {0}".format( extra_path)) sys_sitedirs = getsyssitepackages() for sys_sitedir in sys_sitedirs: with fixup_paths(): for pth in [pth for pth in spec['pths'] or [] if pth]: try: logger.debug("open pth: %s", pth) pth_file = join(sys_sitedir, pth) addpackage(sys_sitedir, pth_file, added_dirs) init_path() # TODO except IOError as e: # Path files are optional.. logging.debug('No pth found at %s', pth_file) pass except Exception as e: bad_specs.add(fn) err_msg = 'error loading spec %s: %s' % (fn, e) if last_error != err_msg: logging.error(err_msg) last_error = err_msg if bad_specs: raise VextError('Error loading spec files: %s' % ', '.join(bad_specs))
def load_specs(): bad_specs = set() last_error = None for fn in spec_files(): logger.debug("load spec: %s", fn) if fn in bad_specs: # Don't try and load the same bad spec twice continue try: spec = open_spec(open(fn)) for module in spec['modules']: logger.debug("allow module: %s", module) allowed_modules.add(module) for path_name in spec.get('extra_paths', []): extra_path = get_extra_path(path_name) if isdir(extra_path): os.environ['PATH'] += env_t(os.pathsep + extra_path) sys.path.append(extra_path) added_dirs.add(extra_path) else: logger.warn("Could not add extra path: {0}".format(extra_path)) sys_sitedirs = getsyssitepackages() for sys_sitedir in sys_sitedirs: for pth in [pth for pth in spec['pths'] or [] if pth]: try: logger.debug("open pth: %s", pth) pth_file = join(sys_sitedir, pth) addpackage(sys_sitedir, pth_file, added_dirs) init_path() # TODO except IOError as e: # Path files are optional.. logging.debug('No pth found at %s', pth_file) pass except Exception as e: bad_specs.add(fn) err_msg = 'error loading spec %s: %s' % (fn, e) if last_error != err_msg: logging.error(err_msg) last_error = err_msg if bad_specs: raise VextError('Error loading spec files: %s' % ', '.join(bad_specs))
def find_module(self, fullname, path=None): # TODO Need lots of unit tests around this module = sys.modules.get(fullname) if module and hasattr(module, "load_module"): # After reload module can be missing load_module return module sitedirs = getsyssitepackages() # Check paths other than system sitepackages first other_paths = [ p for p in sys.path if p not in sitedirs + [GatekeeperFinder.PATH_TRIGGER, '.'] ] try: for other_path in other_paths: try: module_info = imp.find_module(fullname, [other_path]) if module_info: logger.debug("found module %s in other path [%s]", fullname, other_path) return except ImportError: continue else: raise ImportError() except ImportError: try: # Now check if in site packages and needs gatekeeping for sitedir in sitedirs: try: module_info = imp.find_module( fullname, [sitedir, self.path_entry]) if module_info: logger.debug( "found module %s in sitedir or subdirectory [%s]", fullname, sitedir) return GateKeeperLoader(module_info, sitedir) except ImportError: logger.debug("%s not found in: %s", fullname, os.pathsep.join(other_paths)) continue except ImportError: ### TODO # Need to debug why this catch is needed, removing it stops things working... # something is subtly weird here. return
def __init__(self, path_entry): self.path_entry = path_entry try: # Wrap in exception handler in case something in a .pth file causes an exception. sitedir = getsyssitepackages() except Exception as e: sys.stderr.write( "Vext disabled: There was an issue getting the system site packages.\n" ) raise ImportError() if path_entry in (sitedir, GatekeeperFinder.PATH_TRIGGER): logger.debug("handle entry %s", path_entry) return else: logger.debug("not handling entry %s", path_entry) raise ImportError()
def fix_path(p): """ Convert path pointing subdirectory of virtualenv site-packages to system site-packages. Destination directory must exist for this to work. >>> fix_path('C:\\some-venv\\Lib\\site-packages\\gnome') 'C:\\Python27\\lib\\site-packages\\gnome' """ venv_lib = get_python_lib() if p.startswith(venv_lib): subdir = p[len(venv_lib) + 1:] for sitedir in getsyssitepackages(): fixed_path = join(sitedir, subdir) if isdir(fixed_path): return fixed_path return p
def find_module(self, fullname, path=None): # TODO Need lots of unit tests around this if fullname in sys.modules: return sys.modules[fullname] sitedirs = getsyssitepackages() # Check paths other than system sitepackages first other_paths = [p for p in sys.path if p not in sitedirs + [GatekeeperFinder.PATH_TRIGGER, '.']] try: for other_path in other_paths: try: module_info = imp.find_module(fullname, [other_path]) if module_info: logger.debug("found module %s in other path [%s]", fullname, other_path) return except ImportError: continue else: raise ImportError() except ImportError: try: # Now check if in site packages and needs gatekeeping for sitedir in sitedirs: try: module_info = imp.find_module(fullname, [sitedir, self.path_entry]) if module_info: logger.debug("found module %s in sitedir or subdirectory [%s]", fullname, sitedir) return GateKeeperLoader(module_info, sitedir) except ImportError: logger.debug("%s not found in: %s", fullname, os.pathsep.join(other_paths)) continue except ImportError: ### TODO # Need to debug why this catch is needed, removing it stops things working... # something is subtly weird here. return