mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 08:35:12 +00:00 
			
		
		
		
	[options] Fix --no-config and refactor reading of config files
				
					
				
			Closes #912, #914
This commit is contained in:
		@@ -235,7 +235,7 @@ def parseOpts(overrideArguments=None):
 | 
				
			|||||||
        help='Use this prefix for unqualified URLs. For example "gvsearch2:" downloads two videos from google videos for the search term "large apple". Use the value "auto" to let yt-dlp guess ("auto_warning" to emit a warning when guessing). "error" just throws an error. The default value "fixup_error" repairs broken URLs, but emits an error if this is not possible instead of searching')
 | 
					        help='Use this prefix for unqualified URLs. For example "gvsearch2:" downloads two videos from google videos for the search term "large apple". Use the value "auto" to let yt-dlp guess ("auto_warning" to emit a warning when guessing). "error" just throws an error. The default value "fixup_error" repairs broken URLs, but emits an error if this is not possible instead of searching')
 | 
				
			||||||
    general.add_option(
 | 
					    general.add_option(
 | 
				
			||||||
        '--ignore-config', '--no-config',
 | 
					        '--ignore-config', '--no-config',
 | 
				
			||||||
        action='store_true',
 | 
					        action='store_true', dest='ignoreconfig',
 | 
				
			||||||
        help=(
 | 
					        help=(
 | 
				
			||||||
            'Disable loading any configuration files except the one provided by --config-location. '
 | 
					            'Disable loading any configuration files except the one provided by --config-location. '
 | 
				
			||||||
            'When given inside a configuration file, no further configuration files are loaded. '
 | 
					            'When given inside a configuration file, no further configuration files are loaded. '
 | 
				
			||||||
@@ -1536,57 +1536,47 @@ def parseOpts(overrideArguments=None):
 | 
				
			|||||||
            'command-line': compat_conf(sys.argv[1:]),
 | 
					            'command-line': compat_conf(sys.argv[1:]),
 | 
				
			||||||
            'custom': [], 'home': [], 'portable': [], 'user': [], 'system': []}
 | 
					            'custom': [], 'home': [], 'portable': [], 'user': [], 'system': []}
 | 
				
			||||||
        paths = {'command-line': False}
 | 
					        paths = {'command-line': False}
 | 
				
			||||||
        opts, args = parser.parse_args(configs['command-line'])
 | 
					
 | 
				
			||||||
 | 
					        def read_options(name, path, user=False):
 | 
				
			||||||
 | 
					            ''' loads config files and returns ignoreconfig '''
 | 
				
			||||||
 | 
					            # Multiple package names can be given here
 | 
				
			||||||
 | 
					            # Eg: ('yt-dlp', 'youtube-dlc', 'youtube-dl') will look for
 | 
				
			||||||
 | 
					            # the configuration file of any of these three packages
 | 
				
			||||||
 | 
					            for package in ('yt-dlp',):
 | 
				
			||||||
 | 
					                if user:
 | 
				
			||||||
 | 
					                    config, current_path = _readUserConf(package, default=None)
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    current_path = os.path.join(path, '%s.conf' % package)
 | 
				
			||||||
 | 
					                    config = _readOptions(current_path, default=None)
 | 
				
			||||||
 | 
					                if config is not None:
 | 
				
			||||||
 | 
					                    configs[name], paths[name] = config, current_path
 | 
				
			||||||
 | 
					                    return parser.parse_args(config)[0].ignoreconfig
 | 
				
			||||||
 | 
					            return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        def get_configs():
 | 
					        def get_configs():
 | 
				
			||||||
            if '--config-location' in configs['command-line']:
 | 
					            opts, _ = parser.parse_args(configs['command-line'])
 | 
				
			||||||
 | 
					            if opts.config_location is not None:
 | 
				
			||||||
                location = compat_expanduser(opts.config_location)
 | 
					                location = compat_expanduser(opts.config_location)
 | 
				
			||||||
                if os.path.isdir(location):
 | 
					                if os.path.isdir(location):
 | 
				
			||||||
                    location = os.path.join(location, 'yt-dlp.conf')
 | 
					                    location = os.path.join(location, 'yt-dlp.conf')
 | 
				
			||||||
                if not os.path.exists(location):
 | 
					                if not os.path.exists(location):
 | 
				
			||||||
                    parser.error('config-location %s does not exist.' % location)
 | 
					                    parser.error('config-location %s does not exist.' % location)
 | 
				
			||||||
                configs['custom'] = _readOptions(location, default=None)
 | 
					                config = _readOptions(location, default=None)
 | 
				
			||||||
                if configs['custom'] is None:
 | 
					                if config:
 | 
				
			||||||
                    configs['custom'] = []
 | 
					                    configs['custom'], paths['config'] = config, location
 | 
				
			||||||
                else:
 | 
					
 | 
				
			||||||
                    paths['custom'] = location
 | 
					            if opts.ignoreconfig:
 | 
				
			||||||
            if '--ignore-config' in configs['command-line']:
 | 
					 | 
				
			||||||
                return
 | 
					                return
 | 
				
			||||||
            if '--ignore-config' in configs['custom']:
 | 
					            if parser.parse_args(configs['custom'])[0].ignoreconfig:
 | 
				
			||||||
                return
 | 
					                return
 | 
				
			||||||
 | 
					            if read_options('portable', get_executable_path()):
 | 
				
			||||||
            def read_options(path, user=False):
 | 
					 | 
				
			||||||
                # Multiple package names can be given here
 | 
					 | 
				
			||||||
                # Eg: ('yt-dlp', 'youtube-dlc', 'youtube-dl') will look for
 | 
					 | 
				
			||||||
                # the configuration file of any of these three packages
 | 
					 | 
				
			||||||
                for package in ('yt-dlp',):
 | 
					 | 
				
			||||||
                    if user:
 | 
					 | 
				
			||||||
                        config, current_path = _readUserConf(package, default=None)
 | 
					 | 
				
			||||||
                    else:
 | 
					 | 
				
			||||||
                        current_path = os.path.join(path, '%s.conf' % package)
 | 
					 | 
				
			||||||
                        config = _readOptions(current_path, default=None)
 | 
					 | 
				
			||||||
                    if config is not None:
 | 
					 | 
				
			||||||
                        return config, current_path
 | 
					 | 
				
			||||||
                return [], None
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            configs['portable'], paths['portable'] = read_options(get_executable_path())
 | 
					 | 
				
			||||||
            if '--ignore-config' in configs['portable']:
 | 
					 | 
				
			||||||
                return
 | 
					                return
 | 
				
			||||||
 | 
					            opts, _ = parser.parse_args(configs['portable'] + configs['custom'] + configs['command-line'])
 | 
				
			||||||
            def get_home_path():
 | 
					            if read_options('home', expand_path(opts.paths.get('home', '')).strip()):
 | 
				
			||||||
                opts = parser.parse_args(configs['portable'] + configs['custom'] + configs['command-line'])[0]
 | 
					 | 
				
			||||||
                return expand_path(opts.paths.get('home', '')).strip()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            configs['home'], paths['home'] = read_options(get_home_path())
 | 
					 | 
				
			||||||
            if '--ignore-config' in configs['home']:
 | 
					 | 
				
			||||||
                return
 | 
					                return
 | 
				
			||||||
 | 
					            if read_options('system', '/etc'):
 | 
				
			||||||
            configs['system'], paths['system'] = read_options('/etc')
 | 
					 | 
				
			||||||
            if '--ignore-config' in configs['system']:
 | 
					 | 
				
			||||||
                return
 | 
					                return
 | 
				
			||||||
 | 
					            if read_options('user', None, user=True):
 | 
				
			||||||
            configs['user'], paths['user'] = read_options('', True)
 | 
					 | 
				
			||||||
            if '--ignore-config' in configs['user']:
 | 
					 | 
				
			||||||
                configs['system'], paths['system'] = [], None
 | 
					                configs['system'], paths['system'] = [], None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        get_configs()
 | 
					        get_configs()
 | 
				
			||||||
@@ -1595,10 +1585,9 @@ def parseOpts(overrideArguments=None):
 | 
				
			|||||||
        if opts.verbose:
 | 
					        if opts.verbose:
 | 
				
			||||||
            for label in ('System', 'User', 'Portable', 'Home', 'Custom', 'Command-line'):
 | 
					            for label in ('System', 'User', 'Portable', 'Home', 'Custom', 'Command-line'):
 | 
				
			||||||
                key = label.lower()
 | 
					                key = label.lower()
 | 
				
			||||||
                if paths.get(key) is None:
 | 
					                if paths.get(key):
 | 
				
			||||||
                    continue
 | 
					                    write_string(f'[debug] {label} config file: {paths[key]}\n')
 | 
				
			||||||
                if paths[key]:
 | 
					                if paths.get(key) is not None:
 | 
				
			||||||
                    write_string('[debug] %s config file: %s\n' % (label, paths[key]))
 | 
					                    write_string(f'[debug] {label} config: {_hide_login_info(configs[key])!r}\n')
 | 
				
			||||||
                write_string('[debug] %s config: %s\n' % (label, repr(_hide_login_info(configs[key]))))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return parser, opts, args
 | 
					    return parser, opts, args
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user