diff --git a/py-rattler/Cargo.lock b/py-rattler/Cargo.lock index 290755669..59f413ded 100644 --- a/py-rattler/Cargo.lock +++ b/py-rattler/Cargo.lock @@ -3251,7 +3251,7 @@ dependencies = [ [[package]] name = "py-rattler" -version = "0.9.0" +version = "0.9.1" dependencies = [ "anyhow", "chrono", @@ -3473,7 +3473,7 @@ dependencies = [ [[package]] name = "rattler" -version = "0.29.0" +version = "0.30.0" dependencies = [ "anyhow", "console", @@ -3512,7 +3512,7 @@ dependencies = [ [[package]] name = "rattler_cache" -version = "0.3.5" +version = "0.3.6" dependencies = [ "anyhow", "dashmap", @@ -3540,7 +3540,7 @@ dependencies = [ [[package]] name = "rattler_conda_types" -version = "0.30.0" +version = "0.30.1" dependencies = [ "chrono", "dirs", @@ -3590,7 +3590,7 @@ dependencies = [ [[package]] name = "rattler_index" -version = "0.20.8" +version = "0.20.9" dependencies = [ "fs-err", "rattler_conda_types", @@ -3604,7 +3604,7 @@ dependencies = [ [[package]] name = "rattler_lock" -version = "0.22.40" +version = "0.22.41" dependencies = [ "chrono", "file_url", @@ -3635,7 +3635,7 @@ dependencies = [ [[package]] name = "rattler_networking" -version = "0.22.0" +version = "0.22.1" dependencies = [ "anyhow", "async-fd-lock", @@ -3664,7 +3664,7 @@ dependencies = [ [[package]] name = "rattler_package_streaming" -version = "0.22.24" +version = "0.22.25" dependencies = [ "bzip2 0.5.0", "chrono", @@ -3700,7 +3700,7 @@ dependencies = [ [[package]] name = "rattler_repodata_gateway" -version = "0.21.33" +version = "0.21.34" dependencies = [ "anyhow", "async-compression", @@ -3754,7 +3754,7 @@ dependencies = [ [[package]] name = "rattler_shell" -version = "0.22.16" +version = "0.22.17" dependencies = [ "enum_dispatch", "fs-err", @@ -3770,7 +3770,7 @@ dependencies = [ [[package]] name = "rattler_solve" -version = "1.3.5" +version = "1.3.6" dependencies = [ "chrono", "futures", @@ -3787,7 +3787,7 @@ dependencies = [ [[package]] name = "rattler_virtual_packages" -version = "2.0.0" +version = "2.0.1" dependencies = [ "archspec", "libloading", diff --git a/py-rattler/rattler/lock/environment.py b/py-rattler/rattler/lock/environment.py index 7b85ca083..3c8bea36f 100644 --- a/py-rattler/rattler/lock/environment.py +++ b/py-rattler/rattler/lock/environment.py @@ -1,5 +1,6 @@ from __future__ import annotations from typing import Dict, List, Optional + from rattler.lock.channel import LockChannel from rattler.lock.package import LockedPackage, PypiLockedPackage from rattler.platform.platform import Platform @@ -15,14 +16,19 @@ class Environment: _env: PyEnvironment - def __init__(self, name: str, requirements: Dict[Platform, List[RepoDataRecord]]) -> None: + def __init__( + self, name: str, requirements: Dict[Platform, List[RepoDataRecord]], channels: List[LockChannel] + ) -> None: """ Create a new environment. """ self._env = PyEnvironment( - name, + name=name, # TODO: move this logic to rust - {platform._inner: [record._record for record in records] for (platform, records) in requirements.items()}, + records={ + platform._inner: [record._record for record in records] for (platform, records) in requirements.items() + }, + channels=[channel._channel for channel in channels], ) def platforms(self) -> List[Platform]: diff --git a/py-rattler/src/lock/mod.rs b/py-rattler/src/lock/mod.rs index de848b2f2..37d115978 100644 --- a/py-rattler/src/lock/mod.rs +++ b/py-rattler/src/lock/mod.rs @@ -1,3 +1,4 @@ +use crate::channel::PyChannel; use crate::match_spec::PyMatchSpec; use crate::version::PyVersion; use crate::{error::PyRattlerError, platform::PyPlatform, record::PyRecord}; @@ -9,7 +10,7 @@ use rattler_lock::{ PackageHashes, PypiPackageData, PypiPackageEnvironmentData, DEFAULT_ENVIRONMENT_NAME, }; use std::{ - collections::{BTreeSet, HashMap, HashSet}, + collections::{BTreeSet, HashMap}, path::PathBuf, str::FromStr, }; @@ -127,21 +128,23 @@ impl PyEnvironment { #[pymethods] impl PyEnvironment { #[new] - pub fn new(name: String, req: HashMap>) -> PyResult { + pub fn new( + name: String, + records: HashMap>, + channels: Vec, + ) -> PyResult { let mut lock = LockFile::builder(); - let channels = req - .values() - .flat_map(|records| { - records - .iter() - .filter_map(|r| r.channel().transpose()) - .collect::>>() - }) - .collect::>>()?; - lock.set_channels(&name, channels); + lock.set_channels( + &name, + channels.into_iter().map(|c| { + rattler_lock::Channel::from( + c.inner.base_url.as_str().trim_end_matches('/').to_string(), + ) + }), + ); - for (platform, records) in req { + for (platform, records) in records { for record in records { lock.add_conda_package( &name, diff --git a/py-rattler/tests/unit/test_prefix_record.py b/py-rattler/tests/unit/test_prefix_record.py index f2536e4ca..958f7ba3c 100644 --- a/py-rattler/tests/unit/test_prefix_record.py +++ b/py-rattler/tests/unit/test_prefix_record.py @@ -117,7 +117,7 @@ def test_prefix_paths() -> None: size_in_bytes=1024, ) - assert str(prefix_paths_entry.relative_path) == "foo/bar/baz" + assert str(prefix_paths_entry.relative_path) == str(Path("foo/bar/baz")) assert prefix_paths_entry.path_type.hardlink assert prefix_paths_entry.prefix_placeholder == "placeholder_foo_bar" assert prefix_paths_entry.file_mode.binary