Skip to content

Commit

Permalink
Trim injected python_version marker to (major, minor)
Browse files Browse the repository at this point in the history
  • Loading branch information
charliermarsh committed Mar 12, 2024
1 parent 3bf20f9 commit 937bb86
Showing 1 changed file with 39 additions and 17 deletions.
56 changes: 39 additions & 17 deletions crates/uv-interpreter/src/python_version.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,16 +57,38 @@ impl PythonVersion {
pub fn markers(self, base: &MarkerEnvironment) -> MarkerEnvironment {
let mut markers = base.clone();

// Construct the `python_full_version` and `python_version` markers.
let major = self.release().first().copied().unwrap_or(0);
let minor = self.release().get(1).copied().unwrap_or(0);
let patch = self.release().get(2).copied().unwrap_or(0);

// Ex) `python_full_version == "3.12.0"`
let python_full_version = Version::new([major, minor, patch])
.with_pre(self.0.pre())
.with_post(self.0.post());

// Ex) `python_version == "3.12"`
let python_version = Version::new([major, minor]);

// Ex) `implementation_version == "3.12.0"`
if markers.implementation_name == "cpython" {
markers.implementation_version = self.0.clone();
markers.implementation_version = StringVersion {
string: python_full_version.to_string(),
version: python_full_version.clone(),
};
}

// Ex) `python_full_version == "3.12.0"`
markers.python_full_version = self.0.clone();
markers.python_full_version = StringVersion {
string: python_full_version.to_string(),
version: python_full_version,
};

// Ex) `python_version == "3.12"`
markers.python_version = self.0;
markers.python_version = StringVersion {
string: python_version.to_string(),
version: python_version,
};

markers
}
Expand All @@ -78,24 +100,12 @@ impl PythonVersion {

/// Return the major version of this Python version.
pub fn major(&self) -> u8 {
u8::try_from(self.0.release()[0]).expect("invalid major version")
u8::try_from(self.0.release().first().copied().unwrap_or(0)).expect("invalid major version")
}

/// Return the minor version of this Python version.
pub fn minor(&self) -> u8 {
u8::try_from(self.0.release()[1]).expect("invalid minor version")
}

/// Check if this Python version is satisfied by the given interpreter.
///
/// If a patch version is present, we will require an exact match.
/// Otherwise, just the major and minor version numbers need to match.
pub fn is_satisfied_by(&self, interpreter: &Interpreter) -> bool {
if self.patch().is_some() {
self.version() == interpreter.python_version()
} else {
(self.major(), self.minor()) == interpreter.python_tuple()
}
u8::try_from(self.0.release().get(1).copied().unwrap_or(0)).expect("invalid minor version")
}

/// Return the patch version of this Python version, if set.
Expand All @@ -113,4 +123,16 @@ impl PythonVersion {
Self::from_str(format!("{}.{}", self.major(), self.minor()).as_str())
.expect("dropping a patch should always be valid")
}

/// Check if this Python version is satisfied by the given interpreter.
///
/// If a patch version is present, we will require an exact match.
/// Otherwise, just the major and minor version numbers need to match.
pub fn is_satisfied_by(&self, interpreter: &Interpreter) -> bool {
if self.patch().is_some() {
self.version() == interpreter.python_version()
} else {
(self.major(), self.minor()) == interpreter.python_tuple()
}
}
}

0 comments on commit 937bb86

Please sign in to comment.