Source code for nix_daemon_protocol.derivation_output
"""DerivationOutput — wire representation of a single derivation output."""
from __future__ import annotations
from enum import Enum, auto
from .wire_message import WireModel
[docs]
class OutputKind(Enum):
"""Classification of a single derivation output."""
INPUT_ADDRESSED = auto()
CA_FIXED = auto()
CA_FLOATING = auto()
DEFERRED = auto()
IMPURE = auto()
[docs]
class DerivationOutput(WireModel):
"""Wire mirror of DerivationOutput. Three string fields on the wire."""
path: str
method: str = ""
hash_digest: str = ""
@property
def kind(self) -> OutputKind:
"""Classify this output based on wire protocol fields."""
if self.method == "":
if self.path == "":
return OutputKind.DEFERRED
return OutputKind.INPUT_ADDRESSED
if self.hash_digest == "impure":
return OutputKind.IMPURE
if self.hash_digest != "":
return OutputKind.CA_FIXED
return OutputKind.CA_FLOATING
@property
def is_ca(self) -> bool:
return self.kind in (
OutputKind.CA_FIXED,
OutputKind.CA_FLOATING,
OutputKind.IMPURE,
)
@property
def is_text_hashed(self) -> bool:
return self.method.startswith("text:")
@property
def is_fixed_ca(self) -> bool:
return self.kind == OutputKind.CA_FIXED
@property
def is_floating_ca(self) -> bool:
return self.kind == OutputKind.CA_FLOATING
@property
def is_deferred(self) -> bool:
return self.kind == OutputKind.DEFERRED
@property
def is_impure(self) -> bool:
return self.kind == OutputKind.IMPURE
@property
def is_dynamic_output(self) -> bool:
return self.is_text_hashed and self.hash_digest == ""