def test_is_windows_checks_for_nt(): """Verify that we correctly detect Windows.""" with mock.patch.object(os, 'name', 'nt'): assert utils.is_windows() is True with mock.patch.object(os, 'name', 'posix'): assert utils.is_windows() is False
def _job_count(self): # type: () -> int # First we walk through all of our error cases: # - multiprocessing library is not present # - we're running on windows in which case we know we have significant # implemenation issues # - the user provided stdin and that's not something we can handle # well # - we're processing a diff, which again does not work well with # multiprocessing and which really shouldn't require multiprocessing # - the user provided some awful input if not multiprocessing: LOG.warning("The multiprocessing module is not available. " "Ignoring --jobs arguments.") return 0 if (utils.is_windows() and not utils.can_run_multiprocessing_on_windows()): LOG.warning("The --jobs option is not available on Windows due to" " a bug (https://bugs.python.org/issue27649) in " "Python 2.7.11+ and 3.3+. We have detected that you " "are running an unsupported version of Python on " "Windows. Ignoring --jobs arguments.") return 0 if utils.is_using_stdin(self.arguments): LOG.warning("The --jobs option is not compatible with supplying " "input using - . Ignoring --jobs arguments.") return 0 if self.options.diff: LOG.warning("The --diff option was specified with --jobs but " "they are not compatible. Ignoring --jobs arguments.") return 0 jobs = self.options.jobs if jobs != "auto" and not jobs.isdigit(): LOG.warning( '"%s" is not a valid parameter to --jobs. Must be one ' 'of "auto" or a numerical value, e.g., 4.', jobs, ) return 0 # If the value is "auto", we want to let the multiprocessing library # decide the number based on the number of CPUs. However, if that # function is not implemented for this particular value of Python we # default to 1 if jobs == "auto": try: return multiprocessing.cpu_count() except NotImplementedError: return 0 # Otherwise, we know jobs should be an integer and we can just convert # it to an integer return int(jobs)
def _multiprocessing_is_fork(): # type () -> bool """Class state is only preserved when using the `fork` strategy.""" if sys.version_info >= (3, 4): return (multiprocessing # https://github.com/python/typeshed/pull/3415 and multiprocessing.get_start_method() == "fork" # type: ignore ) else: return multiprocessing and not utils.is_windows()
def _user_config_file(program_name: str) -> str: if utils.is_windows(): home_dir = os.path.expanduser("~") config_file_basename = f".{program_name}" else: home_dir = os.environ.get("XDG_CONFIG_HOME", os.path.expanduser("~/.config")) config_file_basename = program_name return os.path.join(home_dir, config_file_basename)
def _job_count(self): # type: () -> int # First we walk through all of our error cases: # - multiprocessing library is not present # - we're running on windows in which case we know we have significant # implemenation issues # - the user provided stdin and that's not something we can handle # well # - we're processing a diff, which again does not work well with # multiprocessing and which really shouldn't require multiprocessing # - the user provided some awful input if not multiprocessing: LOG.warning('The multiprocessing module is not available. ' 'Ignoring --jobs arguments.') return 0 if (utils.is_windows() and not utils.can_run_multiprocessing_on_windows()): LOG.warning('The --jobs option is not available on Windows due to' ' a bug (https://bugs.python.org/issue27649) in ' 'Python 2.7.11+ and 3.3+. We have detected that you ' 'are running an unsupported version of Python on ' 'Windows. Ignoring --jobs arguments.') return 0 if utils.is_using_stdin(self.arguments): LOG.warning('The --jobs option is not compatible with supplying ' 'input using - . Ignoring --jobs arguments.') return 0 if self.options.diff: LOG.warning('The --diff option was specified with --jobs but ' 'they are not compatible. Ignoring --jobs arguments.') return 0 jobs = self.options.jobs if jobs != 'auto' and not jobs.isdigit(): LOG.warning('"%s" is not a valid parameter to --jobs. Must be one ' 'of "auto" or a numerical value, e.g., 4.', jobs) return 0 # If the value is "auto", we want to let the multiprocessing library # decide the number based on the number of CPUs. However, if that # function is not implemented for this particular value of Python we # default to 1 if jobs == 'auto': try: return multiprocessing.cpu_count() except NotImplementedError: return 0 # Otherwise, we know jobs should be an integer and we can just convert # it to an integer return int(jobs)