def find_binary(cls): """Finds the binary for class names if one was not provided.""" binary = None if sys.platform in ('linux2', 'sunos5', 'solaris'): for name in reversed(cls.names): binary = findInPath(name) elif os.name == 'nt' or sys.platform == 'cygwin': # find the default executable from the windows registry try: # assumes cls.app_name is defined, as it should be for # implementors import _winreg app_key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r"Software\Mozilla\Mozilla %s" % cls.app_name) version, _type = _winreg.QueryValueEx(app_key, "CurrentVersion") version_key = _winreg.OpenKey(app_key, version + r"\Main") path, _ = _winreg.QueryValueEx(version_key, "PathToExe") return path except: # XXX not sure what type of exception this should be pass # search for the binary in the path for name in reversed(cls.names): binary = findInPath(name) if sys.platform == 'cygwin': program_files = os.environ['PROGRAMFILES'] else: program_files = os.environ['ProgramFiles'] if binary is None: for bin in [(program_files, 'Mozilla Firefox', 'firefox.exe'), (os.environ.get("ProgramFiles(x86)"),'Mozilla Firefox', 'firefox.exe'), (program_files,'Minefield', 'firefox.exe'), (os.environ.get("ProgramFiles(x86)"),'Minefield', 'firefox.exe') ]: path = os.path.join(*bin) if os.path.isfile(path): binary = path break elif sys.platform == 'darwin': for name in reversed(cls.names): appdir = os.path.join('Applications', name.capitalize()+'.app') if os.path.isdir(os.path.join(os.path.expanduser('~/'), appdir)): binary = os.path.join(os.path.expanduser('~/'), appdir, 'Contents/MacOS/'+name+'-bin') elif os.path.isdir('/'+appdir): binary = os.path.join("/"+appdir, 'Contents/MacOS/'+name+'-bin') if binary is not None: if not os.path.isfile(binary): binary = binary.replace(name+'-bin', 'firefox-bin') if not os.path.isfile(binary): binary = None if binary is None: raise Exception('Mozrunner could not locate your binary, you will need to set it.') return binary
def debugger_arguments(debugger, arguments=None, interactive=None): """ finds debugger arguments from debugger given and defaults * debugger : debugger name or path to debugger * arguments : arguments to the debugger, or None to use defaults * interactive : whether the debugger should be run in interactive mode, or None to use default """ # find debugger executable if not a file executable = debugger if not os.path.exists(executable): executable = findInPath(debugger) if executable is None: raise Exception("Path to '%s' not found" % debugger) # if debugger not in dictionary of knowns return defaults dirname, debugger = os.path.split(debugger) if debugger not in debuggers: return ([executable] + (arguments or []), bool(interactive)) # otherwise use the dictionary values for arguments unless specified if arguments is None: arguments = debuggers[debugger].get('args', []) if interactive is None: interactive = debuggers[debugger].get('interactive', False) return ([executable] + arguments, interactive)
def find_binary(cls): """Finds the binary for class names if one was not provided.""" binary = None if mozinfo.isUnix: for name in cls.names: binary = findInPath(name) if binary: return binary elif mozinfo.isWin: # find the default executable from the windows registry try: # assumes cls.app_name is defined, as it should be for implementors import _winreg app_key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r"Software\Mozilla\Mozilla %s" % cls.app_name) version, _type = _winreg.QueryValueEx(app_key, "CurrentVersion") version_key = _winreg.OpenKey(app_key, version + r"\Main") path, _ = _winreg.QueryValueEx(version_key, "PathToExe") return path except: # XXX not sure what type of exception this should be pass # search for the binary in the path for name in cls.names: binary = findInPath(name) if binary: return binary # search for the binary in program files if sys.platform == 'cygwin': program_files = os.environ['PROGRAMFILES'] else: program_files = os.environ['ProgramFiles'] program_files = [program_files] if "ProgramFiles(x86)" in os.environ: program_files.append(os.environ["ProgramFiles(x86)"]) for program_file in program_files: for program_name in cls.program_names: path = os.path.join(program_name, program_file, 'firefox.exe') if os.path.isfile(path): return path elif mozinfo.isMac: for name in cls.names: appdir = os.path.join('Applications', name.capitalize()+'.app') if os.path.isdir(os.path.join(os.path.expanduser('~/'), appdir)): binary = os.path.join(os.path.expanduser('~/'), appdir, 'Contents/MacOS/'+name+'-bin') elif os.path.isdir('/'+appdir): binary = os.path.join("/"+appdir, 'Contents/MacOS/'+name+'-bin') if binary is not None: if not os.path.isfile(binary): binary = binary.replace(name+'-bin', 'firefox-bin') if not os.path.isfile(binary): binary = None if binary: return binary return binary
def find_binary(cls): """Finds the binary for class names if one was not provided.""" binary = None if sys.platform in ('linux2', 'sunos5', 'solaris'): for name in reversed(cls.names): binary = findInPath(name) elif os.name == 'nt' or sys.platform == 'cygwin': # find the default executable from the windows registry try: # assumes cls.app_name is defined, as it should be for # implementors import _winreg app_key = _winreg.OpenKey( _winreg.HKEY_LOCAL_MACHINE, r"Software\Mozilla\Mozilla %s" % cls.app_name) version, _type = _winreg.QueryValueEx(app_key, "CurrentVersion") version_key = _winreg.OpenKey(app_key, version + r"\Main") path, _ = _winreg.QueryValueEx(version_key, "PathToExe") return path except: # XXX not sure what type of exception this should be pass # search for the binary in the path for name in reversed(cls.names): binary = findInPath(name) if sys.platform == 'cygwin': program_files = os.environ['PROGRAMFILES'] else: program_files = os.environ['ProgramFiles'] if binary is None: for bin in [(program_files, 'Mozilla Firefox', 'firefox.exe'), (os.environ.get("ProgramFiles(x86)"), 'Mozilla Firefox', 'firefox.exe'), (program_files, 'Minefield', 'firefox.exe'), (os.environ.get("ProgramFiles(x86)"), 'Minefield', 'firefox.exe')]: path = os.path.join(*bin) if os.path.isfile(path): binary = path break elif sys.platform == 'darwin': for name in reversed(cls.names): appdir = os.path.join('Applications', name.capitalize() + '.app') if os.path.isdir(os.path.join(os.path.expanduser('~/'), appdir)): binary = os.path.join(os.path.expanduser('~/'), appdir, 'Contents/MacOS/' + name + '-bin') elif os.path.isdir('/' + appdir): binary = os.path.join("/" + appdir, 'Contents/MacOS/' + name + '-bin') if binary is not None: if not os.path.isfile(binary): binary = binary.replace(name + '-bin', 'firefox-bin') if not os.path.isfile(binary): binary = None if binary is None: raise Exception( 'Mozrunner could not locate your binary, you will need to set it.' ) return binary