Avoid writing empty requires-python to script blocks (#12517)

## Summary

I don't know if we ever do this in practice, but we _do_ do it in tests.
This commit is contained in:
Charlie Marsh 2025-03-28 10:26:51 -04:00 committed by GitHub
parent 175017bf51
commit c6fb1216ff
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -175,11 +175,18 @@ impl Pep723Script {
requires_python: &VersionSpecifiers, requires_python: &VersionSpecifiers,
) -> Result<(String, Pep723Metadata, String), Pep723Error> { ) -> Result<(String, Pep723Metadata, String), Pep723Error> {
// Define the default metadata. // Define the default metadata.
let default_metadata = indoc::formatdoc! {r#" let default_metadata = if requires_python.is_empty() {
indoc::formatdoc! {r"
dependencies = []
",
}
} else {
indoc::formatdoc! {r#"
requires-python = "{requires_python}" requires-python = "{requires_python}"
dependencies = [] dependencies = []
"#, "#,
requires_python = requires_python, requires_python = requires_python,
}
}; };
let metadata = Pep723Metadata::from_str(&default_metadata)?; let metadata = Pep723Metadata::from_str(&default_metadata)?;
@ -581,6 +588,7 @@ fn serialize_metadata(metadata: &str) -> String {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::{serialize_metadata, Pep723Error, Pep723Script, ScriptTag}; use crate::{serialize_metadata, Pep723Error, Pep723Script, ScriptTag};
use std::str::FromStr;
#[test] #[test]
fn missing_space() { fn missing_space() {
@ -817,10 +825,28 @@ mod tests {
Pep723Script::init_metadata(contents, &uv_pep440::VersionSpecifiers::default()) Pep723Script::init_metadata(contents, &uv_pep440::VersionSpecifiers::default())
.unwrap(); .unwrap();
assert_eq!(prelude, ""); assert_eq!(prelude, "");
assert_eq!(
metadata.raw,
indoc::indoc! {r"
dependencies = []
"}
);
assert_eq!(postlude, "");
}
#[test]
fn script_init_requires_python() {
let contents = "".as_bytes();
let (prelude, metadata, postlude) = Pep723Script::init_metadata(
contents,
&uv_pep440::VersionSpecifiers::from_str(">=3.8").unwrap(),
)
.unwrap();
assert_eq!(prelude, "");
assert_eq!( assert_eq!(
metadata.raw, metadata.raw,
indoc::indoc! {r#" indoc::indoc! {r#"
requires-python = "" requires-python = ">=3.8"
dependencies = [] dependencies = []
"#} "#}
); );
@ -841,10 +867,9 @@ mod tests {
assert_eq!(prelude, "#!/usr/bin/env python3\n"); assert_eq!(prelude, "#!/usr/bin/env python3\n");
assert_eq!( assert_eq!(
metadata.raw, metadata.raw,
indoc::indoc! {r#" indoc::indoc! {r"
requires-python = ""
dependencies = [] dependencies = []
"#} "}
); );
assert_eq!( assert_eq!(
postlude, postlude,
@ -873,12 +898,11 @@ mod tests {
assert_eq!(prelude, ""); assert_eq!(prelude, "");
assert_eq!( assert_eq!(
metadata.raw, metadata.raw,
indoc::indoc! {r#" indoc::indoc! {r"
requires-python = ""
dependencies = [] dependencies = []
"#} "}
); );
// Note the extra line at the beginning // Note the extra line at the beginning.
assert_eq!( assert_eq!(
postlude, postlude,
indoc::indoc! {r#" indoc::indoc! {r#"
@ -913,10 +937,9 @@ mod tests {
assert_eq!(prelude, "#!/usr/bin/env python3\n"); assert_eq!(prelude, "#!/usr/bin/env python3\n");
assert_eq!( assert_eq!(
metadata.raw, metadata.raw,
indoc::indoc! {r#" indoc::indoc! {r"
requires-python = ""
dependencies = [] dependencies = []
"#} "}
); );
// Note the extra line at the beginning. // Note the extra line at the beginning.
assert_eq!( assert_eq!(
@ -952,12 +975,11 @@ mod tests {
assert_eq!(prelude, ""); assert_eq!(prelude, "");
assert_eq!( assert_eq!(
metadata.raw, metadata.raw,
indoc::indoc! {r#" indoc::indoc! {r"
requires-python = ""
dependencies = [] dependencies = []
"#} "}
); );
// Note the extra line at the beginning // Note the extra line at the beginning.
assert_eq!( assert_eq!(
postlude, postlude,
indoc::indoc! {r#" indoc::indoc! {r#"
@ -991,12 +1013,11 @@ mod tests {
assert_eq!(prelude, ""); assert_eq!(prelude, "");
assert_eq!( assert_eq!(
metadata.raw, metadata.raw,
indoc::indoc! {r#" indoc::indoc! {r"
requires-python = ""
dependencies = [] dependencies = []
"#} "}
); );
// Note the extra line at the beginning // Note the extra line at the beginning.
assert_eq!( assert_eq!(
postlude, postlude,
indoc::indoc! {r#" indoc::indoc! {r#"
@ -1030,10 +1051,9 @@ mod tests {
assert_eq!(prelude, ""); assert_eq!(prelude, "");
assert_eq!( assert_eq!(
metadata.raw, metadata.raw,
indoc::indoc! {r#" indoc::indoc! {r"
requires-python = ""
dependencies = [] dependencies = []
"#} "}
); );
assert_eq!( assert_eq!(
postlude, postlude,