def _determine_file(self, options, need_value): # type: (Values, bool) -> Optional[Kind] file_options = [ key for key, value in ( (kinds.USER, options.user_file), (kinds.GLOBAL, options.global_file), (kinds.SITE, options.site_file), ) if value ] if not file_options: if not need_value: return None # Default to user, unless there's a site file. elif any( os.path.exists(site_config_file) for site_config_file in get_configuration_files()[kinds.SITE]): return kinds.SITE else: return kinds.USER elif len(file_options) == 1: return file_options[0] raise PipError("Need exactly one file to operate upon " "(--user, --site, --global) to perform.")
def test_global_config_file(self, script: PipTestEnvironment) -> None: """Test that the system-wide configuration can be identified""" # We cannot write to system-wide files which might have permissions # defined in a way that the tox virtualenvcannot write to those # locations. Additionally we cannot patch those paths since pip config # commands runs inside a subprocess. # So we just check if the file can be identified global_config_file = get_configuration_files()[kinds.GLOBAL][0] result = script.pip("config", "debug") assert f"{global_config_file}, exists:" in result.stdout
def test_site_modification(self) -> None: self.configuration.load_only = kinds.SITE self.configuration.load() # Mock out the method mymock = MagicMock(spec=self.configuration._mark_as_modified) # https://github.com/python/mypy/issues/2427 self.configuration._mark_as_modified = mymock # type: ignore[assignment] self.configuration.set_value("test.hello", "10") # get the path to site config file assert mymock.call_count == 1 assert mymock.call_args[0][0] == (get_configuration_files()[kinds.SITE][0])
def test_site_modification(self): self.configuration.load_only = kinds.SITE self.configuration.load() # Mock out the method mymock = MagicMock(spec=self.configuration._mark_as_modified) self.configuration._mark_as_modified = mymock self.configuration.set_value("test.hello", "10") # get the path to site config file assert mymock.call_count == 1 assert mymock.call_args[0][0] == ( get_configuration_files()[kinds.SITE][0])
def test_global_modification(self): # get the path to local config file self.configuration.load_only = kinds.GLOBAL self.configuration.load() # Mock out the method mymock = MagicMock(spec=self.configuration._mark_as_modified) self.configuration._mark_as_modified = mymock self.configuration.set_value("test.hello", "10") # get the path to user config file assert mymock.call_count == 1 assert mymock.call_args[0][0] == ( get_configuration_files()[kinds.GLOBAL][-1])
def test_user_values(self, script: PipTestEnvironment) -> None: """Test that the user pip configuration set using --user is correctly displayed under "user". This configuration takes place of custom path location using the environment variable PIP_CONFIG_FILE displayed under "env". """ # Use new config file new_config_file = get_configuration_files()[kinds.USER][1] script.pip("config", "--user", "set", "global.timeout", "60") script.pip("config", "--user", "set", "freeze.timeout", "10") result = script.pip("config", "debug") assert f"{new_config_file}, exists: True" in result.stdout assert "global.timeout: 60" in result.stdout assert "freeze.timeout: 10" in result.stdout assert re.search(r"user:\n( .+\n)+", result.stdout)
def _determine_file(self, options, need_value): # Convert legacy venv_file option to site_file or error if options.venv_file and not options.site_file: if running_under_virtualenv(): options.site_file = True deprecated( "The --venv option has been deprecated.", replacement="--site", gone_in="19.3", ) else: raise PipError( "Legacy --venv option requires a virtual environment. " "Use --site instead." ) file_options = [ key for key, value in ( (kinds.USER, options.user_file), (kinds.GLOBAL, options.global_file), (kinds.SITE, options.site_file), ) if value ] if not file_options: if not need_value: return None # Default to user, unless there's a site file. elif any( os.path.exists(site_config_file) for site_config_file in get_configuration_files()[kinds.SITE] ): return kinds.SITE else: return kinds.USER elif len(file_options) == 1: return file_options[0] raise PipError( "Need exactly one file to operate upon " "(--user, --site, --global) to perform." )