-
-
Notifications
You must be signed in to change notification settings - Fork 279
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Configurable description_content_type
No validation is performed. The defaults are unchanged (and inconsistent with setuptools/PyPI). Basic test for checking metadata gets through.
- Loading branch information
Showing
2 changed files
with
99 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -76,23 +76,26 @@ impl Metadata21 { | |
None | ||
}; | ||
|
||
let description_content_type = if description.is_some() { | ||
// I'm not hundred percent sure if that's the best preset | ||
Some("text/markdown; charset=UTF-8; variant=GFM".to_owned()) | ||
} else { | ||
None | ||
}; | ||
|
||
let classifier = cargo_toml.classifier(); | ||
|
||
let extra_metadata = cargo_toml.remaining_core_metadata(); | ||
|
||
let author_email = if authors.contains('@') { | ||
Some(authors.clone()) | ||
} else { | ||
None | ||
}; | ||
|
||
let extra_metadata = cargo_toml.remaining_core_metadata(); | ||
|
||
// See https://packaging.python.org/specifications/core-metadata/#description-content-type | ||
let description_content_type = extra_metadata.description_content_type.or_else(|| { | ||
if description.is_some() { | ||
// I'm not hundred percent sure if that's the best preset | ||
Some("text/markdown; charset=UTF-8; variant=GFM".to_owned()) | ||
} else { | ||
None | ||
} | ||
}); | ||
|
||
Ok(Metadata21 { | ||
metadata_version: "2.1".to_owned(), | ||
|
||
|
@@ -243,16 +246,7 @@ mod test { | |
use indoc::indoc; | ||
use std::io::Write; | ||
|
||
#[test] | ||
fn test_metadata_from_cargo_toml() { | ||
let readme = indoc!( | ||
r#" | ||
# Some test package | ||
This is the readme for a test package | ||
"# | ||
); | ||
|
||
fn assert_metadata_from_cargo_toml(readme: &str, cargo_toml: &str, expected: &str) { | ||
let mut readme_md = tempfile::NamedTempFile::new().unwrap(); | ||
|
||
let readme_path = if cfg!(windows) { | ||
|
@@ -263,6 +257,36 @@ mod test { | |
|
||
readme_md.write_all(readme.as_bytes()).unwrap(); | ||
|
||
let cargo_toml = cargo_toml.replace("readme.md", &readme_path); | ||
|
||
let cargo_toml: CargoToml = toml::from_str(&cargo_toml).unwrap(); | ||
|
||
let metadata = | ||
Metadata21::from_cargo_toml(&cargo_toml, &readme_md.path().parent().unwrap()).unwrap(); | ||
|
||
let actual = metadata.to_file_contents(); | ||
|
||
if actual.trim() != expected.trim() { | ||
panic!("Actual metadata differed from expected\nEXPECTED:\n{}\n\nGOT:\n{}", expected, actual); | ||
} | ||
|
||
assert_eq!(actual.trim(), expected.trim()); | ||
|
||
if metadata.get_dist_info_dir() != PathBuf::from("info_project-0.1.0.dist-info") { | ||
panic!("Dist info dir differed from expected"); | ||
} | ||
} | ||
|
||
#[test] | ||
fn test_metadata_from_cargo_toml() { | ||
let readme = indoc!( | ||
r#" | ||
# Some test package | ||
This is the readme for a test package | ||
"# | ||
); | ||
|
||
let cargo_toml = indoc!( | ||
r#" | ||
[package] | ||
|
@@ -285,13 +309,7 @@ mod test { | |
classifier = ["Programming Language :: Python"] | ||
requires-dist = ["flask~=1.1.0", "toml==0.10.0"] | ||
"# | ||
) | ||
.replace("readme.md", &readme_path); | ||
|
||
let cargo_toml: CargoToml = toml::from_str(&cargo_toml).unwrap(); | ||
|
||
let metadata = | ||
Metadata21::from_cargo_toml(&cargo_toml, &readme_md.path().parent().unwrap()).unwrap(); | ||
); | ||
|
||
let expected = indoc!( | ||
r#" | ||
|
@@ -314,13 +332,61 @@ mod test { | |
"# | ||
); | ||
|
||
let actual = metadata.to_file_contents(); | ||
assert_metadata_from_cargo_toml(readme, cargo_toml, expected); | ||
} | ||
|
||
assert_eq!(actual.trim(), expected.trim()); | ||
#[test] | ||
fn test_metadata_from_cargo_toml_rst() { | ||
let readme = indoc!( | ||
r#" | ||
# Some test package | ||
"# | ||
); | ||
|
||
let cargo_toml = indoc!( | ||
r#" | ||
[package] | ||
authors = ["konstin <[email protected]>"] | ||
name = "info-project" | ||
version = "0.1.0" | ||
description = "A test project" | ||
homepage = "https://example.org" | ||
readme = "readme.md" | ||
keywords = ["ffi", "test"] | ||
[lib] | ||
crate-type = ["cdylib"] | ||
name = "pyo3_pure" | ||
[package.metadata.maturin.scripts] | ||
ph = "maturin:print_hello" | ||
[package.metadata.maturin] | ||
classifier = ["Programming Language :: Python"] | ||
requires-dist = ["flask~=1.1.0", "toml==0.10.0"] | ||
description-content-type = "text/x-rst" | ||
"# | ||
); | ||
|
||
let expected = indoc!( | ||
r#" | ||
Metadata-Version: 2.1 | ||
Name: info-project | ||
Version: 0.1.0 | ||
Classifier: Programming Language :: Python | ||
Requires-Dist: flask~=1.1.0 | ||
Requires-Dist: toml==0.10.0 | ||
Summary: A test project | ||
Keywords: ffi test | ||
Home-Page: https://example.org | ||
Author: konstin <[email protected]> | ||
Author-Email: konstin <[email protected]> | ||
Description-Content-Type: text/x-rst | ||
# Some test package | ||
"# | ||
); | ||
|
||
assert_eq!( | ||
metadata.get_dist_info_dir(), | ||
PathBuf::from("info_project-0.1.0.dist-info") | ||
) | ||
assert_metadata_from_cargo_toml(readme, cargo_toml, expected); | ||
} | ||
} |