Skip to content

Commit

Permalink
fix parse_wh_py_ver to allow 3 or more digits
Browse files Browse the repository at this point in the history
came across a python package with the wheel version specfied as `pp257`
this allows it to parse.

- refactored test to use rstest and add that test case
  • Loading branch information
tanj authored and David-OConnor committed Jul 1, 2021
1 parent 35abe2d commit aa8230c
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 35 deletions.
6 changes: 4 additions & 2 deletions src/dep_parser.rs
Expand Up @@ -94,13 +94,15 @@ fn parse_wh_py_ver(input: &str) -> IResult<&str, Constraint> {
alt((tag("cp"), tag("py"), tag("pp"))),
alt((tag("2"), tag("3"), tag("4"))),
opt(map_parser(take(1u8), digit1)),
opt(digit1),
)),
|(_, major, minor): (_, &str, Option<&str>)| {
|(_, major, minor, patch): (_, &str, Option<&str>, Option<&str>)| {
let major: u32 = major.parse().unwrap();
let patch = patch.map(|p| p.parse().unwrap());
match minor {
Some(mi) => Constraint::new(
ReqType::Exact,
Version::new_short(major, mi.parse().unwrap()),
Version::new_opt(Some(major), Some(mi.parse().unwrap()), patch),
),
None => {
if major == 2 {
Expand Down
56 changes: 23 additions & 33 deletions src/dep_types.rs
Expand Up @@ -1987,38 +1987,28 @@ pub mod tests {
);
}

#[test]
fn python_version_from_warehouse() {
let a1 = Constraint::from_wh_py_vers("py3").unwrap();
let a2 = Constraint::from_wh_py_vers("cp35.cp36.cp37.cp38").unwrap();
let a3 = Constraint::from_wh_py_vers("cp26").unwrap();
let a4 = Constraint::from_wh_py_vers("py2.py3").unwrap();
let a5 = Constraint::from_wh_py_vers("pp36").unwrap();
let a6 = Constraint::from_wh_py_vers("any").unwrap();
let a7 = Constraint::from_wh_py_vers("2.7").unwrap();

assert_eq!(a1, vec![Constraint::new(Gte, Version::new(3, 0, 0))]);
assert_eq!(
a2,
vec![
Constraint::new(Exact, Version::new(3, 5, 0)),
Constraint::new(Exact, Version::new(3, 6, 0)),
Constraint::new(Exact, Version::new(3, 7, 0)),
Constraint::new(Exact, Version::new(3, 8, 0)),
]
);
assert_eq!(a3, vec![Constraint::new(Exact, Version::new(2, 6, 0))]);

assert_eq!(
a4,
vec![
Constraint::new(Lte, Version::new(2, 10, 0)),
Constraint::new(Gte, Version::new(3, 0, 0)),
]
);

assert_eq!(a5, vec![Constraint::new(Exact, Version::new(3, 6, 0))]);
assert_eq!(a6, vec![Constraint::new(Gte, Version::new(2, 0, 0))]);
assert_eq!(a7, vec![Constraint::new(Caret, Version::new(2, 7, 0))]);
#[rstest(input, expected,
case::py3("py3", vec![Constraint::new(Gte, Version::new(3, 0, 0))]),
case::cp_chain("cp35.cp36.cp37.cp38",
vec![
Constraint::new(Exact, Version::new(3, 5, 0)),
Constraint::new(Exact, Version::new(3, 6, 0)),
Constraint::new(Exact, Version::new(3, 7, 0)),
Constraint::new(Exact, Version::new(3, 8, 0)),
]),
case::cp26("cp26", vec![Constraint::new(Exact, Version::new(2, 6, 0))]),
case::py_chain("py2.py3",
vec![
Constraint::new(Lte, Version::new(2, 10, 0)),
Constraint::new(Gte, Version::new(3, 0, 0)),
]),
case::pp36("pp36", vec![Constraint::new(Exact, Version::new(3, 6, 0))]),
case::any("any", vec![Constraint::new(Gte, Version::new(2, 0, 0))]),
case::semver("2.7", vec![Constraint::new(Caret, Version::new(2, 7, 0))]),
case::pp257("pp257", vec![Constraint::new(Exact, Version::new(2, 5, 7))])
)]
fn python_version_from_warehouse(input: &str, expected: Vec<Constraint>) {
let a1 = Constraint::from_wh_py_vers(input).unwrap();
assert_eq!(a1, expected)
}
}

0 comments on commit aa8230c

Please sign in to comment.