MCPcopy Index your code
hub / github.com/RustPython/RustPython / parse_opts

Function parse_opts

src/settings.rs:208–437  ·  view source on GitHub ↗

Create settings by examining command line arguments and environment variables.

()

Source from the content-addressed store, hash-verified

206/// Create settings by examining command line arguments and environment
207/// variables.
208pub fn parse_opts() -> Result<(Settings, RunMode), lexopt::Error> {
209 let (args, mode, argv) = parse_args()?;
210
211 let mut settings = Settings::default();
212 settings.isolated = args.isolate;
213 settings.ignore_environment = settings.isolated || args.ignore_environment;
214 settings.bytes_warning = args.bytes_warning.into();
215 settings.import_site = !args.no_site;
216
217 let ignore_environment = settings.ignore_environment;
218
219 if !ignore_environment {
220 settings.path_list.extend(get_paths("RUSTPYTHONPATH"));
221 settings.path_list.extend(get_paths("PYTHONPATH"));
222 }
223
224 // Now process command line flags:
225
226 let get_env = |env| (!ignore_environment).then(|| env::var_os(env)).flatten();
227
228 let env_count = |env| {
229 get_env(env).filter(|v| !v.is_empty()).map_or(0, |val| {
230 val.to_str().and_then(|v| v.parse::<u8>().ok()).unwrap_or(1)
231 })
232 };
233
234 settings.optimize = cmp::max(args.optimize, env_count("PYTHONOPTIMIZE"));
235 settings.verbose = cmp::max(args.verbose, env_count("PYTHONVERBOSE"));
236 settings.debug = cmp::max(args.debug, env_count("PYTHONDEBUG"));
237
238 let env_bool = |env| get_env(env).is_some_and(|v| !v.is_empty());
239
240 settings.user_site_directory =
241 !(settings.isolated || args.no_user_site || env_bool("PYTHONNOUSERSITE"));
242 settings.quiet = args.quiet;
243 settings.write_bytecode = !(args.dont_write_bytecode || env_bool("PYTHONDONTWRITEBYTECODE"));
244 settings.safe_path = settings.isolated || args.safe_path || env_bool("PYTHONSAFEPATH");
245 settings.inspect = args.inspect || env_bool("PYTHONINSPECT");
246 settings.interactive = args.inspect;
247 settings.buffered_stdio = !args.unbuffered;
248
249 if let Some(val) = get_env("PYTHONINTMAXSTRDIGITS") {
250 settings.int_max_str_digits = match val.to_str().and_then(|s| s.parse().ok()) {
251 Some(digits @ (0 | 640..)) => digits,
252 _ => {
253 error!(
254 "Fatal Python error: config_init_int_max_str_digits: PYTHONINTMAXSTRDIGITS: invalid limit; must be >= 640 or 0 for unlimited.\nPython runtime state: preinitialized"
255 );
256 std::process::exit(1);
257 }
258 };
259 }
260
261 settings.check_hash_pycs_mode = args.check_hash_based_pycs;
262
263 if let Some(val) = get_env("PYTHONUTF8")
264 && let Some(val_str) = val.to_str()
265 && !val_str.is_empty()

Callers 1

runFunction · 0.85

Calls 15

maxFunction · 0.85
to_strMethod · 0.80
okMethod · 0.80
trimMethod · 0.80
parse_argsFunction · 0.70
get_pathsFunction · 0.70
exitFunction · 0.50
SomeClass · 0.50
extendMethod · 0.45
flattenMethod · 0.45
thenMethod · 0.45
filterMethod · 0.45

Tested by

no test coverage detected