MCPcopy Create free account
hub / github.com/conda/constructor / validate_frozen_envs

Function validate_frozen_envs

constructor/main.py:140–201  ·  view source on GitHub ↗

Validate frozen environments. Checks: - No conflicts between freeze_base/freeze_env and extra_files for same environment - Conda-standalone version if frozen environments exist

(
    info: dict, exe_type: StandaloneExe | None, exe_version: Version | None
)

Source from the content-addressed store, hash-verified

138
139# Validate frozen environments
140def validate_frozen_envs(
141 info: dict, exe_type: StandaloneExe | None, exe_version: Version | None
142) -> bool:
143 """Validate frozen environments.
144
145 Checks:
146 - No conflicts between freeze_base/freeze_env and extra_files for same environment
147 - Conda-standalone version if frozen environments exist
148 """
149
150 def get_frozen_env(path: str) -> str | None:
151 """Extract environment name from frozen marker destination path.
152
153 Returns:
154 Environment name if frozen marker found in the path, otherwise None.
155 """
156 parts = Path(path).parts
157 if parts == ("conda-meta", "frozen"):
158 return "base"
159 if len(parts) == 4 and parts[0] == "envs" and parts[-2:] == ("conda-meta", "frozen"):
160 return parts[1]
161 return None
162
163 # Collect environments using freeze_base/freeze_env
164 frozen_envs = set()
165 if info.get("freeze_base", {}).get("conda") is not None:
166 frozen_envs.add("base")
167 for env_name, env_config in info.get("extra_envs", {}).items():
168 if env_config.get("freeze_env", {}).get("conda") is not None:
169 frozen_envs.add(env_name)
170
171 # Collect environments using extra_files frozen markers
172 frozen_envs_extra_files = set()
173 paths = []
174 for file in info.get("extra_files", ()):
175 if isinstance(file, dict):
176 paths.extend(file.values())
177 elif isinstance(file, str):
178 paths.append(file)
179
180 for path in paths:
181 if env := get_frozen_env(path):
182 frozen_envs_extra_files.add(env)
183
184 if not frozen_envs and not frozen_envs_extra_files:
185 return
186
187 # Check for conflicts with extra_files
188 if common_envs := frozen_envs.intersection(frozen_envs_extra_files):
189 raise RuntimeError(
190 f"Frozen marker files found from both "
191 f"'freeze_base / freeze_env' and 'extra_files' for the following environments: {', '.join(sorted(common_envs))}"
192 )
193
194 # Conda-standalone version validation
195 if exe_type == StandaloneExe.CONDA and check_version(
196 exe_version, min_version="25.5.0", max_version="25.7.0"
197 ):

Callers 1

main_buildFunction · 0.85

Calls 3

get_frozen_envFunction · 0.85
check_versionFunction · 0.85
getMethod · 0.80

Tested by

no test coverage detected