feat(python): add support for python_binary arguments in config (#6523)

This commit is contained in:
RoloEdits 2025-03-09 08:46:50 -07:00 committed by GitHub
parent eb42f5ac70
commit 76675559c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 52 additions and 13 deletions

View File

@ -1459,9 +1459,15 @@
"pyenv_prefix": "pyenv ", "pyenv_prefix": "pyenv ",
"pyenv_version_name": false, "pyenv_version_name": false,
"python_binary": [ "python_binary": [
"python", [
"python3", "python"
],
[
"python3"
],
[
"python2" "python2"
]
], ],
"style": "yellow bold", "style": "yellow bold",
"symbol": "🐍 ", "symbol": "🐍 ",
@ -5325,13 +5331,19 @@
}, },
"python_binary": { "python_binary": {
"default": [ "default": [
"python", [
"python3", "python"
],
[
"python3"
],
[
"python2" "python2"
]
], ],
"allOf": [ "allOf": [
{ {
"$ref": "#/definitions/Either_for_String_and_Array_of_String" "$ref": "#/definitions/Either_for_Either_for_String_and_Array_of_String_and_Array_of_Either_for_String_and_Array_of_String"
} }
] ]
}, },
@ -5400,6 +5412,19 @@
}, },
"additionalProperties": false "additionalProperties": false
}, },
"Either_for_Either_for_String_and_Array_of_String_and_Array_of_Either_for_String_and_Array_of_String": {
"anyOf": [
{
"$ref": "#/definitions/Either_for_String_and_Array_of_String"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/Either_for_String_and_Array_of_String"
}
}
]
},
"Either_for_String_and_Array_of_String": { "Either_for_String_and_Array_of_String": {
"anyOf": [ "anyOf": [
{ {

View File

@ -12,7 +12,7 @@ use serde::{Deserialize, Serialize};
pub struct PythonConfig<'a> { pub struct PythonConfig<'a> {
pub pyenv_version_name: bool, pub pyenv_version_name: bool,
pub pyenv_prefix: &'a str, pub pyenv_prefix: &'a str,
pub python_binary: VecOr<&'a str>, pub python_binary: VecOr<VecOr<&'a str>>,
pub format: &'a str, pub format: &'a str,
pub version_format: &'a str, pub version_format: &'a str,
pub style: &'a str, pub style: &'a str,
@ -29,7 +29,11 @@ impl Default for PythonConfig<'_> {
PythonConfig { PythonConfig {
pyenv_version_name: false, pyenv_version_name: false,
pyenv_prefix: "pyenv ", pyenv_prefix: "pyenv ",
python_binary: VecOr(vec!["python", "python3", "python2"]), python_binary: VecOr(vec![
VecOr(vec!["python"]),
VecOr(vec!["python3"]),
VecOr(vec!["python2"]),
]),
format: "via [${symbol}${pyenv_prefix}(${version} )(\\($virtualenv\\) )]($style)", format: "via [${symbol}${pyenv_prefix}(${version} )(\\($virtualenv\\) )]($style)",
version_format: "v${raw}", version_format: "v${raw}",
style: "yellow bold", style: "yellow bold",

View File

@ -93,14 +93,24 @@ fn get_pyenv_version(context: &Context) -> Option<String> {
} }
fn get_python_version(context: &Context, config: &PythonConfig) -> Option<String> { fn get_python_version(context: &Context, config: &PythonConfig) -> Option<String> {
let version = config config
.python_binary .python_binary
.0 .0
.iter() .iter()
.find_map(|binary| context.exec_cmd(binary, &["--version"])) .find_map(|binary| {
.map(get_command_string_output)?; let command = binary.0.first()?;
let args: Vec<_> = binary
.0
.iter()
.skip(1)
.copied()
.chain(std::iter::once("--version"))
.collect();
parse_python_version(&version) context.exec_cmd(command, &args)
})
.map(get_command_string_output)
.map(|output| parse_python_version(&output))?
} }
fn parse_python_version(python_version_string: &str) -> Option<String> { fn parse_python_version(python_version_string: &str) -> Option<String> {