px.Artifact.from_bytes
px.Artifact는 Function 또는 Component가 생성한 파일을 반환하는 불변 값입니다. from_bytes는 메모리의 bytes를 받으며 파일을 저장하거나 파일 읽기 권한을 부여하지 않습니다. Runtime이 내용을 검증·저장한 뒤 Run의 named result로 확정합니다.
px.Artifact.from_bytes(data: bytes, *, media_type: str) -> 'Artifact'생성과 조회
아래는 메모리에서 만든 binary를 저장·실행·조회하는 예제입니다. PNG도 같은 방식으로 계산 함수 내부에서 생성한 bytes를 media_type="image/png"로 반환합니다.
from pipelinexlab import px
class Generated(px.Results):
file: px.Artifact
@px.function(key="generated_bytes", version="1.0.0", description="Generate bytes")
def generate(value: float) -> Generated:
from pipelinexlab import px
return px.Artifact.from_bytes(str(value).encode(), media_type="application/octet-stream")
with px.Client(workspace="example", project="files") as client:
flow = px.Flow("generated_file", label="Generated file", description="Run output")
node = flow.node("generate", generate)
flow.connect(flow.input("value", float, description="Input", unit="1"), node.inputs.value)
flow.result("file", node.results.file)
client.save(flow)
run = client.run(flow, value=12.0).wait(timeout_seconds=45)
if run.state == "Succeeded":
data = run.read_result("file", max_bytes=1024)
assert data == b"12.0"
else:
print(run.diagnostics)SDK와 호환되는 Runtime 및 Python Worker 실행 환경이 필요합니다. 읽기는 계산을 재실행하지 않으며 해당 Run을 만든 Client가 열려 있어야 합니다. 수치 결과와 파일 결과는 같은 불변 snapshot에 속하며, 생성된 PNG도 run.read_result로 원본 bytes를 읽습니다.
현재 지원 범위
- 정확한
bytes와 MIME 문자열을 받습니다.bytearray, 경로와 URL을 대신 전달하지 않습니다. image/png와application/octet-stream을 지원합니다. 값의media_type과byte_length는 읽기 전용입니다.- 파일당 32 MiB, Attempt당 64 MiB·32개까지입니다. 같은 Artifact 객체를 여러 결과에서 반환하면 한 번 전송합니다.
- PNG는 Runtime이 CRC·디코딩과 크기를 검사합니다. 가로·세로 각각 최대 8192, 디코딩 버퍼 최대 32 MiB이며 애니메이션 PNG는 거절합니다.
- 최상위 named artifact 결과를 지원합니다. list/record 내부에 파일을 담아 최종 결과로 반환하는 것은 아직 지원하지 않습니다.
- 파일이 포함된 결과는 일반 JSON 결과 캐시에 기록하지 않습니다. 이미 확정된 Run을 읽는 데 재생성은 필요하지 않습니다.
Artifact()직접 생성과 생성한 값의 변경은 지원하지 않습니다.
오류와 보관
factory의 잘못된 인자 타입은 TypeError입니다. 미지원 MIME은 PX_DOCUMENT_MALFORMED, 파일 크기 초과는 PX_RESOURCE_LIMIT를 가진 px.Error이며 ValueError로도 처리할 수 있습니다. 반환 후 발생한 파일 형식·전송 오류는 Run 실패와 구조화된 diagnostic으로 조회합니다. factory 호출 성공만으로 유효한 PNG가 저장됐다고 판단하지 않습니다.
Runtime은 Worker가 보낸 경로·URL·저장소 참조를 읽기 권한으로 인정하지 않습니다. 조회는 Project와 Run의 소속을 확인하고 snapshot의 정확한 result를 통해서만 파일에 접근합니다. 전송 중 취소된 파일은 성공 결과로 확정하지 않습니다. 생성 파일과 해당 실행의 named result 값은 저장소에서 함께 공개합니다. 묶음 저장이 실패하면 새 파일 일부만 조회 가능한 상태로 남기지 않으며, 이미 보관 중인 공유 파일은 유지합니다.
생성 결과 저장 전에 Runtime이 현재 Attempt의 결과 참조를 기록합니다. 성공 확정 전에 중단되면, 재시작 시 파일을 모두 검증할 수 있는 경우 기존 Attempt의 snapshot을 확정합니다. 파일이 아직 저장되지 않았으면 기존 재시도 규칙을 따릅니다. 취소되거나 다른 Attempt로 넘어간 결과는 확정하지 않습니다. 이 복구 기록은 공개 결과로 노출되지 않으며, 이미 완료한 Run의 파일 조회 실패가 재계산을 시작하지 않습니다.
Report에 반영된 PNG 결과는 artifact slot의 검증된 파일 참조로 보존합니다. client.export_documents()는 이 파일을 포함하고, Report를 다른 Project로 가져온 뒤에도 계산을 다시 실행하지 않고 내보낼 수 있습니다. 이는 지원되는 Report 첨부 경로이며 모든 파생 파일·보관 정책의 회수가 완료됐다는 뜻은 아닙니다. 저장소 snapshot reader의 메모리 예산과 임시 디스크 사용은 Run 조회 설명을 따릅니다. SDK 반환 제한은 서버 전체 메모리 상한과 다릅니다.
화면 연결과 후속 범위
Flow의 저장 뷰어 연결과 Report의 artifact slot은 같은 Run에서 생성된 PNG를 읽습니다. SDK 예제 section_properties_analysis.py에서는 준비된 Linux Worker 환경의 sectionproperties로 수치·형상·메시·도심 PNG를 생성하고 Run 재조회와 Report 반영을 검증했습니다. 라이브러리는 선택 의존성이며 Runtime 실행 환경에 별도로 준비해야 합니다. 웹 서비스 연결과 지원 환경은 실행 결과 안내를 따릅니다.
외부 파일을 Flow 입력으로 제공하는 authorized reader, PDF·추가 형식의 생산, 복합 결과 내부 파일은 이 PNG 생성·표시 경로의 지원 범위에 포함하지 않습니다. Report 본문에 파일을 첨부하는 작업은 기존 attachment API를 사용합니다.