Coverage for src/bioimageio/spec/_internal/packaging_context.py: 96%
25 statements
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-15 15:08 +0000
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-15 15:08 +0000
1from __future__ import annotations
3from contextvars import ContextVar, Token
4from dataclasses import dataclass, field
5from typing import Callable, Dict, List, Literal, Optional, Sequence, Union, cast
7from .io import FileDescr
8from .io_basics import FileName
9from .utils import SLOTS
12@dataclass(frozen=True, **SLOTS)
13class PackagingContext:
14 _context_tokens: "List[Token[Optional[PackagingContext]]]" = field(
15 init=False,
16 default_factory=cast(
17 "Callable[[], List[Token[Optional[PackagingContext]]]]", list
18 ),
19 )
21 bioimageio_yaml_file_name: FileName
23 file_sources: Dict[FileName, FileDescr]
24 """File sources to include in the packaged resource"""
26 weights_priority_order: Optional[Sequence[str]] = None
27 """set to select a single weights entry when packaging model resources"""
29 local_files_only: bool = False
30 """Whether to include only local files when packaging. If True, remote files will be excluded."""
32 def replace(
33 self,
34 *,
35 bioimageio_yaml_file_name: Optional[FileName] = None,
36 file_sources: Optional[Dict[FileName, FileDescr]] = None,
37 weights_priority_order: Union[
38 Optional[Sequence[str]], Literal["unchanged"]
39 ] = "unchanged",
40 local_files_only: Optional[bool] = None,
41 ) -> "PackagingContext":
42 """return a modiefied copy"""
43 return PackagingContext(
44 bioimageio_yaml_file_name=(
45 self.bioimageio_yaml_file_name
46 if bioimageio_yaml_file_name is None
47 else bioimageio_yaml_file_name
48 ),
49 file_sources=(
50 dict(self.file_sources) if file_sources is None else file_sources
51 ),
52 weights_priority_order=(
53 self.weights_priority_order
54 if weights_priority_order == "unchanged"
55 else weights_priority_order
56 ),
57 local_files_only=(
58 self.local_files_only if local_files_only is None else local_files_only
59 ),
60 )
62 def __enter__(self):
63 self._context_tokens.append(packaging_context_var.set(self))
64 return self
66 def __exit__(self, type, value, traceback): # type: ignore
67 packaging_context_var.reset(self._context_tokens.pop(-1))
70packaging_context_var: ContextVar[Optional[PackagingContext]] = ContextVar(
71 "packaging_context_var", default=None
72)